第八章 Caché 函数大全 $CLASSMETHOD 函数
2020-08-29 本文已影响0人
Cache技术分享
第八章 Caché 函数大全 $CLASSMETHOD 函数
在指定的类中执行命名的类方法。
大纲
$CLASSMETHOD(classname, methodname, arg1, arg2, arg3, ... )
参数
- classname
- 可选-一个计算结果为字符串的表达式。
- 字符串的内容必须与现有的,可访问的,先前编译的类的名称完全匹配。
- 在引用Caché类的情况下,名称可以采用规范形式(
%Library.String
)或缩写形式(%String
)。 - 如果省略classname,则使用当前的类上下文。
- (可以使用
$THIS
来确定当前的类上下文。)请注意,如果省略了classname,则必须指定占位符逗号。
- methodname
- 计算结果为字符串的表达式。字符串的值必须与以类名标识的类中现有类方法的名称匹配。
- arg1, arg2, arg3, ...
- 可选-一系列表达式,将其顺序替换为指定方法的参数。
- 表达式的值可以是任何类型。
- 实现者有责任确保提供的表达式的类型与方法所期望的匹配,并在声明的范围内具有值。(如果指定的方法不要求任何参数,则在函数调用中无需指定方法名之外的任何参数。如果该方法需要参数,则控制必须提供的规则是目标方法的规则。)
描述
$CLASSMETHOD
允许CachéObjectScript程序调用任意类中的任意类方法。类名和方法名都可以在运行时计算,也可以作为字符串常量提供。要调用实例方法而不是类方法,请使用$METHOD
函数。
如果方法采用参数,则由方法名称后面的参数列表提供。最多可以将255个参数值传递给该方法。
$CLASSMETHOD
作为函数或过程的调用决定了目标方法的调用。可以使用JOB
命令DO
命令调用$CLASSMETHOD
,而放弃返回值。
尝试调用不存在的类会导致 <CLASS DOES NOT EXIST>
错误,然后是当前名称空间名称和指定的类名称。例如,尝试调用不存在的类名“fred
”会导致错误<CLASS DOES NOT EXIST> *User.Fred
。为classname指定空字符串会导致<CLASS DOES NOT EXIST> *(No name)
。
尝试调用不存在的类方法会导致<METHOD DOES NOT EXIST>
错误。
示例
以下示例显示将$CLASSMETHOD
用作函数:
/// d ##class(PHA.TEST.Function).CLASSMETHOD()
ClassMethod CLASSMETHOD()
{
SET classname = "%Dictionary.ClassDefinition"
SET classmethodname = "NormalizeClassname"
SET singleargument = "%String"
WRITE $CLASSMETHOD(classname,classmethodname,singleargument),!
}
DHC-APP>d ##class(PHA.TEST.Function).CLASSMETHOD()
%Library.String
以下示例显示带有两个参数的$CLASSMETHOD
:
DHC-APP> WRITE $CLASSMETHOD("%Library.Persistent","%PackageName"),!
%Library
DHC-APP>WRITE $CLASSMETHOD("%Library.Persistent","%ClassName")
%Persistent
以下示例使用$CLASSMETHOD
执行动态SQL查询:
/// d ##class(PHA.TEST.Function).CLASSMETHOD1()
ClassMethod CLASSMETHOD1()
{
SET q1="SELECT Age,Name FROM Sample.Person "
SET q2="WHERE Age > ? AND Age < ? "
SET q3="ORDER by Age"
SET myquery=q1_q2_q3
SET rset=$CLASSMETHOD("%SQL.Statement","%ExecDirect",,myquery,12,20)
DO rset.%Display()
WRITE !,"Teenagers in Sample.Person"
}
DHC-APP>d ##class(PHA.TEST.Function).CLASSMETHOD1()
Age Name
14 Pantaleo,Paul H.
14 Ingrahm,Molly X.
14 Finn,Kenny G.
14 Yeats,Dmitry T.
16 Grabscheid,Jocelyn B.
17 Yancik,Will L.
17 Goldman,Will H.
17 Eastman,Howard K.
19 Ingrahm,Susan N.
9 Rows(s) Affected
Teenagers in Sample.Person
/// d ##class(PHA.TEST.Function).CLASSMETHOD2()
ClassMethod CLASSMETHOD2()
{
SET q1="SELECT top(10)inci_desc,inci_code from inc_itm"
SET myquery=q1
SET rset=$CLASSMETHOD("%SQL.Statement","%ExecDirect",,myquery)
DO rset.%Display()
}
DHC-APP>d ##class(PHA.TEST.Function).CLASSMETHOD2()
INCI_Desc INCI_Code
吲哚美辛巴布膏(必艾得)[13G:3.5MG*6] XWY000001
磷酸钠盐灌肠液(辉力)[133ml] XWY000002
盐酸丁卡因胶浆(利宁)[5G] XWY000003
盐酸利多卡因胶浆[2%*10ML] XWY000004
更昔洛韦凝胶剂(丽科明)[7.5mg:5g] XWY000005
克痤隐酮凝胶[6g] XWY000006
酮洛芬凝胶(法斯通)[2.5%*50g] XWY000007
小牛血去蛋白提取物眼用凝胶(速高捷)[5g] XWY000008
重组牛碱性成纤维细胞生长外用凝胶(贝复新)[21000IU:5G] XWY000009
阿达帕林凝胶(每宜)[30G:30MG] XWY000010
10 Rows(s) Affected