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

2020-08-29  本文已影响0人  Cache技术分享

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

在指定的类中执行命名的类方法。

大纲

$CLASSMETHOD(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
上一篇下一篇

猜你喜欢

热点阅读