清理未使用的客户

时间:2014-01-27 20:48:52

标签: axapta dynamics-ax-2009

我被要求清理AX数据库中未使用的客户。挑战当然是定义“未使用”。

是否有任何图表记录了Dynamics AX 2009中表格的关系?

例如,我看到表格LedgerJournalTrans有“AccountNum”字段。我想我可以推断,如果客户在LedgerJournalTrans中没有相关记录,则它未被使用,但我认为它可能比这更复杂。

我应该注意什么?

谢谢!

2 个答案:

答案 0 :(得分:2)

我以前必须这样做,而且它真的不是非常具有挑战性,你只需做尽职调查。我不会对ian_scho的方法感到自信,因为它只检查两个表,但我会说他的方法得到80%。

我想说你最好的方法是复制班级 Classes\InventUnusedDimCleanUp 并修改 \run 方法中的简单函数。

这是一个基本类,基本上执行以下操作,除了我要用InventDimId替换AccountNum来实现团结:

  • 将每个客户帐户(AccountNum)插入空检查表作为起始参考
  • 遍历AOT
  • 中每个表的Data Dictionary\Tables树节点
  • 在遍历时,确定该表是否是要与
  • 进行比较的候选表
  • 如果是候选表,则遍历每个字段并通过检查它是否是CustAccount的EDT或者是扩展它的EDT来确定它是否是候选字段
  • 如果我们确定它是候选字段,那么将其插入我们的[TableId,FieldId] s
  • 容器列表中
  • 接下来,遍历容器并为每个tableId / fieldId,从我们的检查表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.");
    //}
}

我个人建议不要删除这些系统上的任何内容。生成一份报告,说明正在使用的主数据百分比,以及数据是否会对可用性产生负面影响...... 然后看看你的老板是否忘记了请求:)