Skip to Content
Personal Insights

B1iF – first impression and basics

In this blog, I like to explain you the experiences with B1if in my first week of exploring.

What is B1iF?

Before explaining my personal experiences, if you wish to get an overview about integration and the integration framework in general, please refer to the Integration Framework for SAP Business One (B1if) – Central Blog. If you already knew about B1iF then you can skip reading the above referenced blog, if not (just like me!) then you should read the blog.

Now – My personal experiences:

To be frank, I started B1iF with having in my mind that B1iF is for only integrations like File Import or Export and B1 to B1 integrations. It shocked me the capabilities are lot more than I was expected (within the first week itself 🙂 )

Following are the little things I did in my first week.

  1. Send an email to the Customer’s email as soon as an invoice is posted at SAP Business One.
  2. Send SAP Business One internal alert messages.
  3. Using RESTful client to post a Sales Order to SAP Business One.
  4. Using RESTful client to get a desired Sales Order details from SAP Business One

I’m sure lot of you gonna ask me “Could you please give us the steps to do this?”

Based on the requests, I’ll try to post separate blogs for each of the above. But you can get the Step-by-step guide here for POST Sales Order to B1 right now.

Following are the articles which helped me a lot to achieve the above and of course this SAP community 🙂

Integration Framework Version 2 – Essentials

Now the basics:

Following are the basics to do a (first) scenario development using B1iF.

  1. Complete this Open SAP course In Action – Integration Framework for SAP Business One, I personally do recommend that this is must follow step!
  2. For all the scenario development, if you are not familiar with the incoming Payload or object, use debug mode to analyze the incoming data.
  3. Once we understand the incoming Payload, it is easy for us to transform those and consume in the integration steps.
  4. In order to understand transform, we need to learn about XSLT statement (more info here).

Conclusion:

  • With no doubt, my initial thought about B1iF was made wrong and B1iF can do much more than just integrating B1 to B1 and file imports.
  • B1iF is being used by SAP itself for
    • Intercompany Integration Solution for SAP Business One,
    • SAP Customer Checkout (SAP CCO),
    • Online Request-for-quotation (RFQ) for SAP Business One, and
    • SAP Business One Mobile app
  • If you want to integrate SAP Business One with your website (example for e-commerce), then B1iF supports both SOAP based Web Services and HTTP/RESTful web services.

Happy Integrating guys

2 Comments
You must be Logged on to comment or reply to a post.
  • Hello Balakumar,

    Do you have any material which show outbound call to WCF Service with B1if 2.0.

    I created the same, but not able to pass payload to Service.. always getting error

    com.sap.b1i.bizprocessor.BizProcException: BPE001 Nested exception: java.lang.NullPointerException: while trying to invoke the method com.sap.b1i.bizprocessor.BizProcMessage.setProperty(java.lang.String, java.lang.String) of a null object loaded from local variable 'inMsg'

    below is my XML transformation .xsl data

    <?bpc.pltype.out bpm.pltype=xml?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:b1e="urn:com.sap.b1i.sim:b1event" xmlns:b1ie="urn:com.sap.b1i.sim:b1ievent" xmlns:b1im="urn:com.sap.b1i.sim:b1imessage" xmlns:bfa="urn:com.sap.b1i.bizprocessor:bizatoms" xmlns:exslt="http://exslt.org/common" xmlns:jdbc="urn:com.sap.b1i.adapter:jdbcadapter" xmlns:js="com.sap.b1i.bpc_tools.Javascript" xmlns:rev="urn:com.sap.b1i.adapter:revaadapter" xmlns:rfc="urn:sap-com:document:sap:rfc:functions" xmlns:sim="urn:com.sap.b1i.sim:entity" xmlns:utils="com.sap.b1i.bpc_tools.Utilities" xmlns:vpf="urn:com.sap.b1i.vplatform:entity" xmlns:xca="urn:com.sap.b1i.xcellerator:appconfig" xmlns:xci="urn:com.sap.b1i.xcellerator:intdoc" version="1.0" exclude-result-prefixes="b1e b1ie b1im bfa jdbc js rfc utils xci xca vpf exslt sim rev" b1e:force="" b1ie:force="" b1im:force="" bfa:force="" jdbc:force="" js:force="" rfc:force="" utils:force="" xci:force="" xca:force="" vpf:force="" exslt:force="" sim:force="" rev:force="">
            <?prodver 1.0.0?>
                <xsl:include href="../../com.sap.b1i.dev.repository/IDE/init.xsl"/>
                <xsl:variable name="msg" select="/vpf:Msg/vpf:Body/vpf:Payload[./@Role='S']"/>
                <xsl:variable name="msg1" select="/vpf:Msg/vpf:Body/vpf:Payload[./@Role='T']"/>
                <xsl:template match="/">
                    <vpf:Msg>
                        <xsl:copy-of select="/vpf:Msg/@*"/>
                        <xsl:copy-of select="/vpf:Msg/vpf:Header"/>
                        <vpf:Body>
                            <xsl:copy-of select="/vpf:Msg/vpf:Body/*"/>
                            <vpf:Payload Role="X" id="{$atom}">
                                <xsl:call-template name="transform"/>
                            </vpf:Payload>
                        </vpf:Body>
                    </vpf:Msg>
                </xsl:template>
                <xsl:template name="transform">
                    
                        <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/">
                            <soapenv:Header/>
                            <soapenv:Body>
                                <tem:ReadEvent>
                                    <tem:request>
                                        <DataOperation>
                                            <xsl:value-of select="$msg1/Event/b1e:b1events/b1e:b1event/b1e:transactiontype"/>
                                        </DataOperation>
                                        <DocEntry>
                                            <xsl:value-of select="$msg/BOM/BO/Documents/row/DocEntry"/>
                                        </DocEntry>
                                        <DocType>17</DocType>
                                        <Schema>
                                            <xsl:value-of select="$msg1/Event/b1e:b1events/b1e:b1event/b1e:eventsource"/>
                                        </Schema>
                                    </tem:request>
                                </tem:ReadEvent>
                            </soapenv:Body>
                        </soapenv:Envelope>
                    
                </xsl:template>
        </xsl:stylesheet>

     

    • Hi Rakesh,

      Have you Activated with Detailed Logging? then you will be able to debug step by step, and check the inbound payload of your xform step.

      Kind Regards, Yatsea