Основой концепции серверных страниц Cache' является автоматическое создание по запросу пользователя web-страниц, содержащих требуемую информацию из БД Cache'. Как видно из рис. 7., вся бизнес-логика CSP-приложений выполняется в непосредственной близости к хранилищу данных Cache', таким образом сокращается объем данных, которыми обмениваются web-сервер и сервер БД Cache', что приводит к выигрышу в производительности по сравнению с другими технологиями создания web-приложений. Для еще большего увеличения производительности CSP приложений при обмене данными между сервером Cache' и web-сервером используются высокоскоростные интерфейсы API.
Рис.7. Сравнение web-технологий.
Серверные страницы Cache' представляют собой текстовые HTML-файлы, расширяемые тегами приложений Cache' (Cache' Application Tags или CATs). Для создания CSP приложений можно воспользоваться стандартными средствами разработки HTML страниц (Cache' предоставляет add-in модуль для полной интеграции с Macromedia DreamWeaver) или, на крайний случай, обыкновенным текстовым редактором.
В Листинге 1 приведен пример небольшого CSP-приложения, которое выводит значения свойств объекта, хранящегося в БД Cache'.
Листинг 1.
<html>
<head></head>
<body>
<script language="Cache'" runat="Server">
set obj=##class(Sample.Person).%OpenId(1)
write obj.Name,"<br>"
write obj.Age,"<br>"
do obj.%Close()
</script>
</body>
</html>
Стандартные теги приложений Cache' приведены в Таблице 1. Однако пользователь не ограничен только стандартными тегами. Cache' предоставляет также интерфейсы для создания пользовательских тегов приложений.
Таблица 1. Стандартные теги CSP. Вставка данных:
#(а)# Вывод значения переменной/функции/метода
##(a)## тоже, но во время компиляции
Управление
<CSP:IF CONDITION='a=1'>
<b>Unautorized!!!</b>
</CSP:IF> Условие
<CSP:WHILE …>
<CSP:LOOP …> Циклы
Использование Cache' Script
<SCRIPT Language="Cache'"
RUNAT="Server/Compiler">
….
</SCRIPT> Скрипт внутри страницы
<SCRIPT Method=methodName
Arguments=spec [ReturnType=dataType]>Inner
Text</SCRIPT> Метод CSP класса
Запросы к БД
<CSP:QUERY …>
<CSP:SEARCH …>
<SCRIPT LANGUAGE="SQL" …> Запрос класса
Поисковая форма
SQL-запрос
Привязка объекта к форме
<CSP:OBJECT …>
<FORM CspBind="obj" …>
<INPUT CspBind="obj.Name" …> Открытие объекта
Привязка объекта к форме
Привязка свойства к полю
Управление параметрами класса
<CSP:CLASS [Encoded=encodedType]
[Private=accessType]
[Super=classList] …> Определение родительских классов, режима шифрования и пр.
При открытии CSP-страницы в браузере Cache' автоматически преобразует CSP-страницу в класс Cache' (по умолчанию классом-предком для CSP-классов является системный класс %CSP.Page). CSP-класс - это не просто способ представления кода. Это отражение полноценной объектной модели CSP-приложения. Т.е. можно использовать все преимущества объектного подхода к разработке при работе с CSP, такие как наследование и полиморфизм. После преобразования CSP-страницы в класс Cache' класс можно редактировать, используя возможности Object Architect, например, возможность контекстной подцветки кода методов.
Для изучения CSP можно воспользоваться примерами, поставляемыми в стандартной комплектации Cache'. Для этого необходимо установить Cache' и в браузере обратиться по адресу http://127.0.0.1:1972/csp/samples/menu.csp:
Использование классов %Net.SMTP и %Net.POP3 для отправки и приема электронной почты.
С помощью классов %Net.SMTP и %Net.POP3 системной библиотеки %Net, поставляемой в стандартной конфигурации, можно реализовать функции отправки и приема электронных писем на базе СУБД Cache'.
В Листинге 2 приведена Cache'-программа, с помощью которой реализуется отправка электронного письма с прикрепленным графическим файлом (test.jpg) по протоколу SMTP.
Листинг 2.
set s=##class(%Net.SMTP).%New()
set s.smtpserver="SMTP.mail.ru"
set s.timezone="-0400"
set m=##class(%Net.MailMessage).%New()
set m.From="test@company.com"
do m.To.Insert("receiver@another.com")
set m.Subject="Sent by Cache'' mail"
set m.Charset="iso-8859-1"
do m.TextData.Write("This is the main body.")
do m.TextData.Write($char(13,10))
do m.TextData.Write("This is the second line.")
do m.TextData.Write($char(13,10))
set status=m.AttachFile("c:\winnt","test.jpg")
set status=s.Send(m)
do m.%Close()
do s.%Close()
quit
Класс %Net.SMTP поддерживает также отправку сборных (multi-part) электронных писем.
Для реализации функции приема электронных писем можно воспользоваться системным классом %Net.POP3. В листинге 3 приведен пример использования класса %Net.POP3.
Листинг 3.
new mailserver,status,from,to,date,subject,messagesize,m,hdrs,key,mailMsg
set mailserver=##class(%Net.POP3).%New()
set mailserver.AttachDir="d:\attach\" ; need terminating \
set mailserver.Debug=0
set mailserver.StoreAttachToFile=1
write !,"Calling Connect"
set status=mailserver.Connect("moon.kinich.com","testjsl","jsltest")
write !,"Calling FetchMessage"
set status=mailserver.FetchMessage(13,.from,.to,.date,