文章
姚 鑫 · 八月 16, 2021 阅读大约需 4 分钟

属性关键字ServerOnly,SqlColumnNumber,SqlComputeCode,SqlComputed

第109章 属性关键字 - ServerOnly

指定是否将此属性投影到Java客户机。

用法

要指定属性是否被投影到Java客户端,请使用以下语法:

Property name As classname [ ServerOnly = n ];

其中n是下列之一:
- 0表示此属性是投影的。
- 1表示不投影该属性。

详解

此关键字指定属性是否被投影到Java客户端。

默认

如果省略此关键字,属性将被投影。

第110章 属性关键字 - SqlColumnNumber

指定此属性的SQL列号。仅适用于持久类。

用法

要指定属性的SQL列号,请使用以下语法:

Property name As classname [ SqlColumnNumber = 4 ]; 

其中n是正整数。

详解

此关键字允许显式设置此属性的SQL列号。这是为了支持传统应用程序而提供的。

默认

默认值为空字符串。

第111章 属性关键字 - SqlComputeCode

指定设置此属性值的代码。

用法

要指定属性的计算方式,请使用以下语法:

Property name As classname [ SqlComputeCode = { Set {FieldName} = Expression }, SqlComputed ];
  • FieldName—正在定义的属性的SQL字段名称。
  • Expression—对象指定属性值的脚本表达式。

详解

如果指定了这个关键字(如果SqlComputed为真),那么这个属性就是一个计算属性。

对于此关键字的值,请根据以下规则指定(在大括号中)一行设置属性值的对象脚本代码:
- 若要引用此属性,请使用{*}

或者,如果没有为属性指定SqlFieldName关键字,请使用{propertyname},其中propertyname是属性名称。如果为属性指定了SqlFieldName关键字,请使用{sqlfieldnamevalue},其中sqlfieldnamevalue是该关键字的值。

请注意,SqlFieldName对所有对象类都可用,尽管它只对持久类有用。

  • 同样,要引用另一个属性,如果没有为该属性指定SqlFieldName关键字,请使用{propertyname},其中propertyname是属性名称。如果为属性指定了SqlFieldName关键字,请使用{sqlfieldnamevalue},其中sqlfieldnamevalue是该关键字的值。
  • 如果需要,代码可以包含多个Set命令。等号前后允许有空格,尽管每个完整的Set语句必须出现在一行中。
  • 代码可以通过通常的完整语法引用类方法、例程或子例程。同样,它可以使用ObjectScript函数和运算符。
  • 代码可以包含嵌入式SQL。
  • 代码可以包括以下伪字段引用变量,这些变量在类编译时被转换为特定的值:
    • {%%CLASSNAME}{%%CLASSNAMEQ} 都转换为投影了SQL表定义的类的名称。{%%CLASSNAME}返回不带引号的字符串, {%%CLASSNAMEQ}返回带引号的字符串。
    • {%%TABLENAME}转换为表的完全限定名,以带引号的字符串形式返回。
    • {%%ID}转换为RowID名称。当不知道RowID字段的名称时,此引用非常有用。
  • 代码不能使用表单的语法..propertyname..methodname()

例如:

Property TestProp As %String [ SqlComputeCode = {set {*} = {OtherField}}, SqlComputed ];

再举一个例子:

Property FullName As %String [ SqlComputeCode = {set {*}={FirstName}_" "_{LastName}}, SqlComputed ];

代码是用Do命令调用的。

重要提示:
- 如果打算索引此字段,请使用确定性代码,而不是不确定性代码。 IRIS无法对不确定代码的结果维护索引,因为不可能可靠地删除过时的索引键值。(当传递相同的参数时,确定性代码每次都返回相同的值。例如,返回$h的代码是不确定的,因为$h是在函数控制之外修改的。)
- SqlComputeCode中使用的任何用户变量在使用前都应该是新的。这防止了与相关代码中其他地方同名变量的任何冲突。

默认

默认值为空字符串。

第112章 属性关键字 - SqlComputed

指定这是否是计算属性。

用法

要指定计算此属性,请使用以下语法:

Property name As classname [ SqlComputeCode = sqlcomputecode, SqlComputed ];

其中sqlcomputecodeSqlComputeCode中描述。

否则,省略此关键字或将单词Not放在关键字的前面。

详解

如果此关键字为真(并且属性还指定了SqlComputeCode),则此属性是计算属性。

如果一个属性具有SqlComputed关键字的值, IRIS将使用该值来计算该属性。具体来说,从SqlComputeCode生成了一个新的类方法<property>Compute。从属性的<property>Get方法调用此方法。如果属性还指定了SqlComputeOnChange关键字,则在指定的时间调用<property>Compute方法。

该功能在<property>Get<property>Set方法中实现。如果重写这些方法中的任何一个,则属性计算不起作用,除非重写的方法实现中有触发计算的规定。

00
1 0 0 17
登录或注册以继续