第二十九章 使用 CSP 进行基于标签的开发 - 服务器端方法
运行时代码 ObjectScript 单行
可以使用以下语法运行单行 ObjectScript
。这仅适用于单行。行不能换行。
#[ set x = a + b write x ]# 复制代码
服务器端方法
在 CSP
文档中,可以定义属于为文档生成的类的方法。这是使用带有 <script>
标记的参数来完成的。
可以指定方法的名称以及它的参数列表和返回类型。可以指定用于实现该方法的语言;此语言不需要匹配 CSP
文档的默认语言。
例如,以下定义了一个名为 MakeList
的方法,该方法创建一个包含计数项的有序列表:
<script language="Cache" method="MakeList" arguments="count:%Integer" returntype="%String"> New i Write "<ol>",! For i = 1:1:count { Write "<li> Item",i,! } Write "</ol>",! Quit "" </script> 复制代码
然后,可以从 CSP
文档中的其他位置调用此方法:
<hr> #(..MakeList(100))# 复制代码
还可以使用继承(使用<csp:class>
标记)将先前定义的方法继承到页面类或调用另一个类的类方法:
<hr> #(##class(MyApp.Utilities).MakeList(100))# 复制代码
SQL
可以使用 SQL 使用以下 <script>
标记在 CSP
页面内的对象中定义 Caché %ResultSet
。
以下示例在名为 query
的对象中创建动态 SQL %ResultSet 的实例,准备指定的 SQL
查询并执行它(准备好对其进行迭代)。
<script language="SQL" name="query"> SELECT Name FROM MyApp.Employee ORDER BY Name </script> 复制代码
通常,在由 SQL
脚本标记创建的对象中使用 %ResultSet
并结合 <csp:while>
标记(请参阅 csp:while
标记)来显示查询结果。
当页面完成执行时,SQL <script>
标记在对象中关闭实例化的 %ResultSet
。
可以使用 ?
指定 SQL
查询的参数。 SQL
文本中的字符。可以使用 SQL <script>
标记的 P1、P2、...Pn
属性为参数提供值(其中 n
是参数的数量)。
这是使用 SQL <script>
标签显示当前用户购买的示例。 (假设当前用户的用户 ID
先前已存储在 %session
对象中):
<script language=SQL name=query P1=#(%session.Data("UserID"))#> SELECT DateOfPurchase,ItemName,Price FROM MyApp.Purchases WHERE UserID = ? ORDER BY DateOfPurchase </script> <hr> Items purchased by: <b>#(%session.Data("UserID"))#</b> <br> <table> <tr><th>Date</th><th>Item</th><th>Price</th></tr> <csp:while condition="query.Next()"> <tr> <td>#(..EscapeHTML(query.GetData(1)))#</td> <td>#(..EscapeHTML(query.GetData(2)))#</td> <td>#(..EscapeHTML(query.GetData(3)))#</td> </tr> </csp:while> </table> 复制代码
使用<csp:query>
标记,可以使用定义为 Caché
类的一部分的查询在对象中创建 %ResultSet
:
<csp:query NAME="query" CLASSNAME="Sample.Person" QUERYNAME="ByName"> 复制代码
可以像使用 SQL <script>
标记一样在对象中使用生成的 %ResultSet
。
控制生成的类
使用 <csp:class>
标记,可以对 CSP
编译器生成的类施加一些控制。此控件包括为类选择超类并在类参数中定义许多 %CSP.Page
的值。
例如,假设除了从类中的常规 %CSP.Page
继承之外,还希望生成的类也从另一个类继承。 SUPER
属性采用逗号分隔的类列表,并将它们用作生成类的超类。
<csp:class SUPER="%CSP.Page,MyApp.Utilities"> 复制代码
下面是一个重新定义类参数值的示例: 要将类参数 PRIVATE
的值重新定义为 1
(将页面定义为私有),请使用:
<csp:class PRIVATE=1>