在窗体记录信息窗体上有个重命名的功能,可以把用到某个表主键的从表信息统一进行更新,常用的可能是更新物料编码,会计科目代码等。
有时候需要统一按照某个规则批量更新物料编码和会计科目代码等,一个个通过窗体的重命名操作会有些麻烦,可以使用主表的renamePrimaryKey写一段代码来批量更新,不过如果遇到数据量很大,并且这个字段没建索引的话,就有的等了,可能N个小时都没反映。
renamePrimaryKey这个方法是内置的,并没有公开它的代码,不过推测的话,它应该是通过反射数据字典找到哪些表用到了表的主键,比如哪些表用到了LedgerAccount,哪些表用到了ItemId之类,通过AX提供的反射类可以很容易地找到这个关系,通过代码可以生成需要的update方法,生成代码之后执行一下,看哪个表更新的慢,创建索引再更新就可以了。
{
#AOT
#define.FileName(@”c:DataDictionary.txt”)
TextBuffer tb = new TextBuffer();
Dictionary dictionary = new Dictionary();
DictTable dictTable;
DictField dictField;
SysDictType type;
int i;
int j;
boolean exist;
str statement;
int k;
;
for( i=1;i<= dictionary.tableCnt();i++)
{
//print i;
dictTable = new DictTable(dictionary.tableCnt2Id(i));
if(dictTable.isView() || dictTable.isMap() || dictTable.isTmp())
continue;
//Define tables
for(j=1;j<=dictTable.fieldCnt();j++)
{
exist = false;
dictField = new DictField(dictTable.id(),dictTable.fieldCnt2Id(j));
type = new SysDictType(dictField.typeId());
while(type)
{
if(Global::extendedTypeId2name(type.id()) == “LedgerAccount” &&
(Global::isConfigurationkeyEnabled(dictField.configurationKeyId()) || dictField.configurationKeyId() == 0 ))
{
print type.name();
tb.appendText(” “+dictTable.name()+” “+dictTable.name()+@”;
“);
exist = true;
break;
}
type = new SysDictType(type.extend());
}
if(exist)
break;
}
}
tb.appendText (@”
“);
dictionary = new Dictionary();
tb.appendText(@” while select ChartAccountMapping
{“);
for( i=1;i<= dictionary.tableCnt();i++)
{
print i;
dictTable = new DictTable(dictionary.tableCnt2Id(i));
if(dictTable.isView() || dictTable.isMap() || dictTable.isTmp() || dictTable.name()== “ChartAccountMapping”)
continue;
for(j=1;j<=dictTable.fieldCnt();j++)
{
dictField = new DictField(dictTable.id(),dictTable.fieldCnt2Id(j));
type = new SysDictType(dictField.typeId());
while(type)
{
if(Global::extendedTypeId2name(type.id()) == “LedgerAccount”&&
(Global::isConfigurationkeyEnabled(dictField.configurationKeyId()) || dictField.configurationKeyId() == 0 ))
{
tb.appendText( strfmt(@”
update_recordset %1
setting %2= %3
where %1.%2 == %4
“,dictTable.name(),dictField.name(),”ChartAccountMapping.newAccount”,
“ChartAccountMapping.oldAccount;”));
}
type = new SysDictType(type.extend());
}
}
}
tb.appendText( “}” );
tb.toFile(#FileName);
}
本文链接:http://www.cnblogs.com/Farseer1215/p/3324091.html,转载请注明。