This blog is continuation of SAP Hybris – Customizing Data Hub

Load IDOC to Hybris

  • IDoc is an SAP object that carries data of a business transaction from one system to another in the form of electronic message
  • IDoc is an acronym for Intermediate Document.
  • The purpose of an IDoc is to transfer data or information from SAP to other systems and vice versa.
  • The transfer from SAP to non-SAP system is done via EDI (Electronic Data Interchange) subsystems whereas for transfer between two SAP systems, ALE is used.

Step-by-step procedure.

Step 1: After successfully loading the customproduct 

Step 2: Create the xml (spring.xml)

 

Note: The below is the sample IDoc (just for an example, you try with your own IDoc)

<?xml version="1.0" encoding="UTF-8"?> <ZCRMXIF_PRODUCT_MATERIAL> <IDOC BEGIN="1"> <EDI_DC40 SEGMENT="1"> <IDOCTYP>ZCRMXIF_PRODUCT_MATERIAL</IDOCTYP> <MESTYP>CRMXIF_PRODUCT_MATERIAL_SAVE</MESTYP> </EDI_DC40> <E101COMXIF_PRODUCT_MATERIAL SEGMENT="1"> <PRODUCT_ID>EOS-30D-1623432_V1</PRODUCT_ID> </E101COMXIF_PRODUCT_MATERIAL> </IDOC> </ZCRMXIF_PRODUCT_MATERIAL>

Step 3:

Now add custom raw data to “customproduct-raw-datahub-extension.xml” , based on the idoc we will add custom rawitems to this XML file and also to “customproduct-raw-datahub-extension-spring.xml” .

  • customproduct-raw-datahub-extension.xml
<extension xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.hybris.com/schema/" xsi:schemaLocation="http://www.hybris.com/schema/ http://www.hybris.com/schema/datahub-metadata-schema-1.3.0.xsd" name="customproduct-raw"> <dependencies> <dependency> <extension>customproduct-canonical</extension> <extension>saperpproduct-canonical</extension> </dependency> </dependencies> <rawItems> <item> <type>RawCustomProduct</type> <description>Raw representation of a sample raw item</description> <attributes> <attribute> <name>E101COMXIF_PRODUCT_MATERIAL-PRODUCT_ID</name> </attribute> </attributes> </item> </rawItems> <canonicalItems> <item> <type>CanonicalCustomProduct</type> <attributes> <attribute> <name>productId</name> <transformations> <transformation> <rawSource>RawCustomProduct</rawSource> <expression>E101COMXIF_PRODUCT_MATERIAL-PRODUCT_ID</expression> </transformation> </transformations> </attribute> </attributes> </item> </canonicalItems> </extension>

 

 

  • customproduct-raw-datahub-extension-spring.xml
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:int="http://www.springframework.org/schema/integration" xmlns:int-xml="http://www.springframework.org/schema/integration/xml" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/integration/xml http://www.springframework.org/schema/integration/xml/spring-integration-xml.xsd http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"> <!-- ========================== --> <!-- Spring-Integration Content --> <!-- ========================== --> <int:channel id="idocXmlInboundChannel"> <int:interceptors> <int:wire-tap channel="logger" /> </int:interceptors> </int:channel> <int:logging-channel-adapter log-full-message="true" id="logger" level="DEBUG" /> <bean id="idocInboundService" class="com.hybris.datahub.sapidocintegration.spring.HttpInboundService"> <property name="idocXmlInboundChannel" ref="idocXmlInboundChannel" /> </bean> <!-- Data Hub input channel for raw data --> <int:channel id="rawFragmentDataInputChannel" /> <!-- Maps received IDOCs by value of header attribute: "IDOCTYP" to corresponding mapping service --> <int:header-value-router input-channel="idocXmlInboundChannel" header-name="IDOCTYP"> <int:mapping value="ZCRMXIF_PRODUCT_MATERIAL" channel="ZCRMMATMAS" /> </int:header-value-router> <!-- sap crm product --> <int:service-activator input-channel="ZCRMMATMAS" output-channel="rawFragmentDataInputChannel" ref="customproductCRMMappingService" method="map" /> <!-- Dummy implementations of mapping services implemented elsewhere --> <bean id="customproductCRMMappingService" class="com.hybris.datahub.sapidocintegration.IDOCMappingService"> <property name="rawFragmentDataExtensionSource" value="customproduct" /> <property name="rawFragmentDataType" value="RawCustomProduct" /> </bean> </beans>

Step 4:

Now add custom canonical data to customproduct-canonical-datahub-extension.xml”

 

  • customproduct-canonical-datahub-extension.xml
<extension xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.hybris.com/schema/" xsi:schemaLocation="http://www.hybris.com/schema/ http://www.hybris.com/schema/datahub-metadata-schema-1.3.0.xsd" name="customproduct-canonical"> <canonicalItems> <item> <type>CanonicalCustomProduct</type> <description>Canonical representation of sample item</description> <status>ACTIVE</status> <attributes> <attribute> <name>productId</name> <model> <localizable>false</localizable> <collection>false</collection> <type>String</type> <primaryKey>true</primaryKey> </model> </attribute> </attributes> </item> </canonicalItems> </extension>

Step 5:

Now add custom target data to customproduct-target-datahub-extension.xml”

  • customproduct-target-datahub-extension.xml
<extension xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.hybris.com/schema/" xsi:schemaLocation="http://www.hybris.com/schema/ http://www.hybris.com/schema/datahub-metadata-schema-1.3.0.xsd" name="customproduct-target"> <dependencies> <dependency> <extension>customproduct-canonical</extension> </dependency> </dependencies> <targetSystems> <targetSystem> <name>HybrisCore</name> <type>HybrisCore</type> <exportURL>${datahub.extension.exportURL}</exportURL> <userName>${datahub.extension.username}</userName> <password>${datahub.extension.password}</password> <exportCodes> </exportCodes> <targetItems> <item> <type>TargetCustomProduct</type> <exportCode>Product</exportCode> <description>Hybris Platform representation of Product</description> <updatable>true</updatable> <canonicalItemSource>CanonicalCustomProduct</canonicalItemSource> <status>ACTIVE</status> <attributes> <attribute> <name>identifier</name> <localizable>false</localizable> <collection>false</collection> <transformationExpression>productId</transformationExpression> <exportCode>code[unique=true]</exportCode> <mandatoryInHeader>true</mandatoryInHeader> </attribute> </attributes> </item> </targetItems> </targetSystem> </targetSystems> </extension>

 

Step 6: Run command mvn clean install

Step 7: Now go to the

<YOURPATH>datahub6.2archetypecustomproductcustomproduct-canonical arget

Step 8: Copy above highlighted jar file to the below path folder

<YOURPATH>datahub6.2

Same procedure will be followed for raw and target also

Step 9: Go to the path <YOURPATH>datahub6.2archetypecustomproductcustomproduct-raw arget

Copy the jar file into crm folder

Step 10: Go to the path <YOURPATH>datahub6.2archetypecustomproductcustomproduct-target arget

Copy the jar file into crm folder

Note: If any changes are done in customproduct – raw, canonical, target  Step 5 to Step 10 should be followed and restart the Tomcat server.

Step 11: Now go to chrome via https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop?hl=en

Step 12: Click on launch the app button

Step 13: Open Postman App and add the header details as below

Headers : Content-Type – application/xml

URL: http://localhost:8080/datahub-webapp/v1/idoc/receiver

 

Step 14: Go to Body-> raw -> add the IDoc and click on send button

  • We will get a response as 200 which means the process is a success.

Step 15: Now go to mysql workbench and check the “rawitem” table data.

 

DATA COMPOSITION

Data composition means the transfer of data from raw items to canonical items.

Step 16: Post the

URL:  http://localhost:8080/datahub-webapp/v1/pools/GLOBAL/compositions

as shown in below

Step 17: Now go to MySQL workbench and check the “canonicalitem” table data.

DATA PUBLICATION

Data publication means the transfer of data from canonical items to target items.

Step 18: Post the URL below

http://localhost:8080/datahub-webapp/v1/pools/GLOBAL/publications

Step 19: Now go to MySQL workbench and check the “targetitem” table data.

 

Step 20: Start the hybris server with recipe “sap_aom_som_b2b_b2c”.

If we don’t get datahubadapter in the local.properties xml file in config .Then add it manually

“<extension name=”datahubadapter” />”

Step 21: Go to hmc,catalog->products enter the product id and click on search.

  • Product which is sent via IDoc can be viewed in hmc.

Thanks for reading 🙂

 

New NetWeaver Information at SAP.com

Very Helpfull

User Rating: Be the first one !