【问题标题】:DMF/DIXF AX 2012 R3 Custom generate methodDMF/DIXF AX 2012 R3 自定义生成方法
【发布时间】:2015-10-14 01:04:49
【问题描述】:

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

[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 中创建了生成方法来关联源表中的字段。到临时表

【问题讨论】:

  • 您需要什么帮助?
  • “如何将供应商产品收货行 (VendPackingSlipTrans) 与采购行 (PurchLine) 关联起来?”... 是这个问题吗?
  • select 语句和以下设置字段LineAmount 的逻辑没有任何意义。正如当前编写的那样,LineAmount 将始终为零,因为 select 语句将检索 PurchLine 记录,其中 PurchId 为空,LineNumber 为零(因为vendPackingSlipTrans 变量永远不会被实例化),除非您有损坏的数据,这样的PurchLine 记录不应该存在。在这种方法中调用entity.insert() 也是没有意义的。 Generate方法用于设置实体记录的一个字段,而不是插入实体记录。
  • @ian_scho 是并获得LineAmount 的值,因为我希望在临时表中使用此值
  • @FH-Inway 你能帮忙纠正这个选择语句吗

标签: axapta dynamics-ax-2012 x++ dynamics-ax-2012-r3


【解决方案1】:

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

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

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

[
    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;
}

【讨论】:

  • 谢谢你是最棒的,你的解释帮助我学习新事物
  • 当我尝试通过在数据导入导出框架>目标实体中创建新目标实体来测试我的导出时出现以下错误:Error executing code: DMFVendPackingSlipTransClass object does not have method getFieldsSequence 我想回答新问题,但我已经达到了我的问题限制抱歉
  • @Astoner:看看其他 DIXF 实体类是如何实现这个方法的,例如DMFPurchLineEntityClass。这应该让您了解如何在自己的 DMFVendPackingSlipTransClass 中实现该方法。
  • 谢谢,我修复了我的错误,我忘记为我的班级扩展 DMFEntityBase
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多