我被要求清理AX数据库中未使用的客户。挑战当然是定义“未使用”。
是否有任何图表记录了Dynamics AX 2009中表格的关系?
例如,我看到表格LedgerJournalTrans
有“AccountNum
”字段。我想我可以推断,如果客户在LedgerJournalTrans
中没有相关记录,则它未被使用,但我认为它可能比这更复杂。
我应该注意什么?
谢谢!
答案 0 :(得分:2)
我以前必须这样做,而且它真的不是非常具有挑战性,你只需做尽职调查。我不会对ian_scho的方法感到自信,因为它只检查两个表,但我会说他的方法得到80%。
我想说你最好的方法是复制班级 Classes\InventUnusedDimCleanUp
并修改 \run
方法中的简单函数。
这是一个基本类,基本上执行以下操作,除了我要用InventDimId
替换AccountNum
来实现团结:
AccountNum
)插入空检查表作为起始参考Data Dictionary\Tables
树节点
CustAccount
的EDT或者是扩展它的EDT来确定它是否是候选字段[TableId,FieldId]
s AccountNum
中删除候选表中存在的 DO ,这样我们就可以了检查表 AccountNum
在任何表格中找不到的CustTable
中删除检查表中已被视为未使用}的客户强> 这应该可以完成您的任务,但不会考虑您可能拥有的任何外部系统或自定义......但它获得了95%。
答案 1 :(得分:1)
不要忘记客户交易 - 在一家公司或所有公司中? 在AX 2012中,财务维度框架可以引用客户表本身。
CustTable custTable;
CustTrans custTrans;
//DefaultDimensionView defaultDimensionView; // **AX 2012**
;
//Customer transactions not found.
setPrefix("@SYS119665");
while select crossCompany AccountNum, Party from custTable
notExists join custTrans
where custTable.AccountNum == custTrans.AccountNum
{
info (strFmt("%1 - %2", custTable.AccountNum, custTable.name()));
//// Check financial dimension definition, 'Customer' **AX 2012**
//select firstonly defaultDimensionView
// where defaultDimensionView.DisplayValue == custTable.AccountNum
// && defaultDimensionView.Name == "Customer"; //"Client" in some countries? May depend upon AX installation.
//if (defaultDimensionView)
//{
// warning("Financial dimension value exists.");
//}
}
我个人建议不要删除这些系统上的任何内容。生成一份报告,说明正在使用的主数据百分比,以及数据是否会对可用性产生负面影响...... 然后看看你的老板是否忘记了请求:)