DMF/ dixfax 2012 R3自定义生成方法



我正在使用Data Import Export Framework (DIXF)围绕文件交换(导出)工作,我想添加生成方法来查找与PurchLine表中的接收行VendPackingSlipTrans相关的LineAmount purchasline。我创建了以下脚本,但我需要一个帮助:

[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中存在一些字段,因此在staging表中添加了这些字段,但其他字段存在于其他表中,如LineAmount。我不知道如何在staging table中添加其他字段。在myEnityclass中,我创建了一个生成方法来关联源表中的字段。到staging表

因此,您似乎想要使用数据导入/导出框架(DIXF)的自定义实体从PurchLine记录导出VendPackingSlipTrans记录的附加信息。如果这是正确的,那么在您的实现中存在几个问题:

    if (_stagingToTarget)分支中的
  1. 逻辑:由于框架可以用于导入和导出,因此使用_stagingToTarget来区分两者。如果_stagingToTargettrue,则数据从staging表导入到Dynamics AX目标表。所以你需要把逻辑放到else分支中。
  2. 选择PurchLine记录:当前实现将永远不会选择PurchLine记录,因为未实例化的VendPackingSlipTrans表变量的值被用作选择语句中的标准。此外,所选择的标准是错误的,请查看表VendPackingSlipTranspurchLine方法,以了解如何为VendPackingSlipTrans记录获取PurchLine记录,并使用target变量实例化VendPackingSlipTrans表变量。
  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;
}

最新更新