反射 Inside Dynamics AX 4.0 14章 读书笔记

来源:互联网 发布:杭州淘宝运营 编辑:程序博客网 时间:2024/06/07 18:25

反射是编程时对应用程序模型的发现机制,可以理解为程序员利用代码来了解应用程序数据模型的定义及具体内容的一种机制。

 

这一机制包括:X++提供很多系统函数或方法、三种反射API

 

其中系统函数和方法包括:

 

内部方法

一组可以获取元素名字和ID的方法,并在编译时进行安全检验

TypeOf系统方法

返回变量的元素数据类型

ClassIdGet系统方法

返回一个实例所属类的ID

 

反射API包括:

Table data

一组保护所以元素定义的表。它允许开发人员以表达形式直接访问aod文件中的内容,可以用于判断一个元素是否存在,并获取它的一些属性,包括元素的创建人、创建时间、创建日期等。

Dictionary

一组类型安全的类,用于从对象模型中读取元数据,而且是只读的。

Treenodes

一个类的层次关系模型,提供了操作AOT节点的API,可以用来创建、读取、修改和删除AOT上的元数据或代码。它可以告诉节点的详细信息。

 

 

内部方法介绍了:

<ElementKind>str:  返回某一元素的名字,如classStr, fieldStr

<ElementKind>Num:返回某一元素的ID,如classNum,fieldNum

identifierStr

literalStr: 该方法将参数转换为字符串,即使是Label也不会进行对应的转换,如literalStr(@sys1)返回@sys1,而不会将@sys1转换为对应的字符串

 

TypeOf系统方法

Typeof(parameter)返回Types的枚举值

 

ClassIdGet系统方法:

ClassIdGet(parameter)返回实例parameter对应的类ID

但是,如果有一个父类Base,然后有一个子类Client继承自Base,那么Client的实例使用classIdGet返回的将是client类的ID,这样,判断一个变量其类是否继承自另一个类会比较麻烦。所以4.0系统提供了SysDictClass::as方法。

SysDictClass::as(instance,classnum(class)),如果instanceclass或其子类的实例,就返回该实例,否则返回NULL

 

 

Table data包括:

 

Table names

Description

UtilElements UtilIdElements

表包含了.aod文件中的元素

UtilElementsOld UtilIdElementsOld

表包含了旧的应用程序文件夹中.aod文件中的内容,在代码更新时有用

UtilApplHelp

表包含了.ahd文件的内容,是提供给最终用户的帮助信息

UtilApplCodeDoc

表包含了.add文件的内容,包含了开发人员对所有元素的注释

UtilCodeDoc

表包含了.khd文件的内容,包含了AX系统API对应开发人员的稳定信息

 

UtilElementsUtilIdElements的不同在于UtilIdElements包含了Id信息。

 

为了方便操作这些表,系统提供了以x开头的类:x<TableName>,如xUtilElements

 

Dictionary包括:

 

利用Dictionary可以判断一个元素是否存在,而获取该元素更详细的信息,则要使用DictClass类。而为了获得更多的信息,系统在应用程序一级提供了对应的类SysDict<ElementKink>,它们都继承自各自在系统一级的类,如SysDictClass继承自DictClass

系统同时也提供了DictFieldSysDictField类来获取有关字段的信息。

 

Treenodes的内容包含:

 

使用TreeNode来操作节点。

通过代码修改TreeNode后需要使用TreeNodeRelase方法来是否缓存并重新加载,以确保修改能被及时反映。

关于TreeNode如何使用可以参考类SysBpCheck.

原创粉丝点击