美文网首页
第八章 Caché 函数大全 $CLASSMETHOD 函数

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

作者: Cache技术分享 | 来源:发表于2020-08-29 08:37 被阅读0次

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

    相关文章

      网友评论

          本文标题:第八章 Caché 函数大全 $CLASSMETHOD 函数

          本文链接:https://www.haomeiwen.com/subject/aqedsktx.html