SAP Connector 5.8 の例 - Mule 4

SAP への IDoc の送信

この例は、IDoc を SAP に送信する Mule アプリケーションを作成する方法を示しています。次のスクリーンショットは、この例の Studio フローを示しています。

IDoc を SAP に送信するための Studio フロー

HTTP リスナーを設定する

ローカルホストポート ​8081​ で ​/sendIDoc​ パスへのコールが行われたときに Mule フローを開始するように HTTP リスナーを設定します。

  1. Anypoint Studio で、新しい Mule プロジェクトを作成します。

  2. [Mule Palette (Mule パレット)]​ ビューから、​[HTTP] > [Listener]​ ソースをキャンバスにドラッグします。

  3. デフォルト値を使用してグローバル要素を設定します。

  4. [Listener (リスナー)]​ プロパティタブで、パスを ​/sendIDoc​ に設定します。

[Transform Message] コンポーネントを追加する

[Transform Message]​ コンポーネントで、IDoc 入力を XML に変換するように設定します。

  1. [Mule Palette (Mule パレット)]​ ビューから、​[Core (コア)]​ を選択して ​[Transform Message]​ コンポーネントを ​[Listener]​ ソースの横にドラッグします。

  2. メタデータが取得された後に、​[Transform Message]​ コンポーネントの ​[Output (出力)]​ セクションのテキストを次のテキストで上書きします。

    %dw 2.0
    output application/xml
    <MATMAS01>
    <IDOC BEGIN="1">
      <EDI_DC40 SEGMENT="1">
        <TABNAM>EDI_DC40</TABNAM>
        <MANDT>800</MANDT>
        <DOCNUM>0000000003519646</DOCNUM>
        <DOCREL>740</DOCREL>
        <STATUS>30</STATUS>
        <DIRECT>1</DIRECT>
        <OUTMOD>2</OUTMOD>
        <IDOCTYP>MATMAS01</IDOCTYP>
        <MESTYP>MATMAS</MESTYP>
        <SNDPOR>SAPIDE</SNDPOR>
        <SNDPRT>LS</SNDPRT>
        <SNDPRN>T90CLNT090</SNDPRN>
        <RCVPOR>MULE01_TP</RCVPOR>
        <RCVPRT>LS</RCVPRT>
        <RCVPRN>MULE01_LS</RCVPRN>
        <CREDAT>20180606</CREDAT>
        <CRETIM>133420</CRETIM>
        <SERIAL>20180606133420</SERIAL>
      </EDI_DC40>
      <E1MARAM SEGMENT="1">
        <MSGFN>005</MSGFN>
        <MATNR>000000000000000088</MATNR>
        <ERSDA>19970527</ERSDA>
        <ERNAM>MORLEY</ERNAM>
        <LAEDA>20030122</LAEDA>
        <AENAM>I021066</AENAM>
        <PSTAT>KVB</PSTAT>
        <LVORM>X</LVORM>
        <MTART>FERT</MTART>
        <MBRSH>M</MBRSH>
        <MATKL>02004</MATKL>
        <MEINS>PCE</MEINS>
        <BLANZ>000</BLANZ>
        <BRGEW>0.200</BRGEW>
        <NTGEW>0.200</NTGEW>
        <GEWEI>KGM</GEWEI>
        <VOLUM>0.000</VOLUM>
        <TRAGR>0001</TRAGR>
        <SPART>09</SPART>
        <WESCH>0.000</WESCH>
        <LAENG>0.000</LAENG>
        <BREIT>0.000</BREIT>
        <HOEHE>0.000</HOEHE>
        <ERGEW>0.000</ERGEW>
        <ERVOL>0.000</ERVOL>
        <GEWTO>0.0</GEWTO>
        <VOLTO>0.0</VOLTO>
        <FUELG>0</FUELG>
        <STFAK>0</STFAK>
        <MHDRZ>0</MHDRZ>
        <MHDHB>0</MHDHB>
        <MHDLP>0</MHDLP>
        <VPSTA>KVB</VPSTA>
        <MSTDE>00000000</MSTDE>
        <MSTDV>00000000</MSTDV>
        <COMPL>00</COMPL>
        <GEWTO_NEW>0.0</GEWTO_NEW>
        <VOLTO_NEW>0.0</VOLTO_NEW>
        <ANP>000000000</ANP>
        <E1MAKTM SEGMENT="1">
          <MSGFN>005</MSGFN>
          <SPRAS>1</SPRAS>
          <MAKTX>AS-100 T-shirt</MAKTX>
          <SPRAS_ISO>ZH</SPRAS_ISO>
        </E1MAKTM>
        <E1MAKTM SEGMENT="1">
          <MSGFN>005</MSGFN>
          <SPRAS>4</SPRAS>
          <MAKTX>AS-100 T-shirt</MAKTX>
          <SPRAS_ISO>RO</SPRAS_ISO>
        </E1MAKTM>
        <E1MAKTM SEGMENT="1">
          <MSGFN>005</MSGFN>
          <SPRAS>5</SPRAS>
          <MAKTX>AS-100 T-shirt</MAKTX>
          <SPRAS_ISO>SL</SPRAS_ISO>
        </E1MAKTM>
        <E1MAKTM SEGMENT="1">
          <MSGFN>005</MSGFN>
          <SPRAS>6</SPRAS>
          <MAKTX>AS-100 T-shirt</MAKTX>
          <SPRAS_ISO>HR</SPRAS_ISO>
        </E1MAKTM>
        <E1MAKTM SEGMENT="1">
          <MSGFN>005</MSGFN>
          <SPRAS>E</SPRAS>
          <MAKTX>AS-100 T-shirt</MAKTX>
          <SPRAS_ISO>EN</SPRAS_ISO>
        </E1MAKTM>
        <E1MAKTM SEGMENT="1">
          <MSGFN>005</MSGFN>
          <SPRAS>F</SPRAS>
          <MAKTX>AS-100 T-shirt</MAKTX>
          <SPRAS_ISO>FR</SPRAS_ISO>
        </E1MAKTM>
        <E1MAKTM SEGMENT="1">
          <MSGFN>005</MSGFN>
          <SPRAS>G</SPRAS>
          <MAKTX>AS-100 T-shirt</MAKTX>
          <SPRAS_ISO>EL</SPRAS_ISO>
        </E1MAKTM>
        <E1MAKTM SEGMENT="1">
          <MSGFN>005</MSGFN>
          <SPRAS>J</SPRAS>
          <MAKTX>AS-100 T ???</MAKTX>
          <SPRAS_ISO>JA</SPRAS_ISO>
        </E1MAKTM>
        <E1MAKTM SEGMENT="1">
          <MSGFN>005</MSGFN>
          <SPRAS>W</SPRAS>
          <MAKTX>AS-100 T-shirt</MAKTX>
          <SPRAS_ISO>BG</SPRAS_ISO>
        </E1MAKTM>
        <E1MAKTM SEGMENT="1">
          <MSGFN>005</MSGFN>
          <SPRAS>d</SPRAS>
          <MAKTX>AS-100 T-shirt</MAKTX>
          <SPRAS_ISO>SH</SPRAS_ISO>
        </E1MAKTM>
        <E1MARCM SEGMENT="1">
          <MSGFN>005</MSGFN>
          <WERKS>1000</WERKS>
          <PSTAT>V</PSTAT>
          <LVORM>X</LVORM>
          <PLIFZ>0</PLIFZ>
          <WEBAZ>0</WEBAZ>
          <PERKZ>M</PERKZ>
          <AUSSS>0.00</AUSSS>
          <MINBE>0.000</MINBE>
          <EISBE>0.000</EISBE>
          <BSTMI>0.000</BSTMI>
          <BSTMA>0.000</BSTMA>
          <BSTFE>0.000</BSTFE>
          <BSTRF>0.000</BSTRF>
          <MABST>0.000</MABST>
          <LOSFX>0</LOSFX>
          <AUSDT>00000000</AUSDT>
          <BEARZ>0.00</BEARZ>
          <RUEZT>0.00</RUEZT>
          <TRANZ>0.00</TRANZ>
          <BASMG>0.000</BASMG>
          <DZEIT>0</DZEIT>
          <MAXLZ>0</MAXLZ>
          <UEETO>0.0</UEETO>
          <UNETO>0.0</UNETO>
          <WZEIT>0</WZEIT>
          <VZUSL>0.00</VZUSL>
          <UMLMC>0.000</UMLMC>
          <LGRAD>0.0</LGRAD>
          <OBJID>00000000</OBJID>
          <MTVFP>01</MTVFP>
          <VRVEZ>0.00</VRVEZ>
          <VBAMG>0.000</VBAMG>
          <VBEAZ>0.00</VBEAZ>
          <TRAME>0.000</TRAME>
          <FXHOR>000</FXHOR>
          <VINT1>000</VINT1>
          <VINT2>000</VINT2>
          <LOSGR>0.000</LOSGR>
          <KAUSF>0.00</KAUSF>
          <TAKZT>0</TAKZT>
          <VRBDT>00000000</VRBDT>
          <VRBFK>0.00</VRBFK>
          <PREND>00000000</PREND>
          <PRENG>00000000</PRENG>
          <PRFRQ>0</PRFRQ>
          <SHZET>00</SHZET>
          <MMSTD>00000000</MMSTD>
          <DPLHO>0</DPLHO>
          <MINLS>0.000</MINLS>
          <MAXLS>0.000</MAXLS>
          <FIXLS>0.000</FIXLS>
          <LTINC>0.000</LTINC>
          <COMPL>00</COMPL>
          <EISLO>0.000</EISLO>
        </E1MARCM>
        <E1MARCM SEGMENT="1">
          <MSGFN>005</MSGFN>
          <WERKS>2300</WERKS>
          <PSTAT>VB</PSTAT>
          <LVORM>X</LVORM>
          <PLIFZ>0</PLIFZ>
          <WEBAZ>0</WEBAZ>
          <PERKZ>M</PERKZ>
          <AUSSS>0.00</AUSSS>
          <MINBE>0.000</MINBE>
          <EISBE>0.000</EISBE>
          <BSTMI>0.000</BSTMI>
          <BSTMA>0.000</BSTMA>
          <BSTFE>0.000</BSTFE>
          <BSTRF>0.000</BSTRF>
          <MABST>0.000</MABST>
          <LOSFX>0</LOSFX>
          <AUSDT>00000000</AUSDT>
          <BEARZ>0.00</BEARZ>
          <RUEZT>0.00</RUEZT>
          <TRANZ>0.00</TRANZ>
          <BASMG>0.000</BASMG>
          <DZEIT>0</DZEIT>
          <MAXLZ>0</MAXLZ>
          <UEETO>0.0</UEETO>
          <UNETO>0.0</UNETO>
          <WZEIT>0</WZEIT>
          <VZUSL>0.00</VZUSL>
          <UMLMC>0.000</UMLMC>
          <LADGR>0001</LADGR>
          <LGRAD>0.0</LGRAD>
          <OBJID>00000000</OBJID>
          <MTVFP>01</MTVFP>
          <VRVEZ>0.00</VRVEZ>
          <VBAMG>0.000</VBAMG>
          <VBEAZ>0.00</VBEAZ>
          <TRAME>0.000</TRAME>
          <FXHOR>000</FXHOR>
          <VINT1>000</VINT1>
          <VINT2>000</VINT2>
          <LOSGR>0.000</LOSGR>
          <KAUSF>0.00</KAUSF>
          <TAKZT>0</TAKZT>
          <VRBDT>00000000</VRBDT>
          <VRBFK>0.00</VRBFK>
          <PRENO>00000000</PRENO>
          <PREND>00000000</PREND>
          <PRENG>00000000</PRENG>
          <PRFRQ>0</PRFRQ>
          <SHZET>00</SHZET>
          <MMSTD>00000000</MMSTD>
          <DPLHO>0</DPLHO>
          <MINLS>0.000</MINLS>
          <MAXLS>0.000</MAXLS>
          <FIXLS>0.000</FIXLS>
          <LTINC>0.000</LTINC>
          <COMPL>00</COMPL>
          <EISLO>0.000</EISLO>
        </E1MARCM>
        <E1MARMM SEGMENT="1">
          <MSGFN>005</MSGFN>
          <MEINH>PCE</MEINH>
          <UMREZ>1</UMREZ>
          <UMREN>1</UMREN>
          <LAENG>0.000</LAENG>
          <BREIT>0.000</BREIT>
          <HOEHE>0.000</HOEHE>
          <VOLUM>0.000</VOLUM>
          <BRGEW>0.200</BRGEW>
          <GEWEI>KGM</GEWEI>
          <NEST_FTR>0</NEST_FTR>
          <MAX_STACK>0</MAX_STACK>
          <CAPAUSE>0.000</CAPAUSE>
        </E1MARMM>
        <E1MBEWM SEGMENT="1">
          <MSGFN>005</MSGFN>
          <BWKEY>2300</BWKEY>
          <LVORM>X</LVORM>
          <VPRSV>S</VPRSV>
          <VERPR>0</VERPR>
          <STPRS>0.3</STPRS>
          <PEINH>1</PEINH>
          <BKLAS>7920</BKLAS>
          <VMVPR>S</VMVPR>
          <VMVER>0</VMVER>
          <VMSTP>0.3</VMSTP>
          <VMPEI>1</VMPEI>
          <VMBKL>7920</VMBKL>
          <VJVPR>S</VJVPR>
          <VJVER>0</VJVER>
          <VJSTP>0.3</VJSTP>
          <LFGJA>1998</LFGJA>
          <LFMON>09</LFMON>
          <ZKPRS>0</ZKPRS>
          <ZKDAT>00000000</ZKDAT>
          <BWPRS>0</BWPRS>
          <BWPRH>0</BWPRH>
          <VJBWS>0</VJBWS>
          <VJBWH>0</VJBWH>
          <VVJLB>0.000</VVJLB>
          <VVMLB>0.000</VVMLB>
          <VVSAL>0</VVSAL>
          <ZPLPR>0</ZPLPR>
          <ZPLP1>0</ZPLP1>
          <ZPLP2>0</ZPLP2>
          <ZPLP3>0</ZPLP3>
          <ZPLD1>00000000</ZPLD1>
          <ZPLD2>00000000</ZPLD2>
          <ZPLD3>00000000</ZPLD3>
          <BWPH1>0</BWPH1>
          <BWPS1>0</BWPS1>
          <ABWKZ>00</ABWKZ>
          <PSTAT>B</PSTAT>
          <KALN1>000100014878</KALN1>
          <KALNR>000100014879</KALNR>
          <VERS1>00</VERS1>
          <VERS2>00</VERS2>
          <VERS3>00</VERS3>
          <PPRDZ>000</PPRDZ>
          <PPRDL>000</PPRDL>
          <PPRDV>000</PPRDV>
          <PDATZ>0000</PDATZ>
          <PDATL>0000</PDATL>
          <PDATV>0000</PDATV>
          <VPLPR>0</VPLPR>
          <VJBKL>7920</VJBKL>
          <VJPEI>1</VJPEI>
          <HKMAT>X</HKMAT>
          <BWPEI>0</BWPEI>
        </E1MBEWM>
        <E1MLANM SEGMENT="1">
          <MSGFN>005</MSGFN>
          <ALAND>ES</ALAND>
          <TATY1>MWST</TATY1>
          <TAXM1>0</TAXM1>
        </E1MLANM>
      </E1MARAM>
    </IDOC>
    </MATMAS01>
    ',"application/xml")

Send IDoc 操作を追加する

Send IDoc​ 操作は、リモート関数コール (RFC) を介して IDoc を SAP に送信します。

  1. [Mule Palette (Mule パレット)]​ ビューから、​[SAP]​ を選択して ​[Send IDoc]​ 操作を ​[Transform Message]​ コンポーネントの横にドラッグします。

  2. SAP_Outbound​ というグローバル要素を作成し、接続情報を指定します。

  3. [Test Connection (接続をテスト)]​ をクリックして、Mule Runtime Engine が SAP インスタンスに接続できることを確認します。

    • 正常に接続できた場合は、設定を保存します。

    • それ以外の場合、無効なパラメーターを確認および修正して、再度テストします。

  4. [Send IDoc]​ のプロパティに次の値を設定します。

    項目

    IDoc Name (IDoc 名)

    MATMAS01

    Content (コンテンツ)

    #[payload]

Logger コンポーネントを追加する

[Logger]​ コンポーネントは Studio コンソールにコネクタのペイロードを表示します。

  1. [Mule Palette (Mule パレット)]​ ビューから、​[Core (コア)]​ を選択して ​[Logger]​ を ​[Send IDoc]​ 操作の横にドラッグします。

  2. [File (ファイル)]​ > ​[Save (保存)]​ をクリックして、アプリケーションを保存します。

アプリケーションを実行する

Mule アプリケーションを実行する手順は、次のとおりです。

  1. [Run (実行)]​ > ​[Run as (別のユーザーとして実行)]​ > ​[Mule Application (Mule アプリケーション)]​ をクリックします。

  2. Web ブラウザーから、次の URL のクエリパラメーターとして、従業員の内部 ID、名、姓を入力してアプリケーションをテストします。

    http://localhost:8081/sendIDoc

    Mule によって IDoc が SAP に送信されます。

IDoc を SAP に送信する XML

Studio で次のコードを新しい Mule アプリケーションに貼り付ければ、IDoc を送信するフローの例をすばやく読み込むことができます。環境に合わせて値を変更してください。

<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core" xmlns:sap="http://www.mulesoft.org/schema/mule/sap"
	xmlns:http="http://www.mulesoft.org/schema/mule/http"
	xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/sap http://www.mulesoft.org/schema/mule/sap/current/mule-sap.xsd
http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd">
  <http:listener-config name="HTTP_Listener_config" doc:name="HTTP Listener config" doc:id="58cb7168-7f00-4b96-977a-31dcc54992dd" >
    <http:listener-connection host="0.0.0.0" port="8081" />
    </http:listener-config>
    <sap:sap-config name="SAP_Outbound" doc:name="SAP Config" doc:id="367ae57d-001b-4d8f-b50f-f6d1d17410a7" >
      <sap:simple-connection-provider-connection username="User1" password="myPassword" systemNumber="00" client="800" applicationServerHost="saptext.net" />
      </sap:sap-config>
      <flow name="sap_send_idocFlow" doc:id="1ee42fb2-8d7d-482d-8f31-095cef12ff08" >
        <http:listener doc:name="Listener" doc:id="a1f287ba-4138-4183-903b-90d34abde5c6" config-ref="HTTP_Listener_config" path="/"/>
        <ee:transform doc:name="Transform Message" doc:id="ae593540-a467-463f-9aae-fbfb781da0cd" >
          <ee:message >
            <ee:set-payload >
              <![CDATA[%dw 2.0
output application/xml
---
read('<MATMAS01>
              <IDOC BEGIN="1">
                <EDI_DC40 SEGMENT="1">
                  <TABNAM>EDI_DC40</TABNAM>
                  <MANDT>800</MANDT>
                  <DOCNUM>0000000003519646</DOCNUM>
                  <DOCREL>740</DOCREL>
                  <STATUS>30</STATUS>
                  <DIRECT>1</DIRECT>
                  <OUTMOD>2</OUTMOD>
                  <IDOCTYP>MATMAS01</IDOCTYP>
                  <MESTYP>MATMAS</MESTYP>
                  <SNDPOR>SAPIDE</SNDPOR>
                  <SNDPRT>LS</SNDPRT>
                  <SNDPRN>T90CLNT090</SNDPRN>
                  <RCVPOR>MULE01_TP</RCVPOR>
                  <RCVPRT>LS</RCVPRT>
                  <RCVPRN>MULE01_LS</RCVPRN>
                  <CREDAT>20180606</CREDAT>
                  <CRETIM>133420</CRETIM>
                  <SERIAL>20180606133420</SERIAL>
                </EDI_DC40>
              </IDOC>
              </MATMAS01>
',"application/xml") ]]>
              </ee:set-payload>
              </ee:message>
              </ee:transform>
              <sap:send doc:name="Send IDoc" doc:id="9d6b0825-7cfb-4c3b-bc6a-b9eae917af9b" config-ref="SAP_Outbound" key="MATMAS01"/>
              <logger level="INFO" doc:name="Logger" doc:id="8fd50dd8-8db4-4271-863b-ef7a463dcaea" />
            </flow>
            </mule>

IDoc 要求を受信する

この例は、外部 SAP からの受信 IDoc 要求を待機する Mule アプリケーションを作成する方法を示しています。この例でアプリケーションは RFC サーバーのように機能し、自身を SAP ゲートウェイとして登録します。アプリケーションは IDoc 要求を受信すると、リモート関数コール (RFC) コールを使用して SAP に IDoc の作成を要求します。その後、IDoc コンテンツを Studio コンソールに記録します。

次のスクリーンショットは、この例の Studio フローを示しています。

IDoc を受信するための Studio フロー

最初のフローを設定する

最初のフローでは BAPI 関数を使用して IDoc 要求を外部 SAP システムに送信します。このフローを設定する手順は、次のとおりです。

  1. Anypoint Studio で、新しい Mule プロジェクトを作成します。

  2. [Mule Palette (Mule パレット)]​ ビューから、​[HTTP]​ を選択して ​[Listener]​ ソースをキャンバスにドラッグします。

  3. デフォルト値を使用してグローバル要素を設定します。

  4. [Listener (リスナー)]​ プロパティタブで、パスを ​/trigger​ に設定します。

  5. [Transform message]​ コンポーネントを ​[Listener]​ の横にドラッグします。

    このメッセージのコンテンツは、IDoc 要求を受信する BAPI 関数のペイロードです。

  6. [Transform Message]​ コンポーネントの ​[Output (出力)]​ セクションで、括弧を次のテキストで上書きします。

    %dw 2.0
    output application/xml
    ---
    {
    	ZMMFM_TRIGGER_IDOC_MATMAS: {
    		"import": {
    	IV_MTYP: "MATMAS"
    ,
    IV_OBJ: "23"
    ,
    IV_SYS: "MULE11_LS"
    }
    ,
    export: {
    	EV_RET: "0"
    },export: {
    	EV_OBJ: "0000000003526552"
    },export: null,changing: null,
    tables: {
    	T_MSG: null
    },
    	}
    }
  7. [Mule Palette (Mule パレット)]​ ビューから、​[SAP]​ を選択して ​[Synchronous Remote Function Call]​ 操作を ​[Transform Message]​ コンポーネントの横にドラッグします。

  8. SAP_Config​ というグローバル要素を作成し、接続情報を指定します。

  9. [Test Connection (接続をテスト)]​ をクリックして、Mule Runtime Engine が SAP インスタンスに接続できることを確認します。

2 番目のフローを設定する

2 番目のフローは新しい各 IDoc 要求を Studio コンソールに記録します。このフローを設定する手順は、次のとおりです。

  1. [Mule Palette (Mule パレット)]​ ビューから、​[SAP]​ を選択して ​[Document listener]​ ソースをキャンバスにドラッグします。

  2. ソースの新しいグローバル要素を作成し、必須情報を指定します。

    [Document listener]​ のプロパティに次の値を設定します。

    項目

    Gateway host (ゲートウェイホスト)

    ゲートウェイサーバーを実行するホスト

    Gateway service (ゲートウェイサービス)

    3200

    Program id (プログラム ID)

    MULE01_PID

    Connection count (接続数)

    1

    Idoc type filter regex (Idoc 種別検索条件の正規表現)

    MATMAS01

    [Gateway host (ゲートウェイホスト)]​、​[Gateway service (ゲートウェイサービス)]​、​[Program id (プログラム ID)]​ は、顧客の SAP チームから取得する必要があります。

    SAP インスタンスに関連するすべての情報 (設定やログイン情報など) を顧客の SAP チームから取得する必要があります。

  3. [Mule Palette (Mule パレット)]​ ビューから、​[Core (コア)]​ を選択して ​[Logger]​ コンポーネントをキャンバス上の ​[Document listener]​ の横にドラッグします。

  4. [File (ファイル)]​ > ​[Save (保存)]​ をクリックして、アプリケーションを保存します。

アプリケーションを実行する

Mule アプリケーションを実行する手順は、次のとおりです。

  1. [Run (実行)]​ > ​[Run as (別のユーザーとして実行)]​ > ​[Mule Application (Mule アプリケーション)]​ をクリックします。

  2. Web ブラウザーから次の URL を入力してアプリケーションをテストします。

    http://localhost:8081/trigger

IDoc 要求を受信する XML

Studio で次のコードを新しい Mule アプリケーションに貼り付ければ、IDoc 要求を受信するフローの例をすばやく読み込むことができます。環境に合わせて値を変更してください。

%dw 2.0
output application/xml
---
<?xml version="1.0" encoding="UTF-8"?>
            <mule xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core" xmlns:http="http://www.mulesoft.org/schema/mule/http"
	xmlns:sap="http://www.mulesoft.org/schema/mule/sap"
	xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/sap http://www.mulesoft.org/schema/mule/sap/current/mule-sap.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd">
              <http:listener-config name="HTTP_Listener_config" doc:name="HTTP Listener config" doc:id="75b36b20-040b-401f-a65c-f0a966b51190" >
                <http:listener-connection host="0.0.0.0" port="8081" />
                </http:listener-config>
                <sap:sap-config name="SAP_Config" doc:name="SAP Config" doc:id="1f7e7c6e-4bb5-4270-870f-442cda3e3eb8" >
                  <sap:simple-connection-provider-connection username="User1" password="myPassword" systemNumber="00" client="800" applicationServerHost="sap.test.net" />
                  </sap:sap-config>
                  <flow name="sap-receive-idocFlow1" doc:id="bea8cd17-64d9-4f32-8229-d7eb909e8ee1">
                    <http:listener doc:name="Listener" doc:id="448acc4a-0078-485b-bc10-f70d05abf721" config-ref="HTTP_Listener_config" path="/trigger" />
                    <ee:transform doc:name="Transform Message" doc:id="44124bf5-7caf-4050-a3a6-06cfbd37da48">
                      <ee:message>
                        <ee:set-payload>
                          <![CDATA[%dw 2.0
output application/xml
---
{
	ZMMFM_TRIGGER_IDOC_MATMAS: {
		"import": {
	IV_MTYP: "MATMAS"
,
IV_OBJ: "23"
,
IV_SYS: "MULE11_LS"
}
,
export: {
	EV_RET: "0"
},export: {
	EV_OBJ: "0000000003526552"
},export: null,changing: null,
tables: {
	T_MSG: null
},
	}
}]]>
                          </ee:set-payload>
                          </ee:message>
                          </ee:transform>
                          <sap:sync-rfc doc:name="Synchronous Remote Function Call" doc:id="e420d5e1-c436-471e-aa48-59a7d2cee1b9" key="ZCAFM_TRIGGER_IDOC_BY_MSG_TYPE" config-ref="SAP_Config" />
                        </flow>
                        <flow name="sap-receive-idocFlow2" doc:id="4b070ed0-19ac-4899-82ce-275226b08426" >
                          <sap:document-listener doc:name="Document listener" doc:id="a0d3bf88-1bf1-4210-9cf1-5403f30b2d80" gatewayHost="xxx.com" gatewayService="3200" programID="MULE11_IDOC_PID"  config-ref="SAP_Config"/>
                          <logger level="INFO" doc:name="Logger" doc:id="db7ff63b-31b7-48ab-b0ad-73082f4b66c7" message="#[payload]"/>
                        </flow>
                        </mule>

Studio コンソールでの応答例

<MATMAS01>
                        <IDOC BEGIN="1">
                          <EDI_DC40 SEGMENT="1">
                            <TABNAM>EDI_DC40</TABNAM>
                            <MANDT>800</MANDT>
                            <DOCNUM>0000000003572826</DOCNUM>
                            <DOCREL>740</DOCREL>
                            <STATUS>30</STATUS>
                            <DIRECT>1</DIRECT>
                            <OUTMOD>2</OUTMOD>
                            <IDOCTYP>MATMAS01</IDOCTYP>
                            <MESTYP>MATMAS</MESTYP>
                            <SNDPOR>SAPIDE</SNDPOR>
                            <SNDPRT>LS</SNDPRT>
                            <SNDPRN>T90CLNT090</SNDPRN>
                            <RCVPOR>MULE11_TP</RCVPOR>
                            <RCVPRT>LS</RCVPRT>
                            <RCVPRN>MULE11_LS</RCVPRN>
                            <CREDAT>20191004</CREDAT>
                            <CRETIM>050305</CRETIM>
                            <SERIAL>20191004050305</SERIAL>
                            </EDI_DC40>
 		...

SAP 関数を受信する

この例は、SAP 関数を受信する Mule アプリケーションを作成する方法を示しています。この例では、関数が別の Mule フローまたは SAP の GUI からトリガーされたときに結果を表示します。次のスクリーンショットは、この例の Studio フローを示しています。

SAP 接続を確立するための Studio フロー

フローを作成する手順は、次のとおりです。

  1. [Mule Palette (Mule パレット)] ビューから、​[SAP]​ を選択して ​[Function listener]​ ソースをキャンバスにドラッグします。

  2. SAP_Inbound​ というグローバル要素を作成し、接続情報を指定します。

  3. プロパティタブで必須項目を設定します。

  4. [Mule Palette (Mule パレット)]​ ビューで ​[Core (コア)]​ を選択して ​[Transform Message]​ コンポーネントを ​[Function listener]​ の右側にドラッグします。

  5. メタデータに基づいて詳細を指定します。次に例を示します。

    SAP_Inbound グローバル要素のメタデータの例
  6. [File (ファイル)] > [Save (保存)]​ をクリックして、アプリケーションを保存します。

  7. [Run (実行)]​ > ​[Run as (別のユーザーとして実行)]​ > ​[Mule Application (Mule アプリケーション)]​ をクリックします。

SAP 関数を受信する XML

Studio で次のコードを新しい Mule アプリケーションに貼り付ければ、関数を受信するフローの例をすばやく読み込むことができます。環境に合わせて値を変更してください。

%dw 2.0
output application/xml
---

<?xml version="1.0" encoding="UTF-8"?>
                            <mule xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core" xmlns:sap="http://www.mulesoft.org/schema/mule/sap"
	xmlns="http://www.mulesoft.org/schema/mule/core"
	xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/sap http://www.mulesoft.org/schema/mule/sap/current/mule-sap.xsd
http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd">
                              <sap:sap-config name="SAP_Inbound" doc:name="SAP Config" doc:id="9eb4758e-4eb4-4291-9604-84586dda5cd3" >
                                <sap:simple-connection-provider-connection username="User1" password="Password" systemNumber="00" client="800" applicationServerHost="sapdev.muletest.net" />
                                </sap:sap-config>
                                <flow name="receive-a-functionFlow" doc:id="5104aaba-944d-4b8b-ba35-fc210e1f2c4e" >
                                  <sap:function-listener doc:name="Function listener" doc:id="58ee92ea-967f-4a9c-a14d-164032b1b8ee" config-ref="SAP_Inbound" gatewayHost="gateway.host.com" gatewayService="3200" programID="MULE01_API_PID"/>
                                  <ee:transform doc:name="Transform Message" doc:id="59b4c48f-40ca-4587-80e3-f06d895e1c5b" >
                                    <ee:message >
                                      <ee:set-payload >
                                        <![CDATA[%dw 2.0
output application/java
---
{
}]]>
                                        </ee:set-payload>
                                        </ee:message>
                                        </ee:transform>
                                      </flow>
                                      </mule>

トランザクションの管理

この例では、銀行レコードを処理する標準 BAPI で 2 つのコールを実行し、それらのトランザクションを管理します。

次のスクリーンショットは、この例の Studio フローを示しています。

トランザクションを管理する最初の Studio フロー
トランザクションを管理する 2 番目の Studio フロー
トランザクションを管理する 3 番目の Studio フロー

最初のフローを設定する

最初のフローは、米国の利用可能な銀行のリストを取得して、最初の結果を絞り込み、銀行に関する情報をフェッチします。SAP に対するクエリでは、トランザクションは必要ありません。このフローを設定する手順は、次のとおりです。

  1. Anypoint Studio で、新しい Mule プロジェクトを作成します。

  2. [Mule Palette (Mule パレット)]​ ビューから、​[HTTP]​ を選択して ​[Listener]​ ソースをキャンバスにドラッグします。

  3. デフォルト値を使用してグローバル要素を設定します。

  4. [Listener (リスナー)]​ プロパティタブで、パスを ​/sync-rfc​ に設定します。

  5. [Transform message]​ コンポーネントを ​[Listener]​ の横にドラッグします。

    このメッセージのコンテンツにより、国で銀行が絞り込まれます。

  6. [Transform Message]​ コンポーネントの ​[Output (出力)]​ セクションで、括弧を次のテキストで上書きします。

    %dw 2.0
    output application/xml
    ---
    {
    	BAPI_BANK_GETLIST: {
    		"import": {
    			BANK_CTRY: "US",
    			MAX_ROWS: 0
    		}
    	}
    }
  7. [Mule Palette (Mule パレット)]​ ビューから、​[SAP]​ を選択して ​[Synchronous Remote Function Call]​ 操作を ​[Transform Message]​ コンポーネントの横にドラッグします。

  8. SAP_Config​ というグローバル要素を作成し、接続情報を指定します。

  9. [Test Connection (接続をテスト)]​ をクリックして、Mule Runtime Engine が SAP インスタンスに接続できることを確認します。

  10. [Function Name (関数名)]​ に「​BAPI_BANK_GETLIST​」と入力し、​[Content (コンテンツ)]​ に「​payload​」と入力します。

  11. 別の ​[Transform Message]​ コンポーネントを ​[Synchronous Remote Function Call]​ の横にドラッグします。

    このメッセージのコンテンツにより、最初の結果が絞り込まれます。

  12. [Transform Message]​ コンポーネントの ​[Output (出力)]​ セクションで、括弧を次のテキストで上書きします。

    %dw 2.0
    output application/xml
    ---
    {
    	BAPI_BANK_GETDETAIL: {
    		"import" : {
    			BANKCOUNTRY: payload.BAPI_BANK_GETLIST.tables.BANK_LIST.*row[0].BANK_CTRY,
    			BANKKEY: payload.BAPI_BANK_GETLIST.tables.BANK_LIST.*row[0].BANK_KEY
    		}
    	}
    }
  13. [Mule Palette (Mule パレット)]​ ビューから、​[SAP]​ を選択して別の ​[Synchronous Remote Function Call]​ 操作を ​[Transform Message]​ コンポーネントの横にドラッグします。

  14. SAP_Config​ というグローバル要素を作成し、接続情報を指定します。

  15. [Test Connection (接続をテスト)]​ をクリックして、Mule Runtime Engine が SAP インスタンスに接続できることを確認します。

  16. [Function Name (関数名)]​ に「​"BAPI_BANK_GETDETAIL"​」と入力し、​[Content (コンテンツ)]​ に「​payload​」と入力します。

  17. [Mule Palette (Mule パレット)]​ ビューから、​[Core (コア)]​ を選択して ​[Logger]​ コンポーネントを ​[Synchronous Remote Function Call]​ の横にドラッグします。

2 番目のフローを設定する

2 番目のフローは、データから販売注文を作成します。​try​ を BAPI コールに追加して、トランザクションを作成する必要があります。そのようにしないと、変更が SAP に反映されません。このフローを設定する手順は、次のとおりです。

  1. [Mule Palette (Mule パレット)]​ ビューから、​[HTTP]​ を選択して ​[Listener]​ ソースをキャンバスにドラッグします。

  2. デフォルト値を使用してグローバル要素を設定します。

  3. [Listener (リスナー)]​ プロパティタブで、パスを ​/sync-mule-transaction​ に設定します。

  4. [Transform message]​ コンポーネントを ​[Listener]​ の横にドラッグします。

    このメッセージのコンテンツにより、データから販売注文が作成されます。

  5. [Transform Message]​ コンポーネントの ​[Output (出力)]​ セクションで、括弧を次のテキストで上書きします。

    %dw 2.0
    output application/xml
    ---
    {
    	BAPI_SALESORDER_CREATEFROMDAT2: {
    		"import": {
    			ORDER_HEADER_IN: {
    				DOC_TYPE: "TA",
    				SALES_ORG: "3000",
    				DISTR_CHAN: "10",
    				DIVISION: "00"
    			},
    			ORDER_HEADER_INX: {
    				DOC_TYPE: "X",
    				SALES_ORG: "X",
    				DISTR_CHAN: "X",
    				DIVISION: "X"
    			}
    		},
    		tables: {
    			ORDER_ITEMS_IN: {
    				row: {
    					ITM_NUMBER: "000010",
    					MATERIAL: "000000000050066128" as Number as String {format: "000000000000000000"},
    					PLANT: "3000",
    					TARGET_QTY: "1"
    				}
    			},
    			ORDER_ITEMS_INX: {
    				row: {
    					ITM_NUMBER: "000010",
    					MATERIAL: "X",
    					PLANT: "X",
    					TARGET_QTY: "X"
    				}
    			},
    			ORDER_PARTNERS: {
    				row: {
    					PARTN_ROLE: "WE",
    					PARTN_NUMB: "0000000448"
    				}
    			},
    			ORDER_SCHEDULES_IN: {
    				row: {
    					ITM_NUMBER: "000010",
    					SCHED_LINE: "0001",
    					REQ_QTY: "1"
    				}
    			},
    			ORDER_SCHEDULES_INX: {
    				row: {
    					ITM_NUMBER: "000010",
    					SCHED_LINE: "0001",
    					REQ_QTY: "X"
    				}
    			}
    		}
    	}
    }
  6. [Mule Palette (Mule パレット)]​ ビューから、​[SAP]​ を選択して ​[Synchronous Remote Function Call]​ 操作を ​[Transform Message]​ コンポーネントの横にドラッグします。

  7. SAP_Config​ というグローバル要素を作成し、接続情報を指定します。

  8. [Test Connection (接続をテスト)]​ をクリックして、Mule Runtime Engine が SAP インスタンスに接続できることを確認します。

  9. [Function Name (関数名)]​ に「​BAPI_SALESORDER_CREATEFROMDAT2​」と入力し、​[Content (コンテンツ)]​ に「​payload​」と入力します。

  10. [Mule Palette (Mule パレット)]​ ビューから ​[Core (コア)]​ を選択して ​[On Error Continue]​ コンポーネントを ​[Synchronous Remote Function Call]​ の下にドラッグします。

  11. [Mule Palette (Mule パレット)]​ ビューから、​[Core (コア)]​ を選択して ​[Logger]​ コンポーネントを ​[On Error Continue]​ にドラッグします。

  12. [Mule Palette (Mule パレット)]​ ビューから、​[Core (コア)]​ を選択して別の ​[Logger]​ コンポーネントを ​[Synchronous Remote Function Call]​ の横にドラッグします。

  13. [Message (メッセージ)]​ に「​payload.BAPI_SALESORDER_CREATEFROMDAT2.export.SALESDOCUMENT​」と入力します。

3 番目のフローを設定する

3 番目のフローは、トランザクション ID を作成してリストを取得します。非同期コールでは、応答を想定していないため、トランザクションを管理する別の方法が必要になります。特定の操作を使用して、非同期コールのトランザクションを管理します。このフローを設定する手順は、次のとおりです。

  1. [Mule Palette (Mule パレット)]​ ビューから、​[HTTP]​ を選択して ​[Listener]​ ソースをキャンバスにドラッグします。

  2. デフォルト値を使用してグローバル要素を設定します。

  3. [Listener (リスナー)]​ プロパティタブで、パスを ​/async-rfc​ に設定します。

  4. [Mule Palette (Mule パレット)]​ ビューから、​[SAP]​ を選択して ​[Start SAP transaction]​ 操作を ​[Listener]​ の横にドラッグします。

  5. SAP_Config​ というグローバル要素を作成し、接続情報を指定します。

  6. [Test Connection (接続をテスト)]​ をクリックして、Mule Runtime Engine が SAP インスタンスに接続できることを確認します。

  7. [Mule Palette (Mule パレット)]​ ビューから、​[Core (コア)]​ を選択して ​[Set Variable]​ トランスフォーマーを ​[Start SAP transaction]​ の横にドラッグします。

  8. [Name (名前)]​ に「​createdTransactionId​」と入力し、​[値 (コンテンツ)]​ に「​payload​」と入力します。

  9. [Transform message]​ コンポーネントを ​[Set Variable]​ の横にドラッグします。

    このメッセージのコンテンツにより、銀行のリストが取得されます。

  10. [Transform Message]​ コンポーネントの ​[Output (出力)]​ セクションで、括弧を次のテキストで上書きします。

    %dw 2.0
    output application/xml
    ---
    %dw 2.0
    output application/xml
    ---
    {
    	BAPI_BANK_GETLIST: {
    		"import": {
    			BANK_CTRY: "US",
    			MAX_ROWS: 0
    		}
    	}
    }
  11. [Mule Palette (Mule パレット)]​ ビューから、​[SAP]​ を選択して ​[Asynchronous Remote Function Call]​ 操作を ​[Transform Message]​ の横にドラッグします。

  12. SAP_Config​ というグローバル要素を作成し、接続情報を指定します。

  13. [Test Connection (接続をテスト)]​ をクリックして、Mule Runtime Engine が SAP インスタンスに接続できることを確認します。

  14. [Function Name (関数名)]​ に「​"BAPI_BANK_GETLIST"​」と入力し、​[Content (コンテンツ)]​ に「​payload​」と入力します。

  15. [Mule Palette (Mule パレット)]​ ビューから、​[SAP]​ を選択して ​[Confirm transaction]​ 操作を ​[Asynchronous Remote Function Call]​ の横にドラッグします。

  16. SAP_Config​ というグローバル要素を作成し、接続情報を指定します。

  17. [Test Connection (接続をテスト)]​ をクリックして、Mule Runtime Engine が SAP インスタンスに接続できることを確認します。

  18. [Transaction ID (TID) (トランザクション ID (TID))]​ に「​vars.createdTransactionId​」と入力します。

アプリケーションを実行する

Mule アプリケーションを実行する手順は、次のとおりです。

  1. [Run (実行)]​ > ​[Run as (別のユーザーとして実行)]​ > ​[Mule Application (Mule アプリケーション)]​ をクリックします。

  2. Web ブラウザーから次の URL を入力して最初のフローをテストします。

    http://localhost:8081/sync-rfc

    次のような要求の XML 出力が表示されます。

    <BAPI_BANK_GETDETAIL>
        <import>
            <BANKCOUNTRY>US</BANKCOUNTRY>
            <BANKKEY>021000089</BANKKEY>
        </import>
        <export>
            <BANK_ADDRESS>
                <BANK_NAME>Citibank</BANK_NAME>
                <REGION>NY</REGION>
                <STREET>Park Avenue</STREET>
                <CITY>New York</CITY>
                <SWIFT_CODE>CITIUSXX</SWIFT_CODE>
                <BANK_GROUP/>
                <POBK_CURAC/>
                <BANK_NO>021000089</BANK_NO>
                <POST_BANK/>
                <BANK_BRANCH>Manhattan</BANK_BRANCH>
                <ADDR_NO/>
            </BANK_ADDRESS>
            <BANK_DETAIL>
            <CREAT_DATE>2005-03-11</CREAT_DATE>
            <CREATOR>C5031845</CREATOR>
            <METHOD/>
            <FORMATTING/>
            <BANK_DELETE/>
            <IBAN_RULE/>
            <B2B_SUPPORTED>0</B2B_SUPPORTED>
            <COR1_SUPPORTED>0</COR1_SUPPORTED>
            <R_TRANSACTION_SUPPORTED>0</R_TRANSACTION_SUPPORTED>
            </BANK_DETAIL>
            <RETURN>
                <TYPE/>
                <ID/>
                <NUMBER>000</NUMBER>
                <MESSAGE/>
                <LOG_NO/>
                <LOG_MSG_NO>000000</LOG_MSG_NO>
                <MESSAGE_V1/>
                <MESSAGE_V2/>
                <MESSAGE_V3/>
                <MESSAGE_V4/>
                <PARAMETER/>
                <ROW>0</ROW>
                <FIELD/>
                <SYSTEM/>
            </RETURN>
        </export>
    </BAPI_BANK_GETDETAIL>
  3. Web ブラウザーから次の URL を入力して 2 番目のフローをテストします。

    http://localhost:8081/sync-mule-transaction

    次のような要求の XML 出力が表示されます。

    <BAPI_SALESORDER_CREATEFROMDAT2>
        <import>
        <BEHAVE_WHEN_ERROR/>
        <BINARY_RELATIONSHIPTYPE/>
        <CONVERT/>
        <INT_NUMBER_ASSIGNMENT/>
        <LOGIC_SWITCH>
        <PRICING/>
        <ATP_WRKMOD/>
        <SCHEDULING/>
        <NOSTRUCTURE/>
        <COND_HANDL/>
        <ADDR_CHECK/>
        </LOGIC_SWITCH>
        <ORDER_HEADER_IN>
        <REFOBJTYPE/>
        <REFOBJKEY/>
        <REFDOCTYPE/>
        <DOC_TYPE>TA</DOC_TYPE>
        <COLLECT_NO/>
        <SALES_ORG>3000</SALES_ORG>
        <DISTR_CHAN>10</DISTR_CHAN>
        <DIVISION>00</DIVISION>
        <SALES_GRP/>
        <SALES_OFF/>
        <REQ_DATE_H/>
        ....................
    
        <row id="2">
        <TYPE>S</TYPE>
        <ID>V1</ID>
        <NUMBER>311</NUMBER>
        <MESSAGE>Standard Order 23669 has been saved</MESSAGE>
        <LOG_NO/>
        <LOG_MSG_NO>000000</LOG_MSG_NO>
        <MESSAGE_V1>Standard Order</MESSAGE_V1>
        <MESSAGE_V2>23669</MESSAGE_V2>
        <MESSAGE_V3/>
        <MESSAGE_V4/>
        <PARAMETER>SALES_HEADER_IN</PARAMETER>
        <ROW>0</ROW>
        <FIELD/>
        <SYSTEM>T90CLNT090</SYSTEM>
        </row>
        </RETURN>
        </tables>
    </BAPI_SALESORDER_CREATEFROMDAT2>
  4. Web ブラウザーから次の URL を入力して 3 番目のフローをテストします。

    http://localhost:8081/async-rfc

    次のような要求の XML 出力が表示されます。

    <BAPI_BANK_GETLIST>
        <import>
            <BANK_CTRY>US</BANK_CTRY>
            <MAX_ROWS>0</MAX_ROWS>
        </import>
    </BAPI_BANK_GETLIST>

トランザクションを管理するための XML

トランザクションの管理の例のフローをすばやく読み込むには、Studio で次のコードを新しい Mule アプリケーションに貼り付けます。環境に合わせて値を変更してください。

<?xml version="1.0" encoding="UTF-8"?>

<mule xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core"
	xmlns:sap="http://www.mulesoft.org/schema/mule/sap" xmlns:http="http://www.mulesoft.org/schema/mule/http"
	xmlns="http://www.mulesoft.org/schema/mule/core"
	xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="
http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/sap http://www.mulesoft.org/schema/mule/sap/current/mule-sap.xsd">
	<configuration-properties file="mule-artifact.properties"/>
	<http:listener-config name="HTTP_Listener_config" doc:name="HTTP Listener config" doc:id="b89c52ef-8c07-4788-b87e-4c698d718341" >
		<http:listener-connection host="0.0.0.0" port="8081" />
	</http:listener-config>
	  <sap:sap-config name="SAP_Config" doc:name="SAP Config" doc:id="90c5a950-aefd-4fba-9e28-db3fa29767bb">
        <sap:simple-connection-provider-connection username="${sap.jcoUser}" password="${sap.jcoPasswd}"
                                                   systemNumber="${sap.jcoSysnr}" client="${sap.jcoClient}"
                                                   applicationServerHost="${sap.jcoAsHost}"/>
    </sap:sap-config>
	<flow name="bapi-srfc" doc:id="26ade074-48b4-47bb-a8e9-ca040034dee6" >
		<http:listener doc:name="Listener" doc:id="16a60ec9-f1c9-4a07-9a02-e7fcbb185a12" config-ref="HTTP_Listener_config" path="/sync-rfc"/>
				<ee:transform doc:name="Filter by country" doc:id="f285db36-da88-4e96-b7e6-c92acf4a8e5b" >
			<ee:message >
				<ee:set-payload ><![CDATA[%dw 2.0
output application/xml
---
{
	BAPI_BANK_GETLIST: {
		"import": {
			BANK_CTRY: "US",
			MAX_ROWS: 0
		}
	}
}]]></ee:set-payload>
			</ee:message>
		</ee:transform>
		<sap:sync-rfc doc:name="Synchronous Remote Function Call" doc:id="cd5a8815-c5be-4bcc-aaf5-77c90090d124" config-ref="SAP_Config" key="BAPI_BANK_GETLIST"/>
		<ee:transform doc:name="Filter first result" doc:id="55eecae1-4e9a-4e5b-93f2-1633bf14dbc9" >
			<ee:message >
				<ee:set-payload ><![CDATA[%dw 2.0
output application/xml
---
{
	BAPI_BANK_GETDETAIL: {
		"import" : {
			BANKCOUNTRY: payload.BAPI_BANK_GETLIST.tables.BANK_LIST.*row[0].BANK_CTRY,
			BANKKEY: payload.BAPI_BANK_GETLIST.tables.BANK_LIST.*row[0].BANK_KEY
		}
	}
}]]></ee:set-payload>
			</ee:message>
		</ee:transform>
		<sap:sync-rfc doc:name="Synchronous Remote Function Call" doc:id="10404fb9-f887-4cea-9a64-32f8559814d2" config-ref="SAP_Config" key='#["BAPI_BANK_GETDETAIL"]'/>
		<logger level="INFO" doc:name="Logger" doc:id="f65b06a8-ff33-4906-9bd0-6c3895e5e0cf" message="#[payload]"/>
		</flow>
		<flow name="bapi-mule-transaction" doc:id="f47687b3-6e2b-4c22-b4b1-900f9ac5a078" >
		<http:listener doc:name="Listener" doc:id="c16d6ef3-4601-4260-b82f-37f35540fdd3" config-ref="HTTP_Listener_config" path="/sync-mule-transaction"/>
		<ee:transform doc:name="Transform Message" doc:id="5b07e4f5-12bb-4ed2-941f-599789e5e04f">
			<ee:message>
				<ee:set-payload><![CDATA[%dw 2.0
output application/xml
---
{
	BAPI_SALESORDER_CREATEFROMDAT2: {
		"import": {
			ORDER_HEADER_IN: {
				DOC_TYPE: "TA",
				SALES_ORG: "3000",
				DISTR_CHAN: "10",
				DIVISION: "00"
			},
			ORDER_HEADER_INX: {
				DOC_TYPE: "X",
				SALES_ORG: "X",
				DISTR_CHAN: "X",
				DIVISION: "X"
			}
		},
		tables: {
			ORDER_ITEMS_IN: {
				row: {
					ITM_NUMBER: "000010",
					MATERIAL: "000000000050066128" as Number as String {format: "000000000000000000"},
					PLANT: "3000",
					TARGET_QTY: "1"
				}
			},
			ORDER_ITEMS_INX: {
				row: {
					ITM_NUMBER: "000010",
					MATERIAL: "X",
					PLANT: "X",
					TARGET_QTY: "X"
				}
			},
			ORDER_PARTNERS: {
				row: {
					PARTN_ROLE: "WE",
					PARTN_NUMB: "0000000448"
				}
			},
			ORDER_SCHEDULES_IN: {
				row: {
					ITM_NUMBER: "000010",
					SCHED_LINE: "0001",
					REQ_QTY: "1"
				}
			},
			ORDER_SCHEDULES_INX: {
				row: {
					ITM_NUMBER: "000010",
					SCHED_LINE: "0001",
					REQ_QTY: "X"
				}
			}
		}
	}
}]]></ee:set-payload>
			</ee:message>
		</ee:transform>
		<try doc:name="Try" doc:id="a5e37154-87b2-495a-9576-509d21d2d234" transactionalAction="ALWAYS_BEGIN">
			<sap:sync-rfc doc:name="Synchronous Remote Function Call" doc:id="8af8b804-57d2-4b44-a0d2-7a50d7018573" config-ref="SAP_Config" key="BAPI_SALESORDER_CREATEFROMDAT2"/>
			<error-handler>
				<on-error-continue enableNotifications="true" logException="true" doc:name="On Error Continue" doc:id="144141a8-7941-41f3-837b-40a2e25905be">
					<logger level="INFO" doc:name="Logger" doc:id="50a3d4c1-1a01-4a8b-ac9d-cdb354ec8ddb" message="Bapi Error" />
				</on-error-continue>
			</error-handler>
		</try>
		<logger level="INFO" doc:name="Logger" doc:id="36097fa1-0a5d-44fc-9432-b0ef048a85c7" message="#[payload.BAPI_SALESORDER_CREATEFROMDAT2.export.SALESDOCUMENT]"/>
	</flow>
	<flow name="async-rfc" doc:id="ba757987-1e8c-47d5-8168-23043948ae8f" >
		<http:listener doc:name="Listener" doc:id="ee6d3bf1-3474-4d38-80f9-2651f374d876" config-ref="HTTP_Listener_config" path="/async-rfc"/>
		<sap:create-transaction-id doc:name="Start SAP transaction" doc:id="3bfd77a6-3397-45cb-b9c6-6450f3f010c8" config-ref="SAP_Config"/>
		<set-variable value="#[payload]" doc:name="Set Variable" doc:id="a20de9fb-61ec-4d90-8da7-fee910da7d49" variableName="createdTransactionId"/>
		<ee:transform doc:name="Transform Message" doc:id="7c000a34-c035-470b-8ff3-546e8156ece4" >
			<ee:message >
				<ee:set-payload ><![CDATA[%dw 2.0
output application/xml
---
{
	BAPI_BANK_GETLIST: {
		"import": {
			BANK_CTRY: "US",
			MAX_ROWS: 0
		}
	}
}]]></ee:set-payload>
			</ee:message>
		</ee:transform>
		<sap:async-rfc doc:name="Asynchronous Remote Function Call" doc:id="a45ec861-be1b-4c16-8d3e-ef83dab24cea" config-ref="SAP_Config" key='#["BAPI_BANK_GETLIST"]' transactionId="#[vars.createdTransactionId]"/>
		<sap:confirm-transaction-id doc:name="Confirm transaction" doc:id="939e882d-9416-40c0-8b5d-85871e264aa6" config-ref="SAP_Config" transactionId="#[vars.createdTransactionId]"/>
	</flow>
</mule>

複数のゲートウェイの設定

この例では、1 つのゲートウェイ接続ではなく、負荷を分散してパフォーマンスを向上させるために複数のゲートウェイ接続を使用して、メッセージサーバーを設定する Mule アプリケーションを作成する方法を示します。

次のスクリーンショットは、この例の Studio フローを示しています。

複数のゲートウェイを使用してメッセージサーバーを設定するための Studio フロー

最初のフローを設定する

最初のフローは、メッセージサーバーを ​Document listener​ ソースに渡します。このフローを設定する手順は、次のとおりです。

  1. Anypoint Studio で、新しい Mule プロジェクトを作成します。

  2. [Mule Palette (Mule パレット)]​ ビューから、​[SAP]​ を選択して ​[Document listener]​ ソースをキャンバスにドラッグします。

  3. Document listener​ ソースのグローバル要素を設定し、必須項目に入力します。

  4. [Document listener]​ プロパティタブで、次の項目を設定します。

    項目

    Gateway host (ゲートウェイホスト)

    54.160.77.19

    Gateway service (ゲートウェイサービス)

    3300

    Program id (プログラム ID)

    MULE11_IDOC_PID

    Connection count (接続数)

    1

  5. [Mule Palette (Mule パレット)]​ ビューから、​[Core (コア)]​ を選択して ​[Logger]​ コンポーネントをキャンバス上の ​[Document listener]​ の横にドラッグします。

2 番目のフローを設定する

2 番目のフローは、最初の個別のゲートウェイをトリガーします。このフローを設定する手順は、次のとおりです。

  1. [Mule Palette (Mule パレット)]​ ビューから、​[HTTP] > [Listener]​ ソースをキャンバスにドラッグします。

  2. デフォルト値を使用してグローバル要素を設定します。

  3. [Listener (リスナー)]​ プロパティタブで、パスを ​/C​ に設定します。

  4. [Mule Palette (Mule パレット)]​ ビューから、​[Core (コア)]​ を選択して ​[Transform Message]​ コンポーネントを ​[Listener]​ ソースの横にドラッグします。

  5. [Transform Message]​ コンポーネントの ​[Output (出力)]​ セクションで、括弧を次のテキストで上書きします。

    %dw 2.0
    output application/xml
    ---
    {
      ZMMFM_TRIGGER_IDOC_MATMAS: {
        "import": {
      IV_MTYP: "MATMAS"
    ,
    IV_OBJ: "23"
    ,
    IV_SYS: "MULE11_LS"
    }
    ,
    export: {
      EV_RET: "0"
    },export: {
      EV_OBJ: "0000000003526552"
    },export: null,changing: null,
    tables: {
      T_MSG: null
    },
      }
    }
  6. [Mule Palette (Mule パレット)]​ ビューから、​[SAP]​ を選択して ​[Synchronous Remote Function Call]​ 操作をキャンバスにドラッグします。

  7. Synchronous Remote Function Call​ 操作のグローバル要素を設定し、必須項目に入力します。

  8. [Synchronous Remote Function Call]​ プロパティタブで、次の項目を設定します。

    項目

    Function Name (関数名)

    "ZMMFM_TRIGGER_IDOC_MATMAS"

    Content (コンテンツ)

    payload

  9. [Mule Palette (Mule パレット)]​ ビューから、​[Core (コア)]​ を選択して ​[Transform Message]​ コンポーネントを ​[Synchronous Remote Function Call]​ 操作の横にドラッグします。

  10. [Transform Message]​ コンポーネントの ​[Output (出力)]​ セクションで、括弧を次のテキストで上書きします。

    %dw 2.0
    output application/json
    ---
    payload

3 番目のフローを設定する

3 番目のフローは、2 番目の個別のゲートウェイをトリガーします。このフローを設定する手順は、次のとおりです。

  1. [Mule Palette (Mule パレット)]​ ビューから、​[HTTP] > [Listener]​ ソースをキャンバスにドラッグします。

  2. デフォルト値を使用してグローバル要素を設定します。

  3. [Listener (リスナー)]​ プロパティタブで、パスを ​/d​ に設定します。

  4. [Mule Palette (Mule パレット)]​ ビューから、​[Core (コア)]​ を選択して ​[Transform Message]​ コンポーネントを ​[Listener]​ ソースの横にドラッグします。

  5. [Transform Message]​ コンポーネントの ​[Output (出力)]​ セクションで、括弧を次のテキストで上書きします。

    %dw 2.0
    output application/xml
    ---
    {
      ZMMFM_TRIGGER_IDOC_MATMAS: {
        "import": {
      IV_MTYP: "MATMAS"
    ,
    IV_OBJ: "23"
    ,
    IV_SYS: "MULE11_LS"
    }
    ,
    export: {
      EV_RET: "0"
    },export: {
      EV_OBJ: "0000000003526552"
    },export: null,changing: null,
    tables: {
      T_MSG: null
    },
      }
    }
  6. [Mule Palette (Mule パレット)]​ ビューから、​[SAP]​ を選択して ​[Synchronous Remote Function Call]​ 操作をキャンバスにドラッグします。

  7. Synchronous Remote Function Call​ 操作のグローバル要素を設定し、必須項目に入力します。

  8. [Synchronous Remote Function Call]​ プロパティタブで、次の項目を設定します。

    項目

    Function Name (関数名)

    "ZMMFM_TRIGGER_IDOC_MATMAS"

    Content (コンテンツ)

    payload

  9. [Mule Palette (Mule パレット)]​ ビューから、​[Core (コア)]​ を選択して ​[Transform Message]​ コンポーネントを ​[Synchronous Remote Function Call]​ 操作の横にドラッグします。

  10. [Transform Message]​ コンポーネントの ​[Output (出力)]​ セクションで、括弧を次のテキストで上書きします。

    %dw 2.0
    output application/json
    ---
    payload

アプリケーションを実行する

Mule アプリケーションを実行する手順は、次のとおりです。

  1. [Run (実行)]​ > ​[Run as (別のユーザーとして実行)]​ > ​[Mule Application (Mule アプリケーション)]​ をクリックします。

複数のゲートウェイを設定する XML

Studio で次のコードを新しい Mule アプリケーションに貼り付ければ、複数のゲートウェイの設定例のフローをすばやく読み込むことができます。環境に合わせて値を変更してください。

<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:sap="http://www.mulesoft.org/schema/mule/sap" xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core"
	xmlns:http="http://www.mulesoft.org/schema/mule/http"
	xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd
http://www.mulesoft.org/schema/mule/sap http://www.mulesoft.org/schema/mule/sap/current/mule-sap.xsd">
	<http:listener-config name="HTTP_Listener_config" doc:name="HTTP Listener config" doc:id="5d46abaa-dc40-457b-a7df-ce54fc8f3a43" >
		<http:listener-connection host="0.0.0.0" port="8081" />
	</http:listener-config>
	<sap:sap-config name="SAP_Config_C" doc:name="SAP Config" doc:id="78a4da95-2381-4bd1-919c-fc86ae23c134" >
		<sap:simple-connection-provider-connection systemNumber="02" client="800" applicationServerHost="34.225.79.228" />
	</sap:sap-config>
	<sap:sap-config name="SAP_Config_D" doc:name="SAP Config" doc:id="0f026b1e-96f8-4ef8-ae46-f4677b1f95ae" >
		<sap:simple-connection-provider-connection systemNumber="03" client="800" applicationServerHost="44.214.23.92" />
	</sap:sap-config>
	<sap:sap-config name="SAP_Config_B" doc:name="SAP Config" doc:id="829dbb29-682b-443d-b85c-47ad20d7c134" >
		<sap:simple-connection-provider-connection systemNumber="00" client="800" applicationServerHost="54.160.77.19"/>
	</sap:sap-config>
	<flow name="sapgatewaytestFlow" doc:id="2f660909-8fef-4872-85d0-efd172ac47fe" >
		<sap:document-listener doc:name="Document listener" doc:id="36de92d6-8796-46f6-b280-ac288a57b343" config-ref="SAP_Config_B" gatewayHost="54.160.77.19" gatewayService="3300" programID="MULE11_IDOC_PID"/>
		<logger level="INFO" doc:name="Logger" doc:id="51941f3f-a26e-4f60-99bf-637ce7f39e12" message="#[payload]"/>
	</flow>
	<flow name="sapgatewaytestFlowC" doc:id="4be0cd2f-197c-4cd2-afa5-5833b42399d2" >
		<http:listener doc:name="Listener" doc:id="3561b7af-6a02-4497-b02a-09e5dcc71f46" config-ref="HTTP_Listener_config" path="/c"/>
		<ee:transform doc:name="Transform Message" doc:id="71afc270-fc02-4fd8-bf82-a97a3eac86ac" >
			<ee:message >
				<ee:set-payload ><![CDATA[%dw 2.0
output application/xml
---
{
  ZMMFM_TRIGGER_IDOC_MATMAS: {
    "import": {
  IV_MTYP: "MATMAS"
,
IV_OBJ: "23"
,
IV_SYS: "MULE11_LS"
}
,
export: {
  EV_RET: "0"
},export: {
  EV_OBJ: "0000000003526552"
},export: null,changing: null,
tables: {
  T_MSG: null
},
  }
}]]></ee:set-payload>
			</ee:message>
		</ee:transform>
		<sap:sync-rfc doc:name="Synchronous Remote Function Call" doc:id="d3b152e0-db3a-4745-a9fe-60cc6ade0581" config-ref="SAP_Config_C" key='#["ZMMFM_TRIGGER_IDOC_MATMAS"]'/>
		<ee:transform doc:name="Transform Message" doc:id="387d00c7-efbf-4675-9f50-5fbafe592ec0" >
			<ee:message >
				<ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
payload]]></ee:set-payload>
			</ee:message>
		</ee:transform>
	</flow>
	<flow name="sapgatewaytestFlowD" doc:id="3b2c4526-74e7-4a21-b18a-f11ba2f86beb" >
		<http:listener doc:name="Listener" doc:id="fa1567ab-1ded-415e-8dd2-8a0833451176" config-ref="HTTP_Listener_config" path="/d"/>
		<ee:transform doc:name="Transform Message" doc:id="b71d390e-5de2-435d-b0b0-51efb6f70b60" >
			<ee:message >
				<ee:set-payload ><![CDATA[%dw 2.0
output application/xml
---
{
  ZMMFM_TRIGGER_IDOC_MATMAS: {
    "import": {
  IV_MTYP: "MATMAS"
,
IV_OBJ: "23"
,
IV_SYS: "MULE11_LS"
}
,
export: {
  EV_RET: "0"
},export: {
  EV_OBJ: "0000000003526552"
},export: null,changing: null,
tables: {
  T_MSG: null
},
  }
}]]></ee:set-payload>
			</ee:message>
		</ee:transform>
		<sap:sync-rfc doc:name="Synchronous Remote Function Call" doc:id="edfae6dd-edc3-4e56-8a26-d3ad1b51db04" config-ref="SAP_Config_D" key='#["ZMMFM_TRIGGER_IDOC_MATMAS"]'/>
		<ee:transform doc:name="Transform Message" doc:id="fd6eb7f2-0c9f-43c6-842d-02be2216620a" >
			<ee:message >
				<ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
payload]]></ee:set-payload>
			</ee:message>
		</ee:transform>
	</flow>
</mule>