描述触发器定义的结构。
触发器是在SQL中发生特定事件时执行的代码段。InterSystems IRIS支持基于执行INSERT
、UPDATE
和DELETE
命令的触发器。根据触发器定义,指定的代码将在相关命令执行之前或之后立即执行。每个事件可以有多个触发器,只要它们被分配了执行顺序。
可以向持久类添加触发器定义。它们在其他类中没有意义。
触发器定义具有以下结构:
/// description
Trigger name [ keyword_list ]
{ implementation }
description
描述(可选)旨在显示在“类参考”中。默认情况下,描述为空白。name
(必需)是触发器的名称。这必须是有效的类成员名称,并且不能与任何其他类成员名称冲突。keyword_list
(必需)是以逗号分隔的关键字列表,用于进一步定义触发器。implementation
实现(必需)是零行或多行ObjectScript代码,用于定义触发触发器时要执行的代码。/// 此触发器在每次插入后更新日志表
Trigger LogEvent [ Event = INSERT, Time = AFTER ]
{
// 获取插入行的行id
NEW id
SET id = {ID}
// 将值插入日志表
&sql(INSERT INTO LogTable (TableName, IDValue) VALUES ('MyApp.Person', :id))
}
描述XData块的结构。
XData
块是包含在类定义中的命名数据单元,通常由类中的方法使用。最常见的情况是,它是一个XML文档,但是它可以由其他形式的数据组成,例如JSON
或YAML
。
XData
块具有以下结构:
/// description
XData name [ keyword_list ]
{
data
}
description
描述(可选)旨在显示在“类别参考”中。默认情况下,描述为空白。name
(必需)是XData
块的名称。这必须是有效的类成员名称,并且不能与任何其他类成员名称冲突。data
数据(可选)包含扩展数据块的有效载荷。如果是XML,则它必须是格式良好的文档(只有一个根元素),开头没有XML声明。keyword_list
(可选)是以逗号分隔的关键字列表,进一步定义了XData
块。如果省略此列表,也要省略方括号。Class Demo.CoffeeMakerRESTServer Extends %CSP.REST
{
Parameter HandleCorsRequest = 1
XData UrlMap [ XMLNamespace = "http://www.intersystems.com/urlmap" ]
{
<Routes>
<Route Url="/test" Method="GET" Call="test"/>
<Route Url="/coffeemakers" Method="GET" Call="GetAll" />
<Route Url="/coffeemaker/:id" Method="GET" Call="GetCoffeeMakerInfo" />
<Route Url="/newcoffeemaker" Method="POST" Call="NewMaker" />
<Route Url="/coffeemaker/:id" Method="PUT" Call="EditMaker" />
<Route Url="/coffeemaker/:id" Method="DELETE" Call="RemoveCoffeemaker"/>
</Routes>
}
指定这是否是抽象类。
要将类标记为抽象类,请使用以下语法:
Class MyApp.MyClass [ Abstract ]
{ //class members }
否则,省略此关键字或将单词Not放在关键字的前面。
如果一个类是抽象的,就不能创建它的实例。
此关键字不是继承的。
如果省略这个关键字,这个类就不是抽象的。
指定此类的类型(或行为)。
要指定类的类型(如果需要),请使用以下语法:
Class MyApp.MyClass [ ClassType = classtype ]
{ //class members }
其中classtype
是下列之一:
datatype
— 该类是一个数据类型类,用于表示文字值。persistent
持久—该类表示要存储在数据库中的数据。serial
—该类表示要存储在另一个持久对象中(处于序列化状态)的数据。stream
—该类表示流数据。view
视图—该类用于定义一个SQL视图。index
—该类是一个索引类,一个定义索引接口的专用类。如果未指定此关键字,则类类型从主超类继承(如果有)。
请注意,ClassType
是为%RegisteredObject
、%SerialObject
、%Persistent
和数据类型类等系统类指定的,因此如果对这些类进行子类化,通常不需要指定此关键字。
此关键字指定如何使用此类。类别编译器使用类别类型关键字来决定如何编译类别。例如,如果ClassType
是持久性的,则类编译器还会调用存储编译器来为类生成持久性代码。除非明确定义,否则ClassType
的值要么是默认值,要么是从主超类继承而来的。
对于持久性类,只有在标准持久性行为被重写时,才需要显式的ClassType
语句。如果一个类定义包含这样的语句,要么是因为开发人员指定了它,要么是因为这个类起源于用旧版本的InterSystems IRIS开发的代码。
这个关键字是从主超类继承的。子类可以覆盖关键字的值。
如果省略此关键字,类类型将从主超类继承(如果有)。
注意:分片类的类类型不能有持久以外的任何值。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。