The IOM Connector is a set of cartridges that allows data exchange and communication between Intershop Commerce Management and Intershop Order Management. It is an extension (or "service") module for the Intershop Commerce Management. As such, it requires a base version against which it can be deployed. The table below describes the version dependencies between those entities.
IOM Connector | Intershop Commerce Management B2X | Intershop Order Management | |
---|---|---|---|
Version | 6.0 | 7.10 | 2.9 |
Below you can find some general information about the IOM Connector - both technical and business.
In a nutshell, Intershop set up with IOM Connector affects the following:
Intershop Commerce Management B2X features such as order approval or additional order information are fully compatible with IOM Connector. Orders will be exported to IOM only if the corresponding approval processes are completed. In addition, any information stored to the order - such as message to merchant, cost center and project - will be exported as well.
As with any Intershop feature that connects ICM to another system, all features are realized using the Managed Services framework.
Intershop recommends to create and manage the IOM Services in the context of channels.
Term | Description |
---|---|
ICM | The abbreviation for Intershop Commerce Management |
IOM | The abbreviation for Intershop Order Management |
The component set f_iomconnector (IOM Connector) contains the following cartridges:
There are also a few test and development cartridges.
The IOM Connector is set up alongside a standard ICM installation. It adds additional cartridges that define the following managed services:
Both ICM and IOM follow the same hierarchical concept of organizations that have expandable entities. These entities differ, however. In ICM one sales organization may have multiple channels, while in IOM one sales organization may have multiple shops.
Intershop recommends to consider channels and shops as synonyms in the context of this document and your setup. Although not the same, they are in close relation to each other.
As mentioned before, a couple IOM Services, although not mandatory, are created in the context of channel. This way you can ensure that the communication exchange between ICM and IOM is realized on the intended level.
The services mentioned in the previous chapter are realized with web services. They exchange data between the two systems in a specific format, but they also need to be configured. Web services require an end point that is different for each of them. In the table below you can see the end points, with IOM server host/address shown as a placeholder.
Service | End point |
---|---|
IOM Order Service | https://<iom-host>/webservices/OrderService/v1.2 |
IOM Order State Service | https://<iom-host>/webservices/OrderStateService/v1.0 |
IOM Download Service | https://<iom-host>/webservices/DownloadService/v1.0 |
IOM Reverse Service | https://<iom-host>/webservices/ReverseService/v1.0 |
IOM Inventory Service | https://<iom-host>/servlets/services/ |
When doing the configuration mentioned in the step above, you must also specify a shop. Usually, a channel in ICM represents a shop in IOM.
Consumers of the services must authorize themselves to IOM before any data is processed - either as input or output. To realize this, you must create a user in IOM with permissions necessary for the operations performed by the service. An easy way to ensure this is to assign the ShopServiceClient
role to the corresponding user. However, you may fine-tune the permissions for each service as they need a user name/password combination.
Should you use prepared demo data, here are some prepared values:
Consumer Web-Service | consumer_ws |
---|---|
Company | inSPIRED |
Shop(s) | inTRONICS |
inTRONIC Business |
Both systems exchange data so they need a common ground as a base for this communication. The following table shows the mappings between IOM and ICM:
Identifier | ICM | IOM |
---|---|---|
Product | Channel's product SKU | Shop product ID |
Customer | Customer No. | Shop customer number |
Order | Order document No. | Shop order number |
These identifiers must be identical for each item in both systems. For example, if an order with a line item that has the SKU 00910 is placed and is then exported to IOM, the web services layer will report an error if the product with this product ID is not present in IOM.
The IOM Connector provides instruments that route any order placed from ICM to IOM. To use this feature, you must configure the order export, see Configure Order Export, which depends on an existing service configuration, see Configure IOM Order Service. As mentioned before, on the configuration page you may tweak the export settings, but we generally use on order creation as trigger.
The look and feel and the business processes in the standard ICM is not altered in any way, but placed orders are routed to IOM.
Order confirmation in ICM
Order details in IOM
Order approval and additional order information - works out of the box with order export to IOM. Orders are exported to IOM once they are approved by the responsible user(s) in the customer's organization. All approval and additional information details are exported to IOM upon order placement. They are accessible in the Attributes section.
The table below lists the mapping of data exchanged between ICM and IOM.
ICM | IOM |
---|---|
Order details | |
Order Document Number | Shop Order ID |
Creation Date | Sales Information / Order |
Payment Method | Payment Method |
Tax Rate | Tax Rate |
Order total | Order total |
Shipping Information | |
Shipping method ID | Carrier |
Invoice & Shipping Address | |
Company | Company |
Salutation | Salutation |
First Name | First Name |
Last Name | Last Name |
Address 1 | Street |
Address 2 | Address Suffix 1 |
Address 3 | Address Suffix 2 |
ZIP/Postal Code | ZIP/Postal Code |
City | City |
Country | Country |
Phone | Phone |
Line Item Information | |
Product SKU | Shop product ID |
Quantity | Quantity |
Tax Rate | Tax Rate |
Price | Price |
Note
Shipping and carriers are different in their nature. While the sales channels in ICM have shipping methods which are selectable by the customers, IOM has carriers listed that execute those shipping methods. For example, in the ICM one might have two shipping methods DHL Express and DHL Standard both of which are covered by single carrier DHL.
This feature is governed by the IOM Order State Service. Once this service is configured and activated, the order status information in My Account | Order History are provided by the IOM in real time.
My Account | Order History
Orders of a Customer in IOM
Real time means that order statuses are updated the moment they are updated in IOM. Thus any action taken in IOM, for example Confirmation of delivery, will be shown in ICM as soon as someone requests the Order History. The table below lists the mapping between order statuses in the two systems.
Intershop Commerce Management | Intershop Order Management |
---|---|
transmitted | commissioned |
shipped | shipped |
in validation | check failed |
returned | returned |
The current status of the payment is very important for our customers. After an order is submitted, you can see information details in the Order History section. Click on view to show Order Details page with the Payment panel. This panel contains information about the payment status (Paid, Part Paid, Not Paid) and a progress bar:
Paid | The order is completely paid. |
Part Paid | The order is partially paid. |
Not Paid | The order is not paid. |
The progress bar shows what percentage of the order is already paid. The total amount of money to be paid can be seen in the line Open Invoiced Amount. If an order is completely paid, the customer sees a green progress bar with 100%, and the line Open Invoiced Amount states $ 0.
My Account | Order History | View
Order Invoice in IOM
Customers are able to trigger returns of orders. Once the order is shipped, and its delivery confirmation is tracked in IOM, its status is changed to shipped. From the Order History page, every order that has been shipped can be triggered for return by clicking the Return link. For each individual item, a return quantity and a reason can be specified. Return reasons are requested from IOM. For convenience, the ICM provides a drop-down list to select a return reason.
Note
Activate service
The IOM Reverse Service needs to be configured and activated to use the Order Return feature.
Once a return was requested the return slip can be download or a return slip can be directly printed. This return slip can be downloaded from the link shown on the Prepare Return Documents page.
Note
Activate service
The IOM Download Service needs to be configured and activated to download return documents.
Applicable return reasons are available via REST API - see IOM Connector 4.0 - REST API - Order Return Reasons.
This feature allows to display attached documents (note / information) on the Order Details page. The Order Document retrieval from the IOM has a cache handling mechanism that preserves the information for a given time interval. The ICM's Order Details page render process requests the IOM to report the number of documents attached to the very order. The badge on the right hand side of the View All link indicates the number of documents. Click View All to display a list of documents. The list shows information such as note type (invoice, credit , etc.), note creation date/time and a link for the document download.
Note
Information about an order's documents are also available via the IOM Connector REST API. For more detailed information please refer to:
The main task of the Inventory Service is to check the product availability status for a particular product in the IOM. IOM Inventory Service works in real time, but at the same time it supports the caching of the results for a given time interval (e.g., 5 seconds). When the page with the customer's desired product is open, the Inventory Service requests the IOM for an ATP (available to promise) status. If the product is available, the customer will see the button Add to Cart and a field to specify the desired quantity of the product. On the other hand, if the product is not available, a button with the text Notify me when available appears. Ensure to mark the checkbox Availability check on failure in the service configuration to guarantee the product availability will be at least checked in the local database, in case of a communication problem with the IOM system.
Note
Deactivate SimpleInventoryService
The SimpleInventoryService has to be deactivated if IOM Inventory Service should be used.
The IOM Connector release package is available via Intershop's public Artifactory server. To add it to your release the following preconditions must be met: Unzip and copy the multiproject contents to your project directory <projectHome>/projects/intershop-project /<myCustomComponentset>. Long path names on Windows On Windows certain tools have trouble dealing with path names longer than 255 characters. When in doubt, please use 7-Zip 15.12 to uncompress the source packages. Change build.gradle of selected cartridges to reference public libraries and implement customizations. Change build.gradle of your project. Re-publish your multiproject. The public delivery contains the exemplary assembly inspired-connector.zip. It can easily be used to get a first look. Note The build.gradle is adjusted from the b2x assembly. Please check if all dependencies (incl. versions) are correct for the version of your assembly. For a production assembly add the IOM Connector by doing the following steps: Open the file build.gradle of your assembly, add a list of IOM Connector's cartridges in In the same build.gradle file add the following two cartridges to Alternatively, you can create a new assembly inheriting from an Intershop Commerce Management-based assembly. Exclude conflicting versions from the assembly build. Create your ivy IOM Connector file for the binaries. Define a unique order sequence. Both Intershop Commerce Management and Intershop Order Management assign an unique identifier to any order placed in the corresponding system. These identifiers are often referred to as "order document number" or "order ID". In order to have a seamless integration between the two systems you must synchronize these identifiers. Since ICM has the "leading role" as the orders are created and submitted from customers in the web shop, system administrators need to apply an additional configuration to the order number generation. After creating and appropriately configuring the assembly, you must deploy it to the intended target environment. You must run a database initialization to use the IOM connector. DBInit is required for the following cartridges: To execute full database initialization use: To execute the database initialization used for a selected set of cartridges: For details about managing assembly artifacts, see:Precondition
Refer to Cookbook - Setup CI Infrastructure and to Concept - Continuous Delivery Tools (valid to 7.10) for basic information about Continuous Integration.
Knowledge of how to deploy to a test or production environment are required. The IOM Connector contains parts that are distributed as binary artifacts (see iomConnectorCartridges
in the code example of section Configure the Assembly) and parts that are distributed as source (see productionCartridges
in the code example of section Configure the Assembly), so they can be copied and modified easily in a project. You can retrieve the source cartridges from your repository server com.intershop.public.source.f_iomconnector
http://<your-reposerver:port>/nexus/content/repositories/components/com.intershop.public.source/f_iomconnector/<version>/zips/f_iomconnector-zip-src-<version>.zip
Cartridge Reference to change New line ac_iomconnector_orderhistory
compile project(':ac_iomconnector_common')
compile group: 'com.intershop.services.iomconnector', name: '
ac_iomconnector_common
'compile project(':ac_iomconnector_order')
compile group: 'com.intershop.services.iomconnector', name: '
ac_iomconnector
'_order
compile group: 'com.intershop.responsive', name: 'app_sf_responsive'
compile project(':app_sf_responsive')
as_iomconnector
compile project(':ac_iomconnector_common')
compile group: 'com.intershop.services.iomconnector', name: '
ac_iomconnector_common
'compile project(':ac_iomconnector_order')
compile group: 'com.intershop.services.iomconnector', name: '
ac_iomconnector
'_order
compile group: 'com.intershop.responsive', name: 'as_responsive_b2b'
compile project(':as_responsive_b2b')
demo_iomconnector
compile project(':ac_iomconnector_common')
compile group: 'com.intershop.services.iomconnector', name: '
ac_iomconnector_common
'
Add the provider of the IOM-Connector to the section versionRecommendation as ivy dependency.versionRecommendation {
provider {
// can be activated with a special version
ivy('IOMconnector', 'com.intershop.services.iomconnector:iomconnector-filter'){}
…
}
}
Configure the Assembly
Preview Assembly
Production Assembly
assembly
directive and include this list into the assembly's cartridges:assembly {
...
cartridges {
def iomConnectorCartridges = [
'ac_iomconnector_common',
'ac_iomconnector_order',
'ac_iomconnector_inventory',
'init_iomconnector'
]
include (*(iomConnectorCartridges.collect {"com.intershop.services.iomconnector:$it"}), in:[development, test, production])
def productionCartridges =
[
'<your-cartridge1>',
'<your-cartridge2>',
'ac_iomconnector_orderhistory',
'as_iomconnector',
'demo_iomconnector'
]
include (*(productionCartridges.collect {"<your-assembly-group>:$it"}), in:[development, test, production])
order = listFromAssembly('<your-assembly>') + storefrontCartridges + iomConnectorCartridges + productionCartridges + initCartridges + developerCartridges + testCartridges
}
...
}
assemblyBuild.database
.assembly {
...
}
assemblyBuild {
database {
inherit('<your-assembly>')
initCartridges =
[
'ac_iomconnector_common',
'demo_iomconnector',
'init_iomconnector'
]
}
}
Therefore add the following lines at the end of the build.gradle file of your assembly. If you already have defined configurations.all
directive just enrich it with the excludes listed below.configurations.all {
exclude group: 'stax', module: 'stax-api'
}
The file name is .ivyIOMconnector.version
6.0.3
The IOM Connector requires an order number generation that provides unique order numbers for both systems.
If you are deploying IOM Connector with ICM and IOM anew, in other words you have no orders placed in both systems, it is safe to skip this step. However, you may want to define unique order sequence just in case. All you need to do is to negotiate a starting number with all parties involved and then add a deployment step that alters /share/system/config/cluster/database.properties file, namely the property intershop.sequence.startsWith
.Deploy the Assembly
For details about deploying an assembly, see Recipe: Run the Deployment (Initial Installation / Upgrade / Downgrade)Initialize the Database
gradlew dbinit
dbinit -t=ac_iomconnector_common,demo_iomconnector,init_iomconnector
References
In order to deploy the IOM Connector with the Intershop Commerce Management, you do not need to configure anything.
For a proper interaction of the two systems (IOM and ICM), however, some configuration is necessary. For more detailed information on how to do this, refer to Guide - ICM and IOM Configuration Tasks (valid to 2.17).
Additionally, in order to get the IOM working with the ICM 7.10 demo scenario (inSPIRED storefront) specific demo content needs to be uploaded into the IOM. The description and the content can be found here: Guide - IOM Demo Data Setup for IOM Connector
Do not use warranties. Intershop Order Management currently does not support service product types.
Both Intershop Commerce Management and Intershop Order Management assign an unique identifier to any order placed in the corresponding system. These identifiers are often referred to as order document number or order ID. In order to have a seamless integration between the two systems you must synchronize these identifiers. Since ICM has the "leading role" as the orders are created and submitted from customers in the web shop, system administrators need to apply an additional configuration to the order number generation.
Intershop Commerce Management's server(s) should be turned off before the steps below are executed.
Go to <server-installation-dir>/local/bin and execute environment.<bat|sh>.
./iomconnector/server/local/bin/environment.sh
Go to <server-installation-dir>/local/tools/misc and execute ant
export-sequence-info -f database.xml
.
[/iomconnector/server/local/tools/misc]# ant export-sequence-info -f database.xml Buildfile: /iomconnector/server/local/tools/misc/database.xml dbenvironment.environment.decrypt: dbenvironment.environment: environment: export-sequence-info: [sql] Executing commands [sql] 1 of 1 SQL statements executed successfully [sql] Executing commands [sql] 1 of 1 SQL statements executed successfully log: [echo] [02/17/2016 03:20:56 PM] The used enfinity specific sequence informations were successfully exported to file 'sequences-info.properties'. BUILD SUCCESSFUL Total time: 2 seconds
In <server-installation-dir>/local/tools/misc open the newly generated file called sequences-info.properties.
It looks like:
#,LAST_NUMBER,INCREMENT_BY,SEQUENCE_NAME,DOMAIN_SPECIFIC,DOMAINNAME,IDENTIFIER #,51,10,SQHHBAQDGBYQAAAAFUCBLM4M0_,TRUE,inSPIRED-inTRONICS,SellerOrder.DocumentNo.NfsKAB1PpEUAAAFTFT89kGWR # Largest last_number is: SellerOrder.DocumentNo.NfsKAB1PpEUAAAFTFT89kGWR - inSPIRED-inTRONICS #intershop.sequence.blockSize = 10 #intershop.sequence.startsWith = 51
Memorize or write down the number of intershop.sequence.startsWith
and intershop.sequence.blockSize
.
Define unused order sequence.
Note
It is advised to just pick the bigger number between biggest order ID taken from IOM's orders list and the intershop.sequence.startsWith
taken at step 3. You may also add a date prefix to the order number, or put a unique machine identifier, as long as it contains only numbers.
In this example, ICM's order ID is 51 and IOM's - 20160128017063. The bigger one is 20160128017063. So add the value of intershop.sequence.blockSize
to it - 20160128017063 + 10 = 20160128017073 - and then add 1. The end result is 20160128017074.
Remove #
from line intershop.sequence.startWith=
and change its value to the unused order sequence determined in step 7.
################################################################################ ## ## Series (Sequence) Creation Options ## ## ## series numberPattern settings ## #intershop.sequence.numberPattern=00000000 ## ## blockSize - "increment by <n>" ## startsWith - "start with <n>" ## cacheSize - "cache <n>" or "nocache" if <n> = 0 ## orderFlag - "order" if true or "noorder" if false ## #intershop.sequence.blockSize=50 intershop.sequence.startsWith=20160128017074 #intershop.sequence.cacheSize=0 #intershop.sequence.orderFlag=true
There are no fixed defects.
Also see IOM Connector 4.0 - REST API - Get List of Documents of the Order for more information.
Key | Summary |
---|---|
IOM-9196 | Added dispatched carriers info to the order state report |
IOM-9020 | Show all types of documents in myAccount/ extend the REST API |