Dynamics AX中Table Map的点点滴滴

在Microsoft Dynamics AX的MorphX中,AOT下有个Maps节点(注意,不是Map Class),这个节点下罗列了所有的Table Mapping。很多开发人员对于Table Mapping的概念不是很清楚,在使用过程中也会遇到一些问题。本文简单地收集并罗列一下。

一、Table Mapping也是Table

在AOT上,任意选择一个Table Map,单击鼠标右键选择Open,即可打开Table Browser。当然,如临时表一样,里面什么东西都没有,但我们可以看到,MorphX将Table Mapping当做Table处理了。

不仅如此,我们还可以直接使用SysDictTable类来获得Table Mapping的一些反射属性。比如:

 
  
static void Job28(Args _args)
{
SysDictTable sysDictTable
= new SysDictTable(tableNum(AddressMap));
;
print sysDictTable.isMap();
pause;
}

 

二、Map是Table的抽象

在谈Map与抽象之间的关系之前,先看看应该如何理解Dynamics AX中Table的概念。其实Table可以理解为业务实体类,它里面同样包含属性(Fields)和方法(Table Methods)。既然可以当成是实体类,那么就可以对其进行抽象。事实上,Dynamics AX中的Common表,就是所有数据表(或者说所有实体类)的基类,因此,在不确定传入的具体是那张表的情况下,我们往往会使用Common来定义函数的参数或者返回值。比如:

 

 
  
public final void writeLog(WebRecordName _recordName,
Common _orig,
Common _now,
WebExportLogType _exportLogType
= WebExportLogType::AddOrModify,
DivisionId _divisionId
= SysUserInfo::find(curUserId()).DivisionId,
boolean _force
= false ,
WebExportRemark _remarks
= '' )
{
// ...
}

现在随便想一个应用场景:系统中有两种用户类型:Individual Person和Organization。这两种用户类型都需要向系统提供用户名和密码,以便确认身份,进而获得更多其他的服务。那么这个校验身份的函数,就需要获得请求者的用户名和密码。我们定义两个Table:Person和Organization;以及一个Map:AuthenticationMap,如下:

 

2010040111105873.gif

2010040111133136.gif

于是,我们的校验方法就可以写成这个样子:

 

 
  
boolean authenticate(AuthenticationMap _authMap)
{
return this .checkAuthentication(_authMap.UserName, _authMap.Password);
}

 

从上面的代码还可以看到,Table Map“解耦”了Table的设计,在“用户名”和“密码”两个属性上,Person和Organization甚至可以使用不同的名字,最后只要用Map链接一下就可以了。

 

三、在Table上调用Map中的方法

其实方法很简单,只需要在Table的实例上,用“.”运算符调出Map,进而使用“::”运算符调用Map中的方法即可。注意:X++ Editor的智能感知功能是无法在您输入“.”以后,将Map列出的。此时关闭智能感知,直接用键盘敲入。

例如:我们在上面的AuthenticationMap上定义了一个isStrongPassword的instance方法:

 

 
  
boolean isStrongPassword()
{
return strlen( this .Password) >= 8 ;
}

那么在插入Person表记录的时候,我们需要首先判断输入的密码是否为强密码,否则禁止新建记录。在Person这个Table上,重载insert方法,并在方法中调用AuthenticationMap的isStrongPassword方法即可:

 

 

 
  
public void insert()
{
if ( this .AuthenticationMap::isStrongPassword())
super();
else
checkFailed(
' The password is not strong enough! ' );
}

转载于:https://www.cnblogs.com/daxnet/archive/2010/04/01/1696810.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值