Monday, December 16, 2019

How to Choose or evaluate Ipaas Service

Why iPaas

With the rapid adoption of cloud computing and mobility the need for application integration is growing exponentially. Earlier we had only one option i.e. to buy server based integration products to cater the integration needs but now we have another option as well - Integration platform as service(iPaas).

iPaaS creates a cloud deployment model and addresses the needs of both technical and organization (Reduced downtime and Reduced maintenance costs). There are loads of company’s offering iPaas services like 
Azure Itegration services,Dell Boomi, Oracle Integration Cloud,TIBCO cloud, Informatica, SnapLogic, Jitterbit, Mulesoft etc to name few of them and everyone claims to be leader 😉. 

So if you are asked to choose among-st them, which one will you go for? What will be your considerations while doing so? It should not be biased – shouldn’t be influenced by any reports.

Below are few considerations, which I think should be looked at first, if I missed some important point then do let me know 😊

1. Usability: 

The first thing over here is the learning curve – how easy it is to understand the tool/service and how easy it is to get started with implementing the solutions. A good documentation around the tool/service from company would be the key.

Second thing is  the degree of complexity involved in the installation or procuring the instance of the tool/service, the additional  tools that you need, the ease of usability and features of the development environment. This majorly impacts development efforts and time to market.

2. Manageability: 

Most of the time is spent here, managing the tool/service. What all options are available – User friendly Graphical User Interface(this is must), command line, Rest api’s etc.

The monitoring capabilities – the level (granularity of the details) upto which tracking is available and features on top of it like Resubmit, Download etc.


3. Community:

Having a strong community around the tool/service is of great help as not everything is shared by the company in the documentation(it’s not possible). Loads of content, tips and tricks are shared in community which is result of hands on experience  and public forums where you can ask questions and get answers - it does save lot of times and many times helps reducing loss.

4. Company support:

Technical Support from the company is an always necessary thing to have, it’s actually face of company (service provider). Here you need to know whether the support service is provided during business hours, if it has a direct line, e-mail, on-site support, etc. 

Here we should be looking at the degree of proactive support available and a way to report a bug or any custom requirements. 

5. Functionality: 

Here the basic expectation would be that you should be able to develop, deploy, execute and govern cloud and hybrid integration flows without installing or managing any hardware or middleware and cloud features such as multitenancy, elasticity, and self-provisioning.

And following capabilities 
  • Support for secure communication protocol connectors, such as FTP/SFTP, HTTP/S, AS2/AS3/AS4, OFTP/OFTP2 etc
  • Support for various data formats, such as XML, JSON, ASN.1 etc
  • Support for various data standards, such as EDI X12, EDIFACT, HL7 etc
  • Support for IoT protocols, such as AMQP, MQTT, Kafka etc
  • UI based mapping tool
  • Support for Integration flow development and life cycle management tools

6. Flexibility: 

No product is complete at any moment of time, there is always something which is missing and has to be added or is good to have. And there might be many requirement where we can’t wait for the feature to be released. Will it be possible to customize the tool/service based on the company’s specific need?

7. Expansion ability: 

There are many already existing organizations who have defined various standards(structure, security, transmission) based on industries domain, government laws etc. which are to be followed . Many standards will be added going forward.What types of standards do the tools/service support? Does it have extensions which can be leveraged on top of basic Integration Interface?

8. Connectors: 

This is very important aspect, as there are loads of apps/systems getting introduced in market everyday and you never know which system/app you will have to integrate with. The more connectors we have the better it is. But the must ones are the enterprise connectors for B2B products like SAP or Salesforce etc. and make sure that it at least supports all of the applications being used by your organization.

9. Licenses: 

What are the type of license and subscription model available to choose – matching to our requirement. Do we have an option to upgrade/downgrade or change the subscription model based on our needs and what about the updates - are they free? 

10. Costs: 

And finally, last but not least - what will the total cost of owning the integration service?

Now let’s go a level down, i.e. what actually is your need ?

Broadly Integration need can be categorized as
  1. EAI – Here the enterprise applications made to communicate with each other i.e. connecting multiple independent systems/applications which are part of IT landscape of the enterprise. 
  2. B2B – Here applications/systems of business partners are made to communicate with each other.

For above the How it is/can be done can be categorized as
  1. Workflow/Business Process Automation/Process Orchestration
  2. Asynchronous Messaging 
  3. Event Based
  4. API based

Seeing that some enterprises only needs event based integration or workflow based integration(not all discussed above), most of the iPaas service providers have segregated the services thus removing a need to buy whole package and only opt for the ones you need. 

Like for workflow we have options like 

Azure Logic Apps, MuleSoft Anypoint Platform,AWS AppSync,TIBCO Cloud Integration etc

Depending on the needs within the enterprise, a specific service may be better suited to solve integration challenges you face. If you need all of them, then procure the required service as and when needed or if you see an option where buying a package(Whole Integration Suite) would cost less then go for it (if this option is available).

Related Post 

Sunday, November 3, 2019

Getting Started with Logic Apps - XML to EDI X12

Continuing from last post where I explained the basics of EDI and EDI X12 standards, let’s  see how we can enable EDI communication with Logic Apps

Logic Apps and EDI together

Earlier it was BizTalk from Microsoft which has all capabilities around Enterprise Application Integration(EAI) and Electronic Data Interchange (EDI)(which is server product) but with the cloud shift where everything is desired as service, Microsoft provided Logic Apps to cater the integration needs for cloud users and it is continuously getting matured (most of BizTalk capabilities already added).

Read more about Logic App Fundamentals

To enable the logic apps to be leveraged in Business to Business EDI communication Microsoft introduced Enterprise Integration Pack,  which adds B2B capabilities like AS2 and X12, EDI standards support , XML capabilities like XML Validation, XSLT Transformation, Flat file to XML encode/decode etc.(Available as actions in Logic app e.g., AS2 Decode, Encode to X12 etc)

And an Integration Account which can be used to store all the artifacts required to run the Enterprise Integration like schema, maps(xslt), partners, agreements, certificates etc.

Note : If you have worked on BizTalk, then you know that it had capability of storing artifacts as it had dedicated database for that  whereas Logic App is way to orchestrate a business process in which you connect various applications/services/components and for that you create API connections, and only those connection information is stored in Logic App and not any artifacts. Thus the need of Integration Account.

To make Logic App for B2B communications use of Enterprise Integration Pack is to be done and below are the steps to be followed
     1. Create Integration Account
     2. Add the artifacts which you would be needing in Integration account i.e.,     Schemas,maps, Partners etc.
     3. Create a Logic App
     4. Link the Integration Account to Logic App
     5. Use the artifacts

Now, let’s focus on topic of this post of – enabling Logic App for EDI X12 communication


Say there is a company Techfindings and it wants to place an order with it’s partner company. But the partner company accepts Purchase order only in EDI X12 850 format whereas Techfindings system generates XML based order.

Steps in creating solution

    1. Create Integration Account

     On Azure portal, select All services and search for  "integration account" as your filter, and select Integration Account

create Integration account

Give Name , select subscription and resource group. Under Pricing Tier as Free and location where it is to be kept.

     2. Create/obtain the schemas

You would need Visual Studio to create/edit the schemas and maps. Also you will have to add following extension - Microsoft Azure Logic Apps Enterprise Integration Tools for Visual Studio 2015 2.0

Note: No extension available in later version above 2015, as the extension is borrowed from BizTalk and last release of it is BizTalk 2016(extension is based on the BizTalk components and those components are only available for Visual Studio 2015). As soon as new version of BizTalk is out then the extension for BizTalk associated Visual studio would be available.

sample XML Order Schema

Above is  XML Order Schema and below is the XML representation of EDI X12 850 schema, it can be downloaded from

EDI X12 850 schema

     3. Create map
    As we need to produce EDI X12 850, select Order XML as source and EDI 850 as destination schema
order xml to edi 850 map

  Once mapping is done, test and validate it (make sure all warnings and errors are resolved)

validate map

    and make note of path where xslt is stored,as it is this which is to be uploaded to integration account (.btm file is not supported).

xslt path

  Following is the xslt

  <?xml version="1.0" encoding="UTF-16"?>
   <xsl:stylesheet xmlns:xsl="" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:var="" exclude-result-prefixes="msxsl var s0" version="1.0" xmlns:s0="http://Inbound_EDI.OrderFile" xmlns:ns0="">
  <xsl:output omit-xml-declaration="yes" method="xml" version="1.0" />
  <xsl:template match="/">
    <xsl:apply-templates select="/s0:OrderFile" />
  <xsl:template match="/s0:OrderFile">
          <xsl:value-of select="Order/Header/PONumber/text()" />
          <xsl:value-of select="Order/Header/PODate/text()" />
            <xsl:value-of select="Order/Header/CustomerContactName/text()" />
            <xsl:value-of select="Order/Header/CustomerID/text()" />
            <xsl:value-of select="Order/Header/CustomerContactPhone/text()" />
        <xsl:for-each select="Order/LineItems">
              <xsl:value-of select="PONumber/text()" />
              <xsl:value-of select="Quantity/text()" />
              <xsl:value-of select="UOM/text()" />
              <xsl:value-of select="Price/text()" />
              <xsl:value-of select="ItemOrdered/text()" />
              <xsl:value-of select="Description/text()" />

     4. Add schemas and map to Integration Account

Go to the integration account created earlier in step1  and select the Schemas tiles and click on add button.

add schema

Give name and browse to schema path and select the schemas, below is how it should look

Add schemas in integration account

Go to the integration account created earlier in step1  and select the Maps tiles and click on add button. 
   Give name and browse to xslt path(saved in step 3) and below is how it should look

Add map in integration account

     5. Add Partners

Go to the integration account created earlier in step1  and select the Partners tiles and click on add button.

The partner which represents your organization is known as host partner -Techfindings is identity value given which is mutually defined thus qualifier is ZZ and the second partner is known as the guest partner - EDIPartner is identity value given which is mutually defined thus qualifier is ZZ. The guest partner can be another company, or even a department within your own organization.

Add partner in integration account

     6.  Add Agreement

Go to the integration account created earlier in step1  and select the Agreement tiles and click on add button.

Add agreement in integration account

You and your trading partner mutually decide about how the communication has to be done i.e. protocol or transport-specific. In our scenario its X12 protocol based communication.

For transport specific B2B communication read - Getting Started with Logic Apps - AS2

Here as we are going to send EDI document, Send settings of the agreement has to be defined.

Send Settings is organized into these sections:

1. Identifiers -we have not use any Identifier
2. Acknowledgmentwe have not chosen any acknowledgement as we don't need it 
3. Schemas - we have selected 00401 as version, 850 as Transaction type and EDI_850 as schema

Note: In case where some other EDI documents is to be sent to same Partner, then we need to select Schema and Envelope for that as well(in same Agreement).

4.Envelopes - Standard Identifier and default values for GS
5.Character Sets and Separators - UTF 8
6.Control Numbers - Control number is added when edi doc leaves, thus a range is to be defined, here it is starting from 1 till 999999999

EDI x12 agreement send setting

Check following Microsoft article for more details about Send Settings -

     7. Create Logic App and link Integration Account

Create logic app, add http trigger and save it. Go to workflow settings and link the integration account created in step 1

link integration account

     8. Design the logic App

XMl to EDI X12 Order Processing Logic App

The logic app receives xml based Purchase Order over http, then it is transformed in xml representation of EDI X12 850 with help of Transform XML action. 

Provide triggerbody() as  content and select OrderFile_to_EDIX12_850 as Map (xslt )
Transform xml to EDI 850 XML

transformed EDI 850 XML is passed on to Encode to X12 message action.

Here we can use either of the option
i. Encode to X12 message action by identities
ii.Encode to X12 message action by Agreement 

In any option first we need to create connection to Integration account - it is via this connection, Agreement is referred by this action from Integration Account

create IA connection

Option 1 - Here the identifiers are provided based on it Agreement is selected and  EDI XML is encoded to EDI text file alongwith the applied envelopes(ISA-IEA and GS-GE).
encode to x12

Option 2 - Here you directly give the name of Agreement which is to be referred for encoding EDI XML to EDI text file

and in last step the EDI file is sent as an attachment via email . And content for that is Payload of above step (Encode to X12 message)

send email setting

Although I have used email, the partners can choose http based service to receive file,FTP, SFTP and FTPS etc.


Below is xml order test input posted using ARC

test input

and email is received with EDI 850 file as an attachment



In this post we covered the fundamentals of B2B EDI communication and walkthrough the steps on  how to make it cloud based using Logic Apps and Enterprise Integration pack.

Related Post 

Saturday, November 2, 2019

Getting Started with Logic Apps - EDI X12 Fundamentals

Few days back I was contacted by a beginner asking to guide on getting started on Logic Apps and EDI X12, although I tried to help him over call but thought of writing a post so that other beginners can be benefited.

Have tried to cover basics of EDI X12 in this post and how to use it in context to Logic app in following post - Getting Started with Logic Apps - XML to EDI X12

What is EDI?

In Layman term any data which is interchanged using electronic medium can be said as Electronic data interchange (EDI) .

Wikipedia says - Electronic data interchange (EDI) is the concept of businesses electronically communicating information that was traditionally communicated on paper, such as purchase orders and invoices.

Traditional way

Here the documents are created, put together in an envelope and sent across via mail/courier service and delivered to the receiver. In acknowledgment to receipt of documents, the receiver would sign on the delivery receipt and the sender may be informed back by mail/courier service provider.

Traditional Way of business

The sender can send a single document, say a single purchase order or multiple Purchase orders in an envelope. Also they can send Purchase order and Invoice document in an envelope to same receiver.

Details like whom to deliver, who is sender (To and From address) were provided over on an envelope by the sender and the mail service provider would stamp it which would then imply the date and time etc.

EDI way

EDI way can be defined as the transfer of structured data, by agreed message standards, from one computer system to another without human intervention.

EDI Way of business

There are many standards like  X12, EDIFACT, TRADACOM,ODETTE, etc. based on regions, business domains, government laws and lot of research but the intention of all is to define structured way for the entities/organisations/business  to create and send the documents.

The EDI standards are designed in such a way that it helps to create documents with most of the details along with the Interchange details (envelope details like To, From, Timestamp etc), and are released for use as a specific version e.g., 4010, 5020, 6010 etc.

Each time there is change i.e., amendments or reductions in the fields, change of data types etc then a new version is released, it can be major or minor release.

Say 4010 is current version in use and if some major changes are introduced then next version becomes 5010(version 5 Release 1) else if it is minor version then next version becomes 4020 (version 4 Release 2).

And certainly adding following benefits
  • Time and cost saving
  • Increase processing Speed
  • More Accuracy due to elimination of Manual errors
  • Secure and simple

EDI X12 Standard

EDI X12 is governed by standards released by ASC X12 (The Accredited Standards Committee) mainly used in US. Each release contains set of message types like invoice, purchase order, healthcare claim, etc. Each message type has specific number assigned to it instead of name. e.g., purchase order is 850, an invoice is 810 etc.

List of EDI X12 documents -  EDI X12 Documents List

Standard EDI X12 format data is text file separated by segment, segment delimeter, element , element delimeter and sub-element delimiters.
Segments always begin with a 2-3 letter code like ST or ISA. Some segments are mandatory, while some are not.

The mandatory segments of X12 are:

1.ISA(Interchange header) - It is the first segment and unlike any other segment in X12, ISA is fixed length of 105. This has information about the sender and recipient, version number.

The ISA Segment has the following structure

ISA01 Authorization Information Qualifier (length – 2)
ISA02 Authorization Information (length – 10)
ISA03 Security Information Qualifier (length – 2)
ISA04 Security Information (length – 10)
ISA05 Interchange ID Qualifier (length – 2)
ISA06 Interchange Sender ID (length – 15)
ISA07 Interchange ID Qualifier (length – 2)
ISA08 Interchange Receiver ID (length – 15)
ISA09 Interchange Date (length – 6)
ISA10 Interchange Time (length – 4)
ISA11 Interchange Control Standards ID (length – 1)
ISA12 Interchange Control Version Number(length – 5)
ISA13 Interchange Control Number (length – 9)
ISA14 Acknowledgment Requested (length – 1)
ISA15 Test Indicator (length – 1)
ISA16 Subelement Separator (length – 1)

   2. GS(Functional group header) - It is the second segment and is a set of X12 documents of the same document type (transaction set). It has information about the functional group, e.g. codes for the sender, recipient, and date/time of preparation.

The GS Segment has the following structure

GS01 - Functional Group Header Code(min/max – 2/2)
GS02 - Application Sender's Code(min/max – 2/15)
GS03 - Application Receiver's Code(min/max – 2/15)
GS04 - Date(min/max – 8/8)
GS05 - Time - HHMM(min/max – 4/8)
GS06 - Group Control Number(min/max – 1/9)
GS07 - Responsible Agency Code(min/max – 1/2)
GS08 - Version Code(min/max – 1/12)

    3. ST(transaction set header) -  It is the third segment, this marks the start of a transaction set in an interchange.

The ST Segment has the following structure

ST01 - Transaction Set Identifier Code - A three digit numeric code identifying the Transaction Set type
ST02 - Transaction Set Control Number

    4. SE(Transaction set trailer)- This marks the end of a transaction set.

The SE Segment has the following structure

SE01 - Number of included segments
SE02 - Transaction Set Control Number - Must match the Transaction Set Control Number in the ST.

    5. GE(Functional group trailer) - Segment of a set of X12 documents of the same transaction set. It tells you the number of functional groups and the control group number. It also marks the end of a group of transaction sets.

The GE Segment has the following structure

GE01 - Number of included Transaction Sets
GE02 - Group Control Number - Must match the group control number of the GS

    6. IEA(Interchange trailer)- this marks the end of the interchange. It contains information about the number of functional groups and the interchange control reference number. 

The IEA Segment has the following structure

IEA01 - Number of Included Functional Groups
IEA02 - Interchange Control Number - Must match the control number in the ISA.

i. There will be only one ISA and IEA segments present in an Envelope
ii. There can be multiple GS in an envelope.
iii.There can be multiple ST's

Above mandatory segments will be part of  every EDI X12 document no matter if it is EDI X12 850, 855, 810, 856 etc but the segments between ST and SE can vary from document to document.

If compared to XML structure - a segment is equivalent to a record type and each segment is separated by segment delimeter .A segment is composed of one or more data elements or composite data structures, which are equivalent to the fields in a record and each element is separated by element delimeter.

EDI X12 850 Sample

In the EDI X12 850 sample shown below "*" is the element separator and "~" is the segment separator. It has details of a single purchase order with two items.

ISA*00*          *00*          *ZZ*Techfindings   *ZZ*EDIPartner     *191031*0943*U*00401*000000010*0*T*:~
N1*BT*Maheshkumar Tiwari**2341~


EDI X12 850 sample

Related Post