CacheScript反射

一、类的反射
1.$CLASSNAME:获取类的名称
2.%Dictionary.ClassDefinition
1)获取类名: Name
2)获取方法: Methods
3)获取Query: Queries
4)遍历类的属性: Properties

Set cdef = ##class(%Dictionary.ClassDefinition).%OpenId("User.DHCBPArrange")
	Write cdef.Name,!
	 // get list of properties
	 Set count = cdef.Properties.Count()
	 For i = 1:1:count {
	     Write cdef.Properties.GetAt(i).Name,!
	 }

3.PROPERTY:通过属性名设置属性值

set $PROPERTY(arrange, i)=value

4.$PROPERTY:通过属性名获取属性值

    Set arrange=##class(User.DHCBPArrange).%OpenId(3)
	FOR i = "BPABPCBedDr", "BPABPPatRegisterDr","BPAStatus"
 	{
    	WRITE i, ": ", $PROPERTY(arrange, i), !
 	}

5.获取Method入参数

set myobj=##class(%Dictionary.CompiledMethod).%OpenId(className_"||"_methodName,0)
    set paramList=myobj.FormalSpecParsed
    set len=$LISTLENGTH(paramList)

6.获取Query入参数

set myobj=##class(%Dictionary.CompiledQuery).%OpenId(ClassName_"||"_QueryName,0)
set paramsNames = $lts(myobj.ParmNames)
    set colCount=rset.GetColumnCount()
    set colName=rset.GetColumnName(colIndex)

二、对象的反射
1.创建与打开对象
C L A S S M E T H O D ( c l a s s N a m e , " / / 动态打开对象 s e t c l a s s = " U s e r . D H C A N O P A r r a n g e " s e t o b j = CLASSMETHOD(className,"%New") // 动态打开对象 set class="User.DHCANOPArrange" set obj= CLASSMETHOD(className,"//动态打开对象setclass="User.DHCANOPArrange"setobj=CLASSMETHOD(class,“%OpenId”,1)

2.$PROPERTY:通过属性名设置属性值
Set $PROPERTY([obj], [name))=[value]

    // 设备
    set $PROPERTY(obj, name)=value
    // 获取
    set value=$PROPERTY(obj, name)

三、动态变量的反射
1.按键值获取、删除、设置值

%Get(key):获取值
%Remove(key):删除
%Set(key, value, type):设置值

2.遍历

s obj={}
	s obj.Name="Lijie"
	s obj.Sex="Male"
	set iter = obj.%GetIterator()
	   while iter.%GetNext(.key , .value ) {
	      write "key = "_key_" , value = "_value,!
	   }

四、调用栈

1. 日志记录

不再废话以示例说明

// w ##class(CIS.AN.BL.SystemRunLog).A()

ClassMethod A()
{
	quit ..B()
}

ClassMethod B()
{
	set placeStack=""
	set codeStack=""
	for loop=0:1:$Stack(-1)
	{
		set placeStack=placeStack_"=>"_$STACK(loop,"PLACE")
		set codeStack=codeStack_"=>"_$STACK(loop,"MCODE")
		
	}
	set codeStack=$Replace(codeStack," ","")
	set codeStack=$Replace(codeStack,"	","")
	
	w codeStack,!
	//set ^TmpANDebug("TestB")=%STACK
	return 0
}

2. 显示当前调用栈

如果是在调试时,可使用以下语句显示栈:

do ^%STACK
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秦剑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值