DMF/DIXF AX 2012 R3 自定义生成方法

DMF/DIXF AX 2012 R3 Custom generate method

我正在使用 Data Import Export Framework (DIXF) 解决文件交换(导出)问题,我想添加生成方法以查找与来自 VendPackingSlipTrans 的接收行关联的 LineAmount Purchline PurchLine table.I 创建以下脚本,但我需要帮助:

[DMFTargetTransformationAttribute(true),DMFTargetTransformationDescAttribute("Function that generate LineAmount"),
 DMFTargetTransformationSequenceAttribute(11),
 DMFTargetTransFieldListAttribute([fieldStr(DMFVendPackingSlipTransEntity,LineAmount)])
]
public container GenerateLineAmount(boolean _stagingToTarget = true)
{

    container                  res;
    PurchLine                  purchLine;
    VendPackingSlipTrans       vendPackingSlipTrans;

    if (_stagingToTarget)
    {
        select firstOnly purchLine
            where purchLine.LineAmount                  == entity.LineAmount &&
                  vendPackingSlipTrans.OrigPurchid      == purchLine.PurchId &&
                  vendPackingSlipTrans.PurchaseLineLineNumber == purchLine.LineNumber;

        if ( ! purchLine )
        {
            entity.LineAmount = purchLine.LineAmount ;
            entity.insert();
        }
    }
    res = [entity.LineAmount];
    return res;
}

我必须使用 DMF 将数据从 ax 导出到文件,因此我在 VendPackingSlipTrans 中存在一些字段,所以在暂存中添加了这个字段 table 但其他字段存在于其他 table 中,例如LineAmount.I 不知道如何在暂存中添加其他字段 table。为此,我在 myEnityclass 中创建了生成方法来关联源 table 中的字段。分期 table

所以您似乎想要使用数据 import/export-Framework (DIXF) 的自定义实体从 PurchLine 记录中导出包含附加信息的 VendPackingSlipTrans 记录。如果那是正确的,那么您的实现中存在几个问题:

  1. if (_stagingToTarget)分支中的逻辑:由于框架既可以用于导入也可以用于导出,所以使用_stagingToTarget来区分两者。如果 _stagingToTargettrue,数据将从暂存 table 导入到 Dynamics AX 目标 table。所以需要把逻辑放在else分支中。
  2. selection of PurchLine record:当前实现永远不会 select a PurchLine record 因为未实例化的值 VendPackingSlipTrans table 变量用作 select 语句中的条件。此外,选择的标准是错误的,请查看 table VendPackingSlipTrans 的方法 purchLine 以了解如何获取 PurchLine 记录以获取 VendPackingSlipTrans 记录并使用target 变量实例化 VendPackingSlipTrans table 变量。
  3. check if (! purchLine):这个检查的意思是如果前面的select语句找不到PurchLine条记录,就使用这条空记录的LineAmount用于暂存记录。这是错误的,相反,您想使用已找到的记录的 LineAmount
  4. entity.insert():正如我在评论中提到的,不应在生成方法中插入实体记录;该框架将负责插入

这些问题的可能解决方案如下所示:

[
    DMFTargetTransformationAttribute(true),
    DMFTargetTransformationDescAttribute('function that determines LineAmount for export'),
    DMFTargetTransformationSequenceAttribute(11),
    DMFTargetTransFieldListAttribute([fieldStr(DMFVendPackingSlipTransEntity, LineAmount)])
]
public container GenerateLineAmount(boolean _stagingToTarget = true)
{
    container                  res;
    PurchLine                  purchLine;
    VendPackingSlipTrans       vendPackingSlipTrans;

    if (_stagingToTarget)
    {
        // this will be executed during import
        res = [0.0];
    }
    else
    {
        // this will be executed during export
        // the target variable contains the VendPackingSlipTrans that is exported
        vendPackingSlipTrans = target;
        purchLine = vendPackingSlipTrans.purchLine();
        if (purchLine)
        {
            res = [purchLine.LineAmount];
        }
    }
    return res;
}