子ビジネス・オブジェクトのマッピング

ソース・ビジネス・オブジェクトが子ビジネス・オブジェクトを含む場合、子ビジネス・オブジェクトのマップ方法はソースおよび宛先ビジネス・オブジェクト内の子のカーディナリティーにより異なります。このセクションでは、次のケースでの子ビジネス・オブジェクトのマッピング方法について説明します。

単一カーディナリティーのソースおよび宛先のマッピング

単一カーディナリティーのソース子ビジネス・オブジェクトを単一カーディナリティーの宛先ビジネス・オブジェクトにマップするには、次の手順を行います。

例: このようなマッピングは次のマッピングの場合に必要になります。

SAP_CustomerMaster
 

から次へ

Customer.CustomerAddress
 

単一カーディナリティーのソースから複数カーディナリティーの宛先へのマッピング

ソース子ビジネス・オブジェクトがカーディナリティー 1 の場合、これには宛先子ビジネス・オブジェクトの単一インスタンスにのみマップされるデータが含まれます。単一カーディナリティーのソース子オブジェクトを複数カーディナリティーの宛先子オブジェクトにマップするには、"単一カーディナリティーのソースおよび宛先のマッピング"で説明する手順に従います。サブマップを作成する必要はありません。

例: このようなマッピングは次のマッピングの場合に必要になります。

SAP_CustomerMaster.SAP_CustCreditCentralData[1]
 

から次へ

Customer.CustomerInformation.CustomerCreditData[n]
 

複数カーディナリティーのソースおよび宛先のマッピング

複数カーディナリティーのソース子ビジネス・オブジェクトを複数カーディナリティーの宛先ビジネス・オブジェクトにマップするには、複数カーディナリティー・サブマップを作成する必要があります。 サブマップの概要については、"サブマップを使用した変換"を参照してください。

例: このようなマッピングは次のマッピングの場合に必要になります。

SAP_CustBankData[n] 
 

から次へ

Customer.CustomerInformation.CustomerBankData[n]
 

同じタイプの複数のソース・ビジネス・オブジェクトを変換する場合は、表 67 の手順に従い、実行します。

表 67. 複数カーディナリティー・サブマップの作成
作成手順 詳細情報の参照先
1. 複数カーディナリティー・サブマップの作成。これによりあるソース・オブジェクト内の属性からある宛先ビジネス・オブジェクトへの変換が実行されます。 複数カーディナリティー・サブマップの作成手順
2. 宛先ビジネス・オブジェクトの複数カーディナリティー属性内の、メイン・マップからこのサブマップの呼び出し。サブマップの呼び出しは、各ビジネス・オブジェクトがサブマップに渡されるように、複数カーディナリティー・オブジェクト内の各ビジネス・オブジェクトをループする for ループ内で行います。 複数カーディナリティー・サブマップの呼び出し手順

複数カーディナリティー・サブマップの作成手順

ソースから宛先オブジェクトに複数カーディナリティーの子オブジェクトをマップするサブマップを作成するには、単一ソース・ビジネス・オブジェクトと単一宛先ビジネス・オブジェクトでマップを作成します。このマップには、宛先オブジェクトの対応する属性へのソース・オブジェクト内の属性の変換を含みます。

複数カーディナリティー・サブマップを作成するには、Map Designer Express で次の手順を実行します。

  1. メイン・マップを閉じて、新規マップを開始します。
  2. 「ダイアグラム」タブで、ソース子ビジネス・オブジェクトをマップ・ワークスペース域の左半分にドラッグし、宛先子ビジネス・オブジェクトを右半分にドラッグします。

    SAP_CustBankData ビジネス・オブジェクトを Customer.CustomerInformation.CustomerBankData ビジネス・オブジェクトにマップするには、SAP_CustBankData をワークスペースの左半分にドラッグし、CustomerBankData を右半分にドラッグします。

  3. サブマップを保管します。

    推奨: サブマップ名はプレフィックス「Sub_」で始めてください。例: Sub_SaCwCustBankData

  4. 宛先オブジェクトの動詞を、宛先ビジネス・オブジェクトの動詞の設定の説明に従って設定します。
  5. 個々の属性を、"標準の属性変換の指定""その他の属性の変換方法"の説明に従って、マップします。
  6. 「ファイル」メニューから「コンパイル」を選択して、サブマップをコンパイルします。

    結果: すべてが正しいと、次のメッセージが表示されます。

    マップ検証が正常に終了しました。
     マップのコンパイルが正常に終了しました。
     

ヒント:
サブマップのコンパイルを忘れると、「サブマップ」ダイアログで表示できません。 メッセージ「サブマップが使用不能です。」が表示されます。

複数カーディナリティー・サブマップの呼び出し手順

複数カーディナリティー・サブマップを呼び出すには、宛先ビジネス・オブジェクトの複数カーディナリティー属性内の、メイン・マップから runMap() メソッドで呼び出します。

サブマップの呼び出しは、各ビジネス・オブジェクトがサブマップに渡されるように、複数カーディナリティー・オブジェクト内の各ビジネス・オブジェクトをループする for ループ内で行います。

複数カーディナリティー・サブマップを呼び出すには、Map Designer Express で次の手順を実行します。

  1. サブマップを閉じて、メイン・マップを開きます。
  2. ソース子オブジェクトと宛先子オブジェクトを選択して、変換規則のコンボ・ボックスから「サブマップ」を選択します。

    SAP_CustBankData から Customer.CustomerInformation.CustomerBankData への変換の場合、SAP_CustBankDataCustomerBankData を選択します。

    結果: 「サブマップ」ダイアログ・ボックスが表示されます。

  3. サブマップの名前を選択して、「OK」をクリックします。

    例: Sub_SaCwCustBankData

    この例では、条件を指定する必要がないので「OK」をクリックします。

  4. 宛先子オブジェクトの Activity Editor を開きます。

    SAP_CustBankData から Customer.CustomerInformation.CustomerBankData への変換の場合、Activity Editor に次のようなコードが表示されます。

    {
     BusObjArray srcCollection_For_ObjSAP_Order_SAP_OrderPartners =
        ObjSAP_Order.getBusObjArray("SAP_OrderPartners");
      
     //
     // LOOP ONLY ON NON-EMPTY ARRAYS
     // -----------------------------
     //
     // Perform the loop only if the source array is non-empty.
     //
     if ((srcCollection_For_ObjSAP_Order_SAP_OrderPartners != null) &&
           (srcCollection_For_ObjSAP_Order_SAP_OrderPartners.size() > 0))
        {
        int currentBusObjIndex_For_ObjSAP_Order_SAP_OrderPartners;
        int lastInputIndex_For_ObjSAP_Order_SAP_OrderPartners =
        srcCollection_For_ObjSAP_Order_SAP_OrderPartners.getLastIndex();
        for (currentBusObjIndex_For_ObjSAP_Order_SAP_OrderPartners = 0;
           currentBusObjIndex_For_ObjSAP_Order_SAP_OrderPartners <=
           lastInputIndex_For_ObjSAP_Order_SAP_OrderPartners;
           currentBusObjIndex_For_ObjSAP_Order_SAP_OrderPartners++)
           {
           BusObj currentBusObj_For_ObjSAP_Order_SAP_OrderPartners =
     (BusObj) (srcCollection_For_ObjSAP_Order_SAP_OrderPartners.elementAt(
           (currentBusObjIndex_For_ObjSAP_Order_SAP_OrderPartners));
      
           //
           // INVOKE MAP ON VALID OBJECTS
           // ---------------------------
           //
           // Invoke the map only on those child objects that meet certain
           // criteria.
           //
           if (currentBusObj_For_ObjSAP_Order_SAP_OrderPartners != null)
              {
              BusObj[] _cw_inObjs =
                 { currentBusObj_For_ObjSAP_Order_SAP_OrderPartners };
              BusObj[] _cw_outObjs =
                 DtpMapService.runMap(
                 "Sub_SaOrderPartners_to_CwCustomerRole", "CwMap",
                 _cw_inObjs, cwExecCtx);
        ObjOrder.setWithCreate("AssociatedCustomers",
                 _cw_outObjs[0]);
              }
           }
        }
     }
     

    runMap() は静的メソッドなので、呼び出しは次のようにします。

    DtpMapService.runMap()
     
  5. 以下のように、このコードを多少変更します。

    以下は、変更されたコードです (変更部分は太字で強調表示されます)

       {
        BusObjArray srcCollection_For_ObjSAP_
     Order_SAP_OrderPartners =      ObjSAP_Order.getBusObjArray("SAP_OrderPartners");
      
        //
        // LOOP ONLY ON NON-EMPTY ARRAYS
        // -----------------------------
        //
        // Perform the loop only if the source array is non-empty.
        //
        if ((srcCollection_For_ObjSAP_Order_SAP_OrderPartners
           != null) &&
              (srcCollection_For_ObjSAP_Order_SAP_OrderPartners.size()
         > 0))
           {
           int currentBusObjIndex_For_ObjSAP_Order_SAP_OrderPartners;
           int lastInputIndex_For_ObjSAP_Order_SAP_OrderPartners =
              srcCollection_For_ObjSAP_Order_SAP_OrderPartners.getLastIndex();
      
           for (currentBusObjIndex_For_ObjSAP_Order_SAP_OrderPartners
         = 0;
                currentBusObjIndex_For_ObjSAP_Order_SAP_OrderPartners
         <=
                lastInputIndex_For_ObjSAP_Order_SAP_OrderPartners;
                currentBusObjIndex_For_ObjSAP_Order_SAP_OrderPartners++)
              {
                BusObj currentBusObj_For_ObjSAP_Order_SAP_OrderPartners =
      (BusObj)
                    (srcCollection_For_ObjSAP_Order_SAP_OrderPartners.elementAt(
                currentBusObjIndex_For_ObjSAP_Order_SAP_OrderPartners));
      
              //
              // INVOKE MAP ON VALID OBJECTS
              // ---------------------------
              //
              // Invoke the map only on those child objects that meet
                 certain
              // criteria.
              //
              if (currentBusObj_For_ObjSAP_Order_SAP_OrderPartners != null)
                 {
                 currentBusObj_For_ObjSAP_Order_SAP_OrderPartners.setVerb(
                    ObjSAP_Order.getVerb());            BusObj[] _cw_inObjs
      
                 =  { currentBusObj_For_ObjSAP_Order_SAP_OrderPartners };
      
                 try
                    {
                    BusObj[] _cw_outObjs = DtpMapService.runMap(
                       "Sub_SaOrderPartners_to_CwCustomerRole", "CwMap",
                       _cw_inObjs, cwExecCtx);
                    ObjOrder.setWithCreate("AssociatedCustomers", _cw_outObjs[0]);
                    }
                 catch (MapNotFoundException me)
                    {
                    logError(5502, "Sub_SaOrderPartners_to_CwCustomerRole");
                    throw new MapFailureException ("Submap not found");
                    }            }
              }
           }
        }
     
  6. サブマップの呼び出しを追加したら、メイン・マップを再コンパイルします。

Copyright IBM Corp. 2004