我正在使用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
记录的附加信息。如果这是正确的,那么在您的实现中存在几个问题:
- 逻辑:由于框架可以用于导入和导出,因此使用
_stagingToTarget
来区分两者。如果_stagingToTarget
为true
,则数据从staging表导入到Dynamics AX目标表。所以你需要把逻辑放到else
分支中。 - 选择
PurchLine
记录:当前实现将永远不会选择PurchLine
记录,因为未实例化的VendPackingSlipTrans
表变量的值被用作选择语句中的标准。此外,所选择的标准是错误的,请查看表VendPackingSlipTrans
的purchLine
方法,以了解如何为VendPackingSlipTrans
记录获取PurchLine
记录,并使用target
变量实例化VendPackingSlipTrans
表变量。 - check
if (! purchLine)
:此检查意味着如果在前一个select语句中没有找到PurchLine
记录,则该空记录的LineAmount
将用于分段记录。这是错误的,相反,您想使用已找到的记录的LineAmount
。 -
entity.insert()
:正如我在评论中提到的,实体记录不应该插入到生成方法中;框架会处理插入
if (_stagingToTarget)
分支中的这些问题的可能解决方案如下:
[
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;
}