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 で、generat メソッドを作成して、ソース テーブルのフィールドを関連付けます。ステージングテーブルへ

4

1 に答える 1

2

したがって、データのインポート/エクスポート フレームワーク (DIXF) のカスタム エンティティを使用して、レコードVendPackingSlipTransから追加情報を含むレコードをエクスポートする必要があるようです。PurchLineそれが正しい場合、実装にはいくつかの問題があります。

  1. ブランチのロジックif (_stagingToTarget): フレームワークはインポートとエクスポートの両方に使用できるため_stagingToTarget、2 つを区別するために使用されます。_stagingToTargetがの場合true、データはステージング テーブルから Dynamics AX ターゲット テーブルにインポートされます。elseしたがって、ロジックをブランチに配置する必要があります。
  2. レコードの選択: インスタンス化されていないテーブル変数の値が select ステートメントの条件として使用されるためPurchLine、現在の実装ではレコードが選択されません。また、選択した基準が間違っています。テーブルのメソッドを見て、レコードのレコードを取得し、変数を使用してテーブル変数をインスタンス化する方法を確認してください。PurchLineVendPackingSlipTranspurchLineVendPackingSlipTransPurchLineVendPackingSlipTranstargetVendPackingSlipTrans
  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 に答える