第八章 Caché 函数大全 $CLASSMETHOD 函数

文章目录

第八章 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

猜你喜欢

转载自blog.csdn.net/yaoxin521123/article/details/108290127