用代码创建扩展数据类型EDT
在Axapta中有两个类UtilElements和UtilIdElements,从Inside Microsoft Axapta4.0中的示例代码中,可以看到两者的应用.帮助文档一点记载都没有......
我们知道Axapta把AOT的信息以*.aod后缀文件方式存放在物理磁盘中.这两个类的功能就是可以让用户用SQL的方式查询AOT中的元素,UtilElementType这个枚举类型有很多AOT中结点的类型值,比如Form,Report等,下面的示例代码显示了查询Inventory相关的类.
不过在Axapta3.0中,TreeNode这个对象并没有增加EDT的方法,用AOTAdd()这个方法加其他元素没啥问题,加EDT死活不玩,服了.后来在狂找一气,发现了下面的方法
好在Axapta4.0的TreeNode增加了一个方法AOTaddExtendedDataType,估计是微软被吵得实在过意不去了,增加了这个方法来平息众怒,呵呵.
我们知道Axapta把AOT的信息以*.aod后缀文件方式存放在物理磁盘中.这两个类的功能就是可以让用户用SQL的方式查询AOT中的元素,UtilElementType这个枚举类型有很多AOT中结点的类型值,比如Form,Report等,下面的示例代码显示了查询Inventory相关的类.
static void TableAPI_FindInventoryClasses(Args _args)
{
UtilElements utilElements;
while select name from utilElements
where utilElements.RecordType == UtilElementType::Class
&& utilElements.Name like 'Invent*'
&& utilElements.ModifiedDate == today()-30
{
info(strfmt("%1", utilElements.Name));
}
}
按照我的理解,UtilElement只能操作大的方面,对具体元素的操作还是要靠TreeNode这个类.{
UtilElements utilElements;
while select name from utilElements
where utilElements.RecordType == UtilElementType::Class
&& utilElements.Name like 'Invent*'
&& utilElements.ModifiedDate == today()-30
{
info(strfmt("%1", utilElements.Name));
}
}
不过在Axapta3.0中,TreeNode这个对象并没有增加EDT的方法,用AOTAdd()这个方法加其他元素没啥问题,加EDT死活不玩,服了.后来在狂找一气,发现了下面的方法
UtilIdElements uie;
select maxof(id) from uie where uie.recordType ==
UtilElementType::ExtendedType && uie.utilLevel == XInfo.currentAOLayer();
uie.id++;
uie.utilLevel = XInfo.currentAOLayer();
uie.recordType = UtilElementType::ExtendedType;
uie.name = "FarseerTest";
uie.insert();
加倒是加上去了,可是一点击这个新建的EDT旁边的加号,或者点右键,用英文说就是Axapta Crash了,晕死......select maxof(id) from uie where uie.recordType ==
UtilElementType::ExtendedType && uie.utilLevel == XInfo.currentAOLayer();
uie.id++;
uie.utilLevel = XInfo.currentAOLayer();
uie.recordType = UtilElementType::ExtendedType;
uie.name = "FarseerTest";
uie.insert();
好在Axapta4.0的TreeNode增加了一个方法AOTaddExtendedDataType,估计是微软被吵得实在过意不去了,增加了这个方法来平息众怒,呵呵.
static server void AddEDT()
{
TreeNode TNode;
str strEDTName;
str strProperty;
;
//属性
strProperty = @"Properties
Label #Farseer Test
HelpText #Farseer Test
Extends #AccountName
EndProperties
";
strEDTName = "FarseerTest";
//找到EDT结点
TNode = TreeNode::findNode(@"Data Dictionary\Extended Data Types");
//不存在添加,存在报错.
if(!TNode.AOTfindChild(strEDTName))
{
TNode = TNode.AOTaddExtendedDataType(strEDTName,Types::String);
TNode.AOTsetProperties(strProperty);
Box::info("Successful!");
}
else
throw error(strFmt("The EDT %1 has been exist","Farseer"));
}
{
TreeNode TNode;
str strEDTName;
str strProperty;
;
//属性
strProperty = @"Properties
Label #Farseer Test
HelpText #Farseer Test
Extends #AccountName
EndProperties
";
strEDTName = "FarseerTest";
//找到EDT结点
TNode = TreeNode::findNode(@"Data Dictionary\Extended Data Types");
//不存在添加,存在报错.
if(!TNode.AOTfindChild(strEDTName))
{
TNode = TNode.AOTaddExtendedDataType(strEDTName,Types::String);
TNode.AOTsetProperties(strProperty);
Box::info("Successful!");
}
else
throw error(strFmt("The EDT %1 has been exist","Farseer"));
}