//Soondy @Champway.GuangZhou
实在记不得出处了,前段时间在网上看到有关探讨复制结构类似的表之间的记录的问题.下文便是汇总的一些方法.
当我看完最后一种方法的时候,也就是使用Axapta AOT Map的方法.引发了我的思考..
呵呵,顺手牵羊或许是最简便而高效的做法,先睹为快吧.
方法1 看RecordOperation.xpo
Static Common RecordCopy(Common _from,Common _to)
{
Dictionary dict;
DictTable dictTableFrom;
DictTable dictTableTo;
DictField dictFieldFrom;
DictField dictFieldTo;
Integer recCnt;
;
dictTableFrom = new DictTable(_from.TableId);
dictTableTo = new DictTable(_to.TableId);
for (recCnt = 1;recCnt <= dictTableTo.fieldCnt();recCnt ++)
{
dictFieldTo = dictTableTo.fieldObject(dictTableTo.fieldCnt2Id(recCnt));
if (!dictFieldTo.isSystem())
{
if (dictFieldTo.name() == "oldRecId")
dictFieldFrom = dictTableFrom.fieldObject(dictTableFrom.fieldName2Id("RecId"));
else
dictFieldFrom = dictTableFrom.fieldObject(dictTableFrom.fieldName2Id(dictFieldTo.name()));
if (dictFieldFrom && dictFieldFrom.type() == dictFieldTo.type())
{
_to.(dictFieldTo.id()) = _from.(dictFieldFrom.id());
}
}
}
return _to;
}
方法2:
要把这些表放到同一个Map中,并建立字段的映射:
static void CopyData(Args _args)
{
JournalTableMap journalTableMapCopyFrom;
JournalTableMap journalTableMapCopyTo;
InventJournalTable inventJournalTable;
ProdJournalTable prodJournalTable;
;
select firstonly inventJournalTable
where inventJournalTable.JournalId == '000010_080';
journalTableMapCopyFrom = inventJournalTable;
journalTableMapCopyTo = prodJournalTable;
journalTableMapCopyTo.data(journalTableMapCopyFrom);
print journalTableMapCopyTo.journalId;
pause;
}
SoondyXUE:
建一个对象,可认为是容器,雷同表拥有一些字段,包含表A和表B 对应字段,对象也有方法,即可以在表A和B之间复制数据的方法,然后,把表A查询出来的数据放到这个对象里,调用这个对象的复制数据方法就可以完成数据复制到表B了.
其实这个对象就是axapta里面的Map,不过Axapta的Map不是实际上的Table.通过Table Brower可以见到,并不存储真实数据于其中,我认为可以理解为Temp Table.