ソース・ビジネス・オブジェクトが子ビジネス・オブジェクトを含む場合、子ビジネス・オブジェクトのマップ方法はソースおよび宛先ビジネス・オブジェクト内の子のカーディナリティーにより異なります。このセクションでは、次のケースでの子ビジネス・オブジェクトのマッピング方法について説明します。
単一カーディナリティーのソース子ビジネス・オブジェクトを単一カーディナリティーの宛先ビジネス・オブジェクトにマップするには、次の手順を行います。
例: このようなマッピングは次のマッピングの場合に必要になります。
SAP_CustomerMaster
から次へ
Customer.CustomerAddress
ソース子ビジネス・オブジェクトがカーディナリティー 1 の場合、これには宛先子ビジネス・オブジェクトの単一インスタンスにのみマップされるデータが含まれます。単一カーディナリティーのソース子オブジェクトを複数カーディナリティーの宛先子オブジェクトにマップするには、"単一カーディナリティーのソースおよび宛先のマッピング"で説明する手順に従います。サブマップを作成する必要はありません。
例: このようなマッピングは次のマッピングの場合に必要になります。
SAP_CustomerMaster.SAP_CustCreditCentralData[1]
から次へ
Customer.CustomerInformation.CustomerCreditData[n]
複数カーディナリティーのソース子ビジネス・オブジェクトを複数カーディナリティーの宛先ビジネス・オブジェクトにマップするには、複数カーディナリティー・サブマップを作成する必要があります。 サブマップの概要については、"サブマップを使用した変換"を参照してください。
例: このようなマッピングは次のマッピングの場合に必要になります。
SAP_CustBankData[n]
から次へ
Customer.CustomerInformation.CustomerBankData[n]
同じタイプの複数のソース・ビジネス・オブジェクトを変換する場合は、表 67 の手順に従い、実行します。
作成手順 | 詳細情報の参照先 |
---|---|
1. 複数カーディナリティー・サブマップの作成。これによりあるソース・オブジェクト内の属性からある宛先ビジネス・オブジェクトへの変換が実行されます。 | 複数カーディナリティー・サブマップの作成手順 |
2. 宛先ビジネス・オブジェクトの複数カーディナリティー属性内の、メイン・マップからこのサブマップの呼び出し。サブマップの呼び出しは、各ビジネス・オブジェクトがサブマップに渡されるように、複数カーディナリティー・オブジェクト内の各ビジネス・オブジェクトをループする for ループ内で行います。 | 複数カーディナリティー・サブマップの呼び出し手順 |
ソースから宛先オブジェクトに複数カーディナリティーの子オブジェクトをマップするサブマップを作成するには、単一ソース・ビジネス・オブジェクトと単一宛先ビジネス・オブジェクトでマップを作成します。このマップには、宛先オブジェクトの対応する属性へのソース・オブジェクト内の属性の変換を含みます。
複数カーディナリティー・サブマップを作成するには、Map Designer Express で次の手順を実行します。
SAP_CustBankData ビジネス・オブジェクトを Customer.CustomerInformation.CustomerBankData ビジネス・オブジェクトにマップするには、SAP_CustBankData をワークスペースの左半分にドラッグし、CustomerBankData を右半分にドラッグします。
推奨: サブマップ名はプレフィックス「Sub_」で始めてください。例: Sub_SaCwCustBankData
結果: すべてが正しいと、次のメッセージが表示されます。
マップ検証が正常に終了しました。 マップのコンパイルが正常に終了しました。
複数カーディナリティー・サブマップを呼び出すには、宛先ビジネス・オブジェクトの複数カーディナリティー属性内の、メイン・マップから runMap() メソッドで呼び出します。
サブマップの呼び出しは、各ビジネス・オブジェクトがサブマップに渡されるように、複数カーディナリティー・オブジェクト内の各ビジネス・オブジェクトをループする for ループ内で行います。
複数カーディナリティー・サブマップを呼び出すには、Map Designer Express で次の手順を実行します。
SAP_CustBankData から Customer.CustomerInformation.CustomerBankData への変換の場合、SAP_CustBankData と CustomerBankData を選択します。
例: Sub_SaCwCustBankData
この例では、条件を指定する必要がないので「OK」をクリックします。
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()
以下は、変更されたコードです (変更部分は太字で強調表示されます)
{ 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"); } } } } }