0

我正在使用Data Import Export Framework(DIXF)解决文件交换(导出)问题,我想将生成方法添加到LineAmount与表中的接收行关联的 Find Purchline VendPackingSlipTransPurchLine我创建了以下脚本,但我需要帮助:

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

4

1 回答 1

2

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

  1. 分支中的逻辑if (_stagingToTarget):由于框架既可以用于导入也可以用于导出,_stagingToTarget用于区分两者。如果_stagingToTargettrue,数据将从临时表导入到 Dynamics AX 目标表。所以你需要把逻辑放在else分支中。
  2. 选择PurchLine记录:当前实现永远不会选择PurchLine记录,因为未实例化的VendPackingSlipTrans表变量的值被用作选择语句中的标准。另外选择的标准是错误的,看看purchLine表的方法,VendPackingSlipTrans看看如何获​​取PurchLine记录的VendPackingSlipTrans记录并使用target变量来实例化VendPackingSlipTrans表变量。
  3. check if (! purchLine):这个检查意味着如果PurchLine在前面的 select 语句中没有找到任何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;
}
于 2015-10-13T15:48:26.977 回答