nsutextbook (1037554), страница 21
Текст из файла (страница 21)
Основы технологии CSPТехнология CSP (Caché Server Pages) основной инструмент создания Web-интерфейса для информационных приложений, написанных на Caché. Технология CSP предлагаетизящные средства создания быстродействующих, хорошо масштабируемых Web-приложений за короткое время. Она также упрощает дальнейшее сопровождение и развитиетаких приложений.CSP-страницы хранятся в CSP-файлах. При обращении к CSP-файлу происходит еготрансляция в класс CSP, который затем компилируется с помощью компилятора CachéServer Pages.
Этот процесс прозрачен для разработчика и пользователя.Когда броузер, используя HTTP, запрашивает CSP-страницу на Web-сервере, последний, в свою очередь, запрашивает содержание страницы из базы данных Caché. Cachéобрабатывает запрос, динамически генерируя HTML-страницу и передавая ее Webсерверу, который в свою очередь передает ее броузеру.При создании CSP-файла используются:• Выражения;• Скрипты, выполняющие код Caché или код JavaScript;• Методы стороны сервера;• CSP-теги;• Стандартные теги HTML.8.1. Выражения CachéВыражения Caché это заключенные в #(…)# выражения, которые заменяются вычисленными значениями в процессе генерации страниц.
Например:<html>…Добро пожаловать на наш сайт!Сегодня #($Zdate($Horolog,4,” январь февраль март апрель май июнь июль августсентябрь октябрь ноябрь декабрь“)# года!…</html>Конструкция #(…)# - фундаментальная часть технологии CSP. Обработка содержимого внутри круглых скобок выполняется Caché.8.2. Скрипты, выполняющие код Caché<script language=”Cache” runat={”server”|”compiler”}>95…</script>Тег <script> - стандартный тег HTML, который вызывает скрипт.
Он имеет два параметра:Language = “Cache” – определяет язык скрипта, другими значениями могут бытьJavaScript, VBScript, SQL.Runat = ”server” – определяет, что скрипт выполняется на сервере, когда страницазагружена в броузер. Другим значением может быть «compiler», который заставляет выполнить код скрипта во время компиляции страницы, кроме того, может не быть никакогозначения для этого параметра, что предполагает выполнение кода скрипта на клиенте, когда страница загружена в броузер.Содержанием скрипта является текст программы на Caché Object Script, JavaScriptили VBScript. Программный код выполняется каждый раз при загрузке страницы.Пример 1. Счетчик посещений<script language=Cache runat=server>Set ^Visit=$Get(^Visit)+1</script><br>Вы наш #(^Visit)# посетительКаждый раз при загрузке страницы на сервере при генерации страницы будет выполняться сценарий(скрипт), который увеличивает текущее значение глобальной переменной ^Visit на 1.Пример 2.
Вывести на Web-странице свойства объекта с id=2 класса Human:<html><body><script language=Cache runat=server>set obj=##class(Human).%OpenId(2)write obj.Fam,"<br>"write obj.Im,"<br>"</script></body></html>Каждый раз при загрузке страницы будет открываться объект класса Human с IDравным 2. На страницу будут выводиться свойства объекта: Fam и Im, после чего объектзакрывается.8.3.
Подпрограммы, вызываемые на стороне сервера #server(…)#Пример 1.Разработать страницу Login.csp, позволяющую проверять ввод пароля. Внешний видстраницы приведен на рис. 10.По кнопке “Ввод” проверяется ввод пароля, при этом работает серверный метод. Если пароль неверный, то выдается сообщение. На событие onClick кнопки «Ввод» назначенобработчик события – серверный метод “CheckPassword”. Код страницы имеет вид:<HTML><HEAD> </HEAD><BODY>96<form name="Log">Ваше имя :<input type="TEXT" name="Name"> <br>Пароль :<input type="password" name="psw"> <br><input type="button" value="Ввод" onClick="#server(..CheckPassword(self.document.Log.Name.value,self.document.Log.psw.value))#"></form></BODY></HTML><!-- Cache-код -- ><script language="Cache" Method="CheckPassword"arguments="name:%String, psw:%String">if psw="password"{ &javascript<alert("пароль верен");>}else{ &javascript<alert("пароль не верен");>}</script>Рисунок 10.
Login.csp.Пример 2. КалькуляторТребуется создать простой калькулятор, рассчитанный на четыре арифметическиеоперации. Примерный вид страницы приведен на рис. 11.97Рисунок 11. Калькулятор.На событие onClick кнопки «Сумма» назначен обработчик события, серверный метод«Calculate». Код данной страницы имеет вид:<HTML><HEAD><TITLE>Калькулятор </TITLE></HEAD><BODY><h3> Калькулятор </h3><form name="Calc">Число 1 : <input type="text" name="d1" value="0"><br>Операция: <select name="sp" size="1" ><option value="+">+<option value="-"><option value="*">*<option value="/">/</select> <br> <br>Число 2 : <input type="text" name="d2" value="0"><br>Результат: <input type="text" name="Rez"><br><br><input type="Button" value="Выполнить"onClick="#server(..Calculate(self.document.Calc.sp.value,self.document.Calc.d1.value,self.document.Calc.d2.value))#"></form></BODY></HTML><script language="Cache" Method="Calculate"Arguments="sp:%String, d1:%Integer, d2:%Integer">if sp="/",d2=0{ &javascript<alert('нельзя делить на ноль' );>Quit}else98{set sum=$Select(sp="+":d1+d2, sp="-":d1-d2,sp="*":d1*d2,sp="/"&& d2'=0:d1/d2)}&javascript<self.document.Calc.Rez.value=#(sum)#;></script>8.4.
Теги CSPТеги Caché имеют следующий общий синтаксис:<CSP:XXX …>Где ХХХ – это имя тега. Как встроенные, так и заказываемые теги обеспечиваютразнообразные функциональные возможности.В табл. 16 приведен перечень основных тегов:Таблица 16Основные теги CSP<CSP:Object> Связывает объект Caché с CSP-страницейВыполняет из CSP-страницы предопределенный запрос и именует<CSP:Query>результат<CSP:Method> Создает метод при определении класса CSP-страницыФормирует содержание, основанное на условии<CSP:If>Циклическая обработка фрагмента страницы<CSP:Loop>Циклическая обработка фрагмента страницы<CSP:While>8.4.1.
Тег <CSP:Object>При генерации HTML-кода объектная технология требует явной установки указателяна объект, с которым будут производиться операции. На CSP-странице это выполняет тег<CSP:Object>. Используемый объект открывается только на время генерации страницы ив момент окончания генерации закрывается. Если этот объект потребуется в процессе работы в броузере, его необходимо вновь открыть, используя код тега <CSP:Method>. Атрибуты тега приведены в таблице:АтрибутCLASSNAMENAMEOBJIDОбязателенОписаниеДаИмя класса CachéДаИмя объектаНетOID открываемого объекта. Если OBJID=” ”, создаетсяновый объект.
Если атрибут опущен, то не используетсяникакой объект.Парного тега не имеет.Пример использования тега. Открывается объект класса Human с id=34. Доступ ксвойствам объекта осуществляется через атрибут name = "Hum”<HTML><HEAD><!-- Пример использования тега csp:object --><TITLE> использование тега csp:object </TITLE></HEAD><BODY><csp:object classname="Human" name="Hum" OBJID="34">Фамилия : #(Hum.Fam)# <br>Имя: #(Hum.Im)#<br>Возраст : #(Hum.age)# <br></BODY>99</HTML>Связывание объектов с формами: CSPBIND в формахТег <csp:object> позволяет связать данные объекта с формой HTML через атрибутформы CSPBind. Таблица атрибутов связывания, которые могут появиться в теге<Form>:Атрибут Обязателен ОписаниеОбъект, с которым связывается форма.
Он должен соответCSPBind Даствовать атрибуту NAME тега <CSP:Object>Таблица атрибутов связывания, которые могут появиться в теге <Input>:АтрибутCSPBindОбязателенДаClassNameМожет бытьCSPFieldНетCSPQueryМожет бытьCSPRequired НетCSPValidНетОписаниеСвойство или метод, к которому привязывается INPUT элемент. Должен соответствовать свойству илиметоду класса Caché, указанному в теге<CSP:Object>Класс, из которого будут получены значения, чтобызаполнить список выбора (только для SELECT).Должен присутствовать, если присутствует CSPFieldили CSPQuery.Свойство или метод (класса, определенного ClassName) чьи значения появятся в списке выбора(только для SELECT).
Значение по умолчанию ID.Запрос, который будет выполнен, чтобы заполнитьсписок выбора (только для SELECT). Должен присутствовать, если присутствует CSPField илиCSPQuery.Если представлен, указывается, что значение должнобыть обеспечено.JavaScript код, чтобы проверить правильность содержимого элемента.Например, требуется создать форму ввода для класса Human со свойствами Id –идентификатор объекта, Fam – фамилия ,Im – имя, age – возраст. При отображении страницы поля формы отображают текущие значения свойств конкретного объекта классаHuman.<HTML><HEAD><!-- Пример на использование CSPBind --><TITLE></TITLE></HEAD><BODY><csp:object classname="Human" name="Hum" OBJID="34"><!-- Форма с помощью тега CSPBind связывается с классом Human --><form CSPBind=Hum name="Vvod" ><!-- Каждое поле формы связывается с конкретным свойством объекта с помощью тега CSPBind -->ID:<input CSPBind="%Id()" Name="id" readonly type="Text"> <br>Фамилия :<input CSPBind="Fam" Name="fam" type="Text"><br>Имя:<input CSPBind="Im"Name="im" type="Text"><br>100Возраст :<input CSPBind="age" Name="age" type="Text"><br><input type="button" value="Обновить" onclick="#server(..Alter(self.document.Vvod.id.value,self.document.Vvod.fam.value,self.document.Vvod.im.value,self.document.Vvod.age.value))#"></form></BODY></HTML><script language="Cache" Method="Alter"arguments="id:%Integer, fam:%String, im:%String, age:%Integer">set hum=##class(Human).%OpenId(id)Set hum.Fam=fam,hum.Im=im,hum.age=ageset sc=hum.%Save()</script>8.4.2.