Integration framework of SAP Business One Training

Slides:



Advertisements
Similar presentations
Using the Degree Works Planner. Click on the Planner tab in the students Degree Works account.
Advertisements

4 Oracle Data Integrator First Project – Simple Transformations: One source, one target 3-1.
MASTER QUOTE OVERVIEW.
Word Templates- Documents Directly from GP.
SQL Maestro Hello World IQ Associates. Contents Initial setup Hello World.
Copyright CovalentWorks Training Guide for Invoices MYB2B Powered by CovalentWorks.
ICP Kit 2011 HHC Data Entry Module The World Bank ICP Kit Training African Development Bank.
Training Guide for Inzalo SOP Users. This guide has been prepared to demonstrate the use of the Inzalo Intranet based SOP applications. The scope of this.
VistA Imaging Workstation Configuration. October The information in this documentation includes functionality of the software after the installation.
0 eCPIC Admin Training: OMB Submission Packages and Annual Submissions These training materials are owned by the Federal Government. They can be used or.
Payment Services Supplier Portal Training Vittoria Falbo (FSS Global Service Management)
Online Catalog Tutorial. Introduction Welcome to the Online Catalog Tutorial. This is the place to find answers to all of your online shopping questions.
PestPac Software. Leads The Leads Module allows you to track all of your pending sales for your company from the first contact to the close. By the end.
1 XSLT XSLT (extensible stylesheet language – transforms ) is another language to process XML documents. Originally intended as a presentation language:
Mail Merge Introduction to Word Processing ITSW 1401 Instructor: Glenda H. Easter Introduction to Word Processing ITSW 1401 Instructor: Glenda H. Easter.
Emdeon Office Batch Management Services This document provides detailed information on Batch Import Services and other Batch features.
Product Training Program
Getting Started With Supplier 360
SAP Business One 9.0 integration for SAP NetWeaver Solution Overview
Document Handling Contents: General Structure of Documents
Integration Framework of SAP Business One Training
Installation The Intercompany Integration Solution for SAP Business One Version 2.0 for SAP Business One 9.1 Welcome to the course on the installation.
Project Management: Messages
Pushing BI Publisher to the Limits
How to Setup and Utilize Functionality
Integration Framework of SAP Business One Training
Standard Operating Procedure
Integration Framework of SAP Business One as Platform for Scenario Development January 2016 Public.
Standard Operating Procedure
SubAnywhere: Setup and Configuration
CARA 3.10 Major New Features
SAP Business One B1iF Training
CONTENT MANAGEMENT SYSTEM CSIR-NISCAIR, New Delhi
CONTENT MANAGEMENT SYSTEM CSIR-NISCAIR, New Delhi
Database application MySQL Database and PhpMyAdmin
22-INTEGRATION HUB
Customize a business process in CRM
Additional Configuration The Intercompany Integration Solution for SAP Business One Version 2.0 for SAP Business One 9.1 Welcome to the course on additional.
Installation The Intercompany Integration Solution for SAP Business One Version 2.0 for SAP Business One 9.1 Welcome to the course on the installation.
Active Orders Supplier Administrator Training Getting Started Activities This training presentation describes the Getting Started activities that will.
12 Product Configurator
Additional Configuration The Intercompany Integration Solution for SAP Business One Version 2.0 for SAP Business One 9.1 Welcome to the course on additional.
Event control
Oracle Sales Cloud Sales campaign
Managing Rosters Screener Training Module Module 5
MAX Warranty Tracking Vince Stefanetti, Exact MAX Americas Trainer.
Using JDeveloper.
Online Training Course
Tips & Tricks Beyond the Basics
AGILENT TECHNOLOGIES RESTRICTED
Introduction to Database Programs
Database Applications
Two methods to observe tutorial
Two methods to observe tutorial
SAP QM Prepared by Lavanya.M.
Two methods to observe tutorial
Two methods to observe tutorial
Overview of Contract Association Batch Upload
Two methods to observe tutorial
Introduction to Database Programs
Two methods to observe tutorial
Two methods to observe tutorial
Two methods to observe tutorial
EDT Web Portal User Guide
Presentation transcript:

Integration framework of SAP Business One Training Solution Architects Team February 2011 How to build a B1 to B1 scenario in B1iF

B1iF Training: How to build a B1 to B1 Scenario in B1iF The following training is designed to show you how to build a B1 to B1 integration scenario using B1if. When you end this training you should be able to: Build a scenario to integrate two SAP Business One Systems. Setup the scenario and test it for running.

Agenda Case Analysis BPM Diagram B1 Config. Create BP Integration Scenario Package Scenario Step Inbound Outbound Processing Setup Steps Sender System Receiver System Data Management Activate Test B1 Event Log Message Log For information on how to install B1if please refer to the Installation How To.

Agenda Case Analysis B1 Config. Integration Setup Test BPM Diagram Create BP Integration Scenario Package Scenario Step Inbound Outbound Processing Setup Steps Sender System Receiver System Data Management Activate Test B1 Event Log Message Log

Case Analysis: B1 2 B1 Integration BPM Diagram

Agenda Case Analysis B1 Config. Integration Setup Test BPM Diagram Create BP Integration Scenario Package Scenario Step Inbound Outbound Processing Setup Steps Sender System Receiver System Activate Test B1 Event Log Message Log

B1Config: Create BP Create the Business Partners in the Subsidiary and the Headquarter. Its important that they match the information used in the UDT. Because the Subsidiary will be Purchasing goods from the HQ, the HQ BP (CardCode B1iFHQ) should be created as a Vendor in the Subsidiary company. Because the HQ will be selling goods to the Subsidiary, the Subsidiary BP (CardCode B1iFS1) should be created as a Customer in the HQ company.

Agenda Case Analysis B1 Config. Integration Setup Test BPM Diagram Create BP Integration Scenario Package Scenario Step Inbound Outbound Processing Setup Steps Sender System Receiver System Data Management Activate Test B1 Event Log Message Log

Integration: Scenario Package Path: Scenarios/Package Design 1 Type the Scenario Package Identifier. Do not use spaces or special characters in the identifier. (B1PO2B1SO) 2 Write a description for your package. 3 Click on Save 1 2 3 B1i will add a prefix to the Scenario identifier corresponding to the namespace configured. The package will be created in design mode after save. If you want to modify the package later on, you can use the ellipsis (…) button next to the Scenario Package Identifier textbox to select your package.

Integration: Scenario Package Path: Scenarios/Package Design/[Definitions] 1 Click on Definitions 2 Select Global Tables 3 Click on Select Global tables allows us to associate values to a scenario during setup and use them inside the atoms in a very dynamic way. 1 2 3

Integration: Scenario Package Path: Scenarios/Package Design/[Definitions] 1 Click on New 2 Write the name for the Global Table (SysPropertiesTable) 3 Click Select 1 2 3

Integration: Scenario Package Path: Scenarios/Package Design/[Definitions] 1 Click on the Fields L1 textbox and type the number of columns you want for the table. (2) Press the Tab key and wait for the screen to refresh. 2 After refresh a line to configure each column will appear at the bottom of the screen. 1 2

Integration: Scenario Package Path: Scenarios/Package Design/[Definitions] 1 Fill the information for the lines as shown in the tables below. Use the ellipsis button (…) where necessary. 2 Click on Generate. 3 Close the window. 2 1 Line 1 Max Len 20 Disp Len 10 Label SysId Line 2 Max Len 20 Disp Len 10 Label BPIdCode

Integration: Scenario Package Path: Scenarios/Package Design/[Definitions] 1 Click on Save to commit the changes. 1

Integration: Scenario Step Path: Scenarios/Step Design 1 Click on New 2 Type the Scenario Step identifier. Do not use spaces or special characters in the identifier. (PO2SO) 3 Using the ellipsis button (…) select the Package to which you want to assign the step (XXX.B1PO2B1SO). 4 Click on Save 2 3 1 4 B1i will add a prefix to the Scenario identifier corresponding to the namespace configured. The step will be empty and a version number will be automatically assigned for version control.

Integration: Inbound (1/2) Path: Scenarios/Step Design/Working Step/[Inbound] 1 1 Click on Channel. 2 Using the ellipsis button (…) select SAP Business One as Inbound Type. 3 Using the ellipsis button (…) select Asynchronous as Process Mode. 4 Using the ellipsis button (…) select B1 Event as Process Trigger. 5 Using the ellipsis button (…) select B1 Event as Identification Method 6 Using the ellipsis button (…) select Purchase Order (Object Id 22) as Identifier. 7 Click Save. 8 Click Close. 1 2 2 3 4 5 6 7 8

Integration: Inbound (2/2) 1 1 Click on Retrieval 2 Using the ellipsis button (…) select DI API as Retrieval Channel 3 Using the ellipsis button (…) select Object as Retrieval Type 4 Click Save 5 Click Close Click Close in the remaining Window of the Inbound configuration 3 1 2 2 2 3 4 5

Integration: Outbound Path: Scenarios/Step Design/Working Step/[Outbound] 1 1 Using the ellipsis button (…) select SAP Business One as Outbound Channel 2 Using the ellipsis button (…) select DI Object as Outbound Format 3 Click on Details 4 Using the ellipsis button (…) select Synchronous Insert with fallback to Update as Method 5 Using the ellipsis button (…) select Orders (Object ID 17) as Object Identifier 6 Click on Save 7 Click on Close 8 9 3 1 2 8 9 3 2 2 4 5 6 7

Integration: Processing Path: Scenarios/Step Design/Working Step/[Processing] The processing is the part in which B1if transforms the inbound message to the outbound message in order to get the desired results. Each processing unit inside the scenario step is called an atom and can do different actions. By default all scenario steps have one atom (called final) associated to an XSLT file to perform the last transformation.

Integration: Processing Path: Scenarios/Step Design/Working Step/[Processing] Create the following atom flow using the arrows at the right an bottom of the atoms: (XSL Transformation, Conditional Processing, Path, XSL Transformation and XSL Transformation)

Integration: Processing Path: Scenarios/Step Design/Working Step/[Processing] 1 Click on the pencil icon at the bottom of the first xForm atom. Each xForm atom will have an XSLT document associated that will be modified later. 2 Type the description of the atom (Global Table Select [Global Table]). 3 Click Save. 4 Click Close. 1 2 3 4 If you enter the characters “[ ]” with some text inside, it will replace the generic name in the diagram.

Integration: Processing Path: Scenarios/Step Design/Working Step/[Processing] 1 Click on the pencil icon at the bottom of the xForm atom Each xForm atom will have an XSLT document associated that will be modified later 2 Type the description of the atom (SO XSL Transformation [SO Trans.]) 3 Click Save 4 Click Close. 1 2 3 4

Integration: Processing Path: Scenarios/Step Design/Working Step/[Processing] 1 Click on the pencil icon at the bottom of the xForm atom at the right of the otherwise atom. Each xForm atom will have an XSLT document associated that will be modified later 2 Type the description of the atom (Ignore Document XSL [Ignore]) 3 Click Save 4 Click Close. 1 2 3 4

Integration: Processing Path: Scenarios/Step Design/Working Step/[Processing] Additional considerations for the xForm atoms The XSL file of each atom will be modified outside B1if. The description of the configuration is meant for reference, the information needed for the modification is the name of the atom XSLT file that is found on each xForm atom.

Integration: Processing Path: Scenarios/Step Design/Working Step/[Processing] The next step is to modify the XSLT file of the xForm atoms using your preferred XML Editor. In order to have access to the XSLT file you should give full access to the BizStore using WebDAV. For instructions please see B1if documentation.

Integration: Processing (atom1 - Global Table) <xsl:template name="transform"> <xsl:variable name="HQSysCode" select="/vpf:Msg/vpf:Header/vpf:ReceiverList/vpf:Receiver/@Id"/> <xsl:variable name="SenderSysCode" select="/vpf:Msg/vpf:Header/vpf:ReceiverList/vpf:Receiver/@Id"/> <xsl:for-each select="document(&apos;/com.sap.b1i.vplatform.scenarios.design/vPac.XXX.SASD001/vTbl.SysProp.xml&apos;)//table/row"> <xsl:choose> <xsl:when test="./col[1]=$HQSysCode"> <xsl:copy-of select="."/> </xsl:when> <xsl:when test="./col[1]=$vpSender"> </xsl:choose> </xsl:for-each> </xsl:template> Locate the transform template tag to include your code

Integration: Processing (atom1 - Global Table) <xsl:template name="transform"> <xsl:variable name="HQSysCode" select="/vpf:Msg/vpf:Header/vpf:ReceiverList/vpf:Receiver/@Id"/> <xsl:for-each select="document(&apos;/com.sap.b1i.vplatform.scenarios.design/vPac.XXX.SASD001/vTbl.SysProp.xml&apos;)//table/row"> <xsl:choose> <xsl:when test="./col[1]=$HQSysCode"> <xsl:copy-of select="."/> </xsl:when> <xsl:when test="./col[1]=$vpSender"> </xsl:choose> </xsl:for-each> </xsl:template> We create variables to get the information of the Internal System Id of the HQ (the receiver system).

Integration: Processing (atom1 - Global Table) <xsl:template name="transform"> <xsl:variable name="HQSysCode" select="/vpf:Msg/vpf:Header/vpf:ReceiverList/vpf:Receiver/@Id"/> <xsl:for-each select="document('/com.sap.b1i.vplatform.scenarios.design/vPac.XXX.B1PO2B1SO/vTbl.SysPropertiesTable.xml’)//table/row"> <xsl:choose> <xsl:when test="./col[1]=$HQSysCode"> <xsl:copy-of select="."/> </xsl:when> <xsl:when test="./col[1]=$vpSender"> </xsl:choose> </xsl:for-each> </xsl:template> Global Tables are stored in XML files inside the Bizstore. We are copying the information that will be stored inside the table (that is filled during setup) and bring it to the message in order to simplify the xsl commands and queries. In this operation we are only copying the information of the systems involved in the scenario. Note: The path inside the document function in XSLT must be changed accordingly based on the bizstore path of your vPac file.

Integration: Processing Path: Scenarios/Step Design/Working Step/[Processing] 1 Click on the pencil icon at the bottom of the path atom. 2 Write the xPath Expression that will be used to filter the message and activate the execution path. 3 Click Save 4 Click Close. 1 2 3 4 xPath Expression details on the next slide

Integration: Processing Path: Scenarios/Step Design/Working Step/[Processing] Additional considerations for the Conditional and Path atoms The conditional atom is NOT an exclusive execute condition. It will enter all the paths where the validation is true. After the execution of the conditional atom a new root node is created to consolidate all the results. You should take that into account in the following steps. The path atom doesn’t use variables so if the xPath condition is too long consider creating a previous xForm atom. The xPath of the path atom consists of the xPath selection condition that will be copied to the next atom. In our example: /*[/vpf:Msg/vpf:Body/vpf:Payload[@id='atom1']/row[./col[1]=/vpf:Msg/vpf:Header/vpf:ReceiverList/vpf:Receiver/@Id]/col[2] = /vpf:Msg/vpf:Body/vpf:Payload[./@Role='S']/BOM/BO/Documents/row/CardCode]

Integration: Processing (atom3 - SO Trans.) <xsl:template name="transform"> <xsl:variable name="DocEntryCode" select="/vpf:Msg/vpf:Body/vpf:Payload[./@Role=&apos;S&apos;]/BOM/BO/Documents/row/DocEntry"/> <xsl:variable name="DocNumCode" select="/vpf:Msg/vpf:Body/vpf:Payload[./@Role=&apos;S&apos;]/BOM/BO/Documents/row/DocNum"/> <FinalAtomResult xmlns=""> <B1out type="object"> <Documents> <row> <CardCode><xsl:value-of select="/vpf:Msg/vpf:Body/vpf:Payload[@id=&apos;atom1&apos;]/row[./col[1]=$vpSender]/col[2]"/></CardCode> <DocCurrency><xsl:value-of select="$msg/BOM/BO/Documents/row/DocCurrency"/></DocCurrency> <Reference1><xsl:value-of select="$msg/BOM/BO/Documents/row/Reference1"/></Reference1> <Reference2><xsl:value-of select="$msg/BOM/BO/Documents/row/Reference2"/></Reference2> <Comments><xsl:value-of select="$msg/BOM/BO/Documents/row/Comments"/></Comments> <DocDueDate><xsl:value-of select="$msg/BOM/BO/Documents/row/DocDueDate"/></DocDueDate> <NumAtCard>PO <xsl:value-of select="$DocNumCode"/>(<xsl:value-of select="$DocEntryCode"/>)</NumAtCard> </row> </Documents> <Document_Lines> <xsl:for-each select="$msg/BOM/BO/Document_Lines/*"> <LineNum><xsl:value-of select="LineNum"/></LineNum> <ItemCode><xsl:value-of select="ItemCode"/></ItemCode> <Quantity><xsl:value-of select="Quantity"/></Quantity> <Price><xsl:value-of select="Price"/> </Price> <Currency><xsl:value-of select="Currency"/></Currency> </xsl:for-each> </Document_Lines> </B1out> </FinalAtomResult> </xsl:template> Locate the XSL template where to include your code

Integration: Processing (atom3 - SO Trans.) <xsl:template name="transform"> <xsl:variable name="DocEntryCode" select="/vpf:Msg/vpf:Body/vpf:Payload[./@Role=&apos;S&apos;]/BOM/BO/Documents/row/DocEntry"/> <xsl:variable name="DocNumCode" select="/vpf:Msg/vpf:Body/vpf:Payload[./@Role=&apos;S&apos;]/BOM/BO/Documents/row/DocNum"/> <FinalAtomResult xmlns=""> <B1out type="object"> <Documents> <row> <CardCode><xsl:value-of select="/vpf:Msg/vpf:Body/vpf:Payload[@id=&apos;atom1&apos;]/row[./col[1]=$vpSender]/col[2]"/></CardCode> <DocCurrency><xsl:value-of select="$msg/BOM/BO/Documents/row/DocCurrency"/></DocCurrency> <Reference1><xsl:value-of select="$msg/BOM/BO/Documents/row/Reference1"/></Reference1> <Reference2><xsl:value-of select="$msg/BOM/BO/Documents/row/Reference2"/></Reference2> <Comments><xsl:value-of select="$msg/BOM/BO/Documents/row/Comments"/></Comments> <DocDueDate><xsl:value-of select="$msg/BOM/BO/Documents/row/DocDueDate"/></DocDueDate> <NumAtCard>PO <xsl:value-of select="$DocNumCode"/>(<xsl:value-of select="$DocEntryCode"/>)</NumAtCard> </row> </Documents> <Document_Lines> <xsl:for-each select="$msg/BOM/BO/Document_Lines/*"> <LineNum><xsl:value-of select="LineNum"/></LineNum> <ItemCode><xsl:value-of select="ItemCode"/></ItemCode> <Quantity><xsl:value-of select="Quantity"/></Quantity> <Price><xsl:value-of select="Price"/> </Price> <Currency><xsl:value-of select="Currency"/></Currency> </xsl:for-each> </Document_Lines> </B1out> </FinalAtomResult> </xsl:template> We create variables to simplify the coding of the reference of the document in the Sales Order.

Integration: Processing (atom3 - SO Trans.) <xsl:template name="transform"> <xsl:variable name="DocEntryCode" select="/vpf:Msg/vpf:Body/vpf:Payload[./@Role=&apos;S&apos;]/BOM/BO/Documents/row/DocEntry"/> <xsl:variable name="DocNumCode" select="/vpf:Msg/vpf:Body/vpf:Payload[./@Role=&apos;S&apos;]/BOM/BO/Documents/row/DocNum"/> <FinalAtomResult xmlns=""> <B1out type="object"> <Documents> <row> <CardCode><xsl:value-of select="/vpf:Msg/vpf:Body/vpf:Payload[@id=&apos;atom1&apos;]/row[./col[1]=$vpSender]/col[2]"/></CardCode> <DocCurrency><xsl:value-of select="$msg/BOM/BO/Documents/row/DocCurrency"/></DocCurrency> <Reference1><xsl:value-of select="$msg/BOM/BO/Documents/row/Reference1"/></Reference1> <Reference2><xsl:value-of select="$msg/BOM/BO/Documents/row/Reference2"/></Reference2> <Comments><xsl:value-of select="$msg/BOM/BO/Documents/row/Comments"/></Comments> <DocDueDate><xsl:value-of select="$msg/BOM/BO/Documents/row/DocDueDate"/></DocDueDate> <NumAtCard>PO <xsl:value-of select="$DocNumCode"/>(<xsl:value-of select="$DocEntryCode"/>)</NumAtCard> </row> </Documents> <Document_Lines> <xsl:for-each select="$msg/BOM/BO/Document_Lines/*"> <LineNum><xsl:value-of select="LineNum"/></LineNum> <ItemCode><xsl:value-of select="ItemCode"/></ItemCode> <Quantity><xsl:value-of select="Quantity"/></Quantity> <Price><xsl:value-of select="Price"/> </Price> <Currency><xsl:value-of select="Currency"/></Currency> </xsl:for-each> </Document_Lines> </B1out> </FinalAtomResult> </xsl:template> Because we are in a conditional atom, we need to provide an easy way to select the results in all the available paths, no matter which route was taken. Including a single root node can help us later.

Integration: Processing (atom3 - SO Trans.) <xsl:template name="transform"> <xsl:variable name="DocEntryCode" select="/vpf:Msg/vpf:Body/vpf:Payload[./@Role=&apos;S&apos;]/BOM/BO/Documents/row/DocEntry"/> <xsl:variable name="DocNumCode" select="/vpf:Msg/vpf:Body/vpf:Payload[./@Role=&apos;S&apos;]/BOM/BO/Documents/row/DocNum"/> <FinalAtomResult xmlns=""> <B1out type="object"> <Documents> <row> <CardCode><xsl:value-of select="/vpf:Msg/vpf:Body/vpf:Payload[@id=&apos;atom1&apos;]/row[./col[1]=$vpSender]/col[2]"/></CardCode> <DocCurrency><xsl:value-of select="$msg/BOM/BO/Documents/row/DocCurrency"/></DocCurrency> <Reference1><xsl:value-of select="$msg/BOM/BO/Documents/row/Reference1"/></Reference1> <Reference2><xsl:value-of select="$msg/BOM/BO/Documents/row/Reference2"/></Reference2> <Comments><xsl:value-of select="$msg/BOM/BO/Documents/row/Comments"/></Comments> <DocDueDate><xsl:value-of select="$msg/BOM/BO/Documents/row/DocDueDate"/></DocDueDate> <NumAtCard>PO <xsl:value-of select="$DocNumCode"/>(<xsl:value-of select="$DocEntryCode"/>)</NumAtCard> </row> </Documents> <Document_Lines> <xsl:for-each select="$msg/BOM/BO/Document_Lines/*"> <LineNum><xsl:value-of select="LineNum"/></LineNum> <ItemCode><xsl:value-of select="ItemCode"/></ItemCode> <Quantity><xsl:value-of select="Quantity"/></Quantity> <Price><xsl:value-of select="Price"/> </Price> <Currency><xsl:value-of select="Currency"/></Currency> </xsl:for-each> </Document_Lines> </B1out> </FinalAtomResult> </xsl:template> This is a basic XSLT transformation to generate the Sales Order. The <B1out> node will take care of the internal code of the target document and other technical procedures.

Integration: Processing (atom3 - SO Trans.) BIS <xsl:template name="transform"> <xsl:variable name="DocEntryCode" select="/vpf:Msg/vpf:Body/vpf:Payload[./@Role=&apos;S&apos;]/BOM/BO/Documents/row/DocEntry"/> <xsl:variable name="DocNumCode" select="/vpf:Msg/vpf:Body/vpf:Payload[./@Role=&apos;S&apos;]/BOM/BO/Documents/row/DocNum"/> <FinalAtomResult xmlns=""> <BOM> <BO> <AdmInfo> <Object>17</Object> <Version>2</Version> </AdmInfo > <Documents> <row> <CardCode><xsl:value-of select="/vpf:Msg/vpf:Body/vpf:Payload[@id=&apos;atom1&apos;]/row[./col[1]=$vpSender]/col[2]"/></CardCode> <DocCurrency><xsl:value-of select="$msg/BOM/BO/Documents/row/DocCurrency"/></DocCurrency> <Reference1><xsl:value-of select="$msg/BOM/BO/Documents/row/Reference1"/></Reference1> <Reference2><xsl:value-of select="$msg/BOM/BO/Documents/row/Reference2"/></Reference2> <Comments><xsl:value-of select="$msg/BOM/BO/Documents/row/Comments"/></Comments> <DocDueDate><xsl:value-of select="$msg/BOM/BO/Documents/row/DocDueDate"/></DocDueDate> <NumAtCard>PO <xsl:value-of select="$DocNumCode"/>(<xsl:value-of select="$DocEntryCode"/>)</NumAtCard> </row> </Documents> <Document_Lines> <xsl:for-each select="$msg/BOM/BO/Document_Lines/*"> <LineNum><xsl:value-of select="LineNum"/></LineNum> <ItemCode><xsl:value-of select="ItemCode"/></ItemCode> <Quantity><xsl:value-of select="Quantity"/></Quantity> <Price><xsl:value-of select="Price"/></Price> <Currency><xsl:value-of select="Currency"/></Currency> </xsl:for-each> </Document_Lines> </BO> </BOM> </FinalAtomResult> </xsl:template>

Integration: Processing (atom4 – Ignore) <xsl:template name="transform"> <xsl:variable name="SenderCardCode" select="/vpf:Msg/vpf:Body/vpf:Payload[./@Role=‘S’]/BOM/BO/Documents/row/CardCode"/> <FinalAtomResult xmlns=""> <b1im_skip info="Filtered Card: {$SenderCardCode}" msglog="true"/> </FinalAtomResult> </xsl:template> Locate the XSL template where to include your code

Integration: Processing (atom4 – Ignore) <xsl:template name="transform"> <xsl:variable name="SenderCardCode" select="/vpf:Msg/vpf:Body/vpf:Payload[./@Role=‘S’]/BOM/BO/Documents/row/CardCode"/> <FinalAtomResult xmlns=""> <b1im_skip info="Filtered Card: {$SenderCardCode}" msglog="true"/> </FinalAtomResult> </xsl:template> Add variables to simplify the XSLT code. In this case we are retrieving the Subsidiary BP Code from the Global Table information that was retrieved earlier.

Integration: Processing (atom4 – Ignore) <xsl:template name="transform"> <xsl:variable name="SenderCardCode" select="/vpf:Msg/vpf:Body/vpf:Payload[./@Role=‘S’]/BOM/BO/Documents/row/CardCode"/> <FinalAtomResult xmlns=""> <b1im_skip info="Filtered Card: {$SenderCardCode}" msglog="true"/> </FinalAtomResult> </xsl:template> Because we are in a conditional atom, we need to provide an easy way to select the results in all the available paths, no matter which route was taken. Including a single root node can help us later.

Integration: Processing (atom4 – Ignore) <xsl:template name="transform"> <xsl:variable name="SenderCardCode" select="/vpf:Msg/vpf:Body/vpf:Payload[./@Role=‘S’]/BOM/BO/Documents/row/CardCode"/> <FinalAtomResult xmlns=""> <b1im_skip info="Filtered Card: {$SenderCardCode}" msglog="true"/> </FinalAtomResult> </xsl:template> The node generates a command to ignore the document.

Integration: Processing (atom0 - final) Additional considerations for the final atom When using conditional atoms the header of the message is modified so we need to correct it before the transformation. 1 Click on the pencil icon at the bottom of the xForm final atom 2 Click on Gen Template button 3 Select Correct after Branch in the Choose document dropdown. 4 Click on Select 5 Click on Save 6 Click on Close 1 5 2 6 3 4

Integration: Processing (atom0 - final) <xsl:template match="/"> <Msg xmlns="urn:com.sap.b1i.vplatform:entity"> <xsl:copy-of select="/bfa:unbranch/vpf:Msg/@*"/> <xsl:copy-of select="/bfa:unbranch/vpf:Msg/vpf:Header"/> <Body> <xsl:copy-of select="/bfa:unbranch/vpf:Msg/vpf:Body/*"/> <Payload Role="R" id="{$atom}"> <xsl:call-template name="transform"/> </Payload> </Body> </Msg> </xsl:template> <xsl:template name="transform"> <xsl:copy-of select="/bfa:unbranch/vpf:Msg/vpf:Body/vpf:Payload/FinalAtomResult/*"/> Check the template at the header of the document.

Integration: Processing (atom0 - final) <xsl:template match="/"> <Msg xmlns="urn:com.sap.b1i.vplatform:entity"> <xsl:copy-of select="/bfa:unbranch/vpf:Msg/@*"/> <xsl:copy-of select="/bfa:unbranch/vpf:Msg/vpf:Header"/> <Body> <xsl:copy-of select="/bfa:unbranch/vpf:Msg/vpf:Body/*"/> <Payload Role="R" id="{$atom}"> <xsl:call-template name="transform"/> </Payload> </Body> </Msg> </xsl:template> <xsl:template name="transform"> <xsl:copy-of select="/bfa:unbranch/vpf:Msg/vpf:Body/vpf:Payload/FinalAtomResult/*"/> After the Correct After Branch operation /bfa:unbranch is included on each one of the xsl:copy-of commands.

Integration: Processing (atom0 - final) <xsl:template match="/"> <Msg xmlns="urn:com.sap.b1i.vplatform:entity"> <xsl:copy-of select="/bfa:unbranch/vpf:Msg/@*"/> <xsl:copy-of select="/bfa:unbranch/vpf:Msg/vpf:Header"/> <Body> <xsl:copy-of select="/bfa:unbranch/vpf:Msg/vpf:Body/*"/> <Payload Role="R" id="{$atom}"> <xsl:call-template name="transform"/> </Payload> </Body> </Msg> </xsl:template> <xsl:template name="transform"> <xsl:copy-of select="/bfa:unbranch/vpf:Msg/vpf:Body/vpf:Payload/FinalAtomResult/*"/> The command selects the results of all the taken paths no matter the route that the message took.

Agenda Case Analysis B1 Config. Integration Setup Test BPM Diagram Create UDT Create UDF Fill Information Create BP Integration Scenario Package Scenario Step Inbound Outbound Processing Setup Steps Sender System Receiver System Data Management Activate Test B1 Event Log Message Log

Setup: Steps Path: Scenarios/Setup 1 2 3 4 Click on Steps 5 1 Click on Steps 2 Click on the Activate checkbox 3 Click on the Generate checkbox 4 Click on Save Confirm action Close the Select Scenario Steps Window 6 1 4 2 3

Setup: Sender Path: Scenarios/Setup 1 2 3 4 5 6 Click on Sender Select Maintain Sender List from the dropdown Choose document 3 Click on Select 4 Check the subsidiary system in the list (take note of the internal ID number; you will need it later) 5 Click Save 6 Click Close 6 1 2 3 4 5 6

Setup: Receiver Path: Scenarios/Setup 1 2 3 4 5 6 Click on Receiver Select Maintain Receiver List from the dropdown Choose document 3 Click on Select 4 Check the headquarter system in the list (take note of the internal ID number; you will need it later) 5 Click Save 6 Click Close 6 3 1 2 3 4 5 6

Setup: Data Management 2 3 Path: Scenarios/Setup 4 5 1 Click on Data Mgt. 2 Select Table: vTbl.SysPropertiesTable.xml from the dropdown Choose document 3 Click on Select 4 Click two times in Insert to include two new lines to the table. 6 3 1 2 3 4

Setup: Data Management 2 3 Path: Scenarios/Setup 4 5 6 1 Fill the lines with the information of the sender and receiver systems as shown in the table Close the window 3 1 The SysId of the systems depends on your configuration.

Setup: Activate Path: Scenarios/Setup 2 3 Path: Scenarios/Setup 4 5 1 Click on Activate 2 Click on Activate on the Scenario Setup Result window Confirm Operation 6 1 After the operation is completed the status of the Package is changed from design to activate 2

Setup: Check activation 2 3 Path: Scenarios/Control 4 5 6

Agenda Case Analysis B1 Config. Integration Setup Test BPM Diagram Create UDT Create UDF Fill Information Create BP Integration Scenario Package Scenario Step Inbound Outbound Processing Setup Steps Sender System Receiver System Data Management Activate Test B1 Event Log Message Log

Test After everything is completed you can perform the following test: Log into the Subsidiary system and create a Purchase order for the Headquarter Create a Purchase order to another BP

Test: Message Log Path: Monitoring/B1 Event Monitor 2 3 Path: Monitoring/B1 Event Monitor 4 5 1 Select Message Status 2 Click on Search/Refresh 6 1 2 B1 Event Monitor will show the messages that are send by the Event Sender service filtered by the status selected. B1 Event Monitor shows all the information needed to identify the event.

Test: Message Log 2 3 Path: Monitoring/Message Log 4 5 The result of the tests will be displayed in the message log Select the date and time you want to check. Click on Display/Refresh button to check results For more information about debugging check the Debugging Appendix. 6

Thank You! For more information visit SDN at http://sdn.sap.com