Mule 4 SAP Connector 5.9 Örnekleri

MuleSoft’un SAP Sertifikalı konnektörü, On-premises ve Cloud uygulamalarının RFC, IDoc veya BAPI aracılığıyla SAP ERP Merkezi Bileşeni (ECC) ve RFC aracılığıyla SAP S/4 Hana ile entegre edilmesini sağlar.
SAP, şirketinizin tüm ana verilerini tutan bir ERP (Enterprise Resource Planning) sistemidir. SAP ile sistemlerinizi entegre etmek genelde zordur ancak MuleSoft’un SAP konnektörü ile kolay hale gelir. Konnektörü kullanarak, SAP hakkında çok az bilgi sahibi veya hiç bilgi sahibi olmadan bir SAP entegrasyonu geliştirebilirsiniz.
SAP Connector Konfigürasyonu ve SAP’ye IDoc Gönderme
Bir önceki blog yazımızda Anypoint Exchange üzerinden SAP Connector ’ünü nasıl Mule Palette’e ekleyebileceğimizi detaylandırarak bahsetmiştik. Örneklere başlamadan önce “SAP Connector 5.9 XML ve Maven Support — Mule 4” blog sayfasını ziyaret edebilirsiniz.
SAP’ye IDoc gönderen bir Mule uygulamasının nasıl oluşturulacağını beraber inceleyelim. Aşağıdaki ekran görüntüsü Anypoint Studio akışını göstermektedir:
HTTP Listener Konfigürasyonu
HTTP Listener’ı localhost 8081 deki “/sendIDoc” path’ini tetikleyerek Mule flow’u başlatalım.
- Anypoint Studio’da yeni bir Mule projesi oluşturun.
- Mule Palette’te yer alan HTTP > Listener kaynağını canvas’a sürükleyin.
- Global element’i varsayılan değerlerini kullanarak yapılandırın.
- Properties sekmesinde path’i /sendIDoc olarak ayarlayın.
Transform Message Bileşenini Ekleme
IDoc verisini XML’e dönüştürmek için Transform Message bileşenini yapılandırın:
- Mule Palette’te yer alan Transform Message bileşenini seçin ve HTTP Listiner kaynağının yanına sürükleyin.
- Aşağıdaki metni Transform Message bileşeni içerisine yapıştırın
%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>
<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”)
Mule Palette yer alan SAP’yi tıklayabilir veya “Ara” kısmına SAP yazarak tüm SAP bileşenlerini listeleyebilirsiniz.
SAP Connector Ekleme ve Yapılandırma
- Mule Pallette yer alan SAP bileşenlerinden “Send IDoc” seçip Basic Setting > Connector Configuration da yer alan
simgisine tıklayalım.
2. SAP Config penceresi altında yer alan “Jco Library”, “IDoc Library“ ve “Jco Native Library” için “Configure” butonuna tıklayıp Dependencyleri tanımlayın,
3. “Add Maven dependency” butonu tıklayın,
4. Her bir Library için aşağıdaki dependencyleri kopyalayıp text alanına yapıştırın,
Jco Library:
<dependency>
<groupId>com.sap.conn.jco</groupId>
<artifactId>com.sap.conn.jco.sapjco3</artifactId>
<version>2024.01.04</version>
<type>jar</type>
</dependency>
IDoc Library:
<dependency>
<groupId>com.sap.conn.idoc</groupId>
<artifactId>com.sap.conn.idoc.sapidoc3</artifactId>
<version>2024.01.04</version>
<type>jar</type>
</dependency>
Jco Native Library:
<dependency>
<groupId>com.sap.conn.jco</groupId>
<artifactId>libsapjco3</artifactId>
<version>2024.01.04.1</version>
<type>jnilib</type>
</dependency>
5. “Finish” Butonuna tıklayıp konektör tanımlama işlemini bitirin.
Send IDoc Yapılandırma
Send IDoc işlemi, remote function call (RFC) üzerinden SAP’ye bir IDoc gönderir:
- SAP bileşenini seçin
2. “IDoc Name” Alanını “MATMAS01” olarak doldurun
3. “Content” Alanını “payload” olarak doldurun
Son olarak “sap_send_idocFlow” unun sonuna bir logger bileşeni ekleyin.
App’i Çalıştırın
Mule App’ini çalıştırmak için:
- Run > Run as > Mule Application Tıklayın,
- SAP ekiplerinden aldığınız Configuration bilgilerini Config alanı altında doldurun ve test edin.
3. Bir web tarayıcısından veya postman ile aşağıdaki URL için internal ID, first name, and last name alanlarını query parameters olarak girerek uygulamayı test edin:
http://localhost:8081/sendIDoc
SAP’ye IDoc Göndermek için XML Detayları
IDoc örneği gönderme akışını hızlı bir şekilde eklemek için bu kodu Studio’daki yeni bir Mule uygulamasına yapıştırın. Değerleri ortamınızı yansıtacak şekilde değiştirin.
<?xml version=”1.0" encoding=”UTF-8"?>
<mule xmlns:http=”http://www.mulesoft.org/schema/mule/http" 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
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd">
<http:listener-config name=”Sap_Listener” doc:name=”HTTP Listener config” doc:id=”16245c51-e02a-4731-a22a-e25df392661f” >
<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=”1831eebe-18b2–4677–93b6-cce614e19cf1" >
<sap:simple-connection-provider-connection />
</sap:sap-config>
<flow name=”sap_send_idocFlow” doc:id=”d62d51b6–0392–4741-b7f6–61ae2124c515" >
<http:listener doc:name=”Listener” doc:id=”23660a72-a80a-4e23-b6e9–90e9b14284bd” config-ref=”Sap_Listener” path=”/” />
<ee:transform doc:name=”Transform Message” doc:id=”afa659eb-60f4–4e45–93f4–8208bd79c0f6">
<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=”f54db4b3–68f6–4e09–87e6–418bc75be162" config-ref=”SAP_Config” key=”MATMAS01"/>
<logger level=”INFO” doc:name=”Logger” doc:id=”1c4f09a4-b4ee-4226-ad44–41bd91bdf317" />
</flow>
</mule>
Gelen IDoc İsteğini Alma/Dinleme
Bu örnekte, harici bir SAP sisteminden gelen IDoc isteklerini bekleyen bir Mule uygulamasının nasıl oluşturulacağı gösterilmektedir. Uygulama bir RFC sunucusu gibi davranır ve kendisini bir SAP ağ geçidi olarak kaydeder. Uygulama bir IDoc isteği aldığında, SAP’den IDoc oluşturmasını istemek için remote function (RFC) çağrısı kullanır. Ardından IDoc içeriğini Studio konsoluna kaydeder.
Aşağıdaki ekran görüntüsü bu örnek için Studio akışlarını göstermektedir:
Flow Yapılandırma — 1
İlk akış, IDoc isteklerini harici bir SAP sistemine göndermek için bir BAPI işlevini kullanır. Bu akışı yapılandırmak için aşağıdaki adımları takip edelim:
- Anypoint Studio’da yeni bir Mule projesi oluşturun,
- Mule Paleti görünümünden HTTP Listener’ı tuvale sürükleyin,
- Global öğeyi varsayılan değerleri kullanarak yapılandırın,
- HTTP Listener özellikleri sekmesinde path /trigger olarak ayarlayın.
- HTTP Listener yanına Transform Massage bileşeni ekleyin. Bu mesajın içeriği IDoc isteklerini alan BAPI fonksiyonunun yüküdür.
- Transform Message içerisine aşağıdaki text’i ekleyin;
%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 Paleti görünümünden SAP’yi seçin ve Synchronous Remote Function Call işlemini Transform Message bileşeninin yanına sürükleyin.
8. SAP_Config adında bir global öğe oluşturun ve bağlantı bilgilerini belirtin.
9. SAP’ye bağlanabildiğini doğrulamak için Test Connection’a tıklayın.
Flow Yapılandırma — 2
İkinci akış, her yeni IDoc isteğinin içeriğini Studio konsoluna kaydeder. Bu akışı yapılandırmak için aşağıdaki adımları takip edelim:
- Mule Paleti görünümünden SAP’yi seçin ve Document Listener tuvale sürükleyin,
- Kaynak için yeni bir genel öğe oluşturun ve gerekli bilgileri belirtin, Document Listener özelliklerini aşağıdaki değerlerle yapılandırın:
Gateway host: Host running the gateway server
Gateway service: 3200
Program id: MULE01_PID
Connection count: 1
Idoc type filter regex: MATMAS01
** Not:
Gateway host, Gateway service, ve Program id hizmet verdiğiniz şirketin SAP ekibinden alınmalıdır. Yapılandırmalar veya kimlik bilgileri gibi SAP örneğiyle ilgili her şey hizmet verdiğiniz şirketin SAP ekibinden alınmalıdır.
3. Logger ekleyin,
4. File > Save tıklayın ve flow’unuzu kaydedin.
App’i Çalıştırın
Mule app’ini çalıştırmak için:
- Run > Run as > Mule Application tıklayın,
- Bir web tarayıcısından aşağıdaki URL’yi girerek uygulamayı test edin:
IDoc Request için XML Detayları
IDoc örneği gönderme akışını hızlı bir şekilde eklemek için bu kodu Studio’daki yeni bir Mule uygulamasına yapıştırın. Değerleri ortamınızı yansıtacak şekilde değiştirin.
<?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">
<flow name=”sap2Flow” doc:id=”a3f848a6–740f-4dd4–8ac4-babd9df5f2cc” >
<http:listener doc:name=”Listener” doc:id=”d815e587–35c7–4ffc-a4ea-34aef43eef1d” config-ref=”Sap_Listener” path=”/trigger”/>
<ee:transform doc:name=”Transform Message” doc:id=”5ebbb1e5-c3cd-4319–89fa-b04b6a75be00" >
<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:synchronous-remote-function-call doc:name=”Synchronous Remote Function Call” doc:id=”e356ed83-c8bf-4836-b09f-418e9751561d” config-ref=”SAP_Config”/>
</flow>
<flow name=”sap2Flow1" doc:id=”53c69e47-b828–4a47–9e32–45bf1a9f859e”>
<sap:document-listener doc:name=”Document listener” doc:id=”b17b6e4b-ea9a-4dc1–9528-b43c822ff498" config-ref=”SAP_Config”/>
<logger level=”INFO” doc:name=”Logger” doc:id=”52bcc0a6–8f08–4236-a3b2-b4f9f51aee22" />
</flow>
</mule>
Studio Konsolundaki Örnek Response:
<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 Function
SAP Function kullanan bir Mule uygulamasının nasıl oluşturulacağını beraber inceleyelim.
Bu örnekte bir fonksiyon başka bir Mule akışından veya SAP GUI’den tetiklendiğinde bir sonuç görüntüler. Aşağıdaki ekran görüntüsü Studio akışını göstermektedir:
Flow oluşturmak için:
- Mule Paleti görünümünden SAP’yi seçin ve SAP Function’ı tuvale (canvas) sürükleyin,
- SAP_Inbound adında bir global öğe oluşturun ve bağlantı bilgilerini belirtin, Properties sekmesinde gerekli alanları yapılandırın (Global Element),
- SAP Function genel bilgilerini aşağıdaki (veya Ekran alıntısı) gibi doldurun,
Connector Configuration: SAP_Inbound
Gateway host: gateway.host.com
Gateway service: 3200
Program id: MULE01_API_PID
Connection count: 1
4. Mule Paleti görünümünden Core’u seçin ve Transform Message bileşenini Function listener sağına sürükleyin,
5. Meta data’ya göre ayrıntıları belirtin. Örneğin:
6. File > Save tıklayıp kaydedin,
7. Run > Run as > Mule Application tıklayıp çalıştırın.
SAP Fonksiyonu Kullanmak/Dinlemek için XML Detayları
Akışı hızlı bir şekilde eklemek için aşağıdaki XML kodunu Studio’daki yeni bir Mule uygulamasına yapıştırın. Değerleri ortamınızı yansıtacak şekilde değiştirin ve kolaylıkla inceleyip test edin.
<?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=”bb89b073–57f3–4a66–9c8d-35db0e29bde5">
<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=”baff72c8–6977–4538–91ce-59969815de59">
<sap:function-listener
doc:name=”Function listener”
doc:id=”4499dd70–891d-4659–9706–72a2153add1d”
config-ref=”SAP_Inbound” gatewayHost=”gateway.host.com”
gatewayService=”3200" programID=”MULE01_API_PID” />
<ee:transform doc:name=”Transform Message”
doc:id=”5614a2c1–129e-4bc6–887b-8f3d74568d70">
<ee:message>
<ee:set-payload>
<![CDATA[%dw 2.0
output application/java
— -
{
}]]>
</ee:set-payload>
</ee:message>
</ee:transform>
</flow>
</mule>
Transaction Yönetimi
Bu örnek, banka kayıtlarını işleyen ve bu işlemleri yöneten standart BAPI’ler üzerinde iki çağrı gerçekleştirir.
Aşağıdaki ekran görüntüleri bu örnek için Studio akışlarını göstermektedir:
Flow — 1
Flow — 2
Flow — 3
Akış Yapılandırma — 1
İlk akış, Amerika Birleşik Devletleri’ndeki mevcut bankaların bir listesini alır, ilk sonucu filtreler ve banka hakkında bilgi getirir. SAP’ye yapılan sorgular için Try bloğu kullanımı gerekli değildir. Bu akışı yapılandırmak için:
- Anypoint Studio’da yeni bir Mule projesi oluşturun,
- Mule Paleti görünümünden HTTP Listener bileşenini tuvale (canvas) sürükleyin,
- Global elementi varsayılan değerleri kullanarak yapılandırın,
- HTTP Listener’ın path ini /sync-rfc olarak ayarlayın,
- HTTP Listener’ın yanına Transform Message sürükleyin, Bu mesajın içeriği bankaları ülkeye göre filtreler
- Transform Message bileşeninin Output bölümüne aşağıdaki text’i kopyalayın:
%dw 2.0
output application/xml
— -
{
BAPI_BANK_GETLIST: {
“import”: {
BANK_CTRY: “US”,
MAX_ROWS: 0
}
}
}
7. Mule Paleti görünümünden SAP’yi seçin ve Synchronous Remote Function Call işlemini Transform Message bileşeninin yanına sürükleyin,
8. SAP_Config adında bir global element oluşturun ve bağlantı bilgilerini belirtin,
9. SAP örneğine bağlanabildiğini doğrulamak için Bağlantıyı Test et’e tıklayın,
10. Function Name alanını “BAPI_BANK_GETLIST”, Content alanını “payload” olarak girin,
11. Transform Message bileşeninin yanına Synchronous Remote Function Call’u sürükleyin, Bu mesajın içeriği ilk sonucu filtreler,
12. Transform Message’ın Output bölümüne aşağıdaki text’i kopyalayın;
%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 Paleti görünümünden SAP’yi seçin ve başka bir Synchronous Remote Function Call işlemini Transform Message bileşeninin yanına sürükleyin,
14. SAP_Config adında bir global element oluşturun ve bağlantı bilgilerini belirtin,
15. SAP örneğine bağlanabildiğini doğrulamak için Bağlantıyı Test et’e tıklayın,
16. Function Name alanını “BAPI_BANK_GETDETAIL”, Content alanını “payload” olarak girin,
17. Synchronous Remote Function Call bileşeninin yanına logger ekleyin.
Akış Yapılandırma — 2
İkinci akış verilerden bir satış siparişi oluşturur. Bir işlem oluşturmak için BAPI çağrısına TRY bloğu eklemelisiniz, aksi takdirde değişiklik SAP’yi etkilemez. Bu akışı yapılandırmak için:
- Mule Paleti görünümünden HTTP Listener bileşenini tuvale (canvas) sürükleyin,
- Global elementi varsayılan değerleri kullanarak yapılandırın,
- HTTP Listener’ın path ini /sync-mule-transaction olarak ayarlayın,
- HTTP Listener’ın yanına Transform Message sürükleyin, Bu mesajın içeriği bankaları ülkeye göre filtreler
- Transform Message bileşeninin Output bölümüne aşağıdaki text’i kopyalayın:
%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 Paleti görünümünden SAP’yi seçin ve başka bir Synchronous Remote Function Call işlemini Transform Message bileşeninin yanına sürükleyin,
7. SAP_Config adında bir global element oluşturun ve bağlantı bilgilerini belirtin,
8. SAP örneğine bağlanabildiğini doğrulamak için Bağlantıyı Test et’e tıklayın,
9. Function Name alanını “BAPI_SALESORDER_CREATEFROMDAT2”, Content alanını “payload” olarak girin,
10. Mule Paleti görünümünden Core seçin ve Synchronous Remote Function Call altına On Error Continue bilşenini sürükleyin,
11. Mule Paleti görünümünden Core seçin ve On Error Continue bileşeninin yanına Logger bileşenini sürükleyin,
12. Mule Paleti görünümünden Core seçin ve Synchronous Remote Function Call yanına Logger bileşenini sürükleyin, Logger için Message alanına “payload.BAPI_SALESORDER_CREATEFROMDAT2.export.SALESDOCUMENT” kopyalın.
Akış Yapılandırma — 3
Üçüncü akış transaction ID oluşturur ve bir liste alır. Asynchronous call bir yanıt beklemez ve transaction yönetmek için farklı bir yol gerektirir. . Asynchronous call işlemlerini yönetmek için özel işlemler kullanın. Bu akışı yapılandırmak için:
- Mule Paleti görünümünden HTTP Listener bileşenini tuvale (canvas) sürükleyin,
- Global elementi varsayılan değerleri kullanarak yapılandırın,
- HTTP Listener’ın path ini “/async-rfc” olarak ayarlayın,
- HTTP Listener’ın yanına Start SAP transaction bileşenini sürükleyin,
- SAP_Config adında bir global element oluşturun ve bağlantı bilgilerini belirtin,
- SAP örneğine bağlanabildiğini doğrulamak için Bağlantıyı Test et’e tıklayın,
- Mule Paleti görünümünden Core seçin ve Start SAP transaction bileşeninin yanına Set Payload bileşenini sürükleyin,
- Name alanı için “createdTransactionId” değerini, Value alanı için “payload” değerlerini girin,
- Set Variable bileşeninin yanına Transform Message bileşenini ekleyin, Bu mesajın içeriği bankaların bir listesini alır
- Transform Message bileşeninin Output bölümüne aşağıdaki text’i kopyalayın:
%dw 2.0
output application/xml
— -
{
BAPI_BANK_GETLIST: {
“import”: {
BANK_CTRY: “US”,
MAX_ROWS: 0
}
}
}
11. Mule Paleti görünümünden SAP’yi seçin ve Asynchronous Remote Function Call işlemini Transform Message bileşeninin yanına sürükleyin,
12. SAP_Config adında bir global element oluşturun ve bağlantı bilgilerini belirtin,
13. SAP örneğine bağlanabildiğini doğrulamak için Bağlantıyı Test et’e tıklayın,
14. Function Name alanını “”BAPI_BANK_GETLIST”, Content alanını “payload” olarak girin,
15. Mule Paleti görünümünden SAP’yi seçin ve Confirm transaction işlemini Asynchronous Remote Function Call bileşeninin yanına sürükleyin,
16. SAP_Config adında bir global element oluşturun ve bağlantı bilgilerini belirtin,
17. SAP örneğine bağlanabildiğini doğrulamak için Bağlantıyı Test et’e tıklayın,
18. Transaction ID (TID) için “vars.createdTransactionId” değerini girin
App’i Çalıştırın
Öncelikle geliştirmesini tamamaldığınız flow’unuzu File > Save bölümünde veya “ctrl+s” kısa yolunu kullanarak kadedin.
Mule app’ini çalıştırmak için:
- Run > Run as > Mule Application tıklayın,
- Bir web tarayıcısından aşağıdaki URL’yi girerek uygulamayı test edin:
http://localhost:8081/sync-rfc
Requestin XML çıktısını aşağıdakine benzer şekilde görmelisiniz:
<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. Bir web tarayıcısından veya postman ile aşağıdaki URL’yi girerek ikinci akışı test edin:
http://localhost:8081/sync-mule-transaction
Request XML çıktısını aşağıdakine benzer şekilde görmelisiniz:
<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. Bir web tarayıcısından veya postman ile aşağıdaki URL’yi girerek ikinci akışı test edin:
http://localhost:8081/async-rfc
Request XML çıktısını aşağıdakine benzer şekilde görmelisiniz:
<BAPI_BANK_GETLIST>
<import>
<BANK_CTRY>US</BANK_CTRY>
<MAX_ROWS>0</MAX_ROWS>
</import>
</BAPI_BANK_GETLIST>
SAP Transaction Yönetimi için XML Detayları
Bir işlev örneği alma akışını hızlı bir şekilde eklemek için XML kodunu Studio’daki yeni bir Mule uygulamasına yapıştırın. Değerleri ortamınızı yansıtacak şekilde değiştirin ve kolaylıkla inceleyip test edin.
<?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=”250d9df1–95f0–4b55-b902–604bc0d24a06">
<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=”a3b275ac-b754–4851-b1e7–98b6fddb6681">
<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=”2c3604d6-bb30–4c12-a997-c421bed45970">
<http:listener doc:name=”Listener”
doc:id=”4a354659-ff85–4e02-b0ff-ec2574586c04"
config-ref=”HTTP_Listener_config” path=”/sync-rfc” />
<ee:transform doc:name=”Filter by country”
doc:id=”5edefff4-a0cf-4ba0-b266–9b3240facc7c”>
<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=”a2d2233d-7aaf-4598–942d-83395362a8e1" config-ref=”SAP_Config”
key=”BAPI_BANK_GETLIST” />
<ee:transform doc:name=”Filter first result”
doc:id=”e0d60c3d-7f7f-4416-a828–356a4e9df7e7">
<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=”c246916c-92e5–42a0-ac02–48e557788497" config-ref=”SAP_Config”
key=’#[“BAPI_BANK_GETDETAIL”]’ />
<logger level=”INFO” doc:name=”Logger”
doc:id=”25cfb292–93c8–4d29–8f92-e2ef3cc3c678" message=”#[payload]” />
</flow>
<flow name=”bapi-mule-transaction”
doc:id=”478db215–57c4–4897-ac9b-f1f2c2fd9e85">
<http:listener doc:name=”Listener”
doc:id=”63218abd-ae39–4bcd-9c05–86e869f80341"
config-ref=”HTTP_Listener_config” path=”/sync-mule-transaction” />
<ee:transform doc:name=”Transform Message”
doc:id=”f091a55e-609f-425a-bc4a-74d4c808d478">
<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=”a15f2429–153d-404d-b1d3–66d56110b09a”
transactionalAction=”ALWAYS_BEGIN”>
<sap:sync-rfc
doc:name=”Synchronous Remote Function Call”
doc:id=”a217aac9–9f7e-4107-bf5a-efd5d4a06acc”
config-ref=”SAP_Config” key=”BAPI_SALESORDER_CREATEFROMDAT2" />
<error-handler>
<on-error-continue enableNotifications=”true”
logException=”true” doc:name=”On Error Continue”
doc:id=”4ba67bfd-07d3–412f-ab12-c2f9475d9bb1">
<logger level=”INFO” doc:name=”Logger”
doc:id=”a0e85c35-de85–4f11–8ff4–3bd1d70a10ee” message=”Bapi Error” />
</on-error-continue>
</error-handler>
</try>
<logger level=”INFO” doc:name=”Logger”
doc:id=”3342c40f-c0fb-4b5d-bcef-f27dfac094cb”
message=”#[payload.BAPI_SALESORDER_CREATEFROMDAT2.export.SALESDOCUMENT]” />
</flow>
<flow name=”async-rfc”
doc:id=”9cf86d13–5409–444a-90d4-cdc0823bf9a8">
<http:listener doc:name=”Listener”
doc:id=”59d69926-b018–4951-b7e1-e5b7294c1a9a”
config-ref=”HTTP_Listener_config” path=”/async-rfc” />
<sap:create-transaction-id
doc:name=”Start SAP transaction”
doc:id=”d5e27a6b-726e-4518–9163–79db11938d90" config-ref=”SAP_Config” />
<set-variable value=”#[payload]” doc:name=”Set Variable”
doc:id=”83e02302–0472–4c60–9142–8532743e29b4"
variableName=”createdTransactionId” />
<ee:transform doc:name=”Transform Message”
doc:id=”dc40a282–6238–4763-a44e-12f9b86ae73e”>
<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=”3fdf6390–8226–449a-a235-ed19c09dc834" config-ref=”SAP_Config”
key=’#[“BAPI_BANK_GETLIST”]’
transactionId=”#[vars.createdTransactionId]” />
<sap:confirm-transaction-id
doc:name=”Confirm transaction”
doc:id=”47bdb94b-5e8f-4b04-bdf3–9217f5d901e9" config-ref=”SAP_Config”
transactionId=”#[vars.createdTransactionId]” />
</flow>
</mule>
Çoklu (Multiple) Gateways Yapılandırma
Bu örnekte, yükü dağıtmak ve performansı artırmak için tek bir ağ geçidi bağlantısı yerine birden fazla ağ geçidi bağlantısına sahip bir mesaj sunucusu yapılandıran bir Mule uygulamasının nasıl oluşturulacağı gösterilmektedir.
Aşağıdaki ekran görüntüsü bu örnek için Studio akışlarını göstermektedir:
Akış Yapılandırma — 1
İlk akış, mesajı Document listener’a iletir. Bu akışı yapılandırmak için:
- Anypoint Studio’da yeni bir Mule projesi oluşturun,
- Mule Paleti görünümünden Document listener bileşenini tuvale (canvas) sürükleyin,
- Document listener kaynağı için genel element’i yapılandırın ve gerekli alanları doldurun,
- Document listener properties tab’ından aşağıdaki alanları yapılandırın:
Gateway host: 54.160.77.19
Gateway service: 3300
Program id: MULE11_IDOC_PID
Connection count: 1
5. Mule Paleti görünümünden Core seçin ve Document listener bileşeninin yanına Logger bileşenini sürükleyin,
Akış Yapılandırma — 2
İkinci akış, birinci bireysel Gateway ‘ i tetikler. Bu akışı yapılandırmak için:
- Mule Paleti görünümünden HTTP Listener bileşenini tuvale (canvas) sürükleyin,
- Global elementi varsayılan değerleri kullanarak yapılandırın,
- HTTP Listener’ın path ini /c olarak ayarlayın,
- HTTP Listener’ın yanına Transform Message sürükleyin,
- Transform Message bileşeninin Output bölümüne aşağıdaki text’i kopyalayın:
%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 Paleti görünümünden SAP seçin ve Synchronous Remote Function Call bileşeninin yanına Logger bileşenini sürükleyin,
7. Synchronous Remote Function işlemi için genel element’i yapılandırın ve gerekli alanları doldurun.
8. Synchronous Remote Function properties tab’ından aşağıdaki alanları yapılandırın:
Function Name: “ZMMFM_TRIGGER_IDOC_MATMAS”
Content: payload
9. Mule Paleti görünümünden CORE seçin ve Synchronous Remote Function Call bileşeninin yanına Transform Message bileşenini sürükleyin,
10. Transform Message bileşeninin Output bölümüne aşağıdaki text’i kopyalayın:
%dw 2.0
output application/xml
— -
payload
Akış Yapılandırma — 3
Üçün akış, ikinci bireysel Gateway ‘ i tetikler. Bu akışı yapılandırmak için:
- Mule Paleti görünümünden HTTP Listener bileşenini tuvale (canvas) sürükleyin,
- Global elementi varsayılan değerleri kullanarak yapılandırın,
- HTTP Listener’ın path ini /d olarak ayarlayın,
- HTTP Listener’ın yanına Transform Message sürükleyin,
- Transform Message bileşeninin Output bölümüne aşağıdaki text’i kopyalayın:
%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 Paleti görünümünden SAP seçin ve Synchronous Remote Function Call bileşeninin yanına Logger bileşenini sürükleyin,
7. Synchronous Remote Function işlemi için genel element’i yapılandırın ve gerekli alanları doldurun.
8. Synchronous Remote Function properties tab’ından aşağıdaki alanları yapılandırın:
Function Name: “ZMMFM_TRIGGER_IDOC_MATMAS”
Content: payload
9. Mule Paleti görünümünden CORE seçin ve Synchronous Remote Function Call bileşeninin yanına Transform Message bileşenini sürükleyin,
10. Transform Message bileşeninin Output bölümüne aşağıdaki text’i kopyalayın:
%dw 2.0
output application/xml
— -
payload
App’i Çalıştırın
Öncelikle geliştirmesini tamamaldığınız flow’unuzu File > Save bölümünde veya “ctrl+s” kısa yolunu kullanarak kadedin.
Mule app’ini çalıştırmak için:
- Run > Run as > Mule Application tıklayın,
Multiple Gateways için XML Detayları
Bir işlev örneği alma akışını hızlı bir şekilde eklemek için XML kodunu Studio’daki yeni bir Mule uygulamasına yapıştırın. Değerleri ortamınızı yansıtacak şekilde değiştirin ve kolaylıkla inceleyip test edin.
<?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=”6cb0efcf-cbc1–4e7b-9909–19e8225d59d2">
<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=”621df348–58b9–411f-9665–687ad65876da”>
<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=”6c9570c3–8678–4ddb-8294-e5df7e1e277e”>
<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=”e7899e30-e88c-4765–88ac-a36027ae0bb8">
<sap:simple-connection-provider-connection
systemNumber=”00" client=”800" applicationServerHost=”54.160.77.19" />
</sap:sap-config>
<flow name=”sapgatewaytestFlow”
doc:id=”19ddaef8–063e-4607–8688-ba7b35ba7bf9">
<sap:document-listener
doc:name=”Document listener”
doc:id=”9d14f900–0182–4c71–8aef-33ec43b2c9fc”
config-ref=”SAP_Config_B” gatewayHost=”54.160.77.19"
gatewayService=”3300" programID=”MULE11_IDOC_PID” />
<logger level=”INFO” doc:name=”Logger”
doc:id=”3e1e500f-96c0–4bfd-8b2b-f5178b9a951f” message=”#[payload]” />
</flow>
<flow name=”sapgatewaytestFlowC”
doc:id=”8bcdc19e-aa69–4603-bd3e-103451aff970">
<http:listener doc:name=”Listener”
doc:id=”3d23bfdd-73fa-4a82-a8f0–03d3f472c745"
config-ref=”HTTP_Listener_config” path=”/c” />
<ee:transform doc:name=”Transform Message”
doc:id=”3db25271–1d76–4bfe-8129–5adbf42dff62">
<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=”4b4d9b06–3df5–4d52–9793-ade8d5e34e8c”
config-ref=”SAP_Config_C” key=’#[“ZMMFM_TRIGGER_IDOC_MATMAS”]’ />
<ee:transform doc:name=”Transform Message”
doc:id=”4ea30b67–932f-4181–84cd-4183371d5875">
<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=”e94f1320-f6c8–40b1-b975-b4d8ca484d8c”>
<http:listener doc:name=”Listener”
doc:id=”d134b0bc-51b6–4973-bba6-d4c6cbb340f9"
config-ref=”HTTP_Listener_config” path=”/d” />
<ee:transform doc:name=”Transform Message”
doc:id=”63f5122d-eb1e-41a9–9319–6852aa0a42fc”>
<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=”1cd08d1c-91ff-4633-a8cd-8eda1c9bd6dd”
config-ref=”SAP_Config_D” key=’#[“ZMMFM_TRIGGER_IDOC_MATMAS”]’ />
<ee:transform doc:name=”Transform Message”
doc:id=”7c0e1bc0-ea31–48c5–877e-299968fbcac5">
<ee:message>
<ee:set-payload><![CDATA[%dw 2.0
output application/json
— -
payload]]></ee:set-payload>
</ee:message>
</ee:transform>
</flow>
</mule>
Logicalbond (Mulesoft Partner and Reseller)
Logicalbond, bir MuleSoft Türkiye Yetkili Satıcısı ve İş Ortağıdır. Küçük, orta ölçekli, kurumsal ve stratejik müşteriler için güvenilir entegrasyon çözümleri üretir.
Sertifikalı danışmanlarımız, müşterilerimizin gelişen ihtiyaçlarına uyum sağlamalarına yardımcı olurken aynı zamanda inovasyonu ve dijital dönüşümü destekleyen görev açısından kritik çözümler sağlama konusunda yeteneklidir.
Logicalbond’un güvenilir iş ortağınız olmasına izin verin, biz de kuruluşunuzun ve ekibinizin sürdürülebilir dijital değerler oluşturmasına yardımcı olalım. Daha fazla bilgi için lütfen www.logicalbond.com adresini ziyaret edin.