Пример P6.1.
Вывести книгу с ID=1. Название книги – гиперссылка.
< BODY> < csp: object name=" Kniga1" classname=" MPK.Kniga" OBJID=" 1" > Книга: < a href=#url(KnigaInfo.csp? ID=#(Kniga1.ISBN)#)#> #(Kniga1.Name)# #(Kniga1.Avtor)# < /a>
< /BODY>
Связывание объектов с формами: CSPBIND в формах
Тег < csp: object> позволяет связать данные объекта с формой HTML через атрибут формы CSPBind. Таблица атрибутов связывания, которые могут появиться в теге < Form>:
Таблица 5.3.
Атрибут
| Обязателен
| Описание
| CSPBind
| Да
| Объект, с которым связывается форма. Он должен соответствовать атрибуту NAME тега < CSP: Object>
|
Таблица 5.4.
Таблица атрибутов связывания, которые могут появиться в теге < Input>
Атрибут
| Обязателен
| Описание
| CSPBind
| Да
| Свойство или метод, к которому привязывается INPUT элемент. Должен соответствовать свойству или методу класса Caché, указанному в теге < CSP: Object>
| ClassName
| Может быть
| Класс, из которого будут получены значения, чтобы заполнить список выбора (только для SELECT). Должен присутствовать, если присутствует CSPField или CSPQuery.
| CSPField
| Нет
| Свойство или метод (класса, определенного ClassName) чьи значения появятся в списке выбора (только для SELECT). Значение по умолчанию ID.
| CSPQuery
| Может быть
| Запрос, который будет выполнен, чтобы заполнить список выбора (только для SELECT). Должен присутствовать, если присутствует CSPField или CSPQuery.
| CSPRequired
| Нет
| Если представлен, указывается, что значение должно быть обеспечено.
| CSPValid
| Нет
| JavaScript код, чтобы проверить правильность содержимого элемента.
| Пример Р7. Использования тега CSP: OBJECT.
Например, требуется создать форму ввода для класса Person со свойствами Id – идентификатор объекта, FIO – фамилия, DR – дата рождения, AGE – возраст. При отображении страницы поля формы отображают текущие значения свойств конкретного объекта класса Person.
< BODY> < csp: object classname=" MPK.Person" name=" Per" OBJID=" 3" > <! -- Форма с помощью тега CSPBind связывается с классом Person --> < form CSPBind=Per name=" Vvod" > <! -- Каждое поле формы связывается с конкретным свойством объекта с помощью тега CSPBind --> ID: < input CSPBind=" %Id()" Name=" id" readonly type=" Text" > < br> Фамилия: < input CSPBind=" FIO" Name=" fam" type=" Text" > < br> Дата р.: < input CSPBind=" DR" Name=" dr" type=" Text" > < br> Возраст: < 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>
< script language=" Cache" Method=" Alter" arguments=" id: %Integer, fam: %String, dr: %String" runat=server> set hum=##class(MPK.Person).%OpenId(id) Set hum.FIO=fam Set hum.DR=$ZDateH(dr) //$ZDateH() - функция преобразование текста в дату set sc=hum.%Save() < /script>
5.4.2. Тег < CSP: Query>
Один из наиболее важных CSP-тегов. Позволяет найти данные, используя встроенные SQL-запросы класса. Выполняет следующие функции:
• Соединяется с определенным классом;
• Выполняет встроенный SQL-запрос;
• Возвращает результирующий набор на страницу.
Тег < CSP: Query> выполняет запрос и именует результирующий набор. Затем можно использовать этот набор внутри страницы по своему усмотрению. Имеет атрибуты:
Таблица 5.5.
Атрибуты < CSP: Query>
Атрибут
| Обязателен
| Описание
| CLASSNAME
| Нет
| Определяет имя класса Caché. Требуется, если используется предопределенный запрос, но не динамический запрос.
| NAME
| Да
| Задает имя переменной, которая позволяет обращаться к результирующему набору на CSP-странице
| QUERYNAME
| Нет
| Определяет имя предопределенного запроса Caché. Этот атрибут требуется, если используется предопределенный запрос, но не динамический запрос.
| P1, P2, …P16
| Нет
| Параметры, передаваемые запросу, в порядке определения их в запросе класса.
| Пример. P8. Использование тега < CSP: Query>
Вывести все экземпляра класса Person на HTML-странице, отсортированные по свойству DR. Для решения этой задачи создадим запрос MpkQ() следующего вида:
SELECT %ID, FIO, DR FROM Person Order By DR.
В данном примере также используется тег < csp: while>, который позволяет пройти по всем записям результирующего набора. Оператор hum.Get(< имя поля>) – позволяет извлечь данные конкретного поля запроса.
< BODY> < table> < csp: query name=" Per" classname=" MPK.Person" queryname=" MpkQ" > < csp: while Condition=Per.Next()> < tr> < td width=" 20%" > < a href=P8Vvod.csp? Id=#(Per.Get(" ID"))#> #(Per.Get(" ID"))#< /a> < /td> < td width=" 30%" > #(Per.Get(" FIO"))#< /td> < td width=" 30%" > #(Per.Get(" DR"))#< /td> < /tr> < /csp: while> < /table> < /BODY>
В результате на странице будут отображены все объекты класса Person, отсортированные по полю DR.
Обратим внимание на тег
< a href=P8Vvod.csp? Id=#(Per.Get(" ID"))#> #(Per.Get(" ID"))#< /a> < /td>
В нем формируется ссылка на HTML-страницу P8Vvod.csp, в которую передается параметр Id=#(Per.Get(" ID"))#. Он используется при формировании страницы для отображения личных данных выбранного человека. Пример приведен ниже. Более подробно класс %CSP.Request и использование переменной %request будет рассмотрено позже.
< body> < h1> Персональные данные (#(%request.Data(" Id", 1))#): < /h1> < CSP: OBJECT NAME=" pers" CLASSNAME=" MPK.Person" OBJID=#(%request.Data(" Id", 1))#> < form method=" POST" name=" PersDetail" CSPBIND=" pers" > < table border=" 1" width=" 69%" > < tr> < td width=" 50%" > Фамилия< /td> < td width=" 50%" > < input type=" text" name=" Surname" size=" 20" CSPBIND=FIO CSPREQUIRED> < /td> < /tr> < tr> < td width=" 50%" > Дата рождения< /td> < td width=" 50%" > < input type=" text" name=" DOB" size=" 20" CSPBIND=DR> < /td> < /tr> < tr> < td width=" 50%" > & nbsp; < /td> < td width=" 50%" > < input type=" button" value=" Отправить" name=" Send" OnClick=PersDetail_save(); > < /td> < /tr> < /table> < /form> < p> < a href=" P8.csp" > Обратно< /a> < /p> < /body>
5.4.3. Тег < CSP: While >
Используется для циклической обработки фрагмента страницы. Этот тег, например, может быть использован при визуализации результатов запросов. Атрибуты тега приведены в таблице:
Таблица 5.6.
Атрибут
| Описание
| CONDITION
| Логическое выражение, которое проверяется после каждой итерации. Если выражение истина, цикл продолжается.
| COUNTER
| Задает имя переменной-счетчика цикла, начальное значением равно 1, значение счетчика автоматически увеличивается на 1 с каждой итерацией цикла. Счетчик можно не задавать.
| CURSOR
| Используется только для встроенных SQL-запросов. Задает имя SQL- курсора.
| INTO
| Используется только для встроенных SQL-запросов. Задает разделенный запятыми список переменных, из которых будет состоять запрос.
| Имеет закрывающий тег < /CSP: While>.
Пример P9. Использование тега < CSP: WHILE>.
Данный пример демонстрирует использование переменной счетчика цикла.
< UL>
< CSP: WHILE COUNTER=" i" CONDITION=" i< 10" >
< LI> Значение счетчика - #(i)#.
< /CSP: WHILE>
< /UL>
|