Dell Boomi Implementation Planning Guide
Dell Boomi Implementation Planning Guide
10
11
12
13
14
15
16
17
18
19
The intention of this guide is to provide general development standards and best practices for
integrating systems and applications within an organization using the Boomi technology.
2.1 Overview
Standardization is a way for an organization or enterprise to help reduce the risk of
uncontrolled and poorly developed processes impacting the day-to-day operations where the
impact affects users, data quality, and revenue for the organization.
This guide will provide a list of standard integration patterns and techniques commonly used
and implemented by the Boomi platform. Additionally, it will provide guidelines that
Integration Developers can reference and utilize to maintain a best practice format while
creating, deploying, and maintaining processes.
20
21
22
Additional users are given access to the AtomSphere Integration platform through Setup >
User Management. Users are granted different levels of access through a role-based access.
Roles are collections of individual privileges that control access to specific functionality
within the application.
Integration provides several default roles out of the box or you can create custom roles. Users
may be assigned multiple roles in which they can get a multitude of different privileges.
Only users with a valid user account can access the Integration platform. To create a user, go
to the account Setup section of the Integration platform, which can be found in the upper-
right section of the user interface (UI), and click the drop-down arrow to the right of the
message icon. Click Setup > User Management to access the “Users” administration section.
23
Click the plus icon in the Users menu. This will populate a “Add/Maintain User Roles” Menu.
Fill out the menu and select the appropriate role for the user. Select OK and the user will
automatically be saved.
24
User Management
The primary method for managing user access to your account is through User Management.
Here you create new users and assign roles to control access to various functionality within
the application.
To configure User Management, go to Account menu > Setup > User Management.
For more information see Understanding User Management and Custom Roles.
25
By default accounts permit access by the Boomi support team. Access to your account can be
helpful or necessary when working with support to troubleshoot errors and review
configuration.
Access is controlled by selecting the role that will be applied to support personnel accessing
your account. By default this is the Administrator role but you can choose any standard or
custom role available in your account. For example you could select a "read only" role that
allows support personnel to "look but not touch" setup within your account. To disable support
access entirely, select "--No Access--".
To configure support access, go to Account menu > Setup > Account Information > Support
Access Role.
Single Sign On
You can enable Single Sign On (SSO) for your Integration to use an external identity provider
to authenticate users. Users must still be configured within Integration's User Management
because the platform performs the authorization (what they are allowed to do once in
AtomSphere). However, upon login, users are first authenticated against an external identity
provider of your choosing before accessing Integration.
To enable and configure Single Sign On for your account, go to Account Menu > Setup > SSO
Options.
Using SSO can be a convenience to end users who may be accessing Integration from a
company portal or another application because they do not have to manually log into
Integration and remember their credentials. SSO is beneficial to organization administrators
by allowing them to manage users' access to Integration from their central identity provider.
For example, if an employee leaves the company, their access can be terminated from the
26
Considerations:
• Once SSO is enabled, all users except those with the Administrator role will not be
able to log into Integration directly.
• Administrators will continue to log into Integration directly.
• User roles and authorization are still managed within Integration.
• Integration SSO uses SAML 2.0.
• There are special considerations for users with access to multiple accounts
• See How to Use Single Sign-on for more considerations
Requires the Account Groups feature, typically enabled for partner and parent-child account
hierarchies.
Partners with child Integration accounts will additionally use Account Groups to manage user
access to child accounts. The Account Groups feature is only enabled in the parent account.
You can define any number of Account Groups that represent logical groupings of child
accounts. Users are added to an Account Group which grants them access to the child
accounts within that group.
It may be helpful to think of it like this: User Management controls access to the parent
account. Account Groups control access to all the child accounts.
27
• Account Group users are separate from User Management users. Account Group users
do not have exist as User Management users.
• To add the same user as both a User management and Account Group user, simply use
the same user ID/email.
• Roles are assigned per user per Account Group. This means two users in the same
group can have different roles, or the same user can have different roles in different
groups.
As a best practice to facilitate user administration, manage access for your partner users to
all child accounts through Account Groups in the parent account. Do not add partner users
directly to the individual child accounts through each child account's User Management.
However, if end customers require access to their individual child account, it is best to
manage those customer users with through the child account's User Management.
When setting up user accounts, you can decide to use the default roles provided in the
platform to assign a new user, or you can create custom roles. The privileges associated with
these default roles are granted to the user. You can also set up a user with a combination of
roles to provide extra privileges; note that the role with greater privileges takes precedence
over the other roles.
28
3.1.4 Privileges
Privileges are rights reserved to a role that allow a user to access or perform actions in a
specific area of the Integration platform. Privileges have been defined by Boomi at a level
that allows for fine-tuning of custom roles. For example, you can restrict specific roles from
viewing data on the Boomi platform via the User Management interface (figure 1). Or, you
could restrict a role from having access to the Process Deployment privilege so that a user
couldn’t deploy changes. Similarly, you can control the access to the Build, Deploy, and
Manage tabs by adding or removing privileges. (Custom roles section).
Note: The privileges associated with the default roles can’t be modified. To find the list of
privileges associated with default roles, choose the roles in the Inherits Role dialog box
(figure 4).
29
Note: If you use a single Boomi account, account groups are not available and not required.
Master accounts and the Account Groups tab are for administrators of a master account who
30
Platform features and resources are enabled for accounts, not for individual users. Users have
access to an account and therefore have access to the account's features and resources.
31
• Direct Access — The user is assigned role(s) directly on an account by using the User
Management tab.
• Account Group Access — The user is assigned role(s) through one or more account groups by
using the Users in Group list.
Users added to the Account Groups tab in the Users in Group list are independent from the
users added directly to the User Management tab. If two instances of the same user exist for
both Direct access and Account Group access, the Direct access user role and privileges takes
precedence when that user logs into the account.
Note: There is no more inheritance-based user access. You can no longer switch into an
account based on having access to a parent account. Account groups take the place of a
parent/child account relationship.
• Multiple users can be assigned to an account group and each user can have a different role
within the group.
32
• A user can be a member of multiple account groups and can be assigned a different role in
each account group.
Note: Users must log in to the Boomi AtomSphere platform before they can be added to an
account group.
The partner has four users that need to share the development and support duties for these
customer accounts. The users are:
• ServUser1@boomi.com
• ServUser2@boomi.com
• ServUser3@boomi.com
• ServUser4@boomi.com
33
• The users ServUser1 and ServUser2 need to have the Standard User role so that they can
effectively develop and test processes in the Doc ABC Company and Doc DEF Company
accounts.
• The users ServUser3 and ServUser4 need to have Standard User role so that they can
effectively develop and test processes in the Doc GHI Company and Doc JKL Company
accounts.
Two account groups can be added to handle the different Services teams and to distribute
account access.
The users ServUser1 and ServUser2 are added and granted the Standard User role so that they
can handle all development and managements tasks for the Doc ABC Company and Doc DEF
Company accounts.
34
In the All Accounts account group, all four users are added with the Support or Production
Support role so that each user gets a union of the roles and privileges that are distributed
across account groups.
35
If the default roles in the platform don’t meet your organization’s needs, you can create
custom roles and assign them to a user. These roles can then be assigned privileges that are
in line with your company’s established development lifecycle practice. All privileges must
manually be assigned to custom roles. Additionally, when you’re creating custom roles, the
platform lets you assign inherited privileges associated with existing standard or custom roles.
Additional privileges can then be granted, if required. Within the User Management menu,
select the Custom Roles tab. Select the plus icon to populate the Add/Edit Role menu.
36
You can allow users to view process logs and/or execute and rerun processes but not view the
resulting data and documents from the processes.
For example, a person who is responsible for running processes that manage personnel or
financial data needs to run processes and ensure that they execute successfully. However,
they should not have access to sensitive data that flows through the processes.
The “View Data” privilege allows users to view data and documents on the Process Reporting
page. All user roles delivered with Boomi Integration have the View Data privilege turned on.
Therefore, you must create a custom role that allows users to view process execution activity
and logs and/or to execute processes on the Process Reporting page, but it restricts them
from viewing data.
Note: If you set up a custom role in a master account, that role can be shared with other
accounts through account groups.
The privileges for a role that restricts users from viewing data should be set as follows:
37
Users who are assigned a custom role with these privilege settings have access to the Process
Reporting page. Accessed through the Manage drop down >> Process Reporting.
However, if users select a process and view the document results on the bottom of the page
they do not see the following options:
You can allow users to view components but not create, edit, copy, delete, or save
components.
38
The Build Read Access privilege gives users read-only access to the Build page. You can create
a custom role that includes the Build Read Access privilege and assign it to these users.
Note: If you set up a custom role in a master account, that role can be shared with other
accounts through account groups. For more, access the User Guide here: Controlling User
Access, Boomi User Guide
Users who are assigned a custom role with the Build Read Access privilege turned on see the
following:
Note: If a user has the Build Read and Write Access privilege AND the Build Read Access
privilege turned on, the Build Read and Write Access privilege adds the ability to create, edit,
39
When you replace a user’s “Build, Read, and Write Access” privilege with the “Build Read
Access” privilege, their privileges change immediately. If the user is logged into the
Integration platform when you make this change, and if the user tries to change a component,
they are unable to save it even though they can still see the Save buttons on screen. Instead,
the user receives an error message. The user must log out and log back in to see the changes
in the user interface.
You can allow users to view but not modify the properties and settings of Atoms, Molecules,
and Atom Clouds on the Atom Management page.
For example, your Support team needs to view the Release Control Scheduling settings for an
Atom but does not need to change those settings.
The Atom Management Read Access privilege gives users read-only access to the Atom
Management page. You can create a custom role that includes the Atom Management Read
Access privilege and assign it to these users.
Note: If you set up a custom role in a master account, you can share that role with other
accounts through account groups.
40
In Setup > Account Information, you can manage the Boomi support teams to access your
account. You can choose to revoke access completely or grant access as a specific user role.
Note that granting access allows the support team to more easily assist with issue
troubleshooting if needed.
It is a best practice to establish separation of duties and not allow all Integration users
complete access to all environments. For example, developers should be able to access the
41
This type of access control is configured by restricting roles to one or more environments
within the Atom Management screen. By default, all roles have access to all environments,
however once a role is explicitly assigned to an environment, users will only be able to see
that environment and perform privileges within that environment as defined by the role.
Select the Manage dropdown menu then select Atom Management within the dropdown. Next
select the environment you wish to customize. Figure 5 shows the Production menu. In the
configuration section you can customize the “Roles with Access”.
• Dashboard
• Deploy tab
• Process Reporting
• Atom Management
42
It is possible for a user to be assigned to multiple roles and those roles to be assigned to
different environments. In this situation, the actions a user can perform within a given
environment will vary based on the role.
• “Developer” role includes privileges Build Read and Write, Deploy, Execute Process,
and Process Reporting.
• “Developer” role is assigned to the “DEV” environment.
• “Support” role includes privileges Process Reporting and Dashboard.
• “Support” role is assigned to the “PROD” environment.
A user is assigned both the “Developer” and “Support” roles. The user will be able to do the
following:
Note: Be aware that the Environment Management privilege grants the ability to view and
modify all environments within the Atom Management screen. To only permit viewing and
modifying of a specific environment, configure the role to only include the Atom Management
privilege.
In the Build console, user access can be restricted per folder. The optional folder permissions
configuration can limit the user roles allowed to edit components within that folder. It does
not hide the folder from view or prevent viewing or copying components within the folder.
43
Folder restrictions only apply to the Build tab Component Explorer and do not apply to other
tabs including Deploy, Atom Management, and Process Reporting.
Can you please further elaborate on the usage and storage of the
Private Key, and why this key is stored in the Boomi Data Center?
An account is associated with one public/private key pair. Connector passwords are encrypted
and stored using the account’s public key, and we use the account’s private key to decrypt
them at runtime. Processes are run from the data center. So, the private key must be
available to us when we run processes.
44
This can be configured by the account admin. The Password Policy tab on the Setup page is
used to establish rules for passwords used by users of the account. You can turn on or off any
of the password rules.
If you change the account's password policy and there are already users of the account whose
passwords may or may not match the new policy that you put into place, the next time that
they log into the Boomi platform they will see a message informing them that the password
policy has changed. The message lists the new rules that are in place and informs users that
they must enter their current password as well as a new password that conforms to the new
policy. If a user's current password happens to match the new policy, they will be able to
continue to use it by entering the current password in all of the fields.
This can be configured by the account admin. The following rules are available when you set
a password policy for an account. You can select none, any or all of these rules:
45
After 6 incorrect login attempts, the user is locked out and the account administrator will
receive an alert email indicating what account was attempting to be logged into
unsuccessfully.
Does Boomi retain a log that captures user login attempts / fails /
successes for a period of time?
This is logged as part of the general platform logs. This information is not publicly available
and is managed by the Boomi team.
By default, the Atom will automatically download and install platform updates on the release
date. However, the Release Control feature allows you to apply new Atom (or Molecule or
Cloud) and connector updates at any time during the two weeks before the full release. This
allows you to select a time within that window that’s convenient for you to get and test the
updates. The pending updates are applied per Atom. You can update your “Test” Atoms and
test the changes against your processes before the full release. If you are happy with the test
results you can apply the changes to your “Production” Atoms and move the updates into your
production environment before the full release.
On the full release date all users will receive enhancements and user interface changes. Users
who have not adopted the Atom and connector updates in advance will get those updates as
well.
Boomi AtomSphere Platform users are located all over the world. They work in many different
industries. Their business hours vary. They can have Integration processes running at any time
of the day or night. Therefore, no particular date, day of the week, or time of day will be
convenient for everyone to receive a new release. Boomi realizes this and wants to minimize
the impact of new releases on your business.
46
No, in general Java updates must be applied manually by the customer. They are not included
as part of the regular AtomSphere release.
Yes, all communication is initiated by the Atom. The Atom will not attempt to change any
port settings you have configured on your network. Traffic is defaulted to outbound traffic
only, but with the Web Services Connector, the Atom can listen to incoming traffic if the port
is opened.
• Your training account expired already. Please follow this, What do I do if my master
Training Account expired? to restore your account
• Your username/password combination is wrong, try resetting your password
Please contact your Boomi account manager or sales representative to enable the feature
and/or for more details of cost and information. Common features include:
• Advanced User Security - to create custom roles and enable the SSO options tab
• Version Control - for revision history
• Component Locking - lock components so other non-admin users cannot edit it
• API Management - more API types (API type can be Advanced) and options, API
management, CORS options
47
You will have to contact your Boomi account manager also for:
It would be best if you reset your password when you are available to receive the email since
the password link only lasts for 30 minutes.
1. Go to https://platform.boomi.com/
2. Type in your username, it should be your email address
3. Click "Help. I forgot my password"
4. This link is only valid for 30 minutes
It'll be best to bookmark that other account if you plan to use it frequently. If you are an
administrator, you'll be able to log into the platform normally.
48
If you are resetting your password for a trial or training account and not receiving any emails,
your account is most likely expired, please follow this, What do I do if my master Training
Account expired? to restore your account. Once restored you should be able to login again, if
not reset your password.
You are most likely not part of any account anymore. Your user account was removed,
whether by accident or not please contact your Administrator on that account.
I just made a training account and received the email to login but I
cannot login?
The account is most likely still being created. Wait up to 30 minutes. If you are still not able
to login, contact support@boomi.com.
If you have a training account, your account ID will include "training" in it. Enroll in any
course on the train.boomi.com site to extend your expiration date. You can also complete
and enroll in the Boomi Essentials course to extend the expiration date. You will be able to
complete and re-enroll in the Boomi Essentials course as many times as you want. You can
also follow this, What do I do if my master Training Account expired?
49
Contact your account manager and let them know how much long you need it. Once they
approve, you can cc support (or the account manager can extend it) and support can extend
it for longer.
Boomi Support is unable to add users for security reasons pending other circumstances like
your administrator leaving or no one in your company has administrator access, etc. Your
administrator will have to add your new user. If your administrator is not available, you can
contact Boomi Support and cc your account manager so they can verify your request.
Training and trial accounts do not have access to a support portal. Active accounts can open a
support case or send a case to support@boomi.com with the email address, first and last
name or user, and account ID. Only one email address can be associated with a support portal
for an account. If you have a support portal for company A and want a support portal for
company B, you will either have to switch your support portal to company B or have a second
login (with a different email address) have a support portal for company B.
If you are a partner's account (not a direct Boomi client), you have to contact your partner to
enable your support portal since Boomi isn't able to modify your account information.
1. Hover over your account name at the top right, click "Setup"
2. Click on the "Account Information" tab
3. Change your "Account name" to desired display and click save
50
• Understand more about the Atom and Molecule here: Boomi Chalk Talk Series: Boomi Atom
and Molecule
51
3.2.1 Atoms
The Boomi Atom is a lightweight, dynamic runtime engine. Once your integration processes
have been deployed to your Atom, the Atom contains all the components required to execute
your processes from end to end, including connectors, transformation rules, decision
handling, and processing logic.
A local Atom is a single-tenant, single-node AtomSphere runtime engine. Single tenant means
only available for one account.
If you need to connect to applications and data locations within your local network, you will
need to install an Atom on a machine within the network.
You do not need a local Atom on each application or server that you are trying to integrate
nor does the Atom need to be installed on the same machine as the application. The Atom
needs to be able to connect to the other on-premise applications or servers.
Considerations
There are some minimum hardware requirements, but they are pretty basic:
52
• You want to access local or on-site endpoints like database, file shares, on-premise
APIs, or cloud-based platforms and APIs.
• Under normal sizing an Atom can handle processing of around 100,000 documents per
month
Super-sized Atoms refers to an Atom with more system resources allocated to it. It is not a
separate entity from a normal Atom.
By default, the machine allocates 1GB of RAM for the Atom heap. You can allocate more heap
to the JVM to increase through-put.
• You can upgrade the machine’s CPU resources to have more simultaneous executions.
Cons
53
54
3.2.2 Molecules
The Boomi Molecule is a single-tenant, clustered Atom that allows for multiple Atom
processes to run concurrently. It is the enterprise-grade version of an Atom that can be
deployed across multiple servers to enhance load balancing and ensure high availability for
mission-critical integration processes.
A Molecule consists of multiple "nodes" that are installed on multiple on-premise machines.
The nodes on the machines are grouped together to form the Molecule. Users will see only
one "Atom" instance on the Boomi AtomSphere platform's Process Reporting and Atom
Management pages, but if the Molecule is enabled it is truly a grouping of multiple nodes that
distribute processing across one or more physical machines.
The Molecule is best used in integrations that will receive and/or generate a high volume of
documents. Review the Flow Control shape to configure multi-threading and processing within
your Boomi process design.
55
• Is elected from the remaining nodes in the network and can migrate between nodes ("failover
support")
• Schedules processes
• Tends to send processes to other nodes for processing, because the head node has to take
care of the “administrative” tasks above
56
Are you satisfied with your on-premise Atom's processing time and volume handling?
• Depending on the count, size and variation of your document types, you may want to consider
Molecule processing across multiple machines. Refer to the High Volume Troubleshooting
topic to understand what could be causing memory issues and/or slowness among
your AtomSphere processes.
How much do you care if a process does not execute due to a computer outage?
• Molecules support failover, so if one "head" node dies, another node attached to the Molecule
can support the management, scheduling and execution of your processes.
Is this setup worth the extra configuration time, hardware allocation and maintenance?
57
Misconceptions
Faster than Atoms
• While overall throughput can be greater (more nodes working at the same time),
Molecules are NOT inherently faster at an INDIVIDUAL execution on a single node level.
• While it is possible to split large data sets and process in parallel across multiple threads
within a single node or even across multiple nodes (or both), it does not happen
automatically. Processing data in parallel is a conscious design decision using the Flow
Control shape.
• Molecule can do a rolling restart of each node to apply monthly AtomSphere updates.
This means there is no overall downtime for the Molecule. These settings can be
configured in the platform.
• Can access local resources (file read/write, database, many behind-the-firewall systems)
and also access cloud-based systems and APIs.
• High-Availability architecture supports fail-over and scheduled execution load balance.
• Suitable for large volumes, high performance.
58
Cons
When referring to Atom Clouds there are Boomi Atom Clouds and Test Atom Clouds in the
Americas, Europe, and the Asia-Pacific, all of which are maintained and run by Boomi. You
can deploy your cloud-based integration processes to any of these Atom Clouds to which your
account has access. You can also set up your own private Atom Cloud.
An Atom Cloud is similar to a Molecule, with several exceptions:
• It uses forked execution, which allows each integration process to execute in a separate Java
virtual machine and which is not enabled in a Molecule by default.
• It uses a High security policy, whereas Molecules use a Low security policy.
An Atom Cloud consists of one or more Cloud Molecules installed on multiple machines. The
Cloud Molecules on the machines are grouped together to form the Atom Cloud. The
Boomi AtomSphere platform assigns each account to a particular Cloud Molecule so that
processing is spread across the available Cloud Molecules. This is automatic based on the
59
• Share your Molecule across multiple customer accounts — A typical scenario is that a
Boomi partner sets up an Atom Cloud and shares it with their accounts.
• Execute and store customer data within your own infrastructure — This may be required for
security reasons, because of contractual requirements between you and your accounts, or to
comply with regulations concerning data storage.
• Process very high volumes of data — If you need to do this you need to increase the amount of
memory available per Molecule to more than the 512 MB that is allocated by default.
60
Atom Clouds use a High security policy. Custom connectors that run in an Atom Cloud have
additional security restrictions.
• If you install your own Atom Cloud, your scheduled processes will run according to the system
time of the machines on which the Cloud Molecules in your Atom Cloud are installed.
• There is currently no limit to the number of processes that can be deployed to a Cloud
Molecule in an Atom Cloud.
• Only a certain number of process executions can run simultaneously on a Cloud Molecule. If
many processes are scheduled to run at the same time, they are put into a queue. At peak
processing times, your processes start no later than three (3) minutes after the originally
scheduled time.
61
Cons
Overview
This article will summarize the system requirements and installation steps required to install
and configure an Atom, Molecule, or Cloud, on customer hosted equipment. The information
below is designed to provide a high level view of the overall process. Please refer to the
Reference material for more detailed information.
These three options, should be thought of as distinct types of Run Time Engines, all of which
are capable of executing AtomSphere processes. An Atom can be thought of as a single, stand
alone Java machine, running on a single server. In contrast, the Molecule and Clouds are
comprised of a cluster of JVMs, running across a suite of machines.
62
Hardware Requirements
http://help.boomi.com/atomsphere/GUID-0815001F-8949-42EF-9808-3C0B53A29A77.html
Servers
All three types of installs, require one or more Linux or Windows machines. For best
performance, these machines should be dedicated Boomi resources, without any other
applications installed ( Exception: There are a few connectors/applications that require the
Atom be installed locally ).
Molecules and Clouds, are both clustered systems, which require multiple machines ( referred
to as Nodes ), which each should be configured identically.
Clustered systems also require Network Storage, shared across the multiple nodes.
Operating System
The installation of all three products is supported on Linux or Windows. The choice of
Operating System, should be based on the Operations/IT resources currently in place within
your organization. For example, if you already have other Linux resources within your
infrastructure, then install a Linux Atom. This way, you can utilize the current skill set of your
team, as well as the monitoring tools that are already in place. The same would apply if you
primarily use Windows within your organization.
For each product, there will be a Java process, which runs as a service on each machine.
This service should never be run under the user account of a specific individual within your
organization, or as the "root" user. Instead, it should run as a Service User (and Group). This is
typically referred to as the "Boomi" user. ("boomi:boomi" for user:group)
63
In a clustered environment, the Boomi user and Group should be created within your Network
Domain. This way, the same User can be used across each machine in the cluster. That user
will need read and write access to the file system as described below.
The Cloud installer requires that you download and install the Java JDK prior to installing the
Cloud. However, for Atoms and Molecules, if no Java version exists on the new machines, the
installer will automatically download and install the correct version (within the Installation
directory). Optionally, you may install the Java JRE by hand, on each machine, prior to
installing the Atom or Molecule.
If you chose to install Java independently, as a best practice, we recommend running the
same version of Java as the Boomi Public Cloud (All of our QA / Regression Testing is done
against this version)
The Java version can be changed post install if required. Common reasons for this include:
• Security Updates
• The Boomi Public Cloud has updated, and you want to stay in step
• Newer Java versions may have performance improvements (Note: There is an
outstanding issue running Clouds on Java versions greater than Java 8 update 75 )
Storage
The Atom installation should be stored on a disk/partition local to the machine itself. As a
best practice, create a partition/drive ( i.e. D:/ ) separate from the Operating System. This
protects the OS from disk utilization issues, in the event that the Atom logs fill a partition.
As mentioned above, the clustered Molecules and Clouds, are primarily stored on a Network
attached system. However, Molecules and Clouds MUST be configured with "Local
Working Storage." When executions run on a particular Molecule node, temporary data will be
64
Optionally, "Local Temp" storage is configurable in all three products. By default, the JVM will
use Java temp (In Windows, this is typically the Boomi user's home directory. In Linux, this is
typically /tmp).
In clustered environments, both the Local Working Storage, and Local Temp directories, must
be local to each machine, and must be configured the same way on each machine.
For all three installation types, the Installation directory, Local Working Directory, and Local
Temp directories, must all be owned (read and write access) by the Boomi service user.
As mentioned above, Molecules and Clouds require dedicated network storage that supports
"Advisory Locking," and either NFS version 3 or 4.
As a best practice, the shared drive should be dedicated to the Boomi systems. This helps to
avoid inadvertent performance issues caused by other applications running on other systems.
The network drive should be mounted to the same directory path on each node of the cluster,
and it should be configured to remount when the machine restarts.
Just like with Local Storage mentioned above, the Boomi User must have read and write
access to the installation directory on this network drive.
3.2.4.2.3.3 Antivirus
For all three installation types, Antivirus software should be configured to ignore any
files/directories from the installation directory and below.
65
3.2.4.2.4.1 Firewall
All Network traffic between an Atom and the Platform, originates from the local system.
Therefore, it's typically not necessary to white-list the IP addresses for the AtomSphere
Platform
Note: When hosting Web Services, or AS2 connections on an Atom within your network, you
may need to open up inbound rules, specifically for those Client Applications.
Proxy settings, for outbound traffic (from your Atom), can be configured during the install,
but can also be updated post install if necessary.
Per the article above, you can also configure non-proxy-hosts if required (perhaps to connect
to an on-premise web application).
In clustered environment, the individual nodes will communicate with one another, by default
using Multicast. Before doing the install, you should determine whether your network rules
will allow for this, and whether or not you will need to run in Unicast mode. Note: Many VM
and Cloud environments do not support Multicast.
In a clustered environment, the Molecule or Cloud will load balance only scheduled
executions. Inbound Web Services or AS2 connections, will be handled by the Node that
receives them. Therefore, as a best practice, configure a Load Balancer in your network, that
will distribute the requests across the cluster. (F5 for example)
66
Depending on requirements, the LB can be configured to terminate SSL, and pass un-
encrypted traffic to the individual nodes, or it can pass SSL through to the nodes for
decryption.
As a best practice, we typically install the Molecule/Cloud within the corporate firewall, and
NOT in the DMZ. The F5/Load Balancer in these configurations can be configured as a reverse
proxy if required.
Installation
Downloading
The installer can be downloaded from the Atom Management page. The installer could be
updated each month as part of our normal release cycle, therefore, as a best practice, you
should always download the latest version before doing your install.
Permissions
During the installation, you will be asked to either enter your Platform credentials, or to
enter an Installation Token (generated when downloading the installer). If the account is
configured to use SSO, then the credentials you use must be those of a user that has "Default
Boomi Administrator" privileges.
Install
The Atom installation is run on the machine that will host the Atom service. The Molecule and
Cloud installers should be run on only a single Node in the cluster. It is not necessary to run
the same installer on subsequent nodes.
67
For Linux installs, we typically suggest using the "su" command to assume the role of the
Boomi user, and then running the install. Note: during the install, you will be asked whether
or not you want to create symbolic links. Typically, the Boomi user will not have permission
to modify files in /etc., and therefore you should skip this step.
If, during the install, you choose to enter your Platform credentials, it is important to
understand that these credentials are not stored within the installation directory itself. These
credentials are only used for the initial communication with the Platform. Once the Atom is
installed, future communication with the Platform will be authenticated using a key specific
to that install, and it will not need to re-use your personal credentials.
After installing the Windows service, edit the service and change the "Logon As" to make sure
the service starts with the correct Boomi user.
After installing on Linux machines, configure the Java process to start during the Boot
sequence.
http://help.boomi.com/atomsphere/GUID-DAC921FC-F37A-49BF-9157-587B760AC1BC.html
68
If there are other services running on the individual nodes that might use ports that conflict
with the default Unicast/Multicast ports, please specify ports that are available.
Verification
After installing each machine, verify via the Atom Management UI, that the service is online,
and in a good state. This implies that the service is online and communicating with the
Platform.
If running a clustered environment, use Cluster Status to ensure that all nodes are online, and
that only one node is indicated as the "Head" node.
Deploy and execute a test process and verify that you can retrieve a process log from Process
Reporting.
You may choose to shut down or restart the head node to verify that "Headship" correctly
transfers to the remaining nodes. By restarting nodes, you can also verify that each node in
the cluster is capable of executing processes.
69
Overview
You may need to move an Atom (or Molecule or Cloud), either to a new location on the same
computer or to a new location on a different computer. You would like to preserve schedules,
process properties, deployment, and other data.
After moving the Atom Installation folder from one location/machine to another, you must
change certain properties, including machine names and file paths, so that they point to the
Atom's new location.
Important Notes:
If you copy an installation from one machine to another (or image a machine for use on
another server), please note that YOU CANNOT RUN DUPLICATE ATOMS in this way (a.k.a.
active-active). The atom is identified by our platform with an internal ID, and if you have two
installations with the same internal ID, this would cause significant issues. If you must copy a
server image or atom installation, you must not start both atoms at the same time. You
SHOULD delete the atom installation of the unused installation once the migration is
complete.
70
Note: If you are creating an exact mirror of the current machine/VM, you should only need to
verify these settings vs. changing values.
If you move an Atom from the computer on which it was installed to a different computer,
you must verify/change these properties:
71
Service/Startup scripts:
• Windows: The Windows service will need to be re-installed on the new machine. It
could be modified if only the installation directory changes. Alternatively if you only
move the atom installation directory, the path to the atom.exe file defined in the
service should be changed. This can be accomplished by editing a registry key
(see Modifying the "Path to executable" of a windows service - Stack Overflow).
• Unix: The init.d scripts will need to be re-installed/modified
• If you move an Atom to a different computer and you are using Web Service Publishing
or other listening connectors (like SAP), you may also need to consider making changes
to the following:
o Any external applications that call Boomi AtomSphere services.
o The connect.boomi.com URL-- either change in the application, DNS, proxy
Java:
• You may need to re-import any java certs into your new JRE.
• Also copy the Unlimited Strength Cryptography files into your JRE if necessary.
Content
Below is a high level, basic outline for migrating processes from one atom/molecule to
another. The following instructions assume that you have environments with extensions
enabled on your account. If not, work with a support team member to discuss alternative
steps if necessary.
72
During the migration, you will be attaching your processes to both the old and new atom, so
you'll need double the licenses you're currently using. If you do not have enough licenses,
please contact the Boomi Support team and your account manager. Discuss with the support
team member and the account manager how long you need to complete the migration and
they will be able to provide temporary licenses to use during the migration.
If your old atom/molecule has any specific settings already set, do the same for your new
atom/molecule. A couple of configurations to consider:
• You may need to import Java certificates into the new JRE keystore
• You may need to install Unlimited Strength Cryptography files
• You should check the container.properties, atom.vmoptions, and other molecule
related settings files like the procrunner, procworker, etc and apply the settings in
there to the new atom/molecule accordingly
• You should check the Shared Web Server settings from Atom management and make
necessary changes
Note: If it is a new atom on the same server, you must use a different port within
Shared Web Server settings
If any of your processes use custom scripts or drivers (.jar files), the contents of the userlib
folder must be migrated to the new atom. You can either move them directly over or manage
them via the custom libraries component. The deployed custom library will automatically
take effect and add the jar files in it to your new atom when you attach the atom to the
environment.
Note: If you are changing OS or architecture, you may require different jar files or drivers to
meet the new system's requirements
73
After you have checked the above, you are ready to attach your new atom to the
environment.
Extensions
You will need to enter in your passwords for the environment extensions again. The passwords
in extensions will not be applied automatically to your new atom. If you have a lot of
passwords though, you can do the following to move passwords from one atom to another:
Migrating Schedules
The processes deployed on the environment should show up in your deployed processes tab on
the new atom but without any schedules. To set the schedules you can either set them up
again if it's just a few processes or you can use the Atomsphere API.
Here's a sample of the process you can use to move schedules over:
1. Use the Query operation on the Process Schedule object to pull the current schedule
for the old atom. The filter should be using the old atom ID
74
3. Use the Update operation to pass the schedule to the new atom
4. Confirm schedules have been copied to new atom. The schedules will be advanced
instead of the Minute, Hour, or Day type you might have used before since the API
translate the schedules as advanced automatically. The schedules should still be
equivalent
Deployment History
Because you are attaching to the same environment, your deployment history will be carried
over automatically.
75
You may choose to migrate all processes at once or one at a time to allow for
testing/validation on the new atom. For each (non-listener) process you wish to move:
For listener processes, you may test the new listeners by using the port defined on the new
atom's in Shared Web Server settings. A couple of considerations:
• If you are directing client requests to your service via a router configuration, you may
simply be able to re-route those requests to the new server/port
• If you are using an external load balancer, you may be able to redirect the requests
using the balancer
• You may also choose to have your clients update their connection points to connect to
your new servers
76
Execution History
Execution history will stay with the old atom. If information is required for past executions,
you can look in process reporting or query the execution records object using the old atom
name/ID.
Once the migration is complete and all processes and listeners are now running on the new
atom you can detach the old atom from the environment. Your account owner will remove
the temporary licenses from your account. You can uninstall the old atom if you do not need
anything else from it.
Atom VMOptions
By default, the local Atom or Node will get 512MB of heap space allocated to it. If you want
to allocate more RAM then we need to access the local directories to make this change.
The atom.vmoptions file is located in the atom's installation directory, under the bin folder.
(depending on your Windows browsing window you may only see the file name as Atom and
the Type column as VMOPTIONS file).
This file contains the server level configurations to enable remote settings, client time out
settings and enable remote JMX (Java Management Extensions). Also, as being displayed on
this slide, the runtime memory allocation is configured. Edit the amount of MB and save the
file. Then you will need to restart the runtime for the change to take effect.
77
• Local Atoms
• Molecules
• Private Atom Clouds
• Name
• Default Value
• The Format
When the runtime properties are changed they are reflected in the container.properties
file.
AtomSphere runtime properties are available for accounts containing local Atoms,
Molecules and Private Atom clouds.
Each property consists of 3 different elements, the name, default value and format of the
element.
The next configuration file is the Container Properties located in the atom's installation
directory, under the conf folder.
78
The property structure contains the Property Name, Default Value, Format and a description
(it is not listed here but is contained in the reference guide).
Many properties require a restart to the local Atom, Molecule, or private Atom Cloud after it
is set or changed. Checking the Restart on Save option before saving the property forces the
necessary restart. Only Atom, Molecule, and Cloud owners can restart them. Accounts having
an Atom in a Cloud cannot restart the Cloud.
79
Within Atom Management, click on the on the Atom being used, in this case it is our local
Atom and select the Properties menu option. If selecting a cloud atom, it would be called
“Account Properties”
80
FYI Only:
81
The advanced properties tab contains many different properties to set. Cloud atoms can only
set Low Latency Warning threshold, Purge schedule for logs, Purge schedule for Processed
Documents and Purge schedule for Temporary Data. However Local atoms as displayed in this
slide, contain a multitude of properties to set. For more information about the properties,
visit the reference guide and located in Search>Integration management>Atom, Molecule, and
Atom Cloud management and configuration >Atom Management >Properties panel.
82
The Custom tab is available only for a local runtime or Atom Cloud. It is not available for
account properties. It is used to set properties not available on the Basic or Advanced tabs
and is used primarily for adding custom properties Boomi Support may instruct you to add.
To create a custom property, enter:
Name Description
Add CustomProperty Adds a pair of blank Property Name and Property Value fields to
the Custom Properties table.
Property Name Used to enter a custom container property name. The complete
property name must be entered. For
example, com.boomi.container.name.
Property Value Used to delete a custom container property value.
• General that support multiple functions (these JARs are stored in /userlib).
• Scripting that support custom scripting (these JARs are stored in
/userlib/script).
• Connector that support a connector (these JARs are stored in
/userlib/<connType>).
Each time a class is referenced the runtime must be restarted to be available to use it.
83
Step 1: Upload custom JAR to Account Libraries (Setup > Account Libraries).
Each Boomi account has access to 100 MB of space for uploaded files.
84
85
It is looking for configuration changes, either to the runtime or a process. Remember some
changes to the runtime are managed in the UI, so it will get those changes.
Atom also uploads process metadata – count and size of documents. This is not uploading the
data, only execution statistics.
Document view requests are a re-direct to the local atom, document is not persisted on the
platform.
What happens when the communication breaks down? Well you can imagine the runtime is not
able to get all the changes from the Platform that I just listed.
• Creates a Retry Loop error in the atom logs – when the communication is reestablished
the log and metadata will be sent to Process Reporting for the scheduled processes
that did run during the outage.
• Platform sends out “Atom Down” notification – this will generate an event log which
you can alert you by email or RSS feed.
It is good to note that upon failure/outage – the duration between attempts to communicate
slows down
86
• WSS = Web Services Server. This is how you make Boomi a RESTful web service or SOAP
service to your customer or company. Instead of sending requests to consume the service,
you ARE the service and Boomi receives the requests.
• JMS = Java Messaging Service is a queue for storing and retrieving messages.
87
Threaded Executions
A thread is an executing code path within a JVM. The JVM is doing many “jobs” at one time –
it is executing the process, communicating with platform, maintaining health…. All those jobs
are handled on different threads. All the threads are sharing the same heap space (allocated
memory, default is 512 MB). If your process is moving a lot of documents and data, it is
important to know how your heap space is being used.
A single Atom runs different processes as separate threads in same JVM. A Molecule also uses
threads per execution by default unless Forked Executions is turned on.
You can configure the Flow Control shape in your process to allow it to execute across
multiple threads. This is how we can enable some parallel processing within our process. But
those parallel threads are again utilizing that same heap space.
88
In our Flow Control we have set the document batch to 5 and the unit scope to threads.
In this example our start shape is going to receive 9 documents. Because of our 5-document
batch setting the Flow Control creates 2 groups and creates a different thread for each group.
They flow concurrently through the process and are sent to Salesforce at roughly the same
time.
Forked Executions
• Forked Execution is an option on a Molecule, but it is the default behavior in the cloud.
• What this does is for every process that executes the Node will fork off a separate JVM.
• Remember each JVM heap space is carved out memory from the total machine resources,
so with Forked Execution you can use more machine resources when needed and not have
to have it always allocated. But be mindful to set a maximum forks value and be aware of
how much memory you have available.
• This is good for scheduled/batch/large data volumes because it allows you to insulate
entire runtime assigning its own JVM and heap space.
89
• Another situation, which is atypical, if you are running multiple Atoms on the same
machine you cannot enable forked execution for the same reason.
With Forked Execution turned on, Node 1 will spin up a new forked JVM for each process
execution. The main Node will always exist because it must maintain status and
communication to the other Nodes in the cluster.
When the process executions are complete the forked JVMs with terminate and return the
heap back to the machine resources.
Those resources are taken from the JVM, so you must be sure there is enough RAM available
w/o crashing the system. The size of forked nodes can be specified in atom.vmoptions. For
example, the persistent node gets 512 MB, and the two forked nodes also are at 512 MB each
– so you’re using 1.5GB of system RAM
In the cloud its usual to see 512MB for the persistent node with 1GB for forked nodes. In a
molecule forked nodes are usually set to 512 MB.
90
In this example we are setting the Flow Control shape to 5 document batch again, but this
time the Unit Scope is set to Processes.
91
The Unit Scope is a field within the Flow Control shape that you set at build or design time.
When the runtime cannot accommodate a forked execution request it will default to using
threads.
So on an Atom the scope will be threaded because forked it not available and on a Molecule
the scope will be process as long as you haven’t reached the forked max, then the process
would use threads. On a Molecule you can also configure multiple Flow Control shapes and
fork your process across Nodes and fork across threads.
Cons:
• Certain configurations (like reading and writing from a document cache) in forked
execution mode could cause the process to slow down.
• Must be configured by developers during Build.
The benefit of Flow Control is that it speeds up data processing by dividing and conquering.
The caution of Flow Control is reading/writing from a document cache can slow a process
down.
92
Most important is to use the Flow Control shape to take advantage of the capabilities of your
runtime environment.
***Con Notes: If all threads need to access the same cache, cache might move from local to
NFS share, this will cause a slowdown
Note: reference article about – Cases where the Atom writes the cache to disk rather than
keeping it in memory – “Where and how long Cache is stored” – I MB limit for cache – over will
write to disk. Matters most for high performance (web service) processes
• Groups documents
• If you enable "parallel processing" and also "run individually" in the Flow Control shape,
the "parallel processing" is applied first before the "run individually". So, if you have 2
threads chosen and 20 documents, then the 20 documents will be split into 2 batches
(1-10, 11-20). A thread will be started for each batch, and within each thread, the 10
documents will be run individually.
To achieve your desired mechanics, you can use a series of Flow Control steps to split into
processes/JVMs and then again into threads per JVM.
***If the number of units is greater than nodes, processes or threads then they will be
“doubled” up on available nodes.
93
If required, AtomSphere users can install atoms, clouds, or molecules locally on their own
systems. System Administrators can then customize these installations to take full advantage
of system resources. One common reason to do this, is to add more memory to the Java
machines, for higher volume processing. This article will primarily focus on maintenance and
administration issues, including some common errors and questions.
Common Errors
Error: \\<path to
install>\boomi\accounts\<account>\execution\history\...\executionResponse.dat
(The system cannot find the file specified)
Depending on the volume of executions on a particular molecule or cloud, this issue can be
caused by network latency between a particular node, and the file share. Check and remove
the external switches between the nodes.
Error: Error-193-0xc1-Windows-could-not-start-the-atom-service-on-the-local-
machine
Error 193 0xc1 is occurred when the application manager system of windows fails to find the
exact path of the .exe file of some program to run the service.
3.3.7.1.2.1 Solution 1:
Check if there is any file which has the duplicate name in the Atom installation drive.
• For example if folder C:\Boomi AtomSphere & C:\Boomi.txt are present ,rename the
text file Boomi.txt to Boomi1.txt
• Start the service.This will remove your Error 193 0xc1
94
If you don’t have any duplicate program file in C drive and still facing this error then it means
the path set to executable file is modified. In this case , you have to set this path manually.
3.3.7.1.2.3 Solution 3:
95
When an atom is installed, Java 7 or 8 is required. The atom installer will use the latest
version it finds, or it will download and attempt to install Java.
To determine which Java your atom is configured to use, view the contents of:
Verify that the JRE specified by the files above is not corrupted. If it is corrupted, missing, or
an incorrect path, create/modify a pref_jre.cfg file and add the location of the JRE or JDK
that the Atom, Molecule, or Atom Cloud should use. Stop and start the AtomSphere service.
http://help.boomi.com/atomsphere/GUID-58EF2B6A-4CF7-461C-BA67-CC56FCD0E29F.html
If you continue to have trouble, check the atom.vmoptions file to see if the atom memory
request does not exceed the physical memory
of the server, or the VM. The same error would be generated, if for example the VM has 2 GB
of RAM, and the atom is requesting 3 GB.
3.3.7.1.4.1 Description:
96
However, now the Atom goes on and offline intermittently. The following entries can be
found in the container log for this Atom:
java.io.IOException: Unable to tunnel through proxy. Proxy returns "HTTP/1.1 407 Proxy
Authentication Required"
at
sun.net.www.protocol.http.HttpURLConnection.doTunneling(HttpURLConnection.java:1585)
at
sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegate
HttpsURLConnection.j
Installing a new atom, with the same proxy settings, result in a Bad Username/Password
error.
3.3.7.1.4.2 Solution:
This error results from invalid proxy credentials, as indicated by failure of the new install.
Please reach out to your Network team to determine the accurate credentials corresponding
to the proxy host provided for the Atom.
97
On Linux, you can use the df command to get a full summary of disk space, and inode usage
of the system
1. To check the file system disk space statistics in “human readable” format, means it gives
the details in bytes, megabytes and gigabyte.
Command: df -h
2. To check the file system type of your system use the option ‘T‘. It will display file system
type along with other information.
Command : df -T
3. To display the information of number of used nodes and their percentage for the file
system.
Command: df -i
Error: Failed initializing store file; Caused by: There is not enough space on the disk
3.3.7.1.6.1 Description:
98
1)Check and verify whether the file share server (NAS) is running out of inodes. For NetApp,
the default file cap in terms of volume is three million. You may have to consider increasing
the maxfiles to say 50 million as described in the link below :
hard drive - Linux - Help, I'm running out of inodes! - Server Fault
If you are hitting an inode limit on a particular directory, you can change the directory level
nesting level, of both the data and execution directories:
You may also choose to modify the purge settings to reduce the number of files in these
folders.
2) It may not be possible to add more disk resources to the molecule. If necessary, you may
have to consider installing a new one along with a separate file share. Or, see the KB article
titled: How to Migrate Your Atom to Another Server
3) In order to eliminate the log entries in process executions, Low latency option is
recommended:
http://help.boomi.com/atomsphere/GUID-A813E1FE-7E91-41B3-ACF8-0FAE1A054276.html
Error: Your atom did not restart after a release and appears to be waiting
99
If it appears that the atom only tried to restart once, then you may have an older version of
the restart.sh script. There is a new script available that will attempt to restart the atom five
times.
Please create a support case within the Support Portal and supply the following information:
FAQ
What is jgroups and how is it used for clustering in molecules/clouds?
Why is this important to know? Boomi uses JGroups as the clustering across atom nodes
within a molecule or cloud. Boomi is a development platform and as such it is important to
understand this technology that is an important aspect of communication within molecule and
cloud clusters.
Boomi molecules and clouds requires nodes in the cluster to be able to communicate across a
network. By using JGroups, nodes within a molecule or cloud are able to join/leave the
cluster. A single atom node in the cluster is elected as the “Head” atom. The nodes within a
cluster are able to detect membership of other nodes in the cluster and recognize if other
nodes have joined, left or crashed in the cluster. If nodes are detected as left or crashed,
100
Messaging across the nodes is handled by JGroups. JGroups comes with a large number of
transport protocols, for the molecule and cloud we support UDP (Multicast) or TCP (Unicast).
Nodes may “see” messages from other molecules or cloud clusters in the same network, and
will ignore them, only acknowledging messages from nodes within the same molecule or cloud
cluster. Some environments support unicast over multicast for better reliability and unicast
requires specific ip addresses and ports be designated for the nodes in the cluster. With
JGroups, lost messages get retransmitted. The head node retrieves messages from the
AtomSphere Platform, schedules processes, and the headship migrates to a new node if the
"head" dies.
If the nodes are unable to communicate within the cluster, then multiple atoms could be
designated as the head atom which will lead to conflicts, duplicate executions, etc… so the
cluster is dependent on a reliable system network configuration.
It is Important that you monitor the state of health of your molecule or cloud cluster on a
regular basis. This link contains recommendations in the Reference Guide for Cluster
Monitoring that must be implemented for every molecule and cloud.
If you know the windows service/process name, there are several ways to determine the
executable path for this service or process:
101
2. You can press Win+R or from windows START search RUN , type msinfo32.exe into the Run
dialog box and click OK which will run the System Information program.
Expand Software Environment > Running Tasks and take note of the Process ID column. All you
need to do is match the PID number from the Task Manager with the Process ID in System
Information. The Path column will show the program’s path.
If you want to see how it works on different windows version then please check here:
Determine Program Path from Task Manager for Running Process • Raymond.CC
Release Control Scheduling is used to provide a scheduled update, which allows you to test,
monitor, and develop using the latest version of the Atomsphere Platform, before the 'forced'
release date. This is an available feature that must be requested to be enabled before it is
available to an account.
To locate Release Control Scheduling, navigate to the Atom Management page in Integration
(Manage > Atom Management), select your Atom on the left, and click the Release Control
Scheduling tab located at the bottom of the page.
• Schedule Type
• Scheduled Day
• Scheduled Hour
• Scheduled Timezone
102
This is most likely the least self-explanatory of the above options. Let's use the following
"Calendar" as an example:
Wednesday (15th) is the date that the Release is pushed automatically to users that have not
updated yet.
For Example:
Last Week - Thursday - 2am - EDT = Thursday, the 9th @ 2am EDT.
Last Week - Tuesday - 2am - EDT = Thursday, the 14th @ 2am EDT.
Note: this is just an example. For a listing of actual Release Control and Release Dates,
please visit: http://trust.boomi.com/notifications
Why are older connector versions left in the atom after a release?
Boomi may retain older connectors in the atom. There are functionality and performance
trade-offs to consider and therefore we decided not to remove each connector after each use
or after each release.
103
The Manage -> Atom Management -> Atom Connector/Versions tables may also contain
connectors in the list that are no longer used in deployed processes.
If older connector files are causing an issue for you or consuming disk space that you need,
please open a support case and we can help mitigate the issue for you and advise on how to
address the concern.
If there is interest in this feature to remove old connectors, we could consider it in a future
release. Please submit a request via Feedback item and our Product Management team can
look into your request in more detail as well.
The reference guide describes how to make this change if the atom is running and properly
communicating with platform.boomi.com. However, if the atom/molecule/cloud will not
start, you cannot modify its properties from Atom Management.
com.boomi.container.cloudlet.clusterConfig=UNICAST
com.boomi.container.cloudlet.initialHosts=10.172.4.17[7800]
104
On the main Atom Management page, the "Atom Host" will identify the hostname of the
machine running the atom.
In one case, there was a customer who had multiple machines with the same name. In this
case, we created a test process, with a program command, in which we were able to retrieve
the output of the ifconfig command. This allowed us to identify the IP address of the specific
machine that ran the atom.
3.3.7.2.8.1 Description:
The server is accidentally started with an incorrect date/time for the physical location of the
server.
3.3.7.2.8.2 Solution:
In this case, scheduled processes will execute, but the platform will not accept requests from
the atom due to SSL security. Therefore, the atom will not be able to report the status of
those executions.
Once the server time is corrected, the execution information will appear, HOWEVER, it will
have the date/time that was associated with the execution when it was run using the
incorrect date/time on the server. This means that you could potentially have executions that
appear to have been run in the future or in the past.
The atom timezone is based on the system clock setting of the machine that the atom is
running on. To change the atom timezone, you would need to change the setting of clock of
the machine. This is by design.
105
The atom.lck file prevents the atom from running as a service (or executable) as more than
one OS process (e.g. "pid")
The process.lck file prevents a process from running simultaneously. This is directly tied to
the process option to allow processes to run simultaneously being unchecked.
In order to determine why .lck files are not getting cleaned up, each occurrence should be
looked at in detail to determine why the process.lck file did not get deleted as part of the
execution completion clean up. There are many reasons for this, for example:
• the atom had a catastrophic failure and clean up did not occur or did not complete
• the atom server had a catastrophic failure and clean up did not occur or did not
complete
• a process was manually cancelled, and the process cancellation clean up did not
complete
• a long running process got hung up (for any number of reasons) and clean up did not
occur
• the cluster, atom server or fileshare could be constrained to the point that it is not
able to handle the current load and as a result file I/O does not keep up with the
application
106
Your atom runs as a server on the host machine it resides. You need to login to the host
machine and stop and restart the Atom service. If your atom is running on a Windows server,
you can follow the below article:
http://help.boomi.com/atomsphere/GUID-CD9CAAA7-616D-4D3B-ACC1-75BD26A31C7D.html
If you don't have access to the host machine go to Atom Management page and open Atom
Properties. Click on "Restart on Save?" checkbox. Refresh the page and confirm that atom was
restarted by checking Last Atom Restart in Startup Properties tab.
The Available Roles field shown in the link below cannot be seen when setting folder
permissions. Only the Assigned Roles field can be seen.
http://help.boomi.com/atomsphere/GUID-421F756C-AB0B-49B1-9AEF-5CB8EA63AC33.html
The user trying to set folder permissions must be have an Administrator role to the account
where folder permissions are being set. Any Administrator to the account can give users
Administrator privileges.
./atom status
ps -eaf|grep atom
107
kill -9 pid
rm -r *.lck
./atom start
./restart.sh
• Generally, your account will be provisioned with some number of connections licenses
based on your subscription. This means you can deploy up to that many connections across
your various integration processes. Connection licenses are consumed as you deploy
processes containing unique connections.
• If you attempt to deploy more connections than provisioned in your account, you will be
blocked from deploying processes containing net-new connections until more connection
licenses are provisioned. You can try to “free up” connection licenses by detaching unused
processes.
• You can view connection usage within Integration, account menu > Setup > Licensing. See
Licensing for complete details.
• A connector is the adapter that moves data in and out of integration processes. Connectors
abstract much of the technical details for establishing connectivity to a given application
108
109
• When you deploy a process, the unique connection components referenced within that
process (either by a connector step or embedded within another step or component) are
counted.
• A connection license is consumed for each unique connection component deployed to a
given runtime: Atom, Molecule, or Atom Cloud. If your account has multiple attachments
to the same Atom Cloud, those attachments are considered separate runtimes.
• Only connections referenced within a deployed process are counted against licensing.
Connection components created in the Build console but never deployed do not count.
• Some common scenarios:
110
Unique connections = A + B = 2
2 connections
Two processes
each containing
the same 2
unique
connections are
both deployed to
the same single
Atom.
Unique connections = A + B = 2
A single process 4 connections
with 2
111
The process to deployed to both Atoms. Each Atom is considered a separate logical runtime
engine.
2 connections
A single process
containing 2
connections is
deployed to a
Molecule cluster
consisting of 3
nodes.
Unique connections = A + B = 2
A Molecule is a single logical runtime engine regardless of how many nodes (servers) it spans.
112
• This applies to accounts with the Test Connection Management feature enabled.
• Environments are classified as either “Test” or “Production”. This is a user-defined
classification however note that certain Atom Clouds (most notably the Boomi Atom Cloud)
may only be used in a production environment.
Connection Licenses
Scenario
Used
A single process containing 2 connections is deployed to both a "Test"
2 Test connections and 2
environment containing a single Atom and a "Production" environment
Production connections = 4
containing a Molecule...
113
• No. If you publish a web service process, the listen/receive action in the beginning of the
process does not consume a connection because it uses the Atom’s shared web server. In
fact, those types of connectors do not even have a connection component. Connections to
other endpoints elsewhere in the process do count towards usage as normal.
• These connectors are:
o AS2 Server
o MLLP Server
o Web Services Server
• The ability to publish web services is an account-level feature. Once enabled you can
publish any number of web services listener processes.
• Keep in mind if you use an HTTP Client or Web Services SOAP Client connector to invoke
another Integration web service process you've published, that client connection DOES
count against licensing.
• Note some connectors that implement the Listen action such as JMS and SAP do have
connection components and therefore count towards usage. Technically these are client-
initiated subscribers and do not leverage the Atom's shared server.
• Yes. The connectors for AtomSphere Platform features do not count against licensing. You
can deploy these connections for free.
• As discussed above, the shared web server connectors do not count towards licensing
either.
Yes, connections for custom connectors developed using the Connector SDK count towards
licensing.
114
115
You can view the number of connections provisioned and used in your account within Integration,
account menu > Setup > Licensing. See Licensing for complete details.
(1) Connections by Class - The red section (top) shows a summary of connections by purchased
(provisioned), deployed (used), and available by connection class.
(2) Connectors Deploy in Class - The blue section (bottom left) shows the connections deployed for
the class selected above.
(3) Deployments - The green section (bottom right) shows deployed connections along with the
process and Atom/Molecule/Cloud. This list can be filtered by selected the class above and/or
connection to the left.
If you need more connections provisioned in your account to be able to deploy additional
processes, please contact your Boomi Account Manager. Your Account Manager is listed in the
Support Portal under “Account Info”.
116
You can use this information to determine if the connection is accidentally referenced by a
process or incorrectly deployed to an Atom.
In example below, the licenses are filtered for a SFTP “Test” connection named “New SFTP
Connection.” It shows the connection referenced by two processes, “Test” and “Disk Test”.
However, because both processes are deployed to the same Atom (“personalDev”) only one
Standard (Test) connection license is used.
117
This warning means the process(es) you are attempting to deploy will result in more deployed
connections than are allowed in your account for the given connector class. To resolve, try the
following:
118
• Select the connector on the left side of the screen and note the process name(s) from
the listing on the right side of the screen.
• From the Deploy tab, select the appropriate process names and use the gear icon to
select Compare Process Deployments for the most recent deployment of this process.
• Click on Next to view the comparison of the latest deployment to the Latest Revision
of the Process.
• Highlighted in orange you will see the component(s) that have been deleted since this
process was last deployed. One of the orange highlighted components will be the
connector from the Licensing tab.
While the connector is not being used in the latest revision of the process in the Build
tab, it is part of the latest revision of the process that is deployed. Connector
licensing is determined by connectors that are deployed by class.
The deployed process is using a connector that has been deleted from the Build tab.
First, determine if the connector was appropriately deleted. That is, what connector
should be used in place of the deleted connector? Then, once it has been verified that
the latest revision of the process is ready to be deployed, deploy the process by
clicking on "Deploy Latest Revision of Process".
The Licensing tab should no longer list this process for the deleted connector and the
appropriate Atom Name once the process has been re-deployed.
The connector deleted from the Build tab can be viewed and restored by doing the
119
• The deleted connector can be viewed in the Build tab by using the Internal ID listed in
the Licensing tab
• Typing “id:<Internal ID>” in the Component Explorer box in the Build tab and press
enter. [Please note that the Internal ID on the Licensing tab and the Component ID are
synonymous.]
• Saving the component will restore the component in the Build tab.
3.5 Environments
3.5.1 Overview
One of the first tasks when setting up the AtomSphere Platform is establishing your runtimes.
Whether it be in the Boomi Cloud, a local Atom, or a Molecule, how these runtimes interact
with the platform is encapsulated by the AtomSphere environment object. Environments can
be thought of as logical containers for the runtime. Planning your environment strategy is
crucial to establishing your deployment methodology, user security, and your testing
environments.
120
Environments lay out the journey a process will take from initial configuration on the build
tab, all the way to production. Processes typically are deployed from the build tab to the
initial development environment, then promoted up to other testing environments and
eventually to production.
Within the platform, processes are deployed directly to environments, and only indirectly to
runtimes. A runtime can also be attached or detached from one environment to another. This
allows a new Atom installation (think server replacement) to not cause the loss of deployment
version history. These versions, or deployment snapshots, are maintained in the AtomSphere
Platform and associated with the environment. A process can be deployed to the
environment, the Atom detached from the environment, then later re-attached to show the
prior version history.
121
How many instances of an endpoint exist for testing could justify additional environments. If
there is only one sandbox and one production, at least two environments are needed. If there
is a sandbox, preview, and production tenant, you may wish to maintain three environments.
Traditionally, the SDLC landscape would comprise DEV, TEST, and PROD. DEV would be an
unstable testing ground, TEST would mirror production and be used for UAT, and then
ultimately land in production. Some business requirements require additional environments
for regression testing, load testing, etc. These should be factored into your environment
landscape and SDLC.
Hybrid deployments and distributed deployments will also justify additional runtimes, and
therefore environments as well. Think of running some integrations in the Boomi Cloud and
running other integrations locally in an on-premise Atom for local applications. As companies
move to the SaaS space, legacy systems are often still in play. Establishing a local and cloud
environment can help during this transition.
122
We can define which Boomi users can access that environment. In this way only, users with
the correct permissions can access the environment, including deployment, process
monitoring, or execution abilities.
Boomi is a shared platform for configuring your integrations. However, some Integration
requirements deal with sensitive data and may not be accessible to all your Integration
builders.
Boomi uses environments to control user access to the integration process execution. With
custom roles, users can be setup to be restricted to an environment that holds the sensitive
integrations. Then only they would be able to execute integrations or see execution history
for those integrations that reside there. The runtime restrictions work in tandem with any
permission restrictions setup in the custom role (e.g. Build only, process monitoring only).
Keep in mind that on the Build tab, all Integration Developers have access to components.
Additional runtimes could be required to create isolated environments to control user access.
Sometimes diverse types of integrations can be grouped according to key patterns. Depending
on the nature of your integrations, the runtime configuration may vary and require separate
runtimes by integration type. For example, batch or ETL processing often has different
resource demands than high volume real-time processing. Consequently, you may decide to
segregate these integrations into optimized runtimes for each.
123
Let’s look at a few scenarios to see how our environment landscape takes shape.
Basic SDLC
• For SDLC, we will ideally maintain three environments: DEV, TEST, and PROD.
• Some of our applications have two sandboxes, some only have one.
• Integration users have access rights to all integrations however users have different
permissions depending on role.
• Single runtime needed per environment (no distributed runtimes)
• Deployer: Deploy,
• Developer: Deploy,
Manage Extensions
• Developer: Deploy, Monitor, Execute
Role • Prod Support: Monitor,
Monitor, Execute • Business User: Monitor,
Restrictions Execute
Execute
• Business User: Monitor
124
Sensitive Data
• Only HR developers can access HR integrations. Non-HR Boomi users own other
business integrations.
• Single runtime needed per environment (no distributed runtimes)
Recommendation: use separate environments to restrict user access for sensitive integrations
vs. non-sensitive.
For example, if your SDLC has only two tiers (e.g. test and production) and you want to
maintain isolation throughout test and production, you would need 4 environments.
125
Additional setup:
126
Hybrid Deployment
• For SDLC, we will ideally maintain three environments: - DEV, TEST, and PROD.
• Applications may have multiple test environments, some are in the cloud and some are
behind a firewall
• On premise integrations and cloud-based integrations
• Integrations can be separated by either cloud-to-cloud, or on-premise to cloud.
Environment Shared Dev Local Test Local Prod Cloud Test Cloud Prod
Runtime Atom Atom/Molecule Atom/Molecule Boomi Test Cloud Boomi Prod Cloud
• Deployer:
Deploy,
• Deployer: Deploy,
• Developer: • Developer: Manage • Developer:
Manage
Deploy, Deploy, Extensions Deploy,
Role Extensions
Restrictions
Monitor, Monitor, • Prod Monitor,
• Prod Support:
Execute Execute Support: Execute
Monitor, Execute
Monitor,
Execute
Production:
Sandboxes:
Sandboxes:
• Local App1
• Local App Sandboxes: Production:
1 PROD
Endpoint • Local App2 • Local App1
• Local App • SaaS App 1 • SaaS 1 PROD
app • SaaS App1 • Local App2
2 PROD • SaaS App 2 • SaaS 2 PROD
• SaaS App2 • SaaS App3
• SaaS App 3
• SaaS App3
PROD
127
• For SDLC, we will ideally maintain three environments: - DEV, TEST, and PROD.
• Some application overlap between ETL and Real-time jobs
Environment Shared Dev Real-time Test Real-time Prod ETL Test ETL Prod
Molecule
Molecule
Runtime Atom Molecule Molecule
(w/forked
(w/forked processing)
processing)
128
Sandboxes:
Sandboxes: Production: Sandboxes: Production:
Endpoint • App1
• App1 • App 1 PROD • App2 • App 2 PROD
app • App2
• App2 • App 2 PROD • App3 • App 3 PROD
• App3
Set extension values for one or more processes deployed to Atoms attached to the selected
environment.
Note: You must have the Atom Management privilege (as well as Environment Management) to
set extensions on the Extensions dialog. If you have the Atom Management Read Access
privilege, you can only view existing extensions and open the Audit Logs dialog.
129
Procedure
1. Go to Manage > Atom Management
2. On the Environments page, click and select Environment from the list.
3. Type a name for the environment.
Restriction: Environment name is restricted to 80 characters. There are no restrictions to the type
of characters allowed.
4. (For accounts with Unlimited environment support) In the Environment Classification field,
select Production or Test to indicate the environment type.
The classification can be set only when you add an environment. You cannot change it later.
Note: The Environment Classification field is not available for accounts with Basic environment
support. All environments are classified as production environments.
5. Click Save.
130
During your initial AtomSphere setup, laying out the runtimes is often a first step. With this,
environment features should also be considered to look at how this may affect your
deployment scheme. From establishing the change management path, to user access, to
unique runtime deployments, understand how environments can help you meet your
functional and non-functional requirements.
This document provides a high-level approach for migrating interfaces from an existing
middleware platform to Boomi AtomSphere Platform. It discusses the unique opportunities
and challenges when migrating platforms and offers guidance for dividing the effort into
various project phases. However, this document is not intended to serve as a detailed project
plan.
In many ways a migration project from an existing integration platform is similar to a net-new
integration project, but there are differences. It is important to be aware of both the
advantages and challenges of a migration project to seize improvement opportunities and
avoid operational disruption.
Advantages
• Familiarity with use cases - The team has familiarity with integration use cases, end
applications, and known issues. Integration management procedures are typically in
place and (hopefully!) some interface documentation exists.
• Known scope - Scope is generally well-defined, although there could be a large
number of interfaces to move.
• Historical data exists - Historical information exists for sample data, volumes and
performance as a basis for comparison. However, be aware exact metrics may differ in
comparison to AtomSphere depending on design.
131
Challenges
• Learning curve - AtomSphere greatly reduces the learning curve and complexity of
middleware platforms and integration development, but it is still a new tool for the
team to adopt.
• New integration approaches - All middleware platforms aim to solve the same general
integration problems, but each tool will approach the problem different--AtomSphere
is no exception. Interface design will typically need to evolve from the legacy system
to take advantage of the architecture and capabilities of AtomSphere. Because of
fundamental differences in approach, rebuilding is generally required and usually more
efficient vs. migrating legacy assets. The Boomi professional services team can assist
in helping translate legacy implementations into AtomSphere designs.
• Maintain production operations - The cutover must be carefully coordinated with
existed interfaces to minimize disruption to production operations.
• Avoid impact to clients - Impact to existing clients should be avoided/minimized.
Ideally the migration would be transparent to client applications but usually that is not
entirely possible. Assess impact to client applications (especially those outside the
organization) as early as possible. Common changes can include URL endpoints,
authentication schemes and credentials, certificates, and whitelisted IPs/hosts. Data
formats should be preserved to avoid more costly parsing logic changes for clients.
Grouping Interfaces
There are several common ways to organize the interfaces into logical groups for migration.
The best grouping is the that makes the most sense for your project and should take into
account the number of interfaces and endpoints, commonality across interfaces, project
timelines, and external dependencies.
132
Technical Patterns
Thinking in terms of technical patterns can be a great way to better understand the nature of
the interfaces and break them down into individual solvable pieces.
A pattern-based approach to migrating interfaces to AtomSphere can help organize the work
effort, ease the transition, and minimize risk. The big idea is to:
• Endpoint connectivity application/protocol (e.g. SAP, MQ, database, REST) and API
interaction (e.g. specific queries/joins, upserts, etc.)
• Interoperability with existing integration infrastructure components such as ESB,
monitoring channels, job tracking dashboards
• Authentication scheme (especially when publishing web services)
• Notable transformation or validation requirements (e.g. validate against custom
database of allowable values)
133
• Identifying external changes required (most notably for real time interfaces such as
web services)
• Assessing level of effort and clarity of requirements for prioritization
• Discovering opportunities for reuse
• Gaining experience with the AtomSphere platform
The migration effort can be organized into several phases, each with a handful of parallel
tracks. When migrating a large number of interfaces, it can make sense to divide the
interface-related work (such as requirements gathering, development, and testing) into
multiple waves. These waves can be tackled in parallel or sequentially, depending upon
resource availability of the implementation team and inter-dependencies.
Keep in mind the first set of interfaces will be the most effort and longest duration because it
will include all the one-time activities such as common framework development and runtime
infrastructure build-out. However subsequent waves should be streamlined because those
activities will have already been completed.
134
Table 9: Phase 1
135
Phase 3 - Implementation
Track Activities
1. Develop the specific interfaces for given pattern group
Track 1 - Interface
using the pattern templates and business requirements
Development (multiple
created in Phase 2.
waves)
136
137
4.1 Organization
138
• Name and Organize folders thoughtfully – group similar processes in their own
folders and name the folder accordingly.
• Create a folder such as “#COMMON” for components shared between processes,
especially connections.
• Keep only a single copy of each connection in the account. Duplicated
connections lead to confusion and, frequently, unintended Integration license
consumption upon deployment.
• In general, avoid adding components in the root folder. For small accounts,
putting shared connections in the root folder is acceptable.
• Create new components directly in the folder where it should reside.
139
140
4.2 Accountability
• Encourage one or more representatives from each client to sign up for Email
Alerts as basic error handling, especially if other error handling routines are
not developed.
• Email Alerts, Boomi User Guide
• Coordinate with the client to have them add consultants to accounts in the
proper roles.
• Determine if custom roles are required – build and allocate as necessary.
• Determine if folder-based permission is required. Assign roles accordingly.
141
Process Types
For Integration, people use a variety of terms for their processes, but they fall under a couple
of categories based on function and how they are used. All processes use process options such
as "Allow Simultaneous Executions" to allow multiple instances of the same process to execute
at the same time or "Purge Data Immediately" to purge process data right away so none is
stored. There are two process modes:
• General mode - logging is enabled and you can view in process reporting
• Low latency mode - logging is minimized, data is not stored anymore, you cannot view
in process reporting. Only certain connectors can be used with low latency mode
• See Process Options section for more information.
Process
A set of shapes that flow in a logical order to perform some set of actions. It can be
scheduled to run at certain intervals. Processes must start with a start shape. The start shape
can be a:
Main Process
Used to call on many other subprocesses, initialize information or gather information before
calling subprocesses. Also known as master process.
Subprocess
A process that performs a specific set of actions possibly to be used later. It is called by a
process, main process, or other subprocesses via a process call shape. You can think of
142
• Data passthrough - the data coming from the process calling the subprocess is passed
through and used further along the subprocess
• No data - nothing is passed into the subprocess even if there is data from the calling
process
Listener
A process that waits to be triggered or waits for something else to call it. It is also called real
time integration or event-based integration.
Connectors
Connectors are where data usually comes from and goes to. Connectors are generally broken
up into two categories, Technology and Application. Technology connectors are the more
general-purpose connectors that can connect to multiple places depending on the
configuration and options. They do a specific purpose like the Disk connector gets and sends
files from a disk or storage system and the HTTP connector makes HTTP requests somewhere.
Application connectors connect only to one place (that particular application it was made for)
like the Salesforce connector only connects to the Salesforce API or the NetSuite connector
only connects to the NetSuite application and then the connector does only functions related
to that specific application.
Connectors usually start the data flow (even after a No Data start shape) for most clients. For
support, the connector is not needed after getting the data from it the first time the
connector runs. A connector is made up of two parts, the connection (the where is it
connecting to) and the operation (what is your connection going to do).
Connection
The connection is the where you are connecting to. Here you would have URLs, location
information, configuration settings specific to the application or general things for technology
connectors. Sometimes you'll see a test connection button on the top right and this will allow
you to test a connection to see if it is working or not. Connections are used to determine
143
Operation
The operation is what to do essentially. The operation dictates what to retrieve back, how
much, what to send, etc, what actions/operations to take/do. There is a concept of action in
connectors, but it is either getting data or sending data. Technology connectors usually have
the action as Get or Send. Application connectors will have more options like Get, Query,
Update, Delete, etc depending on the endpoint capabilities but they also fall into the same
two categories of Get and Send actions.
Each operation is tied to an action, so when you change actions, the connector will filter out
the operations and remove the currently selected. If you do not have an operation for the
action selected, you'll need to make a new operation. Operations are not tied to licensing, so
you can have as many as you want. You can generate multiple operations for a single
connection.
Importing
For technology operations, you define what to do since it's more general purpose. However,
for application connectors you usually must import an operation because it is already pre-
defined, and you're only allowed to do a specific set of actions to specific data. If you do not
import an operation, you'll run into errors. When you import an operation, there will usually
be a list of objects (the specific thing you're doing the action to mentioned earlier) to choose
from. This allows you to further define your action, you must define what you're getting from
or sending to specifically. For example, the import defines you are doing a GET from the
Account object or an UPDATE to the Cases object since you must get from something/where
or update to something/where.
Before you import, the operation usually looks bare but after you import more fields and
options should be available. You will usually see a profile associated with the operation now.
It might have a request profile and response profile. These are predefined profiles from the
endpoint since they control what is retrieved or sent. The profiles have elements and behave
144
Note: when you import an operation, the profile is associated with it. You should use the
profile imported in the operation and edit the profile associated with the import if you need
to. Otherwise, you might see strange behavior.
Some actions will have predefined filters you can use like a “Get”, and you will not be able to
add more. If you want to add more, it'll depend on what the endpoint lets you do, but usually
a Query allows for more customization.
• Data must complete a path before it can start a new path. Even if it visually looks like
paths join together, the data must complete a path fully before it can go on another
path
• All data must start at the Start shape, no matter if it is data passthrough, no data, etc
• Data goes to shape and if there are multiple documents (multiple XML files, multiple
rows in a flat file, etc), all documents complete the shape's action before moving on
• All data must complete processing at a shape before moving onto the next shape
• Shape source data is the data before it gets processed by a shape
145
1. There is 1 empty document from the no data start shape, it goes to the connector
2. The connector produces 5 documents and goes to the next shape
146
1. There is 1 empty document from the no data start shape, it goes to the connector
2. The connector produces 5 "A" documents and goes to the next shape, branch
3. The branch makes a copy of the 5 "A" documents and sends them down to branch 1
a. The 5 "A" documents go down branch 1 and reach the cache shape, all 5 get
stored in the cache
4. The branch shape makes a copy of the 5 "A" documents and sends it down branch 2
. 5 "A" documents get processed at the message shape, for our purposes, they'll use the
same data to make 5 "B" documents; 5 "B" documents are sent to the next shape.
Message shapes replace the incoming data so it doesn't have to be the same source
data anymore
a. 5 "B" documents are sent to the map shape, they are processed, 5 "C" documents
(since they have been transformed from B to C) are sent to the connector
b. 5 "C" documents are sent through the connector and 5 "D" response documents are
retrieved
c. 5 "D" responses documents go to the stop shape
5. The branch shape makes a copy of the 5 "A" documents and sends it down branch 3
. 5 "A" documents are sent to the map shape, 5 "B" documents are created and sent to
the message shape
a. The 5 "B" documents might be turned into 1 or 5 "C" documents based on the
message shape configuration
b. The 1 or 5 "C" documents are sent to the connector
Branches make copies of the data going into it (shape source data) and send it down each
path. The data goes down each path until completion before it starts on the next path.
147
Decision shapes group documents based on a criterion and send some amount of documents
together down a true path and then down a false path. It is best to give the decision shape a
label/name to find it easier in the process logs.
The business rule shape is essentially a bunch of decision shapes in one. You can set multiple
conditions instead of the one condition in a decision shape. If a document passes all of the
rules and conditions, it goes into the accepted path, if not the rejected path. Documents are
grouped together in accepted and rejected before being sent to the next shape. The accepted
path executes before the rejected path.
148
In branches, the data must flow through a path until completion before it can move onto the
next path. If you want to retrieve all documents produced by all branches or a certain number
of branches, you can use the return documents shape like in the above example. The return
documents shape waits for all branches to complete before it gathers all source data sent to
it and returns it back to whatever called it, in this case the main process using a subprocess
call. The returned data is now grouped together as a batch and all sent to the next shape.
Then the same data flow principles apply. Combining everything is a common example of why
someone wants to retrieve all documents from a branch. Let's go through the data flow:
149
150
The route shape uses a criteria to send incoming data down paths that match the values of
the criteria such as an element value. In this case, there are certain values, New, Current, On
Hold we're looking for. If routing element does not equal any of these, it'll go down the
default path. Everything works the same, documents are completed in batches, etc. Let's
take a look at the data flow:
151
A processing route is a combination of the route and process call. The two processes above
show a process route being used and the second process is an example of one of the processes
the process route uses. Important notes:
• The process route shape on the canvas (1st process) must have route parameters
defined
152
1. The message shape mimics 5 documents (with a split, it'll make it look like 5 documents
are being sent through) so 5 documents are sent to the process route
2. The process route calculates the route parameter for each document and sends them to
the process that corresponds with the key value
3. Let's say doc 1 has a calculated value of 30, doc 2 30, doc 3 60, doc 4 90, and doc 5 120
4. Doc 1 goes to the process that corresponds with the key 30, let's say it goes down the
true path in the second process in the screenshot. Now that resulting document is
returned on the Success path of the process route because Success is linked with the
return documents shape called "true"
5. Doc 2 goes to the same process Doc 1 goes to (why?) and let's say it goes down the false
path. Now that resulting document is returned on the Broken path of the process route
because Broken is linked with the return documents shape called "false"
6. Doc 3 goes to the process that corresponds with the key 60 and ends up being returned
to the Broken path
7. Doc 4 goes to the process that corresponds with the key 90 and ends up being returned
to the Broken path
8. Doc 5 goes to the process that corresponds with the key 120 does not go to any process
(why?)
9. The process routing shape has finished executing all of the processes and it is getting all
of the returned documents now, it determines 1 goes to Success path, 3 go to Broken
path, and 1 goes down the default path
10. 1 document goes to Success path, to notify, map, and then the connector
11. 3 documents go to the Broken path, to notify then mail connector
12. 1 document (which document?) goes to the default path, to the notify
153
Flow control controls how documents go down a path. They do not have to go as one group
anymore. Test mode does not show threading (simultaneous/concurrent/parallel processing)
so you won't be able to see it there, but it will happen when the process is deployed and
executed.
If you select this option (leave number of units at 0), the documents will be sent one at a
time down the next shape in the process path until completion. Once that document
completes, the next document will be sent down to completion, this repeats until there are
no more documents. Let's look at the flow in the above process:
154
If you select this option (leave number of units at 0), the documents will be grouped together
in batches set by the number you have selected.
155
The try/catch shape will suppress errors and if a document-level or process-level error
156
The try/catch starts wherever you put it and will not catch things before it. If something
happens before it, the process would fail and be recorded in process reporting. A try/catch
can retry the same document by sending it down the same try path again after failure (if it
still fails, it'll be sent to the catch path):
• 0 = The document will not be retried. Use this setting if you want to catch the error and
deal with it in some other way. For example, archive the inbound document, send an
email alert, etc
• 1 = The first retry occurs immediately following the first document failure
• 2 = If the document fails a second time, the system waits 10 seconds after retrying the
1st time
• 3 = If the document fails a third time, the system waits 30 seconds after retrying the
2nd time
• 4 = If the document fails a fourth time, the system waits 60 seconds after retrying the
3rd time
• 5 = If the document fails a fifth time, the system waits 120 seconds after retrying the
4th time
4.3.1.4.8.1 Scenario 1
If you set the try/catch to catch document errors and a document-level error occurs (or Stop
a single document is checked for an exception shape):
157
4.3.1.4.8.3 Scenario 3
If you set the try/catch to catch all errors and a document-level error occurs (or Stop a single
document is checked for an exception shape), the same thing happens in scenario 1.
4.3.1.4.8.4 Scenario 4
if you set the try/catch to catch all errors and a process-level error occurs (or Stop a single
document is unchecked for an exception shape):
• Avoid using too many try/catch shapes, use it where you need it e.g. right before
sending to a connector if you know there's issues at the connector. This is useful for
retrying something if the data just needs to be resent again
• If you are going to have a try/catch before another try/catch, be mindful of the retries
since the number of retries will multiply
• Rename the try/catch shapes so it is easier to identify which one(s) was triggered
158
Document property
Document properties (also called standard document properties) contain connector specific
information like file name, size, and whatever connector specific information is
available. Document properties can be retrieved as a value in parameters in most places, the
Get Document Property map function, and custom scripting. Document properties can be set
in the set properties shape, the Set Document Property map function, and custom scripting.
If you try to view the document property value after setting it, you might not get a result
since the get of the document property is tied to the connector used. For example, if you are
using a Box connector and get some documents and pass it through the process. Each
document will have document property related to the Box connector. If you view the Box
connector related document properties, you'll see the corresponding values. Let's say you
then want to send the data to a disk shape, you can set the document properties of the Disk
connector such as file name and directory and the disk connector will use that. If you try to
view the document property right after you set the file name, you will not get anything
because there was nothing retrieved from the disk connector (you got something from Box,
remember?). Some general rules:
• Document properties are tied to the document, so it will flow with a document into a
process call, data passthrough and return documents shape
• Document properties cannot exist between paths (branches)
• When you retrieve a document property in a map, the document property will be that
of document that entered the map shape
Dynamic document properties (DDP) are temporary properties tied to a document (as opposed
to being tied to the connector). It can have any name and it follows the document through
159
• DDPs are tied to the document so it will flow with a document into a process call, data
passthrough and return documents shape
• DDPs cannot exist between paths (branches)
• DPPs are a process property and are not tied to a document, the value can be retrieved
from a document or an element in the document
• DPPs can exist between branches and processes so subprocesses and master processes
can use and set DPPs (just remember the order in which you do that for it to make
sense). You cannot pull a value of a DPP you defined in the master process if you set it
in the subprocess, the value would be nothing
• DPPs can be persisted and extended (we'll go over persistence and extension later)
DPPs take on the value of the last document that reached it. If you have a batch of 5
documents go to a set properties where you set the DPP to be an element of the document,
the DPP will be the last document's value. Let's go through the flow:
1. There's a set properties shape with a DPP called element1, where the value is an
element in the document
2. 5 documents reach the set properties shape
3. Doc 1 has value1 so the DPP element1 = value 1, there are 4 more docs
4. Doc 2 has value2 so the DPP element1 = value 2, there are 3 more docs
5. Doc 3 has value3 so the DPP element1 = value 3, there are 2 more docs
6. Doc 4 has value4 so the DPP element1 = value 4, there are 1 more docs
7. Doc 5 has value5 so the DPP element1 = value 5, there are no more docs
8. If you were to pull the DPP element1 to view its value, it will be value 5 now because it
is a process property, not document property
160
Persistence
Process properties and dynamic process properties can be persisted. The property name can
survive into subsequent executions and the last value set will be remembered. After you
execute a process the first time, the persisted value will be stored for later use (to access
Atom Management -> Click on the atom where you deployed it -> Deployed Processes -> find
the process and click "Edit Process Properties" -> all persisted values should be there).
• Persistence should be used if needed since persisted process properties are saved to
disk each time they are stored
• The value is of the last time it was set for cases of simultaneous executions (not
recommended to be used together) and flow control
• Persisted values are per process per runtime
Extensions and persistence behavior:
• If the property is persisted, you extended the same property, and there is no stored
value yet, the value in the extensions will be used
• If the property is persisted, you extended the same property, and there is stored value,
the value in the stored persisted property will be used
161
For testing purposes, the easiest way of setting a value is via the Static parameter value type.
You can type in any value or use a value from the client for testing. If you have multiple
values for the parameters, they will be concatenated together:
In the case of the above, the document property File Name will now be
"test4112019element1". If you wanted to add in a ".txt" to the file name, what do you do? If
you want to add spaces to the file name, what things can you do?
162
Figure 53: Using Groovy to Get and Set Dynamic Process Properties
DPP is a process property so you do not have to set it within the document loop. The DPP
value is a string in the script. If you are trying to store a number, you can convert the number
variable to a string via the .toString() groovy function (or equivalent).
163
The document properties through custom scripting are limited. What's available is in the table
below. Pick out the connector type and that will go after "connector.track." or
"connector.dynamic.". After that, pick the corresponding connector property. For example, if
you want to use set the mail connector properties, specifically the to address when sending,
then you would pick the mail connector type -> "connector.dynamic.mail", then add
".toaddress" -> "connector.dynamic.mail.toaddress". If you want get the mail from address,
pick the mail connector type -> "connector.track.mail" -> use fromaddress ->
164
Connector type Get doc connector property Set doc connector properties
as2 file
name
subject
as2sharedserver as2fromid
as2toid
filename
messageid
subject
mimetype
165
subject
toaddress
user
sap idoctype
The message shape uses a variable system (Notify and Exception use the same variable system
as well) to grab data from elsewhere to construct what's in the message. When you define a
variable, it gets assigned a number in curly brackets, {1}, {2}, {3}, etc. You can then use those
curly brackets and number to construct the message body however you want to. For example:
166
You can put any text-based data into the message to send it in a process. Because of this, it is
often used for testing data in processes. Often it is easier to test with data that is already
present than have to go through the connectors to grab data. This is practical for a variety of
reasons:
To test in Integration, the message shape can be used and you can place the content directly
into the message field and link it to the next shape like a map or connector. Having multiple
message shapes labelled clearly and already linked to the rest of the process makes swapping
data easier. This way, you only need to link the No Data start shape to the message shape you
want to test.
167
168
For a database (DB) profile, you need to match the component ID of the Database Profile to
the component ID present in the data (in bold), after the "DBSTART". If you copy a process for
testing or development, your profiles will be copied and they will have a new component ID.
Just replace the component ID in the DB data and the map should be able to pick it up now.
Let's say in process A my DB profile had a component ID of gy96db7f-5a6d-4agd-8509-
j5ah7b3f7058, now that I've copied it to process B, the DB profile gets a component ID of
ae83db7f-0a6d-4aed-8509-7FaF7b3f7058, to use the same data from the process A in B
without having to go through the connector,
Process A:
DBSTART|gy96db7f-5a6d-4agd-8509-j5ah7b3f7058|2|@|BEGIN|2|@|OUT_START|3|@|2078-07-77
75:49:00.0|^|20780777|^|A76593P7778BWB026|^|A76593P7778BWB026|^|04|^|ZZ|^|Z|^|WH|^|Fong
ebeF -
Falgary|^|97|^|2580|^|IL|^|7500070490|^|07|^|20780777|^|RG|^|2|^|FA|^|006736243295|^|BN|^
|6736243295|^|7778BWB026|^||^|ReFeption|^|76593|^|20780777|^||^|705057-
7|^|705057|^|FL_RG|^|2|^||^|A7|#|2078-07-77
75:49:00.0|^|20780777|^|A76593P7778BWB026|^|A76593P7778BWB026|^|04|^|ZZ|^|Z|^|WH|^|Fong
ebeF -
Falgary|^|97|^|2580|^|IL|^|7500070490|^|07|^|20780777|^|RG|^|2|^|FA|^|006736243295|^|BN|^
|6736243295|^|7778BWB026|^||^|ReFeption|^|76593|^|20780777|^||^|705057-
2|^|705057|^|FL_RG|^|2|^||^|A7|#|2078-07-77
75:49:00.0|^|20780777|^|A76593P7778BWB026|^|A76593P7778BWB026|^|04|^|ZZ|^|Z|^|WH|^|Fong
ebeF -
Falgary|^|97|^|2580|^|IL|^|7500070490|^|07|^|20780777|^|RG|^|2|^|FA|^|006736243295|^|BN|^
|6736243295|^|7778BWB026|^||^|ReFeption|^|76593|^|20780777|^||^|705057-
3|^|705057|^|FL_RG|^|2|^||^|A7|#||#|OUT_END|3|@|END|2|@|DBEND|gy96db7f-5a6d-4agd-
8509-j5ah7b3f7058|2|@|
Process B:
DBSTART|ae83db7f-0a6d-4aed-8509-7FaF7b3f7058|2|@|BEGIN|2|@|OUT_START|3|@|2078-07-77
75:49:00.0|^|20780777|^|A76593P7778BWB026|^|A76593P7778BWB026|^|04|^|ZZ|^|Z|^|WH|^|Fong
ebeF -
Falgary|^|97|^|2580|^|IL|^|7500070490|^|07|^|20780777|^|RG|^|2|^|FA|^|006736243295|^|BN|^
|6736243295|^|7778BWB026|^||^|ReFeption|^|76593|^|20780777|^||^|705057-
7|^|705057|^|FL_RG|^|2|^||^|A7|#|2078-07-77
75:49:00.0|^|20780777|^|A76593P7778BWB026|^|A76593P7778BWB026|^|04|^|ZZ|^|Z|^|WH|^|Fong
ebeF -
Falgary|^|97|^|2580|^|IL|^|7500070490|^|07|^|20780777|^|RG|^|2|^|FA|^|006736243295|^|BN|^
|6736243295|^|7778BWB026|^||^|ReFeption|^|76593|^|20780777|^||^|705057-
2|^|705057|^|FL_RG|^|2|^||^|A7|#|2078-07-77
75:49:00.0|^|20780777|^|A76593P7778BWB026|^|A76593P7778BWB026|^|04|^|ZZ|^|Z|^|WH|^|Fong
ebeF -
Falgary|^|97|^|2580|^|IL|^|7500070490|^|07|^|20780777|^|RG|^|2|^|FA|^|006736243295|^|BN|^
|6736243295|^|7778BWB026|^||^|ReFeption|^|76593|^|20780777|^||^|705057-
169
If you forget to change the component ID in the message shape and it's going into a map, the
data will not be recognized. You will get a "No data produced from map, please check source
profile and make sure it matches the source data" error.
Note: |^| denotes column separation and |#| denote row separation
Note: If you are using EDIFACT which uses single quotes, you'll need to escape that single
quote with another single quote e.g.
Common Errors
Error: Unable to create XML files from data, the document may not be well-formed xml ;
Caused by: Unexpected character '1'
You most likely have <?xml version='1.0' encoding='UTF-8'?> or a single quote somewhere. You
need to use double quotes instead. Full error: "Unable to create XML files from data, the
document may not be well-formed xml ; Caused by: Unexpected character '1' (code 49);
expected a quote character enclosing value for 'version' at [row,col {unknown-source}]:
[##,##]"
Your JSON profile in the message is missing the single quotes wrap around the whole profile.
FAQ
For flat files, a new line denotes a new record (or set of information) so it is easy to simulate
by adding in multiple lines for the flat file. Same goes for the database, each row
170
However, for EDI, XML and JSON, you cannot just add another profile one after the other and
expect the map shape to separate them automatically. At this point you cannot use only the
message shape for that purpose. You can use the return documents in a subprocess to
simulate getting multiple documents. You can also simulate multiple records by using the disk
connector to pick up all of your EDI, XML, and JSON files at some location.
If you have production errors and want to know if the data is causing the issue or at what
point the data is causing the issue, you can pull that data from process reporting and then put
it in a message shape also. Make a copy of your process, put in the message shape with the
production data (using above mentioned scenarios), and remove any CREATE/SEND endpoints
(to avoid changing anything). Run the data through the process in test mode and you will have
more visibility with how the data is being transformed. Use stop shapes so you can see what
data is coming out of a shape.
4.3.1.7.4.3 Why is the source data from the message shape missing single quotes?
The message shape treats single quotes as special characters. To use single quotes as values
in your message shape, they must be escaped via another single quote.
testing to 'see if the single quotes appear' testing to see if the single quotes
appear
testing to ''see if the single quotes appear'' (pair of testing to 'see if the single quotes
single quotes) appear'
If the data coming out of the message shape is still showing the curly brackets and number
(i.e. {1}, {2}, etc) that usually means you have a single quote somewhere. You need to escape
it. Where you escape it matters. Everything after a single quote is escaped, until there's
another single quote.
171
You can escape the apostrophe according to the above methods or use a disk connector to
retrieve the file instead.
Stop shape
The stop shape has two options:
• Continue processing other execution paths checked, documents can continue through
the process like normal even if they reach a stop shape in an earlier branch
• Continue processing other execution paths unchecked, the whole process stops when
one document reaches the stop shape with this option
172
• Stop a single document checked, the document stops here and other documents can
continue through the process
• Stop a single document unchecked, the whole process stops when one document
reaches the stop shape with this option
Return documents
The return documents will wait for all documents being sent to it before it returns it to the
caller or whichever process called on a subprocess that uses the return documents shape.
Connector behavior
Some connectors do end data flow because there are no response documents to return so the
data flow ends (Disk send, FTP send). This is based on legacy information and how a
connector was coded (BOOMI-26717). Although there's an arrow for the path after these
shapes, nothing actually happens. No document properties propagate either.
Some connectors end document properties too with the GET/QUERY actions, they do not
propagate properties. For example, for a Database get or Salesforce query, document
properties set prior will not propagate further after the connector. HTTP connectors using
parameters will also end document properties.
• Disk Send
• FTP Send
• LDAP Update
Maps
Maps are used to transform data, either in data profile and/or of the data values themselves.
The left-hand side profile, the source profile, affects what data is available to use. The right-
hand side, the destination profile, affect what the final data will look like from what
available data there is. Some general rules of maps:
173
Source Profile
The source profile affects what data is available to use. That does not necessarily mean it
affects the original data itself. For example, let's take this XML:
The Name element will be mapped to some flat file profile element. Notice how there's
multiple Name elements. Without changing the destination profile, in the source profile, if
Max Occurs for the Name element is unbounded, there will be two lines created for the flat
file data. If the max occurs is 1, there will only one line created for the flat file data. The
original data and destination profile hasn't changed, only the source profile options, how the
data is read. How the profile is defined will determine what data is available for use. What's
available for use will then be used by the destination profile. If your data doesn't look right
after the map, make sure to check the destination profile (format you wanted) and the source
profile (available data) afterwards if there are no discrepancies in the destination profile.
174
175
176
Destination profiles elements can have default values. Default values set the value of the
element if has no mappings or if the mapping produces no value.
If the output is producing more data than anticipated, there is most likely a max occurs of 1
where you didn't expect it to. Since there's a max occurs of 1, a new document must be made
for each instance of that element, if there are multiple.
If data is missing from the output, most likely data was not read correctly so it was not there
to be used in the first place; incorrect mapping of element(s); the looping option might be
unique, so repeats are not allowed.
The best way to determine if it is the destination or source profile, see if you can extract the
value in question. If you cannot extract the value (via DPP or simple map to a flat file
element), there is something wrong with the source profile or data since you can't get it at
all. If you can extract the value, then there is something wrong with the destination since you
were able to pull the value for another profile.
Boomi Suggest
Boomi Suggest will try to do mappings automatically for you. It uses data from all other
deployed maps to make its best guess about which map should go where. If most maps map a
Salesforce createDate element to a NetSuite createdbyDate element, it'll suggest that to you.
Of course, you can modify as desired still. For support purposes, it is often better to use the
values in question and leave unrelated/unaffected mappings out. Do not map more than you
have to in order to prove a concept or result.
177
Input Data
Things can get as complicated as you want them to with data and profile options, but a
couple of general rules of thumb for flat files:
This has 2 lines, 5 elements per line, and is delimited by *. If we call the 2nd element address
and pull only that (how? via notify or something else?), we'll extract "123 Parkside Drive" and
"The Towers Apartments 403B".
However, if you switch the element name order in the profile where city is 2nd and address is
3rd. We map the 3rd element "address", the map will pull "Chicago" and "Denver" now. The
flat profile does not match up names, it matches up order of elements. It doesn't matter what
you call your header elements, they have to be in the right order to work properly.
178
Text qualifiers wrap around the value and are used to identify values as text/character based
e.g. "Sam Hill"*"123 Parkside Drive"*"Chicago". If you define text qualifiers in your data, they
will be removed e.g. if you use double quotes (") as your text qualifier then your value will
have those double quotes removed when that value is extracted. If your double quotes are
misplaced, then your data extraction will start looking strange:
Because we missed the double quote after 403B, it started to include information from the
next elements until it encounters other double quotes. Because * is a delimiter, the profile is
now confused with the text qualifier so ends up like in the example, not what you wanted.
179
The text qualifier escape field is used to indicate the text qualifier character is actually part
of the data (in the case of inches), rather than being a text qualifier. This should be used in
conjunction with the "Remove Escape" option to keep or remove your escape character. The
character can be the same as the text qualifier (single or double quote). If a text qualifier
escape character is not specified, the "Delimiter Escape" character is used for both delimiters
and text qualifiers. Let's use the backslash (\) as the text qualifier escape, we have to put this
before the double quotes in the data:
The delimiter escape character works the same way. Let's use carat (^) instead and turn off
the text qualifier option for now:
180
181
Let's put back the text qualifiers and leave the escape characters and delimiters inside. If you
have the text qualifier set to double quotes and use the delimiter character in the data, the
data pulled doesn't have a problem since everything inside the double quotes (text qualifier)
182
Output Data
When your destination profile is a flat file (right side of the map) aka you are generating a
flat file, the options will work slightly differently. Let's start off with File Type: Delimited and
File Delimiter: Star Delimited again but this time the flat file profile has 4 elements and I am
mapping just one element (description) to a destination element:
Notice how the output has extra * in it, that's because I have 4 elements. In flat files, empty
elements have to be accounted for as well, since there are 4 elements, there should be 3 *
separating the 4 values. We'll add in the Use Column Headers option:
Same input as before but my headers are what I defined in the profile now and I happened to
name them 1, 2, 3, and 4. For output data, your headers you defined are what will show up as
headers. Again, the order is still important. The first element doesn't actually get validated
for anything so it matches with the name of the first element.
183
Note: Remember text qualifiers wrap around values and are used to identify values as
text/character based? If your element Data type is a number, it will not get the text qualifier,
character and date/time will.
If the input data has delimiter characters in the value, you can set a delimiter escape so it
adds the escape before the delimiter character:
Note: The Remove Escape option only works for reading (input) profiles. It does not affect
writing flat files.
Text qualifier escape works the same exact way. If there is a text qualifier in the value of the
element, the escape is added before the single or double quotes:
184
It will only keep the first one that is processed. This can be used as an intermediate map to
check the uniqueness of some data, then transform it back into the original data profile to be
used again.
185
Input Data
XML profiles can be imported from XML data (the file) or with a schema. The element details
are a little different from the values used in the schema and they do not really import over
well. After you import, you will still need look like your profile options to make sure it is the
one you want. For XML profiles generated from a connector operation's import, they usually
come with a complex type definition so elements are predefined with how the endpoint
wanted it.
Let's start with Min/Max Occurs, which can be 0 or 1 and 1 or unbounded, respectively. Min
Occurs has no real effect on reading the data. Min Occurs = 0 essentially makes the element
optional. Here are scenarios:
1. There is data and Min Occurs = 1, the output will have the data
2. There is no data and Min Occurs = 1, the output will not have the data; we do not throw
an error
3. There is data and Min Occurs = 0, the output will have the data
186
Max Occurs will affect how the data is read. Max Occurs = 1 means only the first instance of
that data element is read e.g. if the Person element had a Max Occurs = 1, only the Person
element with Billy would be read and used, the other two Person elements will be ignored
(even though they are present). Max Occurs = unbounded means all instances of the element
will be read and used i.e. all three Person elements will be read and mapped.
Looping Option (which can be Unique or Occurrence) does not affect reading the data. All
instances of the element are read.
All in all, only Max Occurs has an effect on the source data.
Output Data
We'll use the DocumentID element, if Min Occurs = 0, the element is optional so it does not
matter if there's data or not. If Min Occurs = 1, another option (under Options) is taken into
effect, Respect Min Occurs:
187
188
189
190
Animal parent element has Max Occurs = unbounded and Looping Option = Occurrence,
Species child element has Max Occurs = 1 and Looping = Unique, Name child element has Max
Occurs = unbounded and Looping = Unique produces:
191
192
193
Note: the root node is not affected by Max Occurs and Looping Options because there can
only be one root node no matter what, so changing those options will not matter for the root
element.
Some reminders:
• Min Occurs affects and Respect Min Occurs work together to say whether an element
will show up or not if it's empty
• Max Occurs affects whether an element can repeat or not. It affects the parent element
whether other sibling elements of the child have a different Max Occurs or not
• Looping will remove children elements and parent elements that repeat
If you troubleshoot profile options of how data looks, make sure you know what the end data
should look like. When you know that, you can adjust your profile options to most likely make
it. Check what source data or how many of that source data is going into the destination
element.
194
When elements are defined by types, you'll see they have a Type Name:
Notice the standard element is greyed out and it has a Type Name of "License". If you go to
the Types tab, you'll see how License is defined and it only has the attributes purchased and
used. The element smallBusiness and enterprise also look the same as licensing because they
also have the same type. Types let you reuse element definitions.
195
Flat file and database profiles do not use instance identifiers and qualifiers but JSON, XML,
and EDI profiles do.
Generally, you define a parent element or loop via a qualifier value in a child element or
child segment. It is much more important for reading data. If you write to a profile that has
identifiers, some elements have predefined data since it's an identifier instance so some
element must have a certain value already. Some general rules of identifier instances:
JSON
JSON profiles only allow an identifier instance on repeating arrays. Identifier instances cannot
be nested. That is, if a parent array has an identifier instance, then its children arrays cannot
have one. Conversely, if a child element has an identifier instance, then the parent cannot
have one. Removing an identifier instance from either parent or child element makes the
data available for use. You can define it the instance however you want, but it won't produce
any data.
196
We can see addresses is a repeating array of objects, description and state have different values. If you
were to map the description and state to some flat file elements, the map would pull all occurrences
of the array so:
197
If you only want to pull the information from the object with description of home, you would
need to use identifier instances and qualifiers. You would first need to add qualifiers to
identify which instance you want to pull.
198
When you use identifier instances in the source profile, the instance(s) are now part of the
identifier profile. If you were to map the original array element, only the ones that didn't get
sorted into the instance would get used. If you were to map the description and state for the
original array element, you would get:
since the description = home is now part of that identifier instance, so it's not recognized as
part of the main array anymore. Generally, if you use identifier instances you shouldn't use
the original element anymore, otherwise, why use identifier instances in the first place if you
wanted to map everything anyway.
You cannot define an instance twice. If you defined the description = home instance already
and then define by occurrence = 1, if I try to map from occurrence = 1, there's going to be
nothing because the 1st occurrence is already accounted for. You can use the instance if it is
occurrence = 2 though (why?). Everything gets sent somewhere. If you defined occurrence
first, the first object (state = GA) is accounted for so if you define description = home
afterwards, only state = NY is available for use. Order matters for defining identifier
instances.
You can define multiple identifier instances at the same time if they are not under each
other. For example, you can define an instance for the array under addresses and an instance
for the array under phoneNumbers.
You had an array inside an array (e.g. postalCode), everything above is applicable to the child
array:
199
However, defining an instance on two different levels at the same time will not work. If you
defined for the addresses array element and also for the postcalCode array, the children array
won't be usable. Only the parent would be. For example:
200
the identifier instance code1=a would not recognize any values since it is inside another
identifier instance even though there is data that would fit this criteria.
You can use multiple qualifiers to define a single instance. If all qualifiers match, then that
subset of data is set aside in that instance. For example, description = home, state = GA will
match but description = home, state = PA will not (why?). Qualifiers are case sensitive. For
JSON, can only use qualifiers defined in the immediate elements/object in the array, not
based on other values in another like array inside the array.
XML
For XML profiles, the behavior is almost exactly same. Qualifiers are case sensitive. Instances
are exclusive and order matters when using occurrence and qualifiers. You can use multiple
qualifiers to define a single instance. If all qualifiers match, then that subset of data is set
aside in that instance and pulls all instances of the data. You can use the below for testing:
201
202
When you define an instance of a parent element, you cannot define any instances for the
children elements. The profile will not have the option. Only if you remove the parent's
instance, then you can make an instance for the child or vice versa.
EDI
For EDI profiles, the behavior is almost exactly same as above too. Qualifiers are case
sensitive. Instances are exclusive and order matters when using occurrence and qualifiers.
You can use multiple qualifiers to define a single instance. If all qualifiers match, then that
subset of data is set aside in that instance and pulls all instances of the data.
203
There are multiple REF segments. It has PA, DP, or OR as a value for REF01. If you wanted to
pull that particular REF segment, you would define a qualifier for the REF01 segment and add
an identifier instance for the REF segment. Here you can only add qualifiers for segment
underneath of it.
Only loops can use qualifiers defined in children segments of the loop. Trying to define an
instance of a segment (when it belongs in a loop) instead of the loop will cause issues. You
can define a nested identifier instance, but it'll do weird behavior, so don't do it.
204
Note: while you can use as many symbols as you want e.g. dddd, but it wouldn't make sense
since you'll produce 0031. If there's no specific purpose for it, there's no need to use more
than what's necessary.
205
quotes, it makes a
single quote
F Day of week 2 (2nd
in month Wed in
July)
Note: sometimes D is mistaken for d so the date format looks very strange.
206
207
Format Result
MMddyyyy 10012015
MM/dd/yyyy 10/01/2015
MM-dd-yyyy 10-01-2015
yyyy-MM-dd 2015-10-01
yyyy-MM-dd'T'HH:mm:ss 2015-10-01T15:15:35
yyyy-MM-dd'T'HH:mm:ssZ 2015-10-01T15:15:35-0500
yyyy-MM-dd'T'HH:mm:ss.SSS 2015-10-01T15:15:35.775
yyyy-MM-dd'T'HH:mm:ss.SSS'Z' 2015-10-01T20:15:35.775Z
yyyy-MM-dd'T'HH:mm:ss.SSSZZ 2015-10-01T15:15:35.775-05:00
The platform has an internal date/time format used in the map: yyyyMMdd HHmmss.SSS (e.g.
20190501 105321.941). If you want to use the current date and convert it to another date
format, your input date mask needs to be yyyyMMdd HHmmss.SSS. If you get errors related to
the date/time formatting, it is often because your input doesn't match the formatting, check
your formatting again.
208
Symbol Meaning
0 A single digit, including zero will display
# A single digit, excluding zero will display
. Decimal point
, Comma
- Minus sign
E Used in scientific notation
% Displays as a percent (divides/multiplies by
100)
' Escape character
$ (or other currency May need to use Unicode value (e.g., "\u00A4")
symbol) for some characters
Numbers after the decimal will be truncated unless it is explicitly defined but numbers before
the decimal will be preserved whether you defined it or not (except for scientific notation
209
As you can see, the number format is not taken into account when reading. It does not add
leading zeros or truncates, it preserves the entirety of the number.
Implied decimals
When implied decimals are used in the source profile (input profile) it shifts the decimal to
the left that many places. When implied decimals are used in a destination profile, it shifts
the decimal to the right that many places.
210
Note: The inputs shouldn't really have decimals (they should be integers) in them since
implied decimals were meant for numbers that didn't have decimal points in place. That's why
the 1.235 after moving the decimal 2 places is 123.5, which is then rounded up to 124. Then
124.00 to fit the formatting.
Document Cache
Document cache (doc cache or just cache) is a way to store documents retrieved in a process
so you can use it later. Documents are kept only during the process and they do not carry on
in the cache into later executions. There are two ways to add to the document cache:
211
In real integrations there will probably be more than a couple of documents (how do you
simulate multiple documents being returned or retrieved?) to store and there would be a
212
It's an XML document. I've configured my cache for that XML document and the elements in it.
The doc cache is configured for one index (what way will the doc cache retrieve data) with
one key (specifically what is the doc cache going to use to determine what document to pull
out of the cache). In this case my key is the Name element. In the retrieve from cache shape,
I pick my cache and which index to use (you can have multiple indexes i.e. different ways to
pull data. Maybe I want to pull data using Age in other scenarios). Then I pick how to define
the value that is going to be used as the key, in this case I am extracting a element from a
flat file called FirstName. Here's the full flow for the example above:
213
• You can retrieve more than one document from the cache based on the same key
• You should have data coming from another place that has some same value as the key
element in the documents in the doc cache
• You can mimic a key for testing by having a message shape with the key value and
setting the parameter value to be current data so the retrieve from cache picks it up
and uses it
• You can add another index to use a different key but you can only use one index at a
time
• Using multiple keys in the same index works exactly the same way as one key. The
cache will look up the document's key element and see if all the keys have such a value
• If nothing matches, the retrieve from cache returns nothing and your data flow stops
• If document needs to be split up before going into the cache do so, or it'll be treated as
one document. Namely flat file and database profile need to be split up before going
into the cache. Whatever goes into the cache, is retrieved from the cache
• The cache does not filter out duplicates, you'll need to do it beforehand. You can use
the enforce unique options in a flat file and mapping or another strategy to remove
duplicates
• Document properties stay with the document when it is cached and retrieved
This will be basically how the doc cache works everywhere else as well. You need to supply
actual data (some data must go into the retrieve from cache shape) to retrieve data or the
whole document. Other places you can use the document cache:
• Map lookup function: give key values to retrieve as many elements from the document
as you want
214
the cache will throw an error: "The Document Cache setting allows only one entry per
document in a given index. Multiple document entries were produced for index: index1"
because you have multiple keys in that document and the cache doesn't know which one to
use.
If the option is unchecked, you can now add the document above into the cache and the
cache will make one index entry for "Bob" and another index entry for "Billy". If you use "Bob"
as the key value later, the cache will retrieve that document or if you use "Billy" as the key
value later, the cache will also retrieve that same document. That one document has two
(multiple) index entries for it now.
215
Abbreviation Name ID
PA Pennsylvania 51
TX Texas 23
CA California 91
Let's say I want to look a value in Abbreviation using a value in ID, here's the logic flow:
1. Go to the ID column and look for the row with your ID value (let's use 51)
2. There is a row with the ID value of 51, so now pull the value from the Abbreviation
column (PA)
If the cross reference table couldn't find anything, it'll return nothing and represent it as a
null in the logs. Some places you can look up one value (message, notify shape) and other
places you can look up multiple values (map).
If you have a lot of values to add to a cross reference table, you can choose to import a csv
file instead, so you do not have to type it out. Some limitations:
216
You'll start to notice some more characters for the data values. Those are part of regular
expressions (regex for short). A quick run-down of some basic regex for the CRT above:
.*(ADVANCED).* will be true if the data contains "ADVANCED" (or case insensitive versions of it
"Advanced", "advanced", etc), so "bob Advanced" or "Advanced Minion" but not "bob" or
"advance the kingdom". The .* means match anything (.) unlimited number of times (*), since
it is before and after that means there any be anything before and after "ADVANCED".
(NR3M|1M) will be true if the data is exactly "1M" or "NR3M" (the pipe | means OR), but not
"1M dollars".
Since strings (this is what the values are in CRTs) cannot be null (but other things can be like
JSON elements, etc and we allow for integration of everything), if someone is trying to match
nulls or figure out if something is empty of has nulls they can use a small Javascript script (in
a user defined map function) to help transition (we're looking at the class column
specifically):
217
where class_input is script_input and class_output is script_output. That's saying if the input
has a value make the class output variable the same as the input, otherwise make class
output = "XXX" meaning it is empty or null after all. The "XXX" is arbitrary, you can use
another value that will not show up in normal data. In which case, ^(?!.*XXX).* will come in
handy, meaning true if "XXX" is not anywhere i.e. the value has any characters in the original
intention or finding out if it is empty or not. So true if it is anything other than "XXX" and false
if it has "XXX" in it.
Alternatively, you can use ^(?!XXX) so XXX is not in the beginning assuming your normal data
isn't using "XXX" normally also. As you get more familiar with regex, you can make your own or
use it for another purpose.
You can update the extended CRT manually or through the environment extensions API,
though you need to be careful with the extensions API so you update all extensions at the
same time. See the Extensions section for more information.
Map Functions
Map functions help transform data values. There's a variety of functions. Most have an input,
output, an option(s) related to the function.
218
Left character trim - remove characters on the left until "Crocodile" FTL: 5 "odile"
it is number of characters specified in Fix to Length
Right character trim - remove characters on the right "Crocodile" FTL: 6 "Crocod"
until it is number of characters specified in Fix to Length
Whitespace trim - remove white spaces from beginning " Crocodile "Crocodile and
and end of input (there are spaces at the beginning and and Alligator"
end of the example input) Alligator "
String append - makes Original String + Char to Append "Baby" Char to "Babygoats"
then removes characters on the right until value in Fix to Append:"goats"
Length (if applicable)
FTL: 6 "Babygo"
Char to
Append:"goats"
String Concat - puts a delimiter (if there's one so it "Fried" Delimiter: "FriedChicken
counts in the character count) between the inputs then "Chicken" Wings"
removes characters on the right until value in Fix to " Wings"
Length (if applicable) Delimiter: * "Fried*Chicken*
Wings"
FTL: 7 "Fried*C"
Delimiter: *
FTL: 7 "FriedCh"
Delimiter:
String replace - searches for value in String to Search "Raining String to "Raining dogs and
(can use regex) and replaces with value in String to dogs and Search: "cat" bugss"
Replace cats" String to
Replace: "bugs"
String remove -removes value in String to Remove (can "Cats eat String to "Cats birds"
use regex). Notice there are two spaces in the output birds" Remove: "eat"
between the words, why?
String to upper- turns input into uppercase "eat your "EAT YOUR
vegetables" VEGETABLES"
219
Numeric functions
Numeric functions have to do with math and numbers. Final number formatting can be
controlled by number formatting syntax, i.e. the whole number 3 will become 3.00 if your
number formatting is 0.00. The outputs below are character outputs so no formatting has
occurred.
Math set precision - truncates accordingly to the 42564 Number of Precision: 2 42564.00
number of decimals indicated in Number of Precision
24.3561 Number of Precision: 2 24.36
The next set of functions use repeating elements in profiles or more complicated than simple
single operations.
220
221
222
Date functions
There are a few date/time functions.
Function Description
Date retrieves the current system date/time in the format yyyyMMdd HHmmss.SSS, e.g.
format 20190508 131742.966
Get changes the input date from it's current format (mask) to the desired output format.
current View the Data Type Formats section in Unit 2 for date/time formatting
date
Lookup Functions
Table 35: Lookup Functions
Function Description
SQL lookup Uses a database connection to execute a SELECT query or stored procedure
Cross Same as using the cross-reference table to look up a value. View the Cross Reference
reference Table section in Unit 2
lookup
Document Same as using the document cache to retrieve a file, this time elements can be
cache selected from the profile
lookup
Simple Self-contained, two column, key value pair simple table. Works same way as a cross
lookup reference table lookup
Connector function
The connector function only has the connector call option. This is the same thing as using a
connector to pull data. Here you'll be able to define what fields act as the input (defined in
filters) and what to output (defined from the operation profile). Since this is the same thing
223
Properties functions
View Property Types and Setting Properties section in Unit 2 for more information on the
properties available and what they do.
224
Extensions
Extensions allow you to set different values from the default values for certain fields and
properties of components in the process in different environments. Those fields include most
fields of connections, dynamic process properties, trading partners, process properties, cross
reference tables, maps, and PGP certificates. Extensions allow you to avoid redeploying a
process whenever you have credential changes or want to change values in the cross
reference and process properties. You define what you want to be extended then set the
value in one of two places:
1. Test mode extensions, when you test a process in the build tab, you can expand the
test extensions options and enter different values than the default ones present. These
extended values only apply in test mode for the specific atom you choose to execute,
so you can have different sets of values for each atom
2. Environment extensions, when you deploy to an environment, you have the option of
using a different set of values per environment
Extensions will look like this:
The most common use cases are in environments and integration packs.
225
• If a parent or main process uses a Process Call shape to call the subprocess(es), those
subprocesses will be deployed as part of the parent process (when you deploy the
parent process). Defining extensions in the parent process will apply to the parent and
subprocesses
• If you define extensions in a subprocess, the extensions are not applied during
execution of the parent process since you deployed the parent process
• If the subprocess is also deployed independently of the main process, the extensions
would apply if the subprocess executes independently of the parent process with a
Process Route shape, the subprocesses are independent of the parent process. The
parent process, the Process Route component, and the subprocesses must all be
deployed independently.
• If you define extensions in the parent process, the extensions are applied only to the
parent process; they are not applied to any subprocesses
• If you define extensions in a subprocess, the extensions are applied only to that
subprocess; they are not applied to the parent process or to any other subprocess
• Note: the process properties are not independent, they remain in effect for the
duration of the process once it is accessed or set (by the environment extensions). To
change you need to use the Set Properties shape, map function, or custom scripting in
further processes
Setting Extensions
You can only set extensions manually in test mode but for environments you can set them
manually or through the API.
226
When you have test mode extensions, the values are saved <<atom_directory>>/settings-
test/<<process_ID>>/overrides.xml file.
227
If you re-run documents from process reporting, environment extensions are still used.
If you re-run in Test Mode, the test mode extensions that were already setup for that atom (if
any) are used.
Cleanse Shape
The Cleanse Shape's purpose is for validation. What this shape does is either repair or reject
documents before processing further down the process flow. The Cleanse itself validates
based on a Profile. Through the profile, you can add restrictions on a per element/field basis
228
229
In this case, if the field element is missing, I set a default value to 'False', which will continue
the process flow. However, I set a validation to reject the document if the maximum length is
not met.
Example documents:
Example A: field1, field2, field3, field4, field5, field6
The process will hit the Cleanse shape and will first validate based on the Mandatory field
validation. This criterion is met. It then validates against the maximum length validation, to
which it also meets. It will continue down the 'Clean' route, to the Return Documents shape.
As seen, the second element is missing. This document will go to the Cleanse shape and will
not pass the Mandatory field validation. However, the result is that this value will be
defaulted to 'False', rather than going down the 'Rejected' path.
The resulting document is as follows: field1, False, field3, field4, field5, field6. It will then
complete the maximum length validation and will go down the 'Clean' path as well.
This document will go through the Cleanse shape and will pass the mandatory field validation.
However, it will fail the maximum length restriction, as it has 11 characters instead of 10,
and will go down the 'Rejected' path.
The 'Rejected' path in the flow of the process is performed before the 'Clean' path. You can
record/store this rejected message through Document Property->Meta Information->Base-
>Cleanse Result Message.
230
The custom scripting function lets you define your own inputs and outputs and use them in
scripting. You can use Groovy 1.5, Groovy 2.4, or Javascript. You can have custom scripting as
an inline script or as a scripting component. The inline script only exists in the process that
uses it. Scripting component lets you reuse the same script in multiple processes, so if you
change it in the scripting component, you can change it in multiple processes.
The other methods related to getting or setting process properties are covered in Setting
Properties in Unit 2 (getProcessProperty,
setProcessProperty, getDynamicProcessProperty, setDynamicProcessProperty)
The getContainerId method (ExecutionUtil.getContainerId()) is the same as using ATOM_ID for
the getRuntimeExecutionProperty("ATOM_ID") for local atoms. The getContainerId method will
return a cloud atom's cloud parent atom ID.
The getAccountId method (ExecutionUtil.getAccountId()) is the same as using ACCOUNT_ID for
the getRuntimeExecutionProperty("ACCOUNT_ID").
231
• Batch Count — Used to specify the number of lines per document. The default is 0, which
means that batching is turned off, and each line will be split into a separate document. (This
is the same as setting the batch count to 1.)
• Headers Option
• No Column Headers — If selected, it is assumed that the input document does not
contain column headers. The first line is considered to be a record and will be put into
the first document.
• Remove First Line as Column Headers — If selected, the first line is considered to be a
header, not a record. The header will not be put into any of the documents.
232
The lines to be linked do not need to be read in consecutively. The Split Documents process
type searches through the entire document and groups matching lines in the output
document(s). For example, if you split a sales order file by state used in the address, you will
get a document for each state containing sales orders for that state (one for State_AAA, one
for State_BBB, etc.). However, you cannot link lines from multiple input documents. If your
integration scenario requires this, add a Combine Documents Data Process shape before the
Split Documents Data Process shape.
• Batch Count — Used to specify the number of link element values per document. The default
is 0, which means that batching is turned off, and records will be split based on one unique
value of the link element. (This is the same as setting the batch count to 1.) For example:
• If you split a sales order file by state used in the address and Batch Count = 1, you will
get one document for each state containing sales orders for that state (one document
for State_AAA, one document for State_BBB, etc.).
• If you split a sales order file by state used in the address and Batch Count = 2, records
will be split based on two unique values of the link element. The first document will
contain all sales orders for the first two states read in (for example, State_AAA and
State_BBB). The second document will contain all sales orders for the next two states
read in (for example, State_CCC and State_DDD). The third document will contain all
sales orders for the next two states read in, and so on.
233
• Profile — When splitting by profile, you must select a flat file profile. If you do not select
one, the process will fail at this Data Process shape.
• Link Element— When splitting by profile, you must select a profile element for linking related
records. If you do not select one, the process will fail at this Data Process shape.
The following sample flat file shows 14 sales orders placed by four companies. The first line
contains a header.
Company, Address, City, State, ZipCode, Country, OrderNumber, LineNumber, ItemName, Quantity, Price,
TotalPrice
AAA_Company, Address_AAA, City_AAA, State_AAA, 19001, US, 1100, 1, Item_A, 500, 10.00, 5000.00
AAA_Company, Address_AAA, City_AAA, State_AAA, 19001, US, 1100, 2, Item_B, 25, 20.00, 500.00
AAA_Company, Address_AAA, City_AAA, State_AAA, 19001, US, 1100, 3, Item_C, 100, 25.00, 2500.00
BBB_Company, Address_BBB, City_BBB, State_BBB, 83002, US, 1200, 1, Item_A, 300, 10.00, 3000.00
BBB_Company, Address_BBB, City_BBB, State_BBB, 83002, US, 1200, 2, Item_B, 50, 20.00, 1000.00
BBB_Company, Address_BBB, City_BBB, State_BBB, 83002, US, 1200, 3, Item_C, 10, 25.00, 250.00
CCC_Company, Address_CCC, City_CCC, State_CCC, 94003, US, 1300, 1, Item_B, 50, 20.00, 1000.00
CCC_Company, Address_CCC, City_CCC, State_CCC, 94003, US, 1300, 2, Item_C, 50, 25.00, 1250.00
AAA_Company, Address_AAA, City_AAA, State_AAA, 19001, US, 1400, 1, Item_A, 250, 10.00, 2500.00
AAA_Company, Address_AAA, City_AAA, State_AAA, 19001, US, 1400, 2, Item_B, 10, 20.00, 200.00
DDD_Company, Address_DDD, City_DDD, State_DDD, 52004, US, 1500, 1, Item_A, 200, 10.00, 2000.00
DDD_Company, Address_DDD, City_DDD, State_DDD, 52004, US, 1500, 2, Item_C, 20, 25.00, 500.00
BBB_Company, Address_BBB, City_BBB, State_BBB, 83002, US, 1600, 1, Item_A, 300, 10.00, 3000.00
BBB_Company, Address_BBB, City_BBB, State_BBB, 83002, US, 1600, 2, Item_C, 200, 25.00, 5000.00
First let’s vary the Batch Count. We use the Batch Count option to specify the number of lines
per document. (In each case we use the Header option Retain first line as Column Headers,
so that the first line is considered to be a header and appears at the top of each document.)
Using the sales order data shown above, here are the results.
234
• If Batch Count = 0 or 1, each line above is split into a separate document. If we select No
Column Headers, it is assumed that the input document does not contain column headers.
The first line is considered to be a record. We get 15 documents.
• If Batch Count = 0 or 1, each line above is split into a separate document. If we select
Remove first line as Column Headers, the first line is considered to be a header and is
removed. We get 14 documents, none of which contains the header.
• If Batch Count = 0 or 1, each line above is split into a separate document. If we select Retain
first line as Column Headers, the first line is considered to be a header. We get 14
documents. The header appears at the top of each document.
The following sample flat file shows 14 sales orders placed by four companies. The data does
not contain a header.
AAA_Company, Address_AAA, City_AAA, State_AAA, 19001, US, 1100, 1, Item_A, 500, 10.00, 5000.00
AAA_Company, Address_AAA, City_AAA, State_AAA, 19001, US, 1100, 2, Item_B, 25, 20.00, 500.00
AAA_Company, Address_AAA, City_AAA, State_AAA, 19001, US, 1100, 3, Item_C, 100, 25.00, 2500.00
BBB_Company, Address_BBB, City_BBB, State_BBB, 83002, US, 1200, 1, Item_A, 300, 10.00, 3000.00
BBB_Company, Address_BBB, City_BBB, State_BBB, 83002, US, 1200, 2, Item_B, 50, 20.00, 1000.00
BBB_Company, Address_BBB, City_BBB, State_BBB, 83002, US, 1200, 3, Item_C, 10, 25.00, 250.00
CCC_Company, Address_CCC, City_CCC, State_CCC, 94003, US, 1300, 1, Item_B, 50, 20.00, 1000.00
CCC_Company, Address_CCC, City_CCC, State_CCC, 94003, US, 1300, 2, Item_C, 50, 25.00, 1250.00
AAA_Company, Address_AAA, City_AAA, State_AAA, 19001, US, 1400, 1, Item_A, 250, 10.00, 2500.00
AAA_Company, Address_AAA, City_AAA, State_AAA, 19001, US, 1400, 2, Item_B, 10, 20.00, 200.00
DDD_Company, Address_DDD, City_DDD, State_DDD, 52004, US, 1500, 1, Item_A, 200, 10.00, 2000.00
DDD_Company, Address_DDD, City_DDD, State_DDD, 52004, US, 1500, 2, Item_C, 20, 25.00, 500.00
235
Record
Elements
Company
Address
City
State
ZipCode
Country
OrderNumber
LineNumber
ItemName
Quantity
Price
TotalPrice
• If Batch Count = 0 or 1, lines are split based on one unique value of the link element
(Company). There are four different values for Company in the input document. We get four
documents: a document containing the AAA_Company records, a document containing the
BBB_Company records, a document containing the CCC_Company records, and a document
containing the DDD_Company records
• If Batch Count = 2, the non-header lines are grouped by two values of the link element, in
the order that they are read in. We get two documents: a document containing the
AAA_Company and BBB_Company records, and a document containing the CCC_Company and
DDD_Company records.
• If Batch Count = 3, the non-header lines are grouped by three values of the link element, in
the order that they are read in. We get two documents: a document containing the
AAA_Company, BBB_Company and CCC_Company records, and a document containing the
DDD_Company records.
236
• Headers Option — Used to include or exclude headers that may be in the documents that are
being read in.
o No Column Headers — If selected, it is assumed that the input documents do not contain
column headers. The first line in each document is considered to be a record and will be
added to the combined document.
o Remove First Line as Column Headers — If selected, the first line in each document is
considered to be a header. The headers will not be put into the combined document.
o Retain First Line as Column Headers — If selected, the first line in the first document is
considered to be a header. The header will appear prior to the data in the combined
document.
237
We can use the Free-Form Header and Free-Form Footer fields to add header and/or footer
text to the combined document. We use the Column Headers options to include or exclude
headers that may be in the documents that are being read in.
In the three scenarios below, we type “My Free-Form Header” in the Free-Form Header
field, and “My Free-Form Footer” in the Free-Form Footer field. Using the two documents
shown above, here are the results.
If we select No Column Headers, it is assumed that the documents do not contain column
headers. The first line in each document is considered to be a record (even though it is a
header in this case) and is added to the combined document. The combined document looks
like this:
My Free-Form Header
Document 1 Header
AAA_Company, Address_AAA, City_AAA, State_AAA, 19001, US, 1100, 1, Item_A, 500, 10.00, 5000.00
AAA_Company, Address_AAA, City_AAA, State_AAA, 19001, US, 1100, 2, Item_B, 25, 20.00, 500.00
AAA_Company, Address_AAA, City_AAA, State_AAA, 19001, US, 1100, 3, Item_C, 100, 25.00, 2500.00
AAA_Company, Address_AAA, City_AAA, State_AAA, 19001, US, 1400, 1, Item_A, 250, 10.00, 2500.00
AAA_Company, Address_AAA, City_AAA, State_AAA, 19001, US, 1400, 2, Item_B, 10, 20.00, 200.00
Document 2 Header
BBB_Company, Address_BBB, City_BBB, State_BBB, 83002, US, 1200, 1, Item_A, 300, 10.00, 3000.00
BBB_Company, Address_BBB, City_BBB, State_BBB, 83002, US, 1200, 2, Item_B, 50, 20.00, 1000.00
BBB_Company, Address_BBB, City_BBB, State_BBB, 83002, US, 1200, 3, Item_C, 10, 25.00, 250.00
BBB_Company, Address_BBB, City_BBB, State_BBB, 83002, US, 1600, 1, Item_A, 300, 10.00, 3000.00
BBB_Company, Address_BBB, City_BBB, State_BBB, 83002, US, 1600, 2, Item_C, 200, 25.00, 5000.00
My Free-Form Footer
If we select Remove first line as Column Headers, the first line in each document is
considered to be a header. The headers are not put into the combined document. The
combined document looks like this:
My Free-From Header
238
If we select Retain first line as Column Headers, the first line in the first document is
considered to be a header. The header appears prior to the data in the combined document.
The combined document looks like this:
My Free-From Header
Document 1 Header
AAA_Company, Address_AAA, City_AAA, State_AAA, 19001, US, 1100, 1, Item_A, 500, 10.00, 5000.00
AAA_Company, Address_AAA, City_AAA, State_AAA, 19001, US, 1100, 2, Item_B, 25, 20.00, 500.00
AAA_Company, Address_AAA, City_AAA, State_AAA, 19001, US, 1100, 3, Item_C, 100, 25.00, 2500.00
AAA_Company, Address_AAA, City_AAA, State_AAA, 19001, US, 1400, 1, Item_A, 250, 10.00, 2500.00
AAA_Company, Address_AAA, City_AAA, State_AAA, 19001, US, 1400, 2, Item_B, 10, 20.00, 200.00
BBB_Company, Address_BBB, City_BBB, State_BBB, 83002, US, 1200, 1, Item_A, 300, 10.00, 3000.00
BBB_Company, Address_BBB, City_BBB, State_BBB, 83002, US, 1200, 2, Item_B, 50, 20.00, 1000.00
BBB_Company, Address_BBB, City_BBB, State_BBB, 83002, US, 1200, 3, Item_C, 10, 25.00, 250.00
BBB_Company, Address_BBB, City_BBB, State_BBB, 83002, US, 1600, 1, Item_A, 300, 10.00, 3000.00
BBB_Company, Address_BBB, City_BBB, State_BBB, 83002, US, 1600, 2, Item_C, 200, 25.00, 5000.00
My Free-From Footer
4.3.2.12.1.2 JSON
Two rules of thumb:
1. If it is a repeating array and the other "parent" elements do not have any elements on
the same level (peer/sibling elements) defined in the profile, the split will honor the
batching
2. All other cases, each record will be split into a separate document, the batch value is
not used
When a JSON profile is split, the elements outside of the split element are retained. If we
use:
239
and split on the addresses array element, we'll get three documents of (with a different
description), as you can see the elements outside of the array are kept:
240
If we were to change the batch, it wouldn't do any batching (since there are "parent"
elements that have siblings i.e. the birthday and spouse element exist). If we were to split on
a non-array element, nothing would really happen since there aren't multiple elements.
This would honor batching and the profile only has address and the elements underneath:
241
4.3.2.12.1.3 XML
Two rules of thumb:
1. If there are parent elements that do not have any elements on the same level
(peer/sibling elements) in the profile and the split element is not an attribute, the split
will honor the batching
2. All other cases, each record will be split into a separate document, the batch value is
not used
When an XML profile is split, the other elements are retained in each document:
242
243
4.3.2.12.1.4 EDI
Using this 850 profile:
244
and splitting on PO1 segment makes the below, it retains the other segments as long as you
define your profile correctly according to the data:
245
Combine
4.3.2.12.2.1 XML
Let's start with multiple documents of the same structure like this:
Here are the resulting data depending on what you combine by:
<Country>US</Country> <Country>US</Country>
<Address>456
</RequestRecord> </RequestRecord> Boomi Lane</Address>
</Records>
<Records> <RequestRecord>
<Address>789
<RequestRecord> <Address>456 Boomi Boomi
Lane</Address> Street</Address>
<Address>456 Boomi
Lane</Address> <PostalCode>800M1</Postal ....
Code>
<PostalCode>800M1</Postal </RequestRec
Code> <Country>US</Country> ord>
246
</Request>
</RequestRecord> <RequestRecord> </DataA>
</Records>
<Records> ...
....
</Records> <RequestRecord>
... ...
</Request> </Request>
</DataA> </DataA>
Combine by <Records>, it will be repeated and everything within will be present, the
<Request> and <DataA> parent tags will remain, but CustomerID and ProjectID are gone.
Combine by <RequestRecord>, the looping will start/end with <RequestRecord> instead of
<Records>. If <Records> had any additional children elements, those children elements would
no longer be present after combining.
Combine by <Address>, <Address> it will be looped and <PostalCode> and <Country> are
removed.
Combining will remove all other elements on the same level and above the combining
element
4.3.2.12.2.2 JSON
You can only combine using repeating arrays. This will also erase all other elements on the
same level and outside the combining element. Combining multiple of these:
247
248
If I was to combine on the postalCode array element, everything else before postalCode is
removed:
249
View https://community.boomi.com/s/article/xmlcombiningdocumentsandretainingotherele
ments for method.
250
Overview
Document Tracking allows you to capture key business data values from the documents being
processed to help find those specific documents in Process Reporting for tracking and
troubleshooting purposes. Using Tracked Fields is an important part of your functional
monitoring strategy. You can think of them as custom fields for Process Reporting.
Document Tracking allows you to answer questions like "what happened with Order Number
123?" By configuring connector operations to capture specific values, you can trace an
individual record through a process execution or even across multiple executions. This is
extremely useful in decoupled design patterns.
For example, consider the following scenario. You have a series of individual processes that:
By configuring the same Tracked Fields on each inbound and outbound connector shape, you
can easily search for a specific order number and trace its history through this workflow.
How it Works
1. Tracked Fields are first defined at your AtomSphere account level. This is because
Tracked Fields can be used across processes and are not tied a specific connector
type, operation, or profile.
2. Once defined in your account, you can configure individual connector operations to
populate values for those Tracked Fields based on the data they receive or send. You
251
How to Configure
In this example we will show how to configure Document Tracking to capture the "Customer
ID" value when syncing account records from Salesforce to NetSuite. The objective is to
capture the same value on both the inbound Salesforce query and the outbound NetSuite
upsert calls for trace-ability.
You will need the Account Administration privilege to configure Document Tracking. To
configure a new Tracked Field for your AtomSphere account:
252
The following example process extracts account records from Salesforce and sends them to
NetSuite. We want to configure Tracked Fields to the primary connector operations
components to capture identifying record information.
1. Edit the Salesforce Get operation component and go the Tracking tab.
253
2. Add the "Customer ID" Tracked Field from the previous step
3. Configure the value to populate the Tracked Field. In this case choose the "Name" field
from the response XML profile (the one displayed on the operation's Options tab)
4. Save the operation
4.4.1.2.2.2 Perform the similar steps for the outbound NetSuite Upsert operation.
254
4.4.1.2.3.1 Deploy and execute the process then go to Process Reporting to view the
execution details.
4. You can do the same for the NetSuite Upsert operation and note the Customer ID
Tracked Field and value as well
4.4.1.2.4.1 Search for a specific Tracked Field value across all documents and executions.
255
3. The results show documents across connector operations and process executions
matching the Tracked Field search term
256
• Use generic names - Avoid process- or endpoint-specific names for Tracked Fields
because they will be used across processes, applications, and data formats. For
example, consider "Account Number" vs. "Salesforce Customer ID"
• Only track a few fields - Capture only the key values required to identify and
troubleshoot documents
• Do not store sensitive values - Tracked Field values are uploaded and stored in the
AtomSphere platform database as part of the execution metadata. They are not stored
in your local Atom runtime. Be aware of this and avoid tracking sensitive values such
as credit card numbers, social security numbers, or any other protected information
because they are stored unencrypted outside your local environment. Also note that
the View Data privilege (which prevents users from viewing document data) does NOT
apply to Tracked Fields values
• There is a slight performance impact - Because the connector needs to parse the data
to extract the values, there will be a slight performance decrease. Typically, this is
negligible and the ability to easily troubleshoot records outweighs the costs, but it is
good to keep in mind not to track too many fields for a given connector operation
• Do not use for batches or repeating values - Generally if the incoming data contains a
list of values, it does not make sense to capture a value from a repeating item
because it will only capture the first instance. For example, if your process reads a
single large batch file containing many customer records, it would not be appropriate
to track customer-level values. Similarly, if your process sends an invoice record with
multiple line items, it would be appropriate to track the "invoice number" and
"customer number" from the "header", but do not track "item number" from the
repeating line details
• Create unique names - Be sure to use unique names for Tracked Fields
• Use consistently - To get the most benefit from Document Tracking, be sure to
consistently configure Tracked Fields for new connector operations
257
• Tracked Field values are only captured for connector operations used within Connector
shapes. They are not captured for connector operations used in map functions or in
other shape parameters, such as a Connector Call lookup within a Decision shape, even
if configured within the operation
• Tracked Field values are only captured for deployed process executions. Values are
not captured for Test Mode executions
• Tracked Field values are available to view in Process Reporting for 30 days, same as all
execution records
• If you have a Low Latency listener process, remember execution information is not
captured which includes Tracked Fields
• Deleting a tracked field is permanent. Because very careful if you choose to delete a
Tracked Field
• The maximum value length is 1000 characters. Do not store the entire document data
(i.e. Current Data)
• The maximum number of Tracked Fields per account is 20. If you try to add more,
you'll get this error message, "Cannot add another Tracked Field. You are only allowed
to have 20 tracked fields."
• Tracked Field values are not available through the AtomSphere platform API. In other
words, you cannot use the platform API to query executions by a given Tracked Field
value. The exception to this is the X12 Connector Record object used for EDI
processing
Are tracked profile fields taken from the request or response document?
The most common use case for Tracked Fields is to capture values from the document data
using the Profile Element parameter type. Because some types of connectors actions both
take in and return documents, it is important to know which document will be used for
Tracked Fields.
In general:
258
• A small number of connectors behave slightly differently for "send" actions when the
"Return Application Error Responses" or "Return HTTP Responses" setting is enabled in
the operation. In this specific situation the response document is available for tracking
instead of the request. Because typically the request fields are desired for tracking,
consider disabling "Return Application Error Responses" and instead handle errors using
a Try/Catch shape. Connectors exhibiting this behavior include Salesforce, SAP, HTTP
Client, and Web Services SOAP Client, OData Client, Red Prairie, QuickBooks,
QuickBase, and any "legacy" connector.
259
• In most cases, going directly to a Stop shape from a route, decision, try/catch,
or business rules is discouraged. If any documents go down this branch, it will
be difficult to trace after the execution is finished.
• Terminate your branches with Stop shapes where possible, even if it will not
change the results of the process. This will communicate your intentions as the
developer to whomever may need to maintain your process in the future.
• During initial process build, first import connections and related profiles. You
will need to reference those profiles in other shapes during logic build out.
• Avoid relative date filters in connector calls (Example: “Current date minus 5
days”).
o Rationale: If the process fails, debug and record re-run becomes
difficult as current date continues to advance. Record can be missed by
re-running the same query at a later date.
260
• Where possible, add the appropriate date formats to date fields in both source
and destination profiles and avoid the "date convert" function.
• Date Math (ex: Add a Day; find the last day of the month, etc) usually requires
custom scripting.
You can use the following features to split and decouple your processes in Boomi:
261
On the surface, the Process Call step allows you to execute or pass data to another Process as
part of your integration workflow. However, upon closer look, this step can enable you to
incorporate some sophisticated design strategies into your integrations including:
Note: The Process Call step is only available in Professional and Enterprise Editions as part of
Advanced Workflow.
Before diving right into the use cases, a quick refresher on three important concepts to
understand when working with Process Call steps and sub-Processes:
• “Wait for process to complete?” - This option on the Process Call step determines
whether the sub-Process is executed “synchronously” or “asynchronously”. In other
words, should the calling Process wait for the sub-Process to complete before
continuing on to its next step or just kick off the sub-Process and immediately
continue to the next step.
• The sub-Process’ Start Step - If the sub-Process’ Start Step is configured as “Data
Passthrough”, the set of Documents from the calling Process will be passed directly
into the sub-Process to continue executing. In this case, the sub-Process essentially
functions as a continuation of the calling Process. However, if the Start Step is
configured as “Connector” or one of the other options, the sub-Process will retrieve a
new set of Documents. Also, if not configured as “Data Passthrough” the sub-Process
will execute once for each Document in the calling Process that reaches the Process
Call step. This means if ten Documents reach the Process Call step, the sub-Process
will execute ten times.
• Return Documents step - This step typically goes hand-in-hand with the Process Call
step. It passes Documents from the sub-Process back to the calling Process to continue
executing. One very important nuance to its behavior is that Documents are returned
262
Now armed with that understanding, let’s look at some of the clever things you can do with
the Process Call step.
Looking for opportunities to create reusable sub-Processes--even if it’s only a few steps--can
facilitate maintenance, improve readability and organization, and enable more fine-grained
unit testing. Some examples of situations that often lend themselves to common sub-
Processes include:
• Connector response handling - Check for success/fail response codes and routing
accordingly
• Custom archiving, logging, or notifications - Standardize file names, log messages, and
alert formats.
• Working with a standard or “canonical” format - Individual Processes transform
disparate data to a common format then pass to a common sub-Process to continue
execution.
263
Tip: When possible make your sub-Processes even more reusable by configuring the steps to
inspect User Defined Document Properties instead of Profile Elements. This allows the sub-
Process to be called from Processes with different object types or even data formats.
If you have a series of Process that must run in a specific order, you can use a “master”
Process to execute each Process sequentially. In the Process Call step configuration, check
“Wait for process to complete” so each Process will wait until the previous Process is
complete before starting. Use the “Abort if process fails” option to control whether the next
Process should still execute if the previous Process failed or not.
Then you only need to set one schedule for the “master” Process and each sub-Process will
execute as soon as it can. This is often easier than trying to stagger schedules, especially for
Processes whose execution times may vary.
Deployment Note: Technically you only need to deploy the “master” Process however if you
want to be able to retry Documents you must deploy each sub-Process as well.
264
Sub-Processes can be used to group Documents from multiple sources together, so you can
operate upon them as a single group later in the Process to do things like combining, splitting,
and take advantage of Connector batching. This use case is probably best illustrated with an
example.
Let’s say you need to extract both direct and indirect customer records from some web
application and create a single CSV file. You need to query for each type of customer however
the application’s API does not allow you to use a compound filter such as “WHERE
customerType=‘DIRECT’ OR customerType= ‘INDIRECT’”. This means you will need to extract
each type with a separate query call. The Process might look something like this:
265
Return Documents step to the rescue! By moving the Connector calls into a sub-Process, you
can rely on the fact that the Return Documents step will wait until the Process is complete
(remember the three concepts above?) to return a single group of Documents to the calling
Process. The single group of Documents will then continue down the calling Process together
and can be mapped and combined into one CSV file. The calling Process will now look like
this:
266
Process Call steps can also help with unit testing by separating the source of inbound data
from the rest of the Process workflow. For example, you can have one Process that performs
the “real” Connector call to retrieve data from the intended source and another Process that
retrieves test data staged somewhere such as a local disk folder (or maybe even contained
directly in the Process using a Message step). Then each of these simple Processes can pass
the retrieved Documents to the same “main” Process containing the bulk of the workflow
steps.
This is especially useful for testing integrations that use event-based Connectors that cannot
be run in Test Mode such as Web Services Server and AS2.
Below is an example of two processes, one that actually listens for incoming data via the Web
Services Server and one that retrieves staged test data from a local Disk location. Both then
pass the Documents to the common “Create Order” sub-Process that performs the rest of the
integration. The “test” Process can be run in Test Mode to assist during development before
deploying the actual listening Process for production use.
267
The Process Route allows you to dynamically choose a subprocess to execute at runtime based
upon some document value. The "routing rules" are configured separately which define the
mapping between a given value and the subprocess to execute, as well as the "interface" for
how the subprocess should behave such as Passthrough or not and the number of expected
Return Document paths.
The feature can greatly reduce the configuration and maintenance effort when building
processes that must handle many different types of documents and therefore many different
execution paths. However additional upfront design and coordination is required to use
effectively. If your process only needs a few routes that are relatively static, using a Process
Route may be overkill. If the process has many routes that are constantly changing, the extra
design and configuration sophistication will pay off in the long run with respect to ongoing
maintenance.
The two key aspects that make Process Route different than a regular Process Call are:
For more information visit the User Guide Process Route Components and Process Route
Shape.
Use Case
• Inbound files for many different types of records are placed in a single disk directory.
• The format (and consequently the Profile), mapping rules, and destinations vary by
record type.
• The files follow a consistent file naming convention: <recordtype>_<date>.<file
extension>.
• For this tutorial there will be two record types:
268
Motivations
Without the Process Route shape there are several alternative approaches for accommodating
this situation:
1. Create a single process that reads all the files and uses a Route shape to send each file
to a record type-specific subprocess.
2. Create a separate process for each record type that only reads those files.
1. With the first option, every time a new record type is added or if one of the
subprocesses needs to be modified, the parent process needs to be modified and
redeployed which will also redeploy all the other subprocesses. This can be very
difficult to manage if changes to another subprocess are underway but not ready to be
deployed yet. Additionally, when the number of potential routes exceeds 20-30, the
Route shape can be impractical to use.
2. With the second option, there would simply be a lot of processes to create, deploy,
and moreover schedule. Any common elements would need to be maintained and
deployed repeatedly.
With the Process Route feature, the main process and individual subprocesses can be added,
maintained, and deployed independently. Additionally, it requires only a single main process
to develop, deploy, and schedule, which is more efficient with respect to the maximum
concurrent executions on the Atom and provides more control over throttling.
Approach
269
Note the Process Route paths within a given process execution are still executed sequentially,
NOT in parallel. Return paths are executed sequentially as well.
Implementation
The example processes below are used to illustrate the relevant concepts and are not
intended to be fully configured.
4.4.11.2.5.1 Design
The Process Route component essentially defines the interface or contract between the main
process and subprocesses, so it is important to think through the desired interaction upfront.
• General: There should be a single process that reads in all files and routes each file to
a specific subprocess that can handle the mapping, logic, and target destination for
the given record type.
• Process Type: The documents from the main process should be passed directly into the
subprocess so the subprocesses will need to be configured as Data Passthrough.
• Route Key: Because each subprocess will handle a single record type, it makes sense to
use the record type value as the Route Key. The record type is available as part of the
incoming file name, so the main process can parse the file name to determine the
record type. The resulting value can be stored in a dynamic document property named
"RECORD_TYPE" to use for the Route Key lookup.
o IMPORTANT: The Route Key is an exact value match. The main process is
responsible for preparing the value appropriately to match the Route Key
exactly.
270
Orders subprocess:
Employees subprocess:
271
272
273
3. Add a Process Route shape configured with the Process Route component created
above. Leave the defaults for the other General tab fields. On the Route Parameters
tab, add a single parameter type for the dynamic document property "RECORD_TYPE."
274
• Note the Route Key value can be a concatenation of parameter types if useful
to your scenario.
4. The Process Route's Return Paths are automatically drawn on the canvas. Perform
subsequent steps as appropriate for your scenario. In this example, the Failure path
throws an exception and references the common FAILURE_MSG dynamic document
property:
275
4. Deploy (and attach to the desired Environment/Atom) the Process Route component.
When the main process executes, keep in mind the subprocesses are Data Passthrough so they
will not display as separate executions records in Process Reporting. However, the individual
subprocess(es) that were executed are captured in the main execution's Process Log:
276
One of the greatest advantages of the Process Route component is the deployment flexibility.
Because the Process Route component and subprocesses can be deployed independently, it
greatly reduces the regression impact when changes arise. This flexibility allows you to
modify and redeploy a single subprocess without having to redeploy the main process which
would typically include all other subprocesses.
• If you need to modify one of the subprocesses, you only need to redeploy that
subprocess. You do not need to modify or redeploy the main process or the Process
Route component. However, keep in mind any changes should be compatible with the
design assumptions of the main process.
• If you need to add a new route and subprocess, you only need to create and deploy
the new subprocess and then update and redeploy the Process Route component. You
do not need to modify or redeploy the main process.
• If you need to change common logic in the main process (e.g. error handling), you only
need to modify and redeploy the main process. You do not need to modify or redeploy
the subprocesses or Process Route component. However, keep in mind any changes
should be compatible with the design assumptions of the subprocesses.
4.4.11.2.6.2 Cautions
• If you need to make a change that affects the interaction/interface between the main
process and subprocesses (such as adding a new Return Path or assuming the
availability of some process property or document cache), you should do so
thoughtfully to ensure backward compatibility. Depending on the nature of the change
this could be as simple as providing default values for properties or as complex as full
coordination and redeployment of all processes and components.
• Because there is no deployment dependency between the main and subprocesses, it is
quite possible to have different versions of the same component used in different
277
Considerations
• Documents will only be routed to a single path. Duplicate and wildcard keys are not
allowed so documents cannot match to multiple paths.
• Documents are first grouped together by Route Key (similar to the regular Route
shape) and then each group of documents is sent to the respective subprocess in the
sequence defined within the Process Route component.
• The Return Paths are executed in the sequence defined within the Process Route
shape, not the component.
• The Default path for documents that did not match a Route Key is executed last.
• Again, Process Route subprocess executions behave the same as regular Process Call
executions with respect to:
o Process Reporting - "Passthrough" subprocesses are logged as a continuation of
the main process; there is not a separate execution record. Non-passthrough
subprocesses will create a separate execution record.
o Execution "context" is shared so things like process properties and document
caches are available and modifiable between the main and subprocesses.
278
Atoms natively support message queuing. Messages are managed by a shared queue server
embedded in the Atom Java process. This approach enables simple, reliable asynchronous
process execution whereby a process invokes another process in a separate invocation.
Implementation
• Reusable queue components are configured at the account level. Each queue
component specifies the configuration of a message queue, including its name and the
messaging model with which the message queue can be used, either Point-to-Point or
Publish/Subscribe.
• An Atom’s shared queue server creates a message queue upon invocation of an Atom
Queue connector Get, Send or Listen operation that specifies a queue component.
• Messages consist of references to documents rather than actual document content.
Each message references one or more documents. The document metadata in
messages includes dynamic document properties.
• Messages persist on a message queue until one of the following occurs:
• The message is consumed.
o The documents that the message references are purged.
The messaging system supports all Atom types including Molecules, which enable clustering,
and Atom Clouds, which enable multi-tenancy.
How to Use
1. Create queue components.
2. Configure the Atom’s shared queue server, if you are the Atom’s owner. The default
configuration is likely to be suitable for your purposes, at least initially.
3. Build and deploy processes that use Atom Queue connector operations that specify the queue
components you created.
4. Perform message queue management actions as needed.
279
Note: Atom message queuing is an optional feature. To have this feature enabled in your
account, contact your Boomi sales representative.
Benefits
The benefits of having a native message queuing implementation can be categorized as
follows:
• Decoupling — Producers and consumers of messages are independent and can evolve
separately at their own rate. Workflow is encapsulated into logical, reusable units — that is,
separate processes — which are organized, maintained and deployed independently.
• Multiple recipients — Messages can be sent to multiple recipients independently. Likewise,
their receipt can be monitored independently.
• Redundancy — Message queues can persist messages until they are fully processed.
• Resiliency — Decoupling implies failures are not linked, thereby mitigating the risk of
unreliable applications. A producer can continue to enqueue messages while consumers are
temporarily disabled.
280
281
Listener management
• Decoupling is key for listeners in production. The listening process should
receive the data, then add the document to the decoupling mechanism
including an optional archive step. A separate scheduled or listener process
would then draw documents from that mechanism. This limits issues that
frequently occur with simultaneity and unintentionally processing documents
multiple times.
You can view the status of listener processes that are deployed to an Atom, Molecule, or
Atom Cloud to retrieve messages from a message queue by going to the Listeners panel
in Manage > Atom Management. In this panel, you can also pause, resume, and restart
listeners.
1. network failure
When a failure occurs, the shared queue server will attempt to redeliver the message up to
six more times, in intervals of 1, 2, 3, 5, 8, and 24 seconds. After six failures the message is
282
You should periodically analyze the contents of dead letter queues to identify the reasons for
delivery failures.
Data storage
An Atom’s shared queue server’s backing disk store is as follows:
• For a single tenant Atom or Molecule, the shared queue server’s runtime configuration
information and message queues reside in the “queue” directory within the Atom installation
directory.
• For a multi-tenant Atom Cloud, the shared queue server’s runtime configuration information
resides in the “queue” directory within the Atom installation directory. Message queues, on
the other hand, reside in the “queue” directory within each account’s directory.
Note: Documents referenced in currently enqueued messages persist until a scheduled purge
occurs. This is true even while the Atom or process is configured to enable purging of data
immediately following process execution. When documents referenced in an enqueued
message are purged, the message itself is also purged.
• overall status
• memory usage
To monitor these attributes, you need to use a systems management tool, such as Zabbix, and
use a JMX hook (a standardized interface for Java programs).
283
Overview
Document Cache is a very useful concept when it comes to designing complex processes which
involve bulk data or data retrieval. Here are a few concepts as a refresher:
• Indexing - This is how documents are stored for data retrieval. A few tips to keep in mind:
284
Common Scenarios
Scenario 1: Joining Data From Multiple Sources
In case you need to reference data from multiple sources and want to avoid making multiple calls,
a good approach would be to add data to cache after retrieving records from an individual source.
Once the complete data is available in multiple caches, add them as a source profile in your map.
Let's refer to the example below:
285
Once you add data to document cache, you can use this temporary repository to lookup data.
Lookup option is available as a part of parameters for decision shape, set properties, connector as
well as map function.
One popular use case is to efficiently check for the existence of records in a destination system.
Instead of making a separate external API call for each incoming record to determine if it exists in
the destination system, first make a single call to extract and cache all the records then perform
286
Side note: As always, there are considerations and practical limitations of this approach, such as if
there are a very large number of records in the destination system; it may be more efficient to
query individually instead.
287
288
A single document cache can be used to store multiple document properties (as long as the
document is of the same structure). This can be later retrieved and used as appropriate.
The below example shows use of a single document cache for storing different types of errors.
These errors are aggregated at the end of the process and returned to the user.
Because document properties are stored as a part of document cache, we will be retrieving
try/catch message and cleanse result message from branch 1 and 2 respectively. Before writing to
cache in each branch, a dummy static dynamic document property is set with a static value (which
is the same for branch 1 and 2), which is used as an index in the cache.
289
The document property values which we are interested in are the try-catch message and the
cleanse result message. We will use a notify shape for this purpose.
290
Documents can be added to cache and looked up multiple times in different stages of the process,
based on particular input to avoid making the external call multiple times. Let us take a case
where we have a consolidated list of all orders received from a website that must be sent to both
291
In this process, Branch 1 extracts the complete information of all possible combinations of product
categories and departments. (In the Database Operation, be sure to set Batch Count=1 so each
record is returned as a separate document and cached individually. This will give you the desired
level of granularity while retrieving data from the cache.
Branch 2 and 3 pass the required data to the Order and Invoice departments. There is a need to
look up the value of Product Department based on the category of the ordered item. Document
Cache Lookup function is used within the maps in each branch for this purpose.
292
Lookup functions work perfectly well for multiple occurrences of line items (unbounded
elements). One order can have multiple items and for each item ordered, the lookup function will
be able to pick up the corresponding department value based on the item's category.
Some connectors support receiving and/or sending MIME attachments by leveraging the document
cache component.
• How to Receive and Send MIME SOAP Attachments for Web Services
• How to Use the Mail (IMAP) Connector
Additional Considerations
Tips for Using the Document Cache Lookup Function
• Can be used only with document caches that are based on a profile type and profile (in
other words, the document cache cannot be configured with Profile = "None").
• The lookup function should only return one document, otherwise it will generate an error
message.
293
• Scenario: You have identically formatted data being queried from 2 separate
databases. You’d like to query both databases but combine the 2 sets of
documents into a single document stream for downstream processing.
• Solution: Call a sub-process. Within the sub, branch, then execute each DB
query independently, then have both sets of results flow to the same “Return
Documents” shape. The documents from all DB queries will “wait” at the
Return Documents shape and return to the calling process in a single group.
• In general, limit use of flow control set to “run documents individually” unless
used with threading. If used without threading, use within a sub-process if
possible to limit performance impacts.
• Flow Control, Boomi User Guide
Design the integration solution with consideration to reuse as much as possible. It will lower
the implementation cost of the next solution that takes advantage of an already built process
or API.
294
When you exceed the limit in test mode in either document count or size you can deploy the
process and run it with a Return Documents shape. This will allow you to see in the process
reporting exactly how the data in your process is at that point in time. This is one way you
can get the level of detail available in test mode when you either have more than 100
documents or exceed 10MB in data.
When component locking is enabled on an account, it prevents two users from simultaneously
editing a component. This feature doesn’t allow a user to permanently lock a component. The
locks are retained for the session or until the user saves or closes the component. Users with
the Administrator role can steal a lock from other users if needed.
AtomSphere displays a warning when a user attempts to lock or save an outdated component
Process Mode is set to General by default. If you are not using Services Enablement,
your process mode cannot be changed. This list box is visible only if the Services
Enablement feature is enabled in your account.
• Low Latency — Use this process mode to improve performance for short-lived
processes (where total execution time is generally expected to be less than 30
295
o Atom Queue
o JMS
o MDM Listener
o MLLP Server
o The other fields, where Action is set to Listen, and Atom Web Server
manages the connection settings, cannot be changed.
o Some functionality is disabled. See the Low Latency Processes topic for
more information.
A subprocess called by a low latency process always uses Low Latency mode. In other
words, the subprocess settings in the Process Options dialog are ignored and it uses
the same Process Options settings as the top-level low latency process that calls it.
Note: A process that uses the Web Services Server connector in the Start shape and
that existed prior to the 9 January 2013 release will continue to run as it did prior to
the release date. A process that uses the JMS connector in the Start shape and
that existed prior to the July 2014 release will continue to run as it did prior to the
release date. A process that uses the MLLP Server Connector in the Start Shape and
that existed prior to 3 June 2015 will continue to run as it did prior to the release
date. You will not see a process mode assigned to this process in the Start Shape
296
• If selected, more than one instance of this process can run at the same time on a
given Atom.
• If cleared, only one instance can run at a time. This is often beneficial when you are
processing large amounts of data (to conserve system resources) or performing time-
or state-sensitive synchronizations.
Note: This option is not recommended for use with processes that use persisted
process properties.
Auto Capture Errors/Warnings to Local Log?
If selected, logs for the process are stored in the local Atom's execution history
directory. The default location is a zip file in
the <atom_installation_directory>/execution/history/<process_execution_date> folder
. The zip file contains the log files for the process.
This check box is always available and can be selection or cleared. It is cleared by
default.
297
This check box is always available and can be turned on or off. If the Process Mode
field is set to General, this check box is on by default. If the process mode is set to
Low Latency, this check box is off by default.
• If the Atom-level setting is on, purging occurs for any process execution on that Atom,
regardless of the individual process option settings.
• If the Atom-level setting is off, purging occurs only for executions of processes for
which the process option setting is on.
For a process running as a subprocess, the process option setting for the parent
process takes precedence.
This check box is always available and can be turned on or off. It is off by default.
This check box is available only when the Process Mode field is set to Low Latency.
The check box is on by default for new processes and off by default for existing
processes. It can be turned on or off.
298
299
When you configure the Start shape for a process, you might see a
message containing recommendations about how to set the Allow
Simultaneous Executions and Capture Run Dates check boxes. Following
these recommendations should improve process performance. For
example:
• If you select Trading Partner or any type of listener (Action = Listen) and
Capture Run Dates is on, it is recommended that you turn it off.
300
To follow the recommendation, click the Make Change(s) link within the
message.
The Amazon S3 connection uses Amazon access keys, which consist of an access key ID and a
secret access key. You can create these keys using the AWS Management Console via
the security credentials page.
301
Although there is a 1:1 relationship between the S3 Bucket and the connection (i.e., you need
a different connection for each different Bucket), you can create and write to
multiple folders within a Bucket using the same single connection. So – to read or write to
multiple Buckets you need multiple connections, but to read or write to multiple
folders within the same Bucket you only need one connection.
Process Flow
The Amazon S3 operations include Get, Create, and Delete. Here we’ll test the S3 connector
by creating a file in an S3 Bucket. Again, in this example I’m creating and uploading a CSV
data file to the S3 service, and in a later post I’ll review how I can then COPY that file into
Amazon Redshift.
1) Get source data/file. I’ve configured a Salesforce connector to query Accounts (I limited
the operation to 100 records to run in Test Mode without hitting the Test Mode data limits).
I've then mapped the results to a flat file profile (CSV) and used a Data Process shape to
combine the documents into a single flat file document.
2) Set file properties. The S3 Operation supports three properties which can be used to set
the file name and folder name within S3:
302
Note: When you set the S3_KEY parameter the other parameters are omitted. If the S3_KEY is
blank, the Amazon Key is created by concatenating the S3_FILENAME and S3_FOLDER.
In S3, "folders" are really just part of the file name. From the S3 docs:
In Amazon S3, buckets and objects are the primary resources, where objects are stored in
buckets. Amazon S3 has a flat structure with no hierarchy like you would see in a typical file
system. However, for the sake of organizational simplicity, the Amazon S3 console supports
the folder concept as a means of grouping objects. Amazon S3 does this by using key name
prefixes for objects.
For example, you can create a folder in the console called photos, and store an object
called myphoto.jpg in it. The object is then stored with the key name photos/myphoto.jpg,
where photos/ is the prefix.
For convenience, the Boomi S3 connector provides Properties for both FIle Name and Folder
Name, the S3 Connector then concatenates these values. In practice, this means that you
303
304
By adding a second property, I can create the file within a folder in my Bucket:
305
306
Later in this post, I'll use this technique to dynamically build a directory structure with
separate folders for Year, Month, Day..
Before import:
307
After import:
4) S3 response. The S3 service provides a response that includes the file name, bucket name,
and file URL, which may be of use within your integration process.
<s3UploadResult>
<key>S3_Connector_test.csv</key>
308
<uploadedFileUrl>http://boomi-se-demo.s3.amazonaws.com/S3_Connector_test.csv
</uploadedFileUrl>
</s3UploadResult>
I’ll use the S3 response to add an email alert to be sent when the file upload is complete:
309
310
Success! Checking in S3, we can see the uploaded file in the bucket folder I specified above:
The file is now visible and available within S3. Again, the premise here is that writing to S3
would be the first step in loading data into Amazon Redshift, which is covered in some detail
in this post.
So, that's all well and good. We've loaded a file into a directory. However, in practice your
use cases are bound to be more complex, and so here we'll add a few more details to our use
case, and then figure out how to address those details with Boomi.
In real life, the use cases that I'm seeing typically revolve around loading data into a data
lake, and read something like this: "we need to retrieve all recently modified Accounts from
Salesforce, and write them to S3 as json files. We need to have the process run every 5
minutes, and the files need to be written to a different directory for every year, month, and
day, and the files need to be timestamped. For example, we need to see
"[bucket]/LOAD/Accounts/2017/02/07/accounts_20170207144314.json". We need to run this
process ever five minutes, and then later we need to create a process that will retrieve all
files from a particular directory for processing"
311
Based on the use case above, we need to figure out how to create S3 folders, and how to
dynamically write to the appropriate folder.
First, I've created a basic process which will query recently modified Salesforce accounts, and
map the results to a JSON file.
Next, I need to leverage the S3 properties to build my folder structure and file name.
This is a typical Boomi task of using the Set Properties step to concatenate a series of static
and dynamic parameters. Again, with the S3 Connector you have the option of using the
Folder Name and File Name Properties, or you can simply create or specify the folder as part
of the File Name Property. Here I'll take the later approach, using the File Name Property to
build up the folder structure and file name. As you can see, I'll begin with a static value - my
top level "LOAD" folder, and then use a Current Date parameter with the appropriate mask to
create folders - being careful to add "/" between each folder. Finally, I build up a filename in
the same manner.
312
313
The Boomi S3 connector provides 3 operations for getting objects: Get S3 Object, Get S3
Binary Object, and Get Object Listing. Get Object and Get Binary Object expect an Object ID
as in input parameter. In other words, if you know exactly what you want to Get, you can use
these operations. However, in many cases you'll need to first get an Object Listing, then use
the results (list) to retrieve specific objects.
Per the documentation, "Get Listing retrieves a list of files and folders in the specified
bucket, but not the contents of a file that include key, folderName, filename, isDirectory,
lastModified, size, and bucketName." So, we'll get a directory listing, and then use the results
to retrieve specific files. Similar to Get Object and Get Binary Object, Get Object Listing
expects an ID as an input parameter.You can use a "*" to get a listing of everything in your
bucket, or you can provide a folder path to get a directory listing for a particular folder. For
instance, based on my example above I can provide an ID of "LOAD/2017/02/" to retrieve a
directory listing of all files in the "02" directory.
314
<s3ObjectListing>
<s3ObjectSummary>
<key>LOAD/2017/02/07/accounts_20170207152832.json</key>
<fileName>accounts_20170207152832.json</fileName>
<isDirectory>false</isDirectory>
<lastModified>2017-02-07T15:28:36-08:00</lastModified>
<size>71</size>
<bucketName>boomi-se-demo</bucketName>
</s3ObjectSummary>
<s3ObjectSummary>
<key>LOAD/2017/02/08/accounts_20170208085443.json</key>
<fileName>accounts_20170208085443.json</fileName>
<isDirectory>false</isDirectory>
<lastModified>2017-02-08T08:54:45-08:00</lastModified>
<size>71</size>
<bucketName>boomi-se-demo</bucketName>
</s3ObjectSummary>
<s3ObjectSummary>
<key>LOAD/2017/02/08/accounts_20170208085444.json</key>
<fileName>accounts_20170208085444.json</fileName>
<isDirectory>false</isDirectory>
<lastModified>2017-02-08T08:54:45-08:00</lastModified>
<size>70</size>
<bucketName>boomi-se-demo</bucketName>
</s3ObjectSummary>
</s3ObjectListing>
What if I need to create a scheduled process that will always retrieve today's (or yesterday')
files? Similar to creating the folder structure, one can use a Set Properties step to build up a
property consisting of static text and relative dates, and then use that property as the input
parameter for the Object Listing operation.
315
Continuing with this use case, I've built out the following process:
As above, I'm returning an object listing, and then splitting the return into separate
documents. I'm then passing in the <key> element to query for specific documents using the
Get S3 Object operation
316
<s3Object>
<key>LOAD/2017/02/07/accounts_20170207152832.json</key>
<folderName>LOAD/2017/02/07</folderName>
<fileName>accounts_20170207152832.json</fileName>
<objectContent>Ww0KICAiTGFtIFJlc2VhcmNoIiwNCiAgIjAwMTBNMDAwMDFRT3lZV1FBMSIsDQogI
CJQcm9zcGVjdCIsDQogIG51bGwNCl0=</objectContent>
</s3Object>
The key, folderName, and fileName are returned as expected. But, the objectContent has
been Base64 encoded by S3. If you want to use the objectContent in your Boomi process this
seems to present something of a challenge: some elements are returned un-encoded while
the objectContent element is encoded. If the entire return was encoded, we could just use a
Data Process step to decode. But how can we decode a single element?
The simplest solution is to capture whichever un-encoded elements you'll need in Dynamic
Document Properties, then use a Message step to separate out the objectContent, then to
decode with a data process step. The solution looks like this:
1. As above, I'm using my Object Listing to enumerate the files in my bucket, then using
Get Object to get the specific files, and finally capturing the key and fileName, to be
used later in my process flow, as Dynamic Document Properties.
317
3. Next, I can simply use the Data Process step's built in Base64 decode to decode the
objectContent. I now have a clear-text document which I can use within my Boomi
process - for instance, I can send this into a Map step - and I have my key and fileName
captured in DDP's in case I need those as well.
Conclusion
That wraps up the basics of working with the S3 Connector. Overall, it's pretty standard
Boomi process development, though I find a few aspect - such as the Base64 encoded
objectContent - to be a little bit less than intuitive. As always, please let me know if this
article was helpful for you, and if you have any use cases that are not addressed in this post
feel free to comment and I'll do my best to respond in a timely manner.
318
The Database Connector allows for seamless integration with a variety of on-premise and
cloud database providers. This article is a collection of best practices, configuration details,
FAQs, and common errors for database integration.
Here are some links to our User Guide and other reference material, which you may find
useful when using and configuring the Database connector.
• Database Connector
• Database Connection
• Database Profile
• Database Operation
• To Create a Custom Database Connection
Common Scenarios
Scenario 1: Connecting to a Database
The Database connection reference guide page lists the available fields and their usage in the
Connection component. In this example, we will be connecting to an Oracle database.
Here is a link to Oracle’s reference guide. Table 8-1 lists standard database connection
properties. Typically you will need databaseName, user, password, portNumber and
serverName at a minimum, however certain configurations require additional information.
Setting the Grouping Options in the Database Read Operation is critical for most database
integrations. There are no database record splitting options available within the Data Process
319
Example:
12345|^|1|^|ROUTERS
12345|^|2|^|HUBS
12346|^|1|^|NETWORK CARDS
If you want to map individual logical orders to a destination system, you should batch the
orders in the Database Read Operation
Configuration:
Results:
Document 1:
12345|^|1|^|ROUTERS
12345|^|2|^|HUBS
Document 2:
12346|^|1|^|NETWORK CARDS
320
In order to prevent this, you can try one of the following options:
• Add a final branch into a SQL Type Program Command step at the end of the Process
flow to update each record based on its record ID
• Add an SQL Update map function into one of the main Data Maps to perform the
update per record
• Add a new map and Database Write Connector that builds and executes the SQL
update
Example Parameter:
Profile Element > Database > Orders Select Profile > OrderNum Element
Setting the Commit Options in the Database Write operation is helpful when wanting to
finalize the execution of SQL statements in groups or by Data Sets for multi-table
relationships such as Header/Detail or Parent/Child.
Example:
Operation Configuration:
Batch Count: 1
321
The best practice method for calling a stored procedure is dependent up how the stored
procedure is being called, by using either a map function or a database connector:
1. The stored procedure can be called from within a map function by selecting the
Lookup type and then select SQL Lookup and Stored Procedure.
2. The stored procedure can also be called from a Database Connector by selecting it as
the Statement type in the Database Profile component.
The key difference between these two methods is the database connector supports stored
procedures but does not support output parameters, while the Map Function SQL Lookup
does. The database connector requires the response to be provided via a returned result set.
Therefore, if the stored procedure has both input parameters and output parameters, it will
be necessary to use the Map Function Lookup SQL stored procedure call to handle the data as
output parameters. If the stored procedure has input parameters, no output parameters and
returns a result set; you can use the database connector to execute the stored procedure
using a DB read profile and with the fields defined to match the elements returned in the
result set.
As described in this reference guide article (Database Profile), the following standard data
type elements are supported by the database profile, including for result sets:
• Character
• Number
• Date/Time
• CLOB
• BLOB
322
Prior to the May 2014 release, the Oracle type CURSOR was not supported.
Common Errors
Database Integration Guide: Common Errors
Overview
The NetSuite connection represents a single NetSuite account, including login credentials. If
you have multiple accounts or sandbox instances, you need to use a separate connection for
each and configure the URL accordingly. You can pair a single connection with different
NetSuite operations to perform a unique action against a NetSuite account.
The connector supports the following actions (Note: Not all actions are available for every
record type):
• Search - Returns one or more records that match zero or more filters.
• Get - Returns a single record that matches a given internal ID.
• Create - Creates a new record.
• Update - Modifies an existing record.
• Delete - Removes an existing record.
323
Here are some links to our Reference Guide, which you may find useful when using and
configuring the NetSuite Connector.
• NetSuite Connection
• NetSuite Connector
• NetSuite Operation
Common Scenarios
Scenario 1: Query
When querying records, each record found will be returned as a separate Document and be
processed independently. If Include List Fields is turned on- sublist records are included in the
results, otherwise only the base fields are returned. For example, when searching Customers,
enable to return AddressList, ContactList, CustomFieldList.
Scenario 2: Update
Updating a specific record in NetSuite requires that you include the internal or external
NetSuite ID for that record in the update request.
Best Practices:As a best practice, if the other application has a field that can be used to
capture an external ID, populate it with the NetSuite ID so you don't have to do a lookup to
get the ID in your Process. Alternatively, use the user-specified external ID to maintain the
"other" system's ID in NetSuite. To do this, in the Map that maps from the source Profile to the
NetSuite Update Profile, use a Map Function that performs a Connector Call to NetSuite. The
Connector Call's Operation should do a Search action against the particular object type. Add a
Filter to the Operation that you can pass in the key value(s) from the source data as an Input
Parameter to limit the results to a single record. The Map Function should return the object's
internalId attribute as an Output Parameter. Map this Output Parameter to the internalId
324
Scenario 3: Upsert
In order to do an Upsert, the externalId is a mandatory and required field, and it needs to be
non-blank. To perform the upsert the use of externalId is needed in the NetSuite system to
uniquely identify the records. Otherwise, do an insert and an update separately and add the
logic in the process to check if the record exists in NetSuite based on your uniquely
identifying field.
One of the great strengths of NetSuite is the ability to easily create custom fields and
objects. Because of this, the NetSuite Connector connects to your NetSuite account and
browses the available interfaces in real time. Custom objects and fields are handled no
differently than standard objects and fields. If you modify an object in NetSuite after
importing it in Boomi, you will need to edit the Operation Component and go through the
import wizard again to re-import the recent changes.
To maintain satisfactory performance for all of its clients, NetSuite governs the web service
traffic sent to its data center. There are limits on the number of records per request by the
type of request (Add vs. Update vs. Search) as well as time of day (peak vs. off peak). For
example, you cannot try to add more than 100 records at once during the middle of the day,
but at night that limits grows to 200. Refer to the NetSuite Help Center, Understanding Web
Services Governance, for more information.Please refer to our reference guide at below link,
that mentions about the Maximum No. of documents that are allowed in a batch for a
particular Operation (http://help.boomi.com/atomsphere/GUID-391FB951-69DC-484C-8B1E-
325
• The default is 0 and will include the max number of documents per batch allowed by
SuiteTalk:
• Create — 100 ,Update — 50,Upsert — 50, Delete – 100 (cannot be changed)
However, the NetSuite Connector always uses peak time maximums even during during off-
peak times as per the current design.
Other Considerations:
• The Connector does not necessarily open and close a connection per batch. It pools up
to four connections for efficiency.
• Requests are sent synchronously.
• Request batches are sent sequentially, not concurrently.
• Create a dedicated integration user and role for traceability.
• Create dedicated integration forms to insulate from end user changes, scripts,
validations and ensure needed fields are available.
• Disable client and server SuiteScript in Web Services Preferences.
• When writing to NetSuite, cache List values either ahead of time using Document
Cache or with map function (getSelectValue) Handle application responses in process
workflow using Application Status document properties.
• Use response handling and Try/Catch to handle errors and retries instead of the built-
in connector retry.
For fields, including customFields, you cannot pass Null values or empty tags to the NetSuite
API. The proper way of deleting a value from a certain field, is to add it to the nullFieldList
(which is a separate element within the request profile). Note, you insert the name of the
326
Common Errors
FAQ
How do I filter the date range in NetSuite Operation?
Want to select data based on a specified date range from NetSuite. NetSuite does not permit
the same element from being used multiple times in a filter/search. ie. you cannot specify
the following in the filter:
You can use a comma separated value and select the Within operator. One way to achieve
this is to create a Dynamic Process Property that consists of the First Date in the Date Range,
a comma, "," and then the second date in the date range, and pass it to the filter as follows:
NetSuite Date/Time XML Profile elements should be configured with the following format:
yyyy-MM-dd'T'HH:mm:ss.SSSZZ. For example: 2010-04-01T10:33:17.837-07:00
When importing, why are not all Objects available under the basic search?
The Item Object and possible other objects, are abstract objects, and are not part of the
basic search, so they won't be available in the drop down list, when you attempt to import
the profile, to create the NetSuite Operation.Instead, for basic searches, you must search on
the type of item you wish to interact with: Assembly item, etc
327
If you are trying to create an invoice initialize request(based on an existing Sales Order) then
follow the required steps.Set your NS Operation Action type to EXECUTE. Here you will find a
list of NS API actions that perform various things like initialize, attach, detach, etc.Select
Invoice Initialize depends on your requirement.You will need to populate the following fields
in the request Profile:* InitializeRecord/reference/@type (e.g. "salesOrder", "customer")*
InitializeRecord/reference/internalId (internalId of the referenced record)Sample salesOrder
Invoice Initialize Request,<ns1:InitializeRecord
xmlns:ns1="urn:core_2014_1.platform.webservices.netsuite.com">
<ns1:type>invoice</ns1:type> <ns1:reference type="salesOrder"
internalId="108508"></ns1:reference></ns1:InitializeRecord>Note: The connector will
automatically populate InitializeRecord/type.Once you will pass the request then you will get
response.
The NetSuite Upsert and Update operations add or update records in NetSuite without
needing to determine first whether records already exist in NetSuite. These operations
identify records by external ID and record type. If a record of the specified type with a
matching external ID exists in NetSuite, it is updated. If it does not exist, a new record is
created.If you try to create a Customer with an externalId used by a different record, the
following error appears: Record already exists, name value must be unique. In NetSuite go to
Lists > Relationships > Customers > Search > choose 'External ID (Text)'.
Why doesn't a particular NetSuite field appear in the Filter tab pull down?
You've imported a new NetSuite operation and profile, and the field appears in the profile,
but is not available, on the filter tab, in the pull down when selecting elements/fields to
query against.Not all NetSuite fields are "searchable".For example: 'shipStatus', from 'Item
Fulfillment' isn't available as a query filter. You can see the full list of searchable fields under
the 'Search Columns' using their schema
browserexample: https://system.netsuite.com/help/helpcenter/en_US/srbrowser/Browser20
14_2/script/record/itemfulfillment.html
328
The Netsuite Operation, is closely coupled with the specified Request and Response Profile. In
some situations, you can have multiple operations configured to use the same profiles (
perhaps they have different selection criteria ).After adding a new customField, you can re-
import one of the operations, and this will update your request and response profiles. Even
though the second operation appears to use the correct new profile, you must still re-import
this second profile.
How can I see the HTTP Request and Response from the NetSuite Connector?
Request and response data for NetSuite requests is captured in NetSuite under: Setup >
Integration > Web Services Usage Log (may require admin account to view this).
It is a common requirement to query or extract NetSuite transactions that have one or more
specific status values, such as all pending sales orders or all closed invoices. This is possible
however identifying the exact status value(s) is not obvious because you must use a special
API syntax and not the value you see through the NetSuite user interface.To query a NetSuite
transaction by status, first create a new NetSuite Connector Operation by importing the
specific transaction object and create a filter for the <object type>|status field.
Choose anyOf as the Operator.IMPORTANT: Be sure to select the status field for the primary
object itself and not the a status field for any of the related transactions. The fields for the
primary object are listed first in the Field picklist. Then you will need to determine the
values you will need to use. The status values are special API values and are NOT the same as
those visible through the NetSuite user interface. It is also important to note that behind the
scenes the NetSuite connector is actually performing a transacti API call.The status values are
documented in the NetSuite SuiteTalk Schema Browser. Within the NetSuite Help Center,
search for "schema browser" or go
to https://system.netsuite.com/help/helpcenter/en_US/SchemaBrowser/indexv2013_1_0.ht
ml (note the version number in the URL; modify as necessary). From within the Schema
Browser, to find the list of transacti status values navigate as follows:
329
• You can specify multiple status values by including them in a comma separated list.
For example: _salesOrderPendingFulfillment,_salesOrderClosed.
• The status value returned in the response data will be the "familiar" status label value,
such as "Pending Fulfillment", not the API value.
With Version 2014 Release 1, NetSuite retired SuiteTalk 2009.2 and Earlier Endpoints. With
this change, Boomi delivered a new NetSuite connector. If you have not done so already, you
should convert your processes to use the new connector.
• Configure Connection URL to match the new version of NetSuite for your upgrade. For
example, https://webservices.netsuite.com/services/NetSuitePort_2013_1. The URL
defaults to the latest available version of the service. The last few numbers in the URL
330
If the component is reused in folders and/or categories, you must expand the folders and
categories to see it.
• To see which Connectors are deployed, you can use the Setup Licensing tab.
o Click the “Standard” Connector Class
o Connectors Deployed in Class, Type “netsuite” is the NetSuite (Legacy)
connector, “netsuitesdk” is the NetSuite connector
When importing a NetSuite Connector operation, occasionally an expected custom field does
not display in the request or response profile under the customFieldList element.Here are the
Steps to resolve why a NetSuite custom field was not imported into the request or response
profile during a Operation browse:Generally speaking for a custom field to be available via
the API it must be accessible by the NetSuite user configured for the integration and
displayed on the NetSuite Preferred Form for the given object type.To troubleshoot this issue,
verify the following.
331
332
Please see How to configure the NetSuite Connection with Token Based Authentication.
Content
The Salesforce connector connects seamlessly to any native Salesforce application, including
Sales Cloud and Service Cloud as well any Custom Cloud or Force.com. As a Salesforce user,
you can use the Salesforce connector to integrate with any other cloud or on-premise
application.
Here are some links to our User Guide, which you may find useful when using and configuring
the Salesforce Connector.
• Salesforce connector
• Salesforce connection
• Salesforce operation
• Web service requests from Salesforce
Common Scenarios
Scenario 1: Querying Records
When querying records from Salesforce, each record found will be returned as a separate
Document and be processed independently. By default, the Query action ignores deleted or
archived records. If you would like to return records in these states, check the "Include
333
There are cases when performing a Salesforce query where you would like to select
approximate matches for a filter parameter (fuzzy search). For example, you could have
many Account records in your organization that have the term 'ABC' in the Company Name. In
a standard query case, you would use the 'Equal To' operator to match the Name to a static
value.
Equal To - Example:
Results: ABC
This straightforward query may not yield any results, so the LIKE operator paired with your
Expression may be the best strategy. In order to implement a LIKE query, you must use the %
character on either side of the Static parameter value; similar to standard SQL syntax.
Like - Example:
Results: ABC, ABC Company, ABC Industries, Company ABC, ABC Corp.
Updating a specific record in Salesforce requires that you pass in the internal Salesforce ID for
that record in the update request. This value is typically an 18-character alphanumeric value
that looks like this: 0015000000MJtnHAAT. If this value does not exist in the source data you
will need to look it up from Salesforce.
334
As a best practice, if the other application has a field that can be used to capture an external
ID, populate it with the Salesforce ID so you don't have to do a lookup to get the ID in your
Process.
To do this, in the Map that maps from the source Profile to the Salesforce Update Profile, use
a Map Function that performs a Connector Call to Salesforce. The Connector Call's Operation
should do a Query action against the particular object type. Add a Filter to the Operation that
you can pass in the key value(s) from the source data as an Input Parameter to limit the
results to a single record. The Map Function should return the object's Id field as an Output
Parameter. Map this Output Parameter to the Id Element in the destination Profile.
If a particular record does not already exist in Salesforce, the Id Element in the Update
Profile will be empty after the Map. If a request without an Id is then sent to the Salesforce
Connector, it will throw an error. If this is a possibility in your integration scenario, you
should use a Decision Step after the Map to check that the Id is populated in each record
before sending the data to the Salesforce Connector.
The Upsert capability of the Salesforce API is a convenient way to do common "insert-new-or-
update-existing" integrations. Instead of having to do a lookup against Salesforce to
determine if a given record exists and then perform separate insert or update mappings and
calls accordingly, you can simply perform one map to the Upsert request and let Salesforce
determine whether it needs to do an insert or update.
Upserts can be used with standard or custom objects that have a custom "External ID" field
configured. This External ID field should represent the primary key of the source system or
some other uniquely identifying value. This will be helpful when integrating in the opposite
direction. If you don't currently have an External ID field, it is recommended you identify one
or create a new custom field to use specifically use for the integration. The Import Wizard
335
If there is not a single field in the source data to use as an External ID, see if you can uniquely
identify a record by the combination of two or more fields. If so, use a Map Function to
concatenate them together and map to the External ID field.
Depending on an object's relationships as defined in Salesforce, you may have the ability to
upsert or at least reference related records by their External IDs as well. For example, you
can upsert an Opportunity based on an Opportunity's External ID (e.g. "Order Number") and
associate it with an Account record by specifying the Account's External ID (e.g. "Legacy
Customer Number").
To enable this, in the Operation configuration select the object and then select a Reference
Field. Check to box to "Use External Id for Reference" and select the appropriate Object Type
and Ref External Id. Then in your map, you can map some value from your source data and
avoid making a Connector call to retrieve the Salesforce internal ID.
Not all objects support the Upsert action. Refer to the Salesforce API Guide for a complete
list of supported actions per object.
Reference fields in Salesforce refer to the object fields that can be used to attach a record to
a parent or associated object. These reference fields are generally available in the Send
Request XML by their name (Ex. AccountId, OwnerId, etc). By default, the request input
expects the object's internal ID; however, this ID may not be readily available based on the
source data. The Upsert action allows you specify other External ID fields to use in place of
the default internal ID. This can save you the need of performing a Salesforce query
(Connector Call lookup) to find the internalID based on another value such as Name from your
source data.
336
You must always supply the Salesforce internal Id value. External IDs can't be used.
Known Issue (BOOMI-8454: Salesforce Connector throws an exception after successful delete
when multiple IDs are used): When wishing to delete multiple records, the request document
sent to the Salesforce connector must contain only one Id per document. (This must be done
even though the "Id" element in the request profile is configured as Max Occurs=Unbounded by
default.) If multiple Ids are present in a single document, the records will actually be deleted
in Salesforce, however the connector will error with the "Number of results does not match
number of SObjects" message when processing the response. To avoid this, use a Data Process
shape to split the request data. This can be done before the Map shape to the Salesforce
delete profile, or afterward (splitting the Delete profile XML on
the OBJECT/DeleteIds/Id element.
• This applies whether the operation is configured to Use Bulk API or not.
• Note: Behind the scenes the Salesforce connector DOES batch the documents in the
actual request XML sent to Salesforce. It does not make a separate for each document.
When developing Processes that send/receive high volumes of data to and from Salesforce,
refer to these design considerations to ensure that you are optimizing processing efficiency
and not exceeding Salesforce API usage limits.
• Refer to the Salesforce - Web Services API Developer's Guide for API usage limits for
your Salesforce edition
o Salesforce Developers - Section: Using the API with Salesforce Features >
Implementation Considerations > Monitoring API Traffic
• Install and deploy Processes to a Local Atom and consider increasing Atom Memory
• Review AtomSphere - High Volume Troubleshooting documentation for general data
concerns
337
• Use Filters - This will limit the number of inbound records based on key field criteria
• Query multiple objects in one request - In the Query Operation Import Wizard, select
associated Parent and/or Child objects (eg. Contact - Parent: Account) if you need to
reference this data in your mappings. This will prevent the need for Connector Calls
(API web service requests) later in the Process for each individual contact record.
• Query by Last Modified Date - If you are building a synchronization Process that is
continually passing updates, add a LastModifiedDate filter for the object in the
Operation so you can set a time window in which you would like to grab modified
data. This will prevent the need to run entire object data sets through for each
Process execution.
• Set a Query Limit - Maximize the number of records you would like returned in one
request by setting this number in the Operation. You can then update the retrieved
records in Salesforce (eg. Contact > Custom Retrieved_Status field) at the end of your
Process flow and prevent the same records from being re-processed in the future by
filtering on the custom field.
Send Actions:
338
One of the great strengths of Salesforce is the ability to easily create custom fields and
objects. Because of this, the Boomi Salesforce Connector connects to your Salesforce
organization and browses the available interfaces in real time. Custom objects and fields are
handled no differently than standard objects and fields. Custom objects/fields can be
identified by the __c suffix. If you don't see your custom object or field when importing an
object, make sure the security permissions for that object/field allow at least read-only
access to the security profile assigned to the user name you're using to connect. If you modify
an object in Salesforce after importing it in Boomi, you will need to edit the Operation
Component and go through the import wizard again to re-import the recent changes.
Salesforce Date/Time XML Profile elements should be configured with the following format:
yyyy-MM-dd'T'HH:mm:ssZ
Scenario 8: How to use the OR logical operator between two objects in Salesforce
Question:
It appears that the AND logical operator works between two objects, ie, parent to grandchild,
but the OR logical operator does not seem to work. Is it available? How does it work? Are
there any constraints/limitations?
Answer:
The SOQL query is automatically generated based on the configuration of the filters.
Currently the filters do not allow expressions fields from different objects within the same
logical sub-group.
339
Based on Salesforce
documentation: http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_call
s_soql_relationships.htm#i1422304,
It says "Any query (including subqueries) can include a WHERE clause, which applies to the
object in the FROM clause of the current query. These clauses can filter on any object in the
current scope (reachable from the root element of the query), via the parent relationships."
Please visit the following link to review this scenario: How to Retrieve Attachments in
Salesforce (Full Example).
Scenario 10: How to use the Batch Results Option on SFDC Query Operations
Please visit the following link to review this scenario: How to use the Batch Results Option on
SFDC Query Operations.
Common Errors
340
In order to access Salesforce via Boomi AtomSphere, you must replace your current password
with a combination of your password and a security token like this:
MypasswordMytoken
If and when you change your password, you will need to request a new security token.
1. Log into your Salesforce account as the user for whom you wish to reset the token.
2. View your User Profile > Settings > My Personal Information, Reset My Security Token.
Click Reset Security Token button to triggers an email containing the new security
token.
3. Carefully copy and paste (do not copy any trailing spaces), append to your Salesforce
password, and paste into the Salesforce connection's Password field.
Is there a way to monitor the number of API calls that are made while accessing an
object from Salesforce?
Per the Salesforce API guidance (which is accessible via link from the Boomi guidance on
Salesforce connector), the Salesforce query result object contains up to 500 rows of data by
default. If the query results exceed 500 rows, then the client application uses the
queryMore() call and a server-side cursor to retrieve additional rows in 500-row chunks. You
can increase the default size up to 2,000 in the QueryOptions header, as described in
Changing the Batch Size in Queries. For more guidance, you can refer to the Salesforce API
Guide.
The Boomi guidance at the following link shows the standard Get fields which include a field
for batching results and setting the batch count: Salesforce operation.
341
See also the Salesforce developer guide for how to monitor API traffic: Developer Guide -
Section: Using the API with Salesforce Features > Implementation Considerations > Monitoring
API Traffic: https://developer.salesforce.com/docs/atlas.en-
us.api.meta/api/implementation_considerations.htm
The import did not allow for the selection of the child object. Can a SFDC upsert
can be performed on a parent and child objects in the same Salesforce connector
operation?
Per Salesforce’s API, “you can process records for one more than object type in an create() or
update() call, but all records must have the same object type in an upsert() call.”
Therefore a separate upsert operation must be implemented for each object. Therefore, it’s
not possible to do an upsert on 2 different objects (even if they are parent-child) in the same
connector operation.
https://developer.salesforce.com/docs/atlas.en-
us.api.meta/api/sforce_api_calls_upsert.htm
What is the filterValue that I should specify to fetch the records whose EndTime is
Not Null in Salesforce?
In the Query filter section of Object Event, create a filter criteria similar to:
Field : EndDateTime
342
Type : Static
https://test.salesforce.com/services/Soap/u/31.0
to a previous version:
https://test.salesforce.com/services/Soap/u/30.0
Save the connection, re-import or re-create the object, until you see the Action or Object in
the pick list.
Why can I not see a particular field that I know exists in Salesforce?
Verify that the user configured in the connector has the appropriate permission to see that
field.
Also, please check what version of the Salesforce API you are using. Is there a more current
version (44.0 vs. 38.0)?
If so, modify the URL in the Salesforce connection with the new API version. For
example: https://www.salesforce.com/services/Soap/u/44.0
After saving this change and re-importing the profile, check the object for the necessary
field.
343
To call a custom Apex class exposed as a web service, use the Apex Connector instead of the
Salesforce Connector.
1. Use Bulk API – to tell the connector to load data to Salesforce using Bulk API
2. Batch Count – the maximum number of records in a batch
To have your data upload with Bulk API, you just need to check on the “Use Bulk API”
checkbox and specify the Batch Count (the default value is 200) in the operation configuration
screen. The Boomi Salesforce connector will handle everything for you automatically at the
backend including preparing the data into batch according to the Batch Count.
As there is no option to turn on serial model, some options to address lock contention in
Salesforce could be:
Please note that the Salesforce connector only supports the BULK API option in parallel mode.
344
In order to identify the SF record processed within Boomi, you may have to manually search
for the record/data from the XML profile returned by the Salesforce connector. You will need
to use the record ID, or some other field in Salesforce that uniquely identifies the record.
Alternatively, if you configure the connector's "Tracked Fields", then you would be able to see
the recordID in the process reporting data. For reference:
http://help.boomi.com/atomsphere/GUID-103F06E6-94BF-472A-9C50-F3780CE5B497.html
http://help.boomi.com/atomsphere/GUID-C84D1FEF-BD90-46CE-BFD2-33CE720572EE.html
Use HTTP Client with GET action in order to use REST API to login to Salesforce. Connection
URL should look something similar to this: https://cs18.salesforce.com/services/Soap/u/44.0
<env:Body>
<n1:login xmlns:n1="urn:partner.soap.sforce.com">
345
The Login Response profile will return a sessionID which will be used as Authorization value in
the subsequent calls.
Build your SOQL and pass it as a parameter into an HTTP Client Connector:
346
Please see How to Connect to Salesforce REST API with OAuth 2.0.
Here are some links to our user Guide, which you may find useful while using and configuring
the SAP connector.
• SAP connector
• SAP connection
• SAP operation
Glossary
• IDoc - IDoc is a popular data structure by SAP which is primarily used to exchange
business/transaction data between SAP and external systems electronically (Official
Documentation - IDoc Interface/ALE - SAP Library)
• BAPI/Remote-enabled Function Module - Interfaces developed with in SAP which can
be triggered from a external system or with in SAP
• (Official Documentation - SAP Library , RFC Interface - Connectivity - SAP Library)
• SAPRouter - SAProuter is an SAP program that acts as an intermediate station (proxy)
in a network connection between SAP systems, or between SAP systems and external
networks (Official Documentation - What is SAProuter? - SAProuter - SAP Library )
• SAP NetWeaver - SAP Netweaver refers to open technology platform that offers a
comprehensive set of technologies for running mission-critical business applications
and integrating people, processes, and information (More details
- http://scn.sap.com/community/netweaver)
• SAP Netweaver Gateway - SAP Gateway is a framework that connects business users to
SAP systems using consumer technologies, groupware, and mobile devices and is based
on open standards (such as the Atom Publishing Protocol and OData) that offer simple
services based on the REST principle (Official Documentation - SAP Gateway 2.0 – SAP
Help Portal Page )
347
There are several options for integration with SAP system. IDoc, BAPI/RFM, file extracts, and
SOAP web services are some of the most common technologies widely used for interfacing
with SAP. A recent addition, SAP Netweaver Gateway, can make your SAP business data
accessible as RESTful resources. Based upon REST and OData principles, the SAP Netweaver
Gateway exposes a uniform, stateless interface to any software system that can communicate
using HTTP(S) and XML or JSON payloads. This approach is highly adopted in the B2C space.
While the integration use case requirements certainly factor into selecting the connectivity
approach, the customer’s preference plays a huge part. Often customers will have policies or
at least preferred approaches for integration with their SAP instance, as well as
skills/knowledge in a particular connectivity option. For example, a customer may be an
“IDoc shop” vs. a “BAPI shop”, or have decided to perform all integrations via a web services
gateway.
• “Intermediate
• Use SAP Connector
Document”
Receive • XML profiles
• Standard or
outbound IDocs Asynchronous • Receive IDocs from SAP real
extended
from SAP time/event based
(customized)
• Single listener process
formats
348
• Web service
• For SOAP, use Web Services
gateway
SOAP Connector
• SOAP, REST, XML-
• For REST or XML-over-
Web Services over-HTTP Synchronous
HTTP, use HTTP Client
• Often just exposing
Connector
BAPI/RFM as web
• XML profiles
service endpoint-
349
Selecting an Approach
There may be number of factors for e.g. Customer's integration strategy, business
requirements like security, performance, volume, ordered delivery, custom development &
SAP shipped content etc which influence or determines an integration approach. Often
customers will have policies or preferred approach matrix for integration with their SAP
instance. In some cases skills/knowledge in particular connectivity mechanism also influence
integration approach. For example, a customer may be an “IDoc shop” vs. a “BAPI shop”, or
have decided to perform all integrations via a web services gateway. In recent years there has
been inclination towards a web service (SOAP/REST) based approach for integration
Architectural Considerations
BAPI and IDocs
The SAP connector supports connectivity via BAPI/RFM and IDocs. The connector uses the SAP
JCo (Java Connectivity) and Java IDoc Class libraries, setup details are explained in depth
here How to Configure SAP R/3 for IDoc and BAPI/RFM Connectivity.
• SAP ERP is mostly locked behind customer's network and firewalls. Direct connection
from outside is not allowed.
350
351
Note that some customers may use SAProuter which acts as application level gateway,
allowing connection from external systems in controlled and secured way. The SAP Connector
can route requests to SAProuter.
A SOAP enabled web service may be exposed using existing BAPI/Functional modules or
modeled and generated natively. For more information, please search for SAP Enterprise
Services and SOAManager on SAP Help Portal – The central place for SAP documentation.
352
Generally web service endpoints are exposed to outside world via reverse proxy or gateway.
Since this approach does not requires specific jars, there a is no technical requirements of
using a local atom. However such decisions are subjective to company's network and system
security guidelines
The SAP Connector connects directly to your SAP NetWeaver-based application exchange data
via BAPIs, Remote-enabled Function Modules (RFMs), and IDocs. You can browse the list of
available BAPI/RFMs and IDocs available in your SAP system and auto-generate the request
and response profiles to use in AtomSphere processes and maps.
Additional notes:
• The connector uses the SAP Java Connector (sapjco) library to communicate with SAP
via the CPI-C protocol
• The connector is SAP Certified
353
Prerequisites
There are a number of environmental and SAP application configurations required to perform
the integration, including local Atom and SAP specific configurations. SAP configurations steps
will require an SAP admin.
For complete details see How to Configure SAP R/3 for IDoc and BAPI/RFM Connectivity.
• Browse and Import IDoc XML definition via SAP Connector (imported as XML profile)
• From your process logic, push IDoc data (XML) to SAP Connector which would create an
IDoc at SAP end point, to be processed by a SAP application
• SAP connector uses SAP IDoc class libraries for JAVA applications. More details - IDoc
Support for Java Applications - SAP NetWeaver Composition Environment Library - SAP
Library
354
1. SAP configuration details are explained here: How to Configure SAP R/3 for IDoc and
BAPI/RFM Connectivity
• IMPORTANT: Because there can be only one listener for a given Program ID, this
means you must use a single “global” listener process to receive ALL IDoc types
and then route accordingly within the process flow.
2. The connector listener identifies itself to SAP using a unique “Program ID” value.
3. The connector listens for outbound IDoc messages from SAP by registering itself as a
client with the SAP IDoc framework.
4. Upon receiving an outbound IDoc message, the connector sends an acknowledgment
back to SAP.
355
356
More details about the TID database are covered in How to Configure SAP R/3 for IDoc and
BAPI/RFM Connectivity.
Synchronous
1. This method involves SAP connector executing a BAPI over RFC protocol.
2. For every request sent, connector expects a response back from SAP.
3. The method utilizes SAP JCo libraries which enables Java application to connect and
communicate with SAP system and invoke Remote Function Modules.
4. SAP JCo architecture is explained here - SAP JCo Architecture (Standalone Version) -
Components of SAP Communication Technology - SAP Library.
357
358
Overview
The Workday application offers a number of options for integrating data with other systems.
Which option to choose will depend on your functional and nonfunctional requirements. All
data in and out of Workday goes through web services. All of Workday’s packaged integrations
as well as the integration tools available in Workday ultimately leverage the web service API
through the Object Transaction Server (OTS). However, the interaction with those web
services can be performed in a variety of ways.
Depending on the integration scenario, vendors/client applications can call the Workday APIs
to push/pull data using Workday’s SOAP API. The Workday SOAP API is well documented in the
359
• Single set of user credentials to be utilized across all Workday connections. Note that
you should configure your Integration Security User (ISU) in Workday to have all
permissions needed across your Workday integrations.
• Including version in the connection, which allows this to be extended and set through
environment variables
• Configuring the Workday service in the operation component. This allows a single
Workday connection to be used against different service endpoints for the same
tenant.
360
Below are some techniques and considerations when retrieving data using the Workday
Connector.
• Transaction Log
o Use Transaction Log if available, processes more efficiently when utilized. For
example, if querying for modifications, instead of querying all data between
two date points and comparing for changes, Workday can utilize the
transaction log for the same period and only compare those records that had
transactions in the specified range. The former will query ALL records and
compare, the latter approach will only select those that had transactions and
then compare.
o Otherwise the call is run against all data records which will take longer.
o See also How to Query Workday Using the Transaction Log.
• Effective date vs Entry date
o Understand the difference when selecting records.
o For example: Getting all users since last run date (Entry date) without
considering for effective date could result in missed data from data that was
keyed in earlier but not effective until the current date range. i.e. future
dated employees not yet effective.
o Alternatively, if you want all records, regardless of when they become
effective. In this case the as of date in the request can be current and as of
effective date can be set to the distant future.
o May want to store both Last Entry Date and Last Effective Date parameters as
persisted process properties.
• SOAP API paging
o The Boomi Workday Connector will automatically retrieve all available pages.
In the Query Operation be sure to enable the option "Return All Pages". Note
each page of results is returned as a single Boomi document with multiple
records within that document. For example, assuming a page size of 100, if a
given query found 250 results, three documents would be returned to the
process: the first with 100 records, the second with 100 records, and the third
with 50 records. This is notably because this is slightly different behavior than
361
Most of the considerations above refer to polling the Workday application for data. This API
can also be utilized to retrieve individual queries and lookups as well. The Workday delivered
APIs are a reliable and efficient way to retrieve data ad-hoc in integration processes as there
is little overhead compared to the other mechanisms for getting data out of Workday.
Sending to Workday
Below are some techniques and considerations when sending data (create or update records)
using the Workday Connector.
• Your reference IDs will need to match. Reference IDs are used to refer to other object
instances. Although these are static strings, they may vary across tenants during an
implementation. Consider setting up mapping in Boomi, or setup a report in Workday
that can be called within the integration, if this should be controlled in Workday.
• If the API you are using allows for batched imports, this should be taken advantage of.
However, Workday will fail the entire batch if one record in the batch fails. Be sure to
handle for this in your process. For example, you can attempt to send records as a
batched request and then if an error is encountered, break up the batch and send
each record individually.
Integrations API
The Workday SOAP API also has an Integration Service endpoint to execute a Workday Core
Connector or custom Studio or EIB integration. This API call can be paired with a file based or
362
The Workday APIs for Reports as a Service, Message Queues, and Studio listeners can be
invoked as well. These APIs are not available out-of-the-box in Workday and require some
Workday custom development to be exposed.
Custom reports can be setup in Workday and then be web service enabled. This allows
AtomSphere to make a REST-ful calls to retrieve the report, in XML or JSON format. Custom
reports can often be setup by business users and then exposed through a toggle within
Workday. Reports are an easy way to retrieve custom objects and fields, leverage calculated
fields for summary data, and join multiple objects into a single data source.
To call a RaaS service within AtomSphere you will use the HTTP Client Connector, not the
Workday Connector. The HTTP connection is configured with Basic Authentication and the
service URL of the report.
Reports can also be setup with filters that can be passed in the GET request. This allows the
same Workday reports to be parameterized to retrieve for example changes between two
dates or a specific record. Filter options will vary based on the data source for the report.
Be mindful of time it takes Workday to run the report. Long running reports may need to be
optimized to prevent HTTP timeouts. Consider using indexed data sources, data type, sorting,
and reducing number of calculated fields to optimize. Visit the Workday community for more
on optimizing custom reports. Workday reports are not as quick as using the Workday SOAP
API, there is some overhead for initializing and running the report. One helpful trick is to
shorten the XML element names in the generated XML, which can greatly reduce the size of
large XML files.
363
Message Queuing
Workday has message queuing available within the Workday tenant. Message queues reside
within the tenant and must utilize the API to place messages on the queue. This means you
will need a REST-ful client to place events on the queue. Typically this can be accomplished
using Workday Studio to build the mechanism to place events transactions generated within
Workday on the queue (for outbound consumption) or use AtomSphere to place inbound data
on a queue where it can be asynchronously processed later by an internal integration.
364
• Limits on the number of queues available in the tenant (10), messages expire after a
week, maximum number of messages on a queue (64K).
• Queue can be accessed through REST-ful API calls. Workday only needs to place events
on the queue. An AtomSphere process and then retrieve and process events off the
queue.
• Decouples Workday from the delivery and processing of messages to the various
destinations. Workday only needs to compile and expose the events.
• For outbound integrations where Workday Studio places events on queue consider:
o How often will it run?
o How quickly does it run?
o Leave validation logic in the client applications or downstream integration
layer.
o Separate queues per event or consolidate and route in subscriber? Consider
designing a single AtomSphere process to receive all messages and route based
on queue or payload metadata.
• Note if Workday is unavailable, no messages will be added to the queue.
• If the Boomi atom is unavailable, the process will resume picking up messages from
the queue when it becomes available again.
• Once the process has successfully executed records into destination applications, a
subsequent call is made to Workday to delete the message from the queue.
365
Outbound Subscriptions
Using Subscriptions in Workday, you can configure outbound messages for events that occur
within the Workday tenant to achieve real-time processing. On the AtomSphere side, one
more or web services listener will be developed to receive the outbound messages from
Workday.
366
• The standard outbound message payload only contains the event notification details,
not the full business record. Within the listening process, a subsequent query back to
Workday is usually required to retrieve the full record.
• Multiple endpoints can be configured for a subscription.
• No error handling if the event is not able to be delivered. This will have to be
managed in the integration.
• Use with environment restrictions to configure test vs. prod endpoints.
367
Within the HCM and Financials domain, file based integration is often the only option for
vendors and legacy applications who do not expose web services. In a typical outbound
scenario from Workday, data is extracted from Workday using one of the aforementioned
methods, transformed to an agreed upon format (often a delimited/CSV or fixed length text
file), and then delivered to an external location mutually accessible to both Workday and the
target application. Because all data in and out of Workday is through web services, files
ultimately are produced from or broken down into the Workday APIs discussed above.
Using this approach requires the setup of an external shared location such as an FTP or SFTP
site that is accessible to both the source and target applications.This pattern requires
coordination from the target application process of when to retrieve the file. This
intermediary state created--although only for a short duration of time--can become outdated
once written if both applications are simultaneously updated directly from a different
mechanism during the coordination window.
Also, although having an intermediate file is convenient for integration debugging, it can also
be a liability. Files get misplaced, sent to the wrong place, left on local machines, and sent
over insecure mail during troubleshooting.
There is also the limitation of not being able to process records that “last mile” into the
endpoint. Were the records within the file actually loaded successfully into the destination?
Lack of end-to-end visibility can be challenging to manage.
Recommendations
368
369
Additional Reference
• Workday Connector
• HTTP Client Connector
370
Tags: tags are always paired (opening/start and closing/end tag), <note> (opening tag) with
</note> (closing tag), <body> and </body>, etc. In the case of <salutation/>, that is called a
self closing tag and does not need a closing tag. It has no value in it. It is equivalent to
<salutation></salutation>. Element names (tags) are case sensitive.
There is data in between the tags. Tags can encapsulate other tags, making a hierarchy. The
tag on the outside is called a parent element and the tag(s) on the inside are called the child
(children) element. You can have multiple levels of parent and children. The parent can be in
another parent tag (and that can be in another parent tag). <to> is a parent element of
<name> and <address>. The element <name> is a child element of <to>. The element <to> is a
child element of <note>. Name could have more elements underneath of it. Elements that
have the same parent element are sometimes called "siblings", and the "ancestors" of an
element are the parent element, its parent (grandparent), etc. Likewise, the elements that
are the child, grandchild, etc. are sometimes called the "descendants" of an element. The
descendants of the root element include all of the elements in an XML file.
Root element: the highest element is called the root element or node. There can only be one
root element that encapsulates everything (except the declaration).
Attributes: in <name> there is an attribute called "number". Attributes are a name-value pair,
where the value is in double quotes "". It can only have a single value and it must be in the
start tag or self closing tag:
371
Whitespace: doesn't matter outside of the tags, it is more for human readability.
Some XML documents are defined by a "schema", a document (written in XML) that defines
the type of elements, their relationships and sequencing, the format of certain elements, and
sometimes even the number of elements that can be included in the document. The schema
is, itself, an XML document, but it usually has the three letter file extension of XSD, whereas
an XML document has the file extension XML.
In many cases, it is useful to "validate" an XML document against the schema. Validation
makes sure that the XML document meets all of the requirements of the schema. There are
several shapes in Boomi processes that do this validation internally, to find and prevent
errors.
372
When an XML profile is created in Boomi from another system, it is created by importing the
XSD schema. When a document is generated using that profile and it is sent to the system, it
will be validated (checked to make sure it fits) against the same schema. For example,
NetSuite is a third-party system that can receive XML data to create records. In a Boomi
process that connects to NetSuite, a profile is created by connecting to NetSuite and
importing the schema for the records to be created. Boomi creates an XML profile that
matches that schema. When a document is generated in the process using that profile, it
would be sent to NetSuite. To receive the document successfully, NetSuite will validate the
document against the schema, making sure that all of the required fields are present and that
the document "fits" the fields. Validation ensures that you don't have "opportunity" records in
your "customer" list.
"Namespaces" provide a way for different types of elements to have the same name, and still
avoid conflicts. XML tags (elements) are defined by the developer of the schema. They are
free to choose the element names they like, but this often results in developers using the
same element names that other developers use.
373
In the fragment above, the two "note" elements will not create a conflict because they have
different prefixes, and they belong to different namespaces. The namespace declarations can
also go in the XML root element, and this is usually what you will encounter in XML documents
processed by Boomi.
374
The URI in the namespace declaration is not used to "lookup" any information, it is simply an
identifier. Because no two companies can have the same Internet domain and URI, they are a
good way to guarantee a unique name for namespace. Sometimes, though, the URI is a valid
link to the web page that contains more information about the document type that is defined
by the namespace.
XML is at the very heart of a Boomi process, a Boomi atom, and even the AtomSphere
platform itself. XML is the primary data type used to send documents, messages, even
processes from the platform to a local atom and even between nodes of a molecule or cloud.
In the revision history of any component on the Build canvas in AtomSphere, you can view the
XML of the component. The XML format can seem unnecessarily long, but the strict and
consistent formatting makes it a valuable tool for storing and sending information efficiently.
Contents
A flat file can have column headers as the first line, giving the name of each field in the file.
This line is not always included.
375
The first line of this sample has the column headers. These are the names of the data
columns. If you opened this file in Microsoft Excel, you would see these names at the top of
the columns. But this line is not considered "data".
In the first line of data, the Name includes a comma followed by "P.E." the designation often
given to a professional engineer. Because the comma is part of the name string, the field
value is wrapped in double quotes, the text qualifier used in this file.
In the second line of data, the Address field includes both quotes as part of the data, around
the name of the building, and a comma. There are double quotes around the whole field, and
the quotes around the building are escaped with a backslash character to indicate that they
are part of the data.
It is also possible to set an escape character for the delimiter character, and an escape for
the escape character, though these options are not commonly used.
In a Boomi Flat File Profile, the escape character can be set to any character, even
"undisplayable" characters like a control character (e.g. Ctrl A, or 0x01, the "start of header"
character). This can be done by setting the "File Delimiter" character to the "Byte Character"
376
The Flat File profile can be used with a "data positioned" (sometimes called "fixed width") file
type too. To change the profile from "Delimited" to "Data Positioned", click the Options tab in
the profile and select "Data Positioned" in the File Type pulldown menu. Once this is done,
you will see that the options for the delimiters and escape characters are no longer visible.
You need to specify the padding character used in the data that fills out the columns to their
defined width. This is often a single space character.
Each field in the file begins at a specific column and has a fixed width. The padding character
is what separates the data and is repeated to fill in each field. In the example above, the
"Use Column Headers" option would be enabled because the first row contains the column
headers.
When you add elements to the profile, you also specify the start column for each field. The
first column in the file is 0 (zero). You can optionally set a length of the field so that
characters beyond that length will be ignored. For the example data above, the NAME field
would start with column 0, the ADDRESS field would start with column 20, the CITY field
would start with column 50, the STATE field would start with column 70, and the POSTAL
CODE field would start with column 80. The padding character for this data would be a space.
Data Positioned files like this are less common than delimited flat files.
4.7.3 Database
The database document format is akin to the flat file, because it is a "pipe" delimited file.
The pipe character | (also sometimes called the "vertical bar") is rarely used in actual data
values, so it is used as the delimiter in this file format. However, t's a little more complicated
377
Documents of this format are created by reading data from a database using a SQL query or
stored procedure call that returns data.
The database profile can be created by importing a table from a database, or by importing a
stored procedure from Oracle, MySQL, or Microsoft SQL Server. When importing a table, all
fields of the table are imported initially. If you need only a subset of the fields, you can
remove the ones you do not need after the import is done. For a stored procedure, you must
retain all fields in the profile, otherwise the stored procedure will likely fail with an error.
The database profile can be either a "read" type for receiving information from a database, or
a "write" type for sending data to a database. When a profile is created that calls a stored
procedure with both "in" and "out" parameters, use the "read" type.
A database profile often contains the SQL statement that it works with to send or receive
information to/from the database. A SQL statement that retrieves a set of fields from a table
named "NEW_CONTACTS" might look like this:
This example would retrieve all rows of the NEW_CONACTS table. Often there will be a
WHERE clause that includes parameter values that limit the records returned. Sometimes the
parameter values may be passed to the statement through the Boomi process so that the
parameter changes each time the process is executed. For example, the same statement as
above might be used to only get the contact records that have the status value of "New" if
that string were passed as a value in the parameter that replaces the question mark (?) in the
statement.
378
The results of either of the queries above would look like this in the document returned to
the Boomi process:
DBSTART|65cf5247-62d6-44f5-a9a1-
caa11cd32d4c|2|@|BEGIN|2|@|OUT_START|3|@|false|^|0018000000Ptpg4AAB|^|003800000
0a0QbXAAU|^|Liz D'Cruz|^|(650) 450-
8810|^|LiuzAU|^|New|#|true|^|0018000000Ptpg4ACD|^|0038000000a0QbXAFT|^|Sam
Hill|^|(888) 555-1212|^|SmHill|^|New|#||#|OUT_END|3|@|END|2|@|DBEND|65cf5247-
62d6-44f5-a9a1-caa11cd32d4c|2|@|
In the example above the field values of the database records are a little hard to distinguish,
but they are there. There is more to the data than just the fields though. The document
shown begins with "DBSTART" followed by an identifier that is used for internal purposes. The
actual database field values are listed after the "OUT_START" followed by "3" and "@". The
field values are separated by "|^|" and records (each database row) are separated by "|#|".
The end of the records returned is demarcated by "|#|#|" followed by "OUT_END", then
similar fields used by Boomi and the database.
Most often it isn't necessary to look at a document in the database format, but it can be
useful to know how to recognize the fields to determine what data is sent or received.
In Boomi, the database profile (not the document format) consists of a couple of parts. The
profile determines whether you are reading information from the database or writing
information to the database. The setting for this is in the "Options" tab of the database
profile.
379
In the Data Elements tab of the database profile, there are three distinct parts to the tree
view shown on the left side of the window. The "Statement" is where you add the SQL
statement(s) that will be executed when the connection is made to the database. This might
be as simple as a SELECT statement that returns data from the database, or something much
more complex.
380
In order to format, copy and paste into Notepad++. Use the replace command (Ctrl+H), find ~
(or whatever segment terminator is being used), replace with ~\n to add a new line after each
segment terminator. Make sure Search Mode is Extended.
Each set of data (line for easier visuals) is called a segment, the ISA segment, GS segment, ST
segment, etc. Each segment ends with a segment terminator. In this case it is a ~, but it can
be almost any character including a new line. The segment name (ISA or ST) comes from the
segment ID. The segment ID is the first entry in the segment.
Inside the segment are elements, which are separated by delimiters, in this case *. The first
element of a segment is always the segment ID, after that are other elements. Some
elements can be empty. Let's take:
ST*850*103465910~
381
BEG*00*SA*0065-9182075-0579*123*20020624~
All of these values have a very specific meaning, like it's an address or a date of delivery.
Those specific meanings can be found in a specification sheet (spec sheet) for the specific X12
document. The example above is an 850 document because ST01 identifies the X12 document
type.
Loops
These are called loops. Loops are repeating sets of segments. In this case, the N1 loop
contains the segments N1, N3 and N4. It is repeated twice. Loops can be repeated some
number of times based on the specs, it could repeat indefinitely. You'll notice N101 is
different, some segments have elements where only certain values can be used. Those certain
values are called qualifiers. They mean something very specific and that's how loops are
differentiated.
For example, in the ‘PER’ segment, the pair of data elements PER03 and PER04 determines
the method of contacting someone:
382
The Envelopes
The ST and SE segments are a pair and enclose one set of data. That set of data is called a
transaction set. It has information about that specific X12 document.
The GS/GE segments are another pair and enclose transaction sets. This is called a functional
group, it is a group of transaction sets or multiple transaction sets are in a functional group,
usually the same types of transaction sets.
The ISA/IEA segments are another pair that encloses the GS/GE pair. It is called the
Interchange envelope and carries information about the sender and receiver. There can be
multiple functional groups in a single Interchange envelope.
383
You'll notice it is only made up of mainly brackets, colons, commas, double quotes, and text.
There is always the main { } around everything.
"height" : "64"
The key is "height" and the value is "64". In Boomi, height is the element's name and 64 is the
element's value.
The value can be many things and they can be nested inside each other:
• String - plain text characters which usually form a word with quotes
• Number - some integer, without quotes
• Boolean - true or false as the value, without quotes
• Object - an array of key/value pairs, denoted by { }
• Array - an array of values, denoted by [ ]
• Null - an empty value, denoted as null without quotes
384
The key/value pair "name” : "John" is nested inside the key/value pair "person" : { ... }. That's
an example of a hierarchy in JSON data. An Object can have any combination of values inside
of it, so it could have another object, string, number, etc as a value for a key/value pair.
Arrays
The "worksWith" key has a square bracket to determine it is an array. The value is multiple
strings this time. Each array element has to be the same thing. There can be an array of
numbers, strings, objects, etc.
385
Profiles
When building the JSON profile, there aren't many other options besides what kind of element
type to choose. Your JSON profile can be as complicated or as simple as you'd like. The only
other thing is a repeating array and absolute array. Repeating arrays repeat one kind of
element and allow you to repeat once or unlimited times while absolute arrays allow for
different kinds of elements but you have to define every instance and type of element in that
absolute array in the same order the data is coming in. You only have to define the element
once in a repeating array.
386
You would need to define 3 array elements in the absolute array in the example above. If you
wanted another string and object element to the absolute array, you'd have to define 5
separate array elements in the absolute array. If the profile is out of sync with the way the
data has it, you will get errors related to element type.
Installation
It's important to be able to see data clearly. Notepad++ has some plugins to make viewing
data much easier. This was written at Notepad++ 7.6.6
Download the 64 bit Notepad++ at this link https://notepad-plus-plus.org/ and run the
installer. We will now walk through how to install the plugins, JSTool (for JSON) and XML Tool
(for XML).
387
As you can see, it's not that easy to read. Go Plugins -> XML Tools -> Pretty Print (XML only -
with line breaks) to see it in a more human readable format. You can explore the other
options if desired.
Using JS Tools
Paste this sample json into Notepad++:
Go Plugins -> JSTool -> JSFormat to see it in a more human readable format. The JSON Viewer
option will give you a navigator to move around JSON data easier if there is a lot of data. You
can explore the other options if desired.
• CRTL+H - find and replace option, search mode as "Extended" is helpful to look for
whitespace characters like newline (\n), carriage return (\r), etc
• CRTL+F - find option to look for text and unicode symbols
388
When considering implementing integration, there are several widely known common patterns
that are typically used by many organizations and provided by middleware technology.
This integration pattern defines that the Boomi process is the initiator and is usually
scheduled to run on a job queue on a predefined period, commonly known as the polling
frequency. For example, run the process every 5 minutes between the hours of 8am to 8pm.
The process queries the source application for data that meets the query criteria and in this
case:
• Get all data that has been modified since the last time the Boomi process
ran.
389
The query could also be augmented with the criteria to restrict the result set further:
• Get data that meets criteria identified by specific values, e.g. “ SELECT *
from Order WHERE Status = ‘NEW’ ”
The source application returns the results back to the Atom for processing, transformation of
the data to the specification of the target will follow as well invoking any business rules
specified in the processing logic that will affect the end results. The data is then sent to the
target system for processing and upon successful acknowledgement from the target system,
the Boomi process updates the “Last Run Date”.
390
This type of pattern is commonly used and is initiated by the source system. The source
system is configured to recognise data changes within its application and then retracts by
calling a listening type service on the Boomi platform. The Boomi service is configured to
receive the data, apply business rules and transformational logic to the data received, and
then send it to the target system(s).
391
This pattern is a variation of the above pattern where the responsibility of fetching the data
is handled by the Boomi platform. The advantage of this pattern is the integration process
fetches only the data that is required to be processed. For example, an opportunity record in
a SalesForce Automation system could contain 300 fields, where the integration only requires
a subset of these fields to be processed and consumed by the target system.
392
The Fire & Forget integration pattern is similar and could be referred to as a publish and
subscribe pattern. The source system detects changes in its application and broadcasts these
changes to a queue, or calls a service that, in effect, publishes to a process that consumes
the event. The integration process status does not return to the application that published
the event.
393
The Call-back Integration pattern is typically used when there is a potential delay for a
response message or results to be returned to the calling application. The integration process
sends the request to the destination application and provides a mechanism for the application
to return an update or status to the caller.
394
395
396
Knowing your integration load will help with choosing the appropriate approach and
integration strategy as well as ensuring that you respect and do not impact the performance
and service levels of the systems that are to be integrated. For example, certain system
query 1 operations may perform a read operation with a lock on the records. The record
cannot be updated until the local is released, which prevents reading of dirty data. This could
become an issue if the lock is kept open by the requestor/read operation for longer than is
required, and where another process is waiting for the lock.
There are two methods of data movement between one system and another:
• One-Way Synchronization – a source system (master) pushes data from its system to
one or many (secondary) systems,
• Two-Way Synchronization – the systems act as peers and data from one system is sent
to another and vice-versa 2.
The volume and frequency of data that is going to be synchronized will affect the choice of
integration strategy. The following section below details the strategies and provides
advantages and disadvantage of using them.
1
On certain databases, a SQL operation such as “Select * from ORDER” results in a SHARED LOCK which
may prevent other clients from updating the records until the request has finished with the operation.
2
Note: Typically, one system will be responsible for certain fields {customer name, date-of-birth,
address} and another system will be responsible for a different set of fields {demographic details, opt-
in, opt-out preferences, etc.} which are swapped between the two systems.
397
In this approach, records are extracted based on the value of some status or “flag” field.
Upon successful completion, the integration updates this field to a different value, so it will
not be extracted again.
This option provides a lot of flexibility and can enable users to easily control the sync
behavior by modifying values within the end application. Bottom line: if you have this option,
use it.
Considerations
• The flag field can take on many different forms and will depend on the application. It
could be an actual “status” field (integration-specific or business-related), a
true/false “ready to sync” field, the existence of an “external ID”, etc. It could also
be a combination of fields and values.
o Tip: If the application allows it, create a custom field specifically for
“integration status”. If not, look for a standard “status” field or even an
unused field that could be used for this purpose.
• If flag field value is not set “naturally” as part of the normal business process, you
may need to implement custom workflow logic in the end application to initialize the
value accordingly.
• Ideal for when a record should be synced once and only once, such as transactions.
398
Advantages
• Allows records to be synced indeterminate of one another. If one record in the group
fails, the others can be updated successfully and will not be reprocessed.
• Assuming the field is exposed to end users, it allows them to easily reset, retry, or
ignore individual records in a self-service fashion instead of relying on the integration
team.
• Keeps the integration stateless, meaning nothing is stored at the integration layer such
as the last run date.
Disadvantages
• If the source record does not have a field to use as the flag and you cannot create
custom fields, or the application’s API does not permit you to query by this field, this
approach is not an option.
Taking it to AtomSphere
• Configure the operation query filters in the start step to only select records with
certain values for the flag field(s).
• After successfully syncing the record, ensure the process updates the flag fields in the
source application appropriately.
o Tip: Use a User Defined Document Property to retain the source record’s
internal ID throughout the process so you can update the original record at the
end of the process.
399
In this approach, records are extracted based on the value of their last modified date field
being greater than some date, such as the last time the integration ran, or the most recent
record synced previously.
This is the next best option and may be the only option if there are no flag fields available in
the source application or it’s API.
Considerations
• What date value should be used when extracting records?
1. Capture the current system timestamp when the integration begins and save it
upon successful completion. However, if the integration client does not run on
the same server as the application (which is almost always the case for cloud
applications), there can be small discrepancies in the timestamps due to server
times, opening the possibility to overlook records.
2. Use a relative date, such as “extract changes made within the last 24 hours”.
However, this can be problematic a) by syncing the same records multiple
times if the integration runs more than once within the relative date range and
b) records will be missed if the integration does not run for an extended period
of time (e.g. server maintenance). This option is highly discouraged.
3. The most robust strategy is to capture the most recent last modified date from
the records themselves and persist that value upon successful completion.
Because the timestamp is from the source application itself you can be sure no
records will be missed due to server time differences.
• It is important to be vigilant in monitoring and correcting errored records to prevent
the number of records being resynced from accumulating too high.
Advantages
• Integration design usually simpler than flag field approach because you do not need to
update source application at the end of the sync.
• No end-application customizations or logic necessary.
400
Taking it to AtomSphere
• If capturing the date from the records themselves (preferred), use a Map function to
evaluate and save the most recent date encountered as a Process Property. Then at
the very end of the process, if there were no errors or warnings, use a Set Properties
step to persist the Process Property.
• If using the process’ built-in Last Run Date or Last Successful Run Date, you don’t need
to do anything other than ensure the process status is successful/failed appropriately
(e.g. use an Exception step if it reaches a point where you do not want the Last
Successful Run Date to be updated).
• Be aware that using the Retry Documents feature within Process Monitoring to resync
failed documents will result in the persisted date being updated which will cause
401
But what if you can't use a flag field and there’s no last modified date and the application or
API only gives you the entire data set every time.
In this option, the integration must remember the entire data set from the last execution in a
“cache” to be able to compare the current data set against it. Through this comparison the
records that were added, modified, or removed can be identified.
Considerations
• Fortunately, this situation is rare for modern application-based scenarios and is more
common in working with legacy applications and file-based integrations, such as a
nightly product catalog extract for example.
• Need to ensure the entire data set is obtained from the source application every time.
• Should only be used for “master data” records, not transactional records.
Advantages
• No end-application customizations or logic necessary.
Disadvantages
• Makes the integration very stateful because the entire data set is stored in the
integration.
• Requires the extraction and processing of the entire data set, which could be a very
large number of records. This will typically take a longer time to run.
• The cache can be “corrupted” if a “bad” data set is processed, with unintentional
results. For example, if you accidentally synced a small “test” data set against your
402
Taking it to AtomSphere
• Ensure the start step operation is configured to retrieve the entire data set every
time, whether this is an application connector query or a file-based connector.
• Use the Find Changes step to determine which records should be added, updated, or
deleted in the destination application.
You might often hear the term bidirectional or two-way sync used casually to describe a need
for records to be exchanged between two applications. In many cases though, this translates
to some types of records need to go from Application A to Application B and other types of
records need to go from B to A. However, integration developers are keen to recognize this as
simply a collection of unrelated one-way syncs. A true two-way sync situation is when changes
to the same record type are made in either of two applications and must be synced to the
other application.
Although practically speaking a two-way sync is in fact two one-way syncs between the same
applications, the fact that both applications can update the same records back and forth
presents a few unique challenges. This situation more commonly occurs with master data
records (e.g. customers, contacts, vendors, etc.) as opposed to transactions (e.g. invoices,
payments, etc.) that are typically synced one-way accordingly to business processes.
If a record can be modified in either application, what happens when the same record is
modified in both applications between syncs? Which application’s version should “win”? This
problem is addressed by choosing one of the applications as the “master”, whose version will
always overwrite that of the secondary application.
403
If the master application is unable to perform logic to reject stale updates, then records
should be extracted from the master application first. Any conflicting changes made in the
secondary application will be overwritten by the values from the master, then any other
records that were only modified in the secondary application will be synced back to the
master.
Some may argue why not just query the destination record to compare its last modified date
to the record from the source application? While technically possible, one of the design
tenants you should always strive for is to minimize external API calls whenever possible for
performance (i.e. external calls are slow) and governance (i.e. some applications may limit
404
Synchronization use case requirements often state “only the fields that have changed should
be synced”. This is a perfectly legitimate request however attempting to sync changes at a
field-by-field level is not a trivial task and typically requires the use of master data-
management software or similar logic to maintain a cached version of the records outside of
either application and perform change detection logic on each field.
More often than not, this is overkill for many integration scenarios and consequently they
operate at the record level: if any field on a record changed, all the values from that record
will be synced to the other application. That is the assumption we will make in this article.
But keep this in mind: even though changes are detected at a record level, each application
can be the master for a subset of the fields on a record. For example, between a customer
relationship management (CRM) application and an accounting application, the CRM could
“own” the customer name, shipping info, and other sales-related information, but the
accounting system could own the billing address and payment terms. This manifests in the
integration by simply not mapping certain fields when performing an update from CRM to
accounting or vice versa.
The second and trickier challenge when syncing the same records between the same
applications is the dilemma of circular updates. Assuming each step of the two-way sync is
extracting records incrementally (as it should be!), those records could have been created or
recently modified by integration itself and continually update one another without any “real”
changes made by an end user. Consider the following:
405
The theoretical conclusion is that eventually you would be syncing every record every time,
which is what we’re trying to avoid with incremental syncs in the first place!
To overcome this dilemma, we need a way to somehow identify and sync record modifications
made by a real end user and ignore modifications made by the integration itself. Below are
two methods for doing just that.
This method relies on configuring the integration with its own user credentials and ignoring
records that were last modified by that user. When the integration creates or updates a
record, the destination application captures the integration’s user name as the last-modified-
by user value. This approach would be used in combination with the last modified date to
extract records WHERE LastModifiedDate is greater than <last record date1> AND
LastModifiedBy is not <Integration user>
1 The most recent last modified date captured and persisted from the records processed
during the previous sync.
406
Advantages
• Simple to implement.
• No end application customizations required.
Disadvantages
• Provisioning a dedicated user for the integration typically consumes a user license and
associated cost.
• No ability to detect if an end user has more recently updated the record in the
destination application and skip the update if desired.
• Changes to specific fields in the destination application that are not mapped from the
source application will not be synced back to the source application (at least not
immediately).
Taking it to Integration
• Configure the Start Step’s connector Operation with a query filter for the appropriate
“last modified by” field and operator “not equal to”. In the Start Step Parameters tab,
enter the user name or internal ID of the dedicated integration user as a Static Value.
This method enhances the Sync Flag approach introduced in One-Way Sync Strategies
(whereby the integration extracts records based on the value of this flag field and then resets
the flag at the successful completion of the integration) by incorporating trigger logic in the
end applications. Triggers enable you to perform conditional logic within the destination
407
This is similar to the Sync Flag approach used in one-way incremental syncs, however with the
added requirement that a record may be synced multiple times. This is often the case for
master data records like Customers, Vendors, Items, etc. vs. transactional records that are
usually synced once and only once. The feasibility and implementation of this approach can
vary widely between applications.
Considerations
• Must be able to configure custom fields and triggers in end application(s)
Advantages
• Does not require additional user licensing cost.
• Allows you to determine if an end user has updated a record more recently and
proceed differently.
Disadvantages
• More complex solution, with moving parts in both the integration and application
layers.
• Requires end application customization.
• Not all applications support user-defined triggers.
Taking it to Integration
• The Connector Operation filters are simplified to only query records where the Sync
Flag=true.
• Field mapping must be coordinated to populate custom fields that assist the
integration and trigger.
408
Let’s take a closer look at how triggers can be used to facilitate the sync. In this example we
will assume that we can implement triggers in both applications and that the triggers execute
on create and update requests, from both the user interface and API. We will also need to
create two custom fields on the given record type in both applications to assist with the sync:
Or if you prefer pictures, here’s the flow representing the first half of the two-way sync, from
App A to App B only (the opposite sync from App B to App A would simply be the reverse of
this flow):
409
When planning test cases, it is important to keep in mind the objective of the particular test,
which may be to verify the configuration/process within the process, connectivity to
endpoints, expected interaction with an external application, expected output, system load,
etc. Different test cases are needed to test different aspects of the integrations. Also keep in
mind the objective should be to test your specific integration requirements and configuration,
not the underlying AtomSphere platform functionality because that is verified by Boomi.
410
Below is a conceptual example of a web service listener process that invokes a subprocess to
perform the core processing logic. By encapsulating the core logic in a subprocess, it can be
invoked directly without having to submit an actual web service request through the Atom
web server.
A “test harness” can be created by developing a simple integration process that invokes the
subprocesses or other components to be tested. The test harness process performs the
following tasks:
411
Keeping with the web service example introduced in the previous section, here is an example
of simple test harness that invokes the same subprocess containing the core processing logic.
The results returned from that process can then be inspected against a known set of values.
Here is a simple example:
412
The steps used to verify the result will depend on the objective of the test case and specifics
of the integration process. A more complex verification process might use a Business Rules
step to perform multiple inspections of the result document’s values, or even perform queries
to external applications to confirm records or files were created as expected.
If the test intends to actually interact with an external application or relies on external data
to be available for the test case, it is often necessary to perform initialization logic before
running the test cases to generate test data. One recommendation is to perform any cleanup
from previous tests as part of the initialization logic instead of at the end of the test process.
This allows the records and application state to be preserved in the external applications for
analysis after running the test.
Another technique is to incorporate multiple test cases into a single process to verify multiple
use cases in a single process execution. With this approach the individual verification can
write to the process log and a set process property flag if failures are detected. Then after
executing the various test cases, the test harness process can inspect the process property
and throw an exception for visibility.
Below is an example of a test harness process that performs initialization logic, executes
multiple test cases, and checks for any failures.
413
When your destination is a web service endpoint, consider developing AtomSphere web
service processes to simulate the functional interaction of the real endpoint. Mock endpoint
connections are typically used during initial development and volume testing to validate the
behavior of your primary process without sending data to the real endpoint. Not actually
sending data can be especially desirable for high volume testing.
414
• Design the mock endpoint processes to simulate the behavior of the real endpoint with
respect to request and response payloads and HTTP response codes.
• Create different mock endpoint processes or allow parameters in your design to
achieve different outcomes, such as:
o Technical success (e.g. HTTP 200) and functional success (e.g. no SOAP
fault/application warning in response payload)
o Technical success (e.g. HTTP 200) but functional failure (e.g. SOAP
fault/application warning present in response payload)
o Technical failure (e.g. non-HTTP 200)
• If used during performance testing, keep in mind the response time of the mock
endpoints will likely be different than the real endpoint. The focus of the test should
be the execution duration of the primary process itself independent of the connector
call.
• Replace the mock endpoint connections with the real connections before deploying to
your main change control environment. Alternatively, you could design the process
with both the real and mock connections and use a decision step (perhaps evaluating
an extended Process Property) to determine which connector step execute.
Example mock endpoint web service that expects a custom HTTP header parameter to
determine what type of response to return: success, warning, error.
415
To automate testing, the test harness processes can be organized into a “test suite” and
executed sequentially by creating a simple “master” process that invokes each of the test
harness processes in succession. Test suites can be organized by interface or project to
provide granularity for testing and deployment.
After a round of development changes, the master test suite processes can be deployed to
the test environment and executed manually. Alternatively, they could be scheduled execute
automatically, but the remember the test processes will still need to be redeployed to pick
up the new configuration changes.
Another approach for automating testing especially when publishing web services is to use an
external testing tool such as SoapUI. Test cases and suites can be configured to invoke
Integration web services processes with various payloads and execute parallel calls for load
testing. With some creativity you can use test harness and utility processes to orchestrate and
verify non-web services integrations.
For example, suppose you have a process that extracts known test records from a database
and sends them to a web service application. To automate
1. Execute the process through the Execute Process API or perhaps invoke a web service
"wrapper" test harness process that invokes the process to test.
2. Invoke a second utility web service process that queries the destination application
and returns the results once available.
3. Perform the comparison with SoapUI against a known result set.
Automating the test cases greatly reduces the effort required for regression testing of both
process configuration changes as well as the AtomSphere platform updates. AtomSphere
updates are released monthly so reducing effort for regression testing is important. Greater
regression coverage increases confidence for each release.
416
Boomi Assure is included within the AtomSphere platform and allows customers to record and
submit process test cases to help Boomi ensure consistency across platform releases. With
Boomi Assure, a Test Mode execution is recorded and then can be replayed by Boomi as part
of its monthly testing to ensure the same results are obtained with the new AtomSphere code.
417
Here is an example of a GET HTTP request (you can copy and paste
https://itunes.apple.com/search?term=Francis+Ford+Coppola&country=us&limit=10 into your
web browser to see the result):
1. HTTP Method - a verb like GET or POST saying what operation the client wants to do,
i.e. GET
2. Resource Path - the location of a resource displayed after the HTTP method, i.e.
/search
3. Parameters and Query strings - after the resource path you can have additional
information in the URL. The "?" indicates a query string and includes additional
418
Every HTTP request should get a corresponding HTTP response, even if it is a failure.
419
Method
The most common HTTP methods are GET and POST. The main difference is GET requests do
not send a body and POST requests do send some data in the body. The GET usually just asks
for some information and everything it needs is in the URL/resource path and headers. A
POST sends in an additional body to be used by the web server.
Do not confuse the connector action in Boomi with the HTTP Method. The connector action is
a boomi specific concept. GET does not allow data to be sent to the HTTP connector and a
SEND connector action allows data to be sent. Both actions can use the same methods, but
because of how they work, it would be pointless to use a POST method with a GET connector
action since it would nullify the body. Using a GET method with the GET action would
suffice.
Other common methods include PUT or DELETE. A more comprehensive list can be found
online.
420
The parameters include information in the URL for the web server to use. For our purposes,
they can be considered as part of the full path and it should be in some format defined by the
web server. For support, it is another part of the URL to retrieve specific information.
Headers
Request and response headers are used to convey information to the web server. Some are
more important and necessary than others. Some common ones are:
Status Codes
If a request is successful, it will send back a status code of 200 (or one of the 200's). If it is
not, a different one will be sent back for a variety of reasons. Here is a list of the common
ones:
421
• 200 OK
• 201 Created
• 202 Accepted
4XX Client Error
• 400 Bad Request - the body or format of the HTTP request is not what the server wants
• 401 Unauthorized - the Authorization header or credentials are wrong
• 403 Forbidden - the authentication is not allowed to use or access this resource/data
• 404 Not Found - wherever you are going does not exist
• 405 Method Not Allowed - you are using the wrong HTTP method
5XX Server Error
• 500 Internal Server Error - something wrong in the server or it did not know what to do
with your request
• 503 Service Unavailable - the server is not available right now, it might be busy or
rejecting your requests due to limited resources
You can look up others as you see them.
4.11.3 Connector
HTTP requests can be sent via the HTTP connector in the platform. The HTTP connector is
made up of two components, the HTTP connection and the HTTP operation.
HTTP Connection
The HTTP connection tells the request where to go. URL is the address of the server you are
going to. For example, https://itunes.apple.com.
The Authorization determines the security information sent with the HTTP request. Selecting
"None" will not generate an Authorization header. Basic will automatically generate an
Authorization header using the user name and password to calculate a unique value. The
Authorization header value is generated by base64 encoding the username and password in
the following format, username:password. This does mean having the Authorization header is
basically the same as having the username and password and can be used without knowing the
422
Different authentication types will send the authentication in different ways. The web server
should define how they want a client to authenticate. Something like OAuth will ask for more
information.
HTTP Operation
The HTTP operation defines the rest of the HTTP request. It comes in two varieties depending
on the connector action:
423
The content type can be selected from a list or you can type in your own content type for the
data you are sending. This will generate a Content-Type header automatically. If you enter
something in that field and add a Content-Type header also, the added header will override
what you set in that field.
The HTTP Method can be selected. There's only a certain set currently supported on the
platform. You might be able to get around some through an override header, but only the
server supports it.
The request and response profile can be set if you plan to use a specific profile to send
information or use specific elements returned from the HTTP connector. Otherwise, it can be
left as none for testing, and then just see what the HTTP connector retrieves.
The GET action doesn't have an option to return the HTTP response since it automatically
returns it and the POST allows you the option to return and use it in the process or not.
424
Request Headers
The Request headers can be set in this field. The headers are a name and value pair. You can
make it a static value or make it dynamic via the replacement variable option. If you have a
body, you cannot define these replacement variables like you would for other connectors, it
will erase the body. You need to use a dynamic document property with method described in
the payload section.
If you choose a Content Type, a Content-Type header will be automatically generated. If you
make one yourself, it will override that.
Resource Path
Resource paths are the rest of your full URL. The connector will add a / between the
connection URL and the first resource path so do not add a / in front of the first resource
path. For example, if you used /search when the connection URL is https://itunes.apple.com,
the final URL will be https://itunes.apple.com//search instead of the one / we usually see.
Some servers might handle that normally, others might not. Resource paths can use a static
value or replacement variables to make it dynamic. You have to break up the path according
425
The "term", "country", and "limit" are dynamic document property (DDP) variable names and
the "Is replacement variable?" checkbox is checked for each to let the process know they are
dynamic.
If you know what your full path is going to be and you're only testing that, you can skip
defining the resource path altogether and just set the connection URL to that full path. If you
were always going to go
to https://itunes.apple.com/search?term=Francis+Ford+Coppola&country=us&limit=10, then
you can set that in the connection URL, and you do not need to break out the parts that might
be dynamic in the resource path.
426
The Response
The response will continue flowing through the process if you allow it to. You can get the
response's status code via a document property.
1. On the parameters side (such as of a set properties shape), add a "Document Property"
type
427
4.11.4 Installation
Postman
Make sure you are using the desktop version (not the chrome add-on) so you have the Postman
Console.
Postman doesn't show certain things super clearly like Charles Proxy, like how the URL encode
something or Oauth related calls.
SoapUI
SoapUI's program allows for REST and SOAP testing now, before it was only SOAP requests.
You can just use it for both.
Charles Proxy
Warning: configuring Charles Proxy to work with an atom can affect the atom's internal
processing. You should only follow these steps on a local test atom
AtomSphere gives you the ability to track data sent to/from a connector through use of the
428
When troubleshooting complex issues that require the analysis of the raw messages sent
to/from a web application, it is helpful to review the web traffic sent to and from the atom.
A proxy tool such as Charles Proxy offers a way for you to track this information during your
debugging. The following steps outline how to enable Charles Proxy to see traffic that is being
sent securely from a local atom.
429
1.
a. Note: The *.cer filename may be different depending on the version of Charles Proxy
installed, if that is the case, change the name/path accordingly. The value "changeit" is
the default cacerts password. If you have modified it, change it accordingly. If you get a
permission denied error when you run the above command, you need to run the
command prompt as an administrator and try the import again.
b. The command prompt should show something similar to the following, if it is successful:
c. Trust this certificate?: yes
Certificate was added to keystore
430
431
ISA06 is the sender ID and ISA08 is the receiver ID. When setting up the trading partners, you
have a "My Company" trading partner which is "you" and normal trading partners which are
other people you are trading with, "them". In the example document, ISA06 is 4532345856
(let's call them TP) so TP is sending to 8038025150 (let's call them My Company). If this is
case, you would use the receiver information to fill out the My Company profile information.
GS03 is receiver's code.
For the sender TP, you'll use the sender information, ISA06 and GS02 (sender's code) to fill out
the TP trading partner profile information. Many other fields are indicated in the profile
already to help you fill it out.
Note: for testing, you can actually make up most details for your TP and My Company as long
as the X12 document conforms to it. Lp
432
The communication method is how the trading partner sends and receives EDI data. You'll
notice there's a Communication tab and has various methods of communication. A common on
is AS2 which involves its own protocols and setup. A common method for testing will be disk.
My Company can define communication methods for all of their trading partners to use
One set is for receiving, one set is for sending. There's a mycompany defaults and there's a
specific setting.
433
1. Add the sample 850 document to the directory location you picked above
2. Add a trading partner shape to the acknowledgement path so the 997s go to your send
location
This is the basis of your trading partner tests and setup now. From here, you can test with
different X12 document, test different options to see what they do, etc. This will help you
mimic what the client is trying to do. It doesn't really matter how it's picked up (as long as it's
not related to that), once the document is picked up it is treated the same whether from Disk
or AS2. So, what can this help you troubleshoot, why? What can this not help you
troubleshoot, why?
Common Errors
1. Your Trading partner shape does not have My Company and TP defined
2. For file options do not match up to the file you put in the get location
3. Your ID has extra spaces when it shouldn't (because the platform already knows to add
extra spaces)
434
435
436
• Has each process been tested for expected and peak loads?
• Is performance acceptable for expected and peak loads?
• Reminder: Load testing critical for high-volume processes
You can restore (roll back) to a previous revision of the component by selecting a previous
version and saving the component. The user needs to be careful when restoring a component.
• Make sure other processes/components are not relying on the most recent version.
• Restoring a previous version will not delete any other components referenced by the
newer configuration.
• The “Show Where Used” feature should be used to see all the components that
reference a given component.
437
• Extend all connections across all processes. However, only extend the connection
fields that will actually change between environments. For example, in the HTTP
Client connection above, the fields URL, User, and Password would be declared as
438
When executing in Test Mode, you will need to provide values for the extensions. Extensions
are configured per Atom in the Run a Test dialog. You will need to enter values for a given
process the first time you run a test, but AtomSphere saves the extension values across test
mode executions.
• Prior to the deployment of each process, ensure all needed fields have been
extended in each process (build tab)
439
440
3. Attach (first time only) and deploy the process to the first environment (i.e.
“Development”) using the Deploy Latest Revision of Process button. This creates a new
deployment version.
4. Configure extensions for the process in the Development environment via Atom
Management.
a. Attach the process to the next environment (first time only). Note that
eventually the process will be attached to all environments.
d. Click the gear icon on the latest deployment version and choose Copy
Deployment.
441
442
• In general, only the top-level process should be deployed; the sub-processes should
not be deployed. When the top process is deployed, the sub-process is attached to
that deployment. The exception is if the sub-process should be able to run alone,
such as to manually reprocess a document via the Process Reporting UI.
• Similarly, extensions must be declared on the process that will be deployed. For
example, extensions for components contained within a parent process or any of its
sub-processes must be declared on the parent process.
• Extensions for the same component must be declared on each process that will be
deployed. For example, if two processes use the same database connection, the
extensions for the database’s host, user, and password and so on must be declared on
both processes. If not declared, it will use the default value, which should be the fake
“set by extension” value configured in the connection component by convention.
• Once an environment extension value is set (such as Manage > Atom Management >
Environment Extensions) by your deployment or operations team, it doesn’t need to be
reset if a new version of the same process is deployed to that environment or if a new
process is attached and deployed to that environment and declares the same
extension.
If a new process or version introduces a new extension to the environment, that would need
to be set.
443
The AtomSphere platform provides a web service API (REST or SOAP) to perform process and
other component deployments and promotions programmatically that you can incorporate
into your automated change management procedure. Use of the deploy APIs requires
orchestration logic to be performed by a client application such as an internal scripted
application or even another Integration process.
The platform API is available free-of-charge to all AtomSphere customers and partners. You
can call the platform API from an external client application but there is also an AtomSphere
API connector which can be used to easily interact with the API from within a Integration
process. Note the platform API is separate from and available without the API Management
offering.
This section will assume the use of Environments and Extensions which are not available in all
editions. However, there are Atom-only versions of the attachments APIs that may be used
instead.
• The AtomSphere API connector can be used to interact with the API from within an
Integration process.
• Using the API provides an opportunity to devise business logic to enforce environment-
promotion sequencing if desired. For example, you could use decision to enforce that
a deployment targeting the "production" environment may only come from a
deployment that currently resides in the "stage" environment, not "test" or "dev".
• The digest value serves as the consistent value for comparing versions of a given
deployment across environments. Note the version and Deployment id will vary across
environments. You will use this to identify and validate the same deployment version.
• The digest is only returned by the Deployment GET action. It is not returned by the
QUERY action.
• When updating environment extension values via the API, the entire set of values must
be provided in the request; partial updates are not supported. This means the request
444
5.7.3 Steps
Assumptions
The steps below assume the target Environment has been created, the Atom or Cloud runtime
has been installed, and that runtime has been attached to the given Environment.
1. Developer manually attaches (if first time deploying to the target environment) and
deploys initial deployment version to the first environment using the AtomSphere user
interface. Although the APIs exist to attach and create the new deployment version
programmatically, it is recommended to create the initial deployment manually after
successful unit testing. This allows the developer more control over all the
components involved with the given change.
a. Alternatively, client application verifies attachment and calls CREATE
Deployment with componentId=<process or other component ID to
deploy>, environmentId=<target environment ID>, and deployNotes.
2. Developer or client application sets extensions.
3. For scheduled processes, developer or client application configures schedules.
445
Set Extensions
Configure Schedules
As of the June 2017 release, the deployComponent API should be used to promote any type of
component from one environment to another.
446
***More detailed information is needed from the customer for a more in-depth error handling
design***
Every integration process should adhere to the proposed development framework that would
include a try/catch shape. Upon an error or failure, the catch path would pass the failed
data along with error and process properties to a predefined map. This map will differ
depending on the source canonical XML data format. All error notification maps will utilize
the same error XML format prior to submitting the message to an Atom Queue.
447
The error handling process would be responsible for mapping the canonical error data from
the failed execution and submitting a message to the IT/Business owners.
The standard message should follow a canonical data format containing the following
parameters:
1. Process name
2. Tracking ID
3. To Address
5. Error message
448
The error handling process will utilize a listen action on the start shape. As messages are
placed on the queue, notifications will be immediately sent to correct IT/Business Owners:
a. As messages are placed on the queue the process will listen for and process
documents.
a. Mail Subject: Will utilize dynamic and static properties to populate the mail
subject
c. To Address: Dynamically set by the profile of the source data (Error XML
canonical profile).
3. Message Shape: The body of the error notification will be set with the use of source
profile (Error XML canonical profile).
a. Process Name
b. Time
c. Execution ID
d. Tracking ID
e. Error Messages
449
AtomSphere has a built-in event framework that automatically generates events for situations
such as process failures and Atom offline. Additionally, developers can generate custom
events within process orchestrations using Notify and Exception steps.
• Integration UI including Process Reporting (execution summary and process logs) and
Dashboard
• AtomSphere user email subscriptions
• AtomSphere platform API
• RSS Feeds
Email alerts are configured as subscriptions for a given Integration user. Each user can choose
to subscribe one or more alerts based on:
To send alerts to a common service account or distribution list, simply create a new
Integration user for that email address, log in as that user, and add an email alert
subscription. To avoid sending excessive emails, multiple events are consolidated and sent
every few minutes in a single email message. Emails are not sent for Test environments.
450
For more flexibility over filtering, routing, and formatting of alerts, consider using the
AtomSphere platform API to periodically extract recent events programmatically. The events
can be extracted and communicated via a corporate SMTP mail server or inserted directly into
an incident management application.
The event extraction can be accomplished by designing another Integration process to call the
platform API using the AtomSphere API connector. Alternatively, this event handler process
could be performed as a script or program run outside of AtomSphere. Although unlikely, it is
possible for the notification process itself to fail and not communicate its own failure. If an
external script is not desired, this risk can be mitigated by designing the notification process
to always send a “baseline” notification even if no events are found. In this case the absence
of a baseline notification after an extended period of time would be an indication of a
problem.
Details about the Event API can be found here: Event Object, Boomi User Guide
The Process Reporting console within the Integration UI displays execution results and process
logs for the past 30 days with the ability to drill into each execution to view documents in and
out of the process along with the step-by-step process log.
Note: Web service processes configured as Low Latency will NOT record execution history to
the Process Monitoring console unless they have a runtime exception. The additional logging is
forfeited in favor of decreased response times. Successful executions are aggregated and
reported via the SOA Dashboard in a summarized fashion.
451
While the Process Reporting UI will retain the summary execution history for 30 days, the
execution artifacts such as process logs, and document data can be purged more frequently.
This can be desirable for runtimes processing a large volume of data. The purge frequency is
configured for the entire runtime, not per-process.
The runtime can also be configured to Purge Immediately so that execution artifacts (most
notably document data) are removed immediately upon completion of the execution. Again,
keep in the purge setting applies to the entire runtime, not individual processes.
Execution artifacts for processes running on the Boomi Atom Cloud are purged after 14 days.
This can be decreased but not increased beyond 14 days.
While it is technically possible to increase the purge history beyond 30 days for local
runtimes, it is not practical because the execution summary information in the Process
Reporting UI is only available for 30 days.
The purge frequency can be modified per runtime in Atom Management > Atom Properties (or
Molecule or Cloud Properties). The Basic Property sets a “global” purge frequency for all
execution artifacts. Additionally, /alternatively you can override this setting by configuring
purge frequencies for logs (process and container), documents (also applies to Atom Queues),
and temp data individually with Advanced Properties.
Procedure
1. In the Manage menu, select Atom Management.
2. Do one of the following:
a. Select the Atom, Molecule, or Cloud Molecule from the list on the left.
b. Select an account’s Atom.
3. In Settings & Configuration, click on Account Properties.
4. The Account Properties panel opens.
452
Server Infrastructure - Monitor basic server and OS vitals for the infrastructure running
the Atom. Key metrics include server availability, CPU usage,
memory usage, hard disk usage, and disk I/O wait latency. These
should be monitored for point-in-time anomalies and trending over
time for capacity planning.
453
Cluster Health (Molecules only) - Monitor the “Cluster Problem” JMX property, or
- Monitor the Molecule node “views” files for node health and
inter-node communication issues -
454
Atom Application Internal - Use a JMX-compliant monitoring tool to connect into the Atom’s
Health Java JVM and gain real time insight into various application
metrics. This includes both generic Java metrics and Atom-specific
metrics. These should be monitored for point-in-time anomalies
and trending over time.
* Container status
* Running executions
* Cluster problems
* Complete list:
http://help.boomi.com/atomsphere/GUID-48F37A93-5BF9-
488D-82C3-38E4E9D45A22.html.
- When starting out, monitor the JMX metrics closely while running
“normal” integration loads to establish a baseline from which to
drive threshold reporting.
As a hosted service, the infrastructure capacity, application health, and general system
availability of the Atom Cloud are monitored by the Boomi team. Individual customers should
455
Atom Cloud Status - Subscribe to AtomSphere platform email alerts for ATOM.STATUS.
Alternatively, the AtomSphere platform API can be queried for the
same events, typically from a client running outside the Atom
Cloud.
- Document – Select step on canvas, then step, step execution duration, and
456
Process Reporting Integration UI > Manage > Process - Process – Primary means of
(Process and Reporting investigation execution problems. Log
Document Logs) of given execution including the steps
- Process – Click Log icon for execution
executed, number of documents per
record.
step, step execution duration, and
> select Start step > select View Logs Tip: save larger logs locally to view
Container Log Integration UI > Manage > Atom Used for general runtime health and
Management > select Atom > Download errors that typically occur outside the
Atom Log context of a single process execution,
such web server/listener issues or
Locally, ./<runtime
problems communicating with the
root>/logs/yyyy_MM_dd.container.log
Integration platform. Contains
uncaught exceptions so can be an
additional source to check for
problems if nothing shown in process
execution.
457
HTTP Server Log Integration UI > Dashboards > HTTP Used to help troubleshoot incoming
Status Dashboard requests that do not result in an
execution from the platform’s
Locally, ../<runtime root>/logs/
perspective.
yyyy_MM_dd.shared_http_server.log
Running daily log of inbound web
service requests per node. Info
includes timestamp, target endpoint,
user, HTTP status, and response time.
Molecule Node Integration UI > Manage > Atom Series of files indicating Molecule
Views Management > select Molecule > Cluster cluster health such as is there only
Status tab one head node, do all the nodes know
about one another, are all the nodes
Locally, ../<runtime root>/bin/views
responsive. UI displays status
graphically.
458
6.3.1 Overview
Knowing when integration processes fail or do not complete as expected is a critical part of
managing the integration platform. Integration provides a number of options to suit your
needs depending upon the volume of executions, desired communication method, and
sophistication of notification routing and delivery requirements.
For monitoring the general availability and health of your Atoms and Molecules, see
Operational Monitoring Techniques for Atom, Molecule, and Atom Cloud Runtimes.
The table below describes the various process monitoring options and best practices for use.
459
460
(Event
Framework) Account menu > Setup
For exception-based monitoring, use the "Alerts Only"
> Account Information
feeds to only receive Warning and Error level Events.
There are no other filtering options.
or
461
462
The Process Reporting console displays execution results for the past 30 days. This period
cannot be changed. The results include process- and document-level metadata such as
execution statistics, document counts, and document tracked fields.
The Process Reporting console will always retain the summary execution history for 30 days,
however the execution artifacts such as process logs and document data can be purged more
frequently. This may be desirable for Atoms/runtimes processing a large volume of data. Note
that purge schedules are configured for the entire runtime, not per-process.
The runtime can also be configured to "Purge Immediately" so that execution artifacts (most
notably document data) are removed immediately upon completion of the execution. Again
keep in mind the Purge Immediately setting applies to the entire runtime, not individual
processes.
Execution artifacts for processes running on the Boomi Atom Cloud are purged after 14 days.
This can be decreased but not increased beyond 14 days.
While it is technically possible to increase the purge history beyond 30 days for local
463
The purge frequency can be modified per runtime in Atom Management > Atom Properties (or
Molecule or Cloud Properties). The Basic Property sets a “global” purge frequency for all
execution artifacts. Additionally/alternatively you can override this setting by configuring
purge frequencies for logs (process and container), documents (also applies to Atom Queues),
and temp data individually with Advanced Properties.
For more information see Purging of Atom, Molecule, or Atom Cloud logs and data.
Processes configured to use Low Latency mode require special considerations for monitoring.
As noted above, Low Latency process executions do not generate Events for process errors
and therefore you cannot rely on email alerts, RSS feeds, or even the Event API. User
notifications (from Notify shapes) are created and therefore could be received via email
alerts, however because Low Latency mode is typically used for high volume scenarios such as
inbound web services and JMS messages, receiving an Event or email alert for each individual
error can be impractical given the sheer volume of potential messages. Instead the strategy is
to detect a general, persistent issue with the service and then use the available process logs
and dashboards to investigate further.
Below are some additional considerations and recommendations for monitoring errors for Low
Latency processes.
• Determine whether error reporting is even required. This is especially relevant for
web service requests in which some types of requests may be transient in nature. In
fact the client may have already resubmitted the request. Similarly, determine if you
464
6.4.1 Overview
The Event Framework provides the technical infrastructure and plumbing for logging,
handling, and alerting from processes at run-time. It captures Events from processes and
465
1. Something happens during a process execution or the Atom runtime's status changes.
2. The Atom uploads the event message to the Integration platform.
3. An Event record is created in the platform database.
466
Important Notes:
• The Atom runtime must be able to communicate with the Integration platform to
upload the message. If the Atom cannot connect for some reason, Events, along with
other messages will be queued and uploaded once the connection is re-established.
• Process Events are generated and uploaded to the platform asynchronously during and
after the execution completes. This can mean Events may not be available until
sometime after the execution finishes. You should not rely on these Events if you need
to trigger immediate/real-time workflows.
• Events reside in the AtomSphere platform, not the local Atom runtimes. You cannot
query/obtain Events from the local Atom.
• Event records are purged after 7 days.
• Events are NOT generated for Test Mode executions.
• For Low Latency executions, process.execution Events are NOT generated, even for
process errors. user.notification Events ARE created however be cautious when using
them in high volume scenarios. See Functional Monitoring of Integration Processes Best
Practices for considerations.
• Events ARE generated for executions and Atoms in environments classified as "Test"
however email alerts are not sent by the platform.
Types of Events
467
Schedules are "missed" if the scheduler service does not run once
each minute. There are generally two scenarios which can cause this
to happen:
468
For the full list of attributes see Event object. In addition to eventType described above,
some of the notable attributes include:
Events are distinct from process execution results that are displayed in the Process Reporting
console.
Most types of Events are created automatically by the Atom and/or platform, however you
can create your own user notification events by using a Notify shape with a process. Notify
shapes can be used "inline" because they do not modify document data.
You can also create Events with your own error message by using an Exception shape
(assuming it causes the process execution to fail). However it manifests as a
process.execution Event type.
Notify shapes always write to the process log but if you want it to additionally create an
Event, simply check the option Enable Events:
469
The Notify shape's Title, Message Level, and Message will be available in the Event record.
See Notify shape for more information and considerations on creating Events.
Once Events are uploaded and captured in the platform database, they can be consumed via
several channels. See Functional Monitoring of Integration Processes Best Practices for
considerations of using each.
470
• You are attempting to process a single large data file without batching the data.
• You are executing many processes simultaneously.
• You are executing many large data sets simultaneously.
• There is a memory inefficiency in the Atom.
• Your computer is out of physical or virtual memory that it can allocate to the Atom.
These troubleshooting questions are listed in order (first being most common) for
OutOfMemoryException errors.
The Atom employs various techniques to limit memory usage. The primary technique is
buffering data to disk. When you read in a very large file, only a small portion of it ends up in
memory. As data travels from shape to shape, a set of file pointers is being passed. At some
471
A base level of memory usage is required to track each document through a process. A
process that reads in 100,000 documents uses memory to store metadata for each document
in memory. There is a memory pattern difference between the Start shape reading in many
documents and any other shape handling many documents. While the Start shape consumes
memory for each document, other shapes that produce many documents do not use any
additional memory.
Be aware that the Start shape consumes memory, especially when you build large master
processes that initiate many subprocess calls that run asynchronously. Each subprocess
produces many documents in the Start shape and they all consume memory until each
subprocess is complete.
To avoid heavy memory usage when processing large amounts of data, spread the load of the
Atom over time or configure the process to handle large amounts of data.
• For technology connectors, run large data sets at different times to avoid
simultaneously processing large numbers of documents.
• To process large CSV files, use the Data Process shape with Split Documents to batch
the data into smaller chunks. However, be aware when using the Split by Profile that
it will attempt to read all of the data so that it can sort and organize each flat file
line.
• Use the Flow Control shape to execute each document one at a time after you split.
This spreads the memory usage over time instead of processing all documents at one
time per shape.
• When reading from the database, use the Grouping options to batch the data into
smaller record sets by count or by a matching link element from the Database Read
profile. For example, use "OrderNum" to group inbound records that have the same
order number.
• When writing to the database, use the Commit options to group database commits by a
specified count or multi-table data set.
472
By default, the Atom attempts to use only 512 MB of RAM when it processes a low- to
medium-level data load; it can safely process thousands to tens of thousands of records at
one time. Data sets of hundreds of thousands or even millions of records require increased
resources to the Atom. The key question is how much RAM should you allocate to the
Atom? Boomi recommends not limiting the Atom by minimally following this guideline:
Table 45: Records and Usage
Memory usage is based on the architecture of the Java virtual machine (JVM). Java handles its
own memory and sets up its own memory space, called heap space, from the available
operating system memory. Java uses heap space only to perform its work. If the heap space is
full and objects that have been created by the Atom cannot be removed from the heap space
safely (called Garbage Collection), then OutOfMemoryException errors occur.
There is a benefit to this approach. A regular Windows/Linux program can consume all
available memory in a machine even extending into Windows virtual memory or Linux swap
space. Virtual memory or swap space is on-disk memory space that is very slow and is used
primarily to save old states of an application. When an application uses this memory space, it
can slow down the entire machine. Moreover, when an application uses all available physical
and virtual memory, then the machine is unable to use that memory for regular operation and
eventually crashes.
473
One peculiarity about this type of memory management is that after machine RAM has been
allocated to Java heap space, Java is reluctant to return that RAM to the operating system.
This is because, for performance reasons, Java attempts to maintain as much RAM as you will
allow it. As a result, reallocating memory can be a time-consuming operation. Even if the
Atom is not doing anything, it still may be using a large amount of memory because Java has
not freed the memory for the operating system. This does not mean that there is a memory
leak—it just means that there is a set of free memory inside the JVM that the operating
system cannot see.
Although you can change this behavior, Boomi recommends that you do not do that. If you
decide to make this change, you can set the following options on the Custom tab of the
Properties panel or add them to the <installation_directory>/bin/atom.vmoptions file.
-XX:MinHeapFreeRatio
-XX:MaxHeapFreeRatio
A good article that describes these options is located on Oracle’s website.
The options above, when set on the Properties panel or in the atom.vmoptions file, apply only
to the primary process running on an Atom, Molecule, or private Atom Cloud. They do not
affect forked executions. To set these options for forked executions, you must set them on
the Custom tab of the Forked Execution Properties panel, or in your
customized procrunner.*, procworker.*, and/or procbrowser.* script files.
Note: The scripting engine that is used depends on whether you use Windows or Linux. If you
are running:
• Windows and an Atom, or if you are running a Molecule that does not use UNC paths or
forked execution, then batch scripts (.bat) are used.
• Windows and a Molecule that uses UNC paths or forked execution, or if you are running
an Atom Cloud, then Powershell scripts (.ps1) are used.
• Linux, then shell scripts (.sh) are used in all situations.
474
We may need to investigate the Atom's internals to determine if there is some efficiency we
can gain from the code. There are always possibilities of memory inefficiencies in the Atom.
Any memory analysis that we do starts with setting the Heap Dump on Out of Memory Error
property (-XX:+HeapDumpOnOutOfMemoryError) on the Advanced tab of the Properties
panel.
When the OutOfMemoryException error occurs, a very large file that is the entire Java
memory space is generated in the root directory of the Atom. You can zip up this file and
send it to Boomi Support for further analysis.
In some cases, we may find a memory inefficiency. In other cases, we may not, and the
solution may be to spread out the load or to redesign the process.
475
The platform is a low code platform, but it can still use any programming concepts you might
have heard of from before. In order to know if your process works or not, you need to know
what values are, inputs and outputs and anything else to inform you when something goes
wrong during testing or when it is in production.
The main way to view a value while it is in the data flow is through the notify shape which
will show the value in the process logs or when you click on the notify shape in test mode.
The notify shape uses the same exact variable system to construct the body. If you add a
variable of a dynamic process property called "currentDay", it will be assigned to {1},
wherever you use {1} the value of DPP currentDay will show up. View 2.5 for more
information on the variable system.
Otherwise, you can show notifications in the process log during scripting also.
476
• INFO - the email alerts include all execution information, warnings, and errors for
active processes and all atom status information
• WARNING - the email alerts include all warning and error information for active
processes and disabled atoms
• ERROR - the email alerts include all error information for active processes and disabled
atoms
Event Type - category of information included in the subscription
477
Email alerts
Some things to note about email alerts:
• Alerts are grouped in 15 minute intervals, if multiple things happen that causes alerts
happen within the 15 minute interval, all of them will be sent together by event type
• Low latency does not generate email alerts
• Test environments (or atoms attached or processes deployed on it) will not generate
email alerts for executions or atom statuses
• Only the user can see their email alerts configuration
• We have a limited report to show some information about a user's subscribed email
alerts in a Boomi Admin report (User's Email Alerts, if you provide an email address)
Process Logs
Process logs show what happened during the process. It will tell you how long a shape took,
where documents went to and what happened in the process. Test mode and scheduled
executions will have process logs. Only test mode will allow you to inspect each shape.
Conflicting Profiles
You should not deploy API components that specify objects for which a profile type conflict
exists. A conflict occurs when multiple referenced XML profiles include the same type and
namespace or when multiple referenced JSON profiles have the same root name. You can
resolve a conflict by standardizing on one profile.
478
Adding Authentication
Authentication is a complicated process that involves many steps. Publish your API first, to
make sure the service is publishable. Deploy your API to a local atom with the Authentication
Type set to None. Then work with the more advanced publication setup of adding
authentication.
API Management
The main purpose of the API Management feature is to enable a web service publisher to
expose versioned APIs for logical groups of web services. This web service API consists of a set
of REST, SOAP, and/or OData endpoints. This is the foundation for our API Management
offering and serves as an extraction layer over web service enabled processes.
This allows for web service components to be consolidated into a single, explicit location,
making API design easier and more efficient.
Rather than having multiple listeners at different addresses, API Management can organize
each operation into one WSDL that can be easily consumed by customers and/or partners.
479
Release Control occurs two weeks before the full release. You can apply pending Atom and
connector updates at any time during those two weeks. The Release Control period allows you
to select a time within that window that is convenient for you to apply and test the updates.
The pending updates are applied per Atom (or clustered Molecule or Atom Cloud). You can
update your "Test" Atoms and test the changes against your processes before the full release.
If you are happy with the test results, you can apply the changes to your "Production" Atoms
and move the updates into your production environment before the full release. If you apply
the pending updates during the Release Control period and then change your mind, you can
remove the updates and roll back to the currently released version.
NOTE: Pending Atom and connector updates are also available on the Boomi Test Atom Clouds
during the Release Control period.
For more information regarding Release Control, please refer to this user guide.
To schedule Release Control, please follow the step by step instructions here.
Force Restart After X Minutes - The number of minutes that the Boomi AtomSphere platform
will wait for processes to finish before it forces the Atom, Molecule, or Atom Cloud to restart.
If the property value is set to 0 or a negative value, atom/molecule/cloud will not restart
until all the running processes finish. In the scenario where there is long running process,
atom/molecule/cloud will not restart after the release/RC takes place. We recommend
480
481
7.1 Introduction
This guide provides an overview of the various help and support options available to you as a
Boomi customer or partner. As a new or existing user, you have access to a vast list of
resources including the Boomi Community, Support Center, User Guide, Status site, Services
resources, and Customer Success to help you maximize your success with the tool.
We are here to help you succeed. Please refer to this guide often to help you ramp-up
quickly.
Resource Link
AtomSphere Platform Login http://platform.boomi.com/
Within the platform, Help menu > User Guide
or
User Guide
Integration (https://help.boomi.com/category/integration)
482
Support Center
7.3 Community
The Boomi Community is your one-stop-shop to find answers, share best practices and discuss
integration topics with fellow users, and stay up to date with Boomi products. Whether you're
a customer, partner, or developer, a brand new user or experienced architect, the
community is your single destination for all the resources you need to be successful.
• Getting Started - Learn how to get started and best leverage the community. Also get
community site updates, help, and feedback.
• Community Forums - Ask questions and discuss integration topics with your fellow
users.
483
The community is publicly accessible and anyone including guests can view the community.
However, you will need to log in with your AtomSphere credentials to post questions and
comments.
To access the community from within AtomSphere, go to Help & Feedback menu (question
mark icon) > Community.
The forums are where community members come together to ask and answer questions about
integration development and design, error messages, and product features. You can easily
search existing discussions to find correct and helpful answers or post a new question. If you
find a question or topic that you about, why not respond and share your expertise?
Browse Boomi authored content including knowledge articles, implementation guides, and
more. Here you can learn more about our products and get help resolving technical issues.
484
• Integration (https://help.boomi.com/category/integration)
• Master Data Hub (https://help.boomi.com/category/hub)
• API Management (https://help.boomi.com/category/api-management)
485
486
After submitting the case, you will receive a response according to your Boomi Support Policy.
As we troubleshoot the issue, we will communicate with you by posting comments to the
case. You will receive email notifications alerting you an update to your case is available and
you can view the case updates via the Support Center> Cases tab. Please do not reply to the
email notification. To respond, simply add a comment to the case through the Support
487
Severity 1
If the platform user interface is inaccessible or your process running on a hosted Atom Cloud
environment are failing, please check Status (https://status.boomi.com) for the latest
platform status before contacting support.
Again a Severity 1 issue means Production use of Boomi products on a primary business
service, major application, or mission critical system is stopped or so severely impacted that
the client cannot reasonably continue work.
• Platform down
• Atom Cloud down
• MDM Cloud down
• "Production" processes hang or crash situations
• "Production" data loss or data corruption
• Critical functionality not working after a Boomi release
• Rollback functionality not working after an atom or connector update was applied
during release control
For Severity Level 1 problems, we will begin work on the problem within the guidelines of the
Boomi Service Description. For issues that may involve a Boomi OEM or Reseller Partner, the
expectation is that partner resources will be available in Severity Level 1 situations, and the
partner will reasonably cooperate with Boomi to resolve the issue.
Call the Premier Support Phone Number for your region (available in support center):
488
• Contact Boomi Support through the case or the Premier Support number with
additional information to pass along to the Boomi Support Team regarding escalating
the case.
• Based on current case volume, the escalated case will be prioritized for additional
focus and the Support Manager will instruct the support team to provide attention to
the escalated case.
• If the escalated case requires backline engineering attention, you will be notified and
the Support Manager will act as a point to the Engineering team.
• The Support Team will provide updates regarding the case through the support center,
email and phone.
1. For faster resolution, enter a case through the support center and provide as much
diagnostic information as possible. This reduces the number of interactions to resolve
a case.
489
The Status site (https://status.boomi.com) displays the current status of the AtomSphere
platform and various Atom Cloud hosted environments.
490
Our training curriculum includes instructor lead on-site instruction at a Boomi training facility
or your location. We also offer a remote training option and other self-service options.
• Classroom training at Boomi: Our live, interactive classes focus on real business
scenarios and Boomi best practices. Classroom training is relevant for novice users and
advanced developers and is the fastest, most thorough way to build your integration
skill set.
• Remote training: We provide remote training options offered in a public class setting.
• Custom training: A Boomi Certified Instructor will work with your staff to develop
custom courses and deliver them remotely or in-person at your facility.
• Self-service training: Boomi customers have on-demand access to a growing library of
recorded training sessions, tutorials, and fully configured integrations.
The Boomi professional services team offers expertise in integration development and best
practices. We can advise your organization at critical implementation checkpoints, deliver a
complete, production-ready integration, or provide custom training for your IT staff. Working
with our consultants, you’ll gain confidence, knowing that your implementation will succeed.
491
Our engagement models are flexible so please click here to learn more.
7.8 Summary
Boomi AtomSphere integration Platform as a Service enables you to integrate any combination
of cloud and on-premise applications without software, appliances, or coding. The resources
in this guide are available to help you be successful from day one.
8.1 Accountability
492
When possible, pass internal keys from the source system to a field in the destination □
system. Optionally you may also want to write keys from the destination system back to a
field in the source system.
In most cases, going directly to a Stop shape from a Route, Decision, Try/Catch, or Business □
Rules is discouraged. If any documents go down this branch, it will be difficult to trace
after the execution is finished.
Terminate your branches with Stop shapes where possible, even if it will not change the □
results of the process. This will communicate your intentions as the developer to
whomever may need to maintain your process in the future.
8.2 Maintainability
Naming conventions □
o Shape labels
use labels for set properties, data process, decisions
optional for branch and route
generally discouraged from labeling start shape and maps
(unnecessary with good component naming), and stop shape
o Component names
All components should have names (not “New Map” or “New
Profile”)
Rename any components that have had a numeric suffix added by
Integration to enforce uniqueness. For example “SF account query
493
Should not filter on minus "n" days in connector call. Potential to miss records if and when □
a process fails over a period of time greater than “n”.
Ideally single connection component per endpoint for deployment (and possibly 1 more for □
browsing). For example, a single component for Salesforce, use environments/extensions
to point it to Sandbox/QA/Production instances
494
Keep components out of the root folder. For small accounts, putting shared connections in □
the root folder is acceptable.
Use shared components where appropriate. Keep shared components together in a shared □
folder.
8.3 General
Appropriate use of Options in the build tab. For example, do you want to allow □
simultaneous executions? Is your listener process set to Low Latency?
Process should be designed to be re-runnable (for example, should handle upserts rather □
than just creates). This helps when re-running a process after a partially failed execution.
Date handling in maps. where possible, define as true date in both profiles, and avoid the □
"date convert" function
495
If possible use sync flags to select source data instead of using LastSuccessfulRunDate □
If you need to use a date for source data selection, store and use the highest date from the □
source system instead of using LastSuccessfulRunDate
8.4 Performance
Pull data all together when possible (e.g. use joins on DB selects or SAAS queries when □
available)
496
Minimize or eliminate use of "run each document individually" feature for high-volume □
processes
How many records per unit of time is this process expected to handle? Has it been tested □
at this volume? If high volume, is this process set up appropriately for high volume
(caching, parallelism, etc.)?
Verify that the process is tested, signed off (by the appropriate approvers) and □
documented.
497
• Retry docs?
• Re-run process?
• Any resetting of flags or dates? etc.
498
• Purge data immediately should be set for any processes that contain
sensitive data.
6. Is the error handling sub process assigned?
7. Is the correct map and values for error handling canonical format assigned?
9. Were the development standards (naming convention, folder layout, design patterns,
etc.) followed?
499
Boomi handles the extraction of updated records using the "Last Modified Date" approach by querying records where the LastModifiedDate is greater than the last recorded date captured and persisted during the previous sync. This allows the integration to retrieve only the records modified since the last sync, optimizing processing efficiency . This method offers advantages, such as simplifying integration design by avoiding the need for end-application customizations and making the integration stateless . Additionally, it avoids the complexity of maintaining field-level change detection, operating instead at the record level . However, it can present pitfalls, including resyncing all records if a single record fails, requiring logic to determine if a record has already been synced . Challenges also arise if mass updates occur, leading to excessive syncing, and if applications do not provide precise timestamps, potentially resulting in the unnecessary syncing of records modified earlier on the same day . Moreover, maintaining the state through captured timestamps can make troubleshooting cumbersome if discrepancies arise ."}
Boomi manages the combination and splitting of data through mechanisms such as batching and parallel processing. Batching involves moving data in larger blocks to improve efficiency and reduce the number of connector calls, as seen in the "Accumulate-then-Process" integration pattern where data is held until a processing threshold is met . Parallel processing is supported through the use of the Flow Control shape, which allows for multi-threading and splitting large data sets for concurrent processing across multiple nodes or threads. This design decision can enhance performance by processing data in parallel, although it is not automatic . These mechanisms positively impact performance by increasing processing speed and efficiency, while also improving data processing accuracy by reducing the likelihood of errors associated with high-volume data handling ."}
Boomi AtomSphere ensures effective monitoring by utilizing various strategies. For server infrastructure, it monitors CPU usage, memory, and disk I/O to detect anomalies and trending issues . For Atom application availability, it tracks the "atom.exe" OS process and uses AtomSphere platform email alerts to indicate communication issues, with additional insights from log monitoring tools to capture severe errors . It also uses JMX-compliant tools to track internal application health, monitoring JVM heap usage, thread count, and other metrics, ensuring anomalies and trends are observed for proactive management .
The 'return documents' shape in Boomi's data flow processes gathers completed documents from multiple branches and consolidates them before returning to the calling process, such as the main process from a subprocess call. It ensures that data from all branches is accounted for before progressing, thus enabling whole-process visibility and management . This shape effectively integrates branch document management by finalizing data flows through complete branch execution, gathering outputs collectively, and sending them on as a batch, adhering to data flow completion rules .
The 'flag field' strategy in Boomi's data synchronization processes involves extracting records based on a flag or status field, which is updated upon successful synchronization to prevent reprocessing. This approach is preferred due to its flexibility, as it allows users to control synchronization behavior by adjusting field values within the application . One advantage is that it facilitates syncing records independently, meaning if one fails, others can still be processed successfully. It also allows users to handle records in a self-service manner by modifying the flag field to retry or ignore individual records . Additionally, it keeps the integration stateless, as it does not rely on storing the last run date in the integration layer . However, if the source record lacks a suitable flag field, custom workflows may be necessary to initialize flag values, which can be a disadvantage. Furthermore, for ongoing changes, especially in "master data" like Customer records, it might need to be combined with other methods like the last modified date to ensure subsequent changes are captured . Compared to other methods like the incremental poll or change data capture, the flag field strategy provides more control and configurability, especially when synchronizing records just once, such as transactions ."}
Boomi's integration processes leverage business rule shapes to implement complex decision-making scenarios by allowing multiple conditions to be specified within a single shape, rather than using multiple individual decision shapes. This approach can streamline process design by reducing shape count, thus simplifying error handling, and allowing more nuanced, multi-conditional logic evaluation . This method is preferred when processes need to evaluate numerous criteria simultaneously and send documents down multiple logical branches without creating extensive process paths, which can complicate management and debugging .
The on-premise deployment model in Boomi AtomSphere uses a Boomi Atom, which is a lightweight Java application installed on a local machine within a network to access local resources without sharing data environments. It allows integration processes to be deployed close to local databases, file shares, or on-premise APIs, which can enhance performance and security by keeping data in-house . Conversely, the in-the-cloud model utilizes Boomi Atom Cloud for deployment, suitable for external, internet-connective processes. Molecules, which are groups of Atoms working together, offer enhanced load balancing, high availability, and fault-tolerance for on-premise setups. They are useful when processing needs exceed a single Atom's capacity or when redundancy is required to guard against outages .
Decision shapes in Boomi's data flow processes evaluate documents against a specific condition and direct them down either a true or false path based on the outcome. They send documents grouped either as true or false before proceeding to the next step . On the other hand, business rule shapes allow multiple conditions to be set and evaluate documents across several criteria, sending them down an accepted or rejected path accordingly. Documents are grouped once evaluated, with accepted documents processed first, followed by rejected ones .
Boomi AtomSphere allows for scaling up of system resources in local deployments by allocating more CPU and memory resources (super-sized Atoms), providing the ability to handle increased data through-put . Additionally, employing a Molecule, which groups Atoms into a single working unit, offers load balancing and high availability, making it particularly suitable for high-volume processing . In cloud deployments, leveraging Boomi Atom Cloud can provide similar scaling benefits without the need for local resources, translating into cost and management flexibility while maintaining robust performance .
When deciding between an Atom and a Molecule for a Boomi deployment, consider the scale and complexity of integration needs. An Atom is suitable for simpler setups with moderate processing needs and where local resources are sufficient to meet processing demands . In contrast, a Molecule is ideal for high availability, requiring fault tolerance, scalability, and load balancing, particularly necessary in scenarios where processes demand more robust business continuity or where downtime is unacceptable . Additionally, the existing infrastructure's capacity and management capabilities should align with Molecule's more intensive resource use and configuration .