The IOM Connector is a customization, comprised by 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 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 | 8.1 | 11.6+ | 4.7+ |
Below you can find some general technical and business information about the IOM Connector.
In a nutshell, Intershop Commerce Management 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 the IOM Connector. Orders will be exported to IOM only if the corresponding approval processes are completed. In addition, any information stored on 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 creating and managing 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 customization set f_iomconnector (IOM Connector) contains the following 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 considering 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.
A couple of IOM services, although not mandatory, are created in the context of a channel. This way you can ensure that the communication exchange between ICM and IOM is performed 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 endpoint that is different for each of them. In the table below you can see the endpoints, with IOM server host/address shown as a placeholder.
Service | Endpoint | IOM REST API | Note |
---|---|---|---|
IOM RMA Service | https://<iom-host>/rest/rma | RMA v2.10 | |
IOM Inventory Service | https://<iom-host>/servlets/services/ | ||
IOM Order Export Service | https://<iom-host>/rest/order-service | Order 2.0 | |
IOM Order History Service | https://<iom-host>/rest/order-service | Order 2.0 |
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 for IOM before any data is processed - either as input or output. To do so, you have to create a user in IOM with the required permissions 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 username/password combination.
If you use prepared demo data, consider these prepared values:
Consumer Web-Service | consumer_ws |
---|---|
Company | inSPIRED |
Shop(s) | inTRONICS |
inTRONICS Business |
Both systems exchange data, so they need a common basis 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 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). You may tweak the export settings on the configuration page, but we generally use on order creation as trigger.
The look and feel as well as the business processes in the standard ICM are 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-related and additional information is exported to IOM upon order placement. It is 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 Number |
Creation Date | Shop Order Creation Date |
InventoryReservationId (Custom Attribute) | Reservation ID |
Custom Attributes | Additional Attributes |
Invoice & Shipping Address | |
Location | |
Country Code | Country Code |
Main Division | District |
Postal Code | Post Code |
City | City |
Address Line 1 | Street |
Address Line 2 | Address Addition |
Address Line 3 | Address Addition |
Post Box | Post Box |
Contact | |
Phone Home | Phone |
Fax | Fax |
Phone Mobile | Mobile |
Receiver | |
Company Name 1 | Company Name |
Person | |
Honorific | Title |
Title | Salutation |
First Name | First Name |
Last Name | Last Name |
Shipping Bucket | |
Order Shipping Method ID | Shipping Method |
Custom Attributes | Additional Attributes |
Shipping Costs / Surcharges | Charges |
Line Item Information | |
Position | Number |
Quantity | Quantity |
Quantity Unit | Product Unit |
Custom Attributes | Additional Attributes |
Product Information | |
SKU | Number |
Display Name | Name |
EANCode (Custom Attribute) | EAN |
ISBN (Custom Attribute) | ISBN |
Price Information | |
(specific) Net price | Net |
(specific) Gross Price | Gross |
Tax Information | |
Amount | Amount |
Tax Class | Type |
Payment Information | |
Payment Service ID | Payment Method |
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, one might have two shipping methods DHL Express and DHL Standard in ICM, both of which are covered by the single carrier DHL.
Mapping the payment attributes supported by IOM (PaymentProviderOrderNo
, PaymentProviderRefNo
and PaymentProviderMerchantAccount
) highly depends on the specific payment service implementations. Therefore, it is not possible to provide a default payment mapping that covers all payment services. Instead, custom mappers can be integrated into the order export process via the extension point: type = IOMConnectorPaymentMappingExtension.class, id = "OrderMapper.bindPayment".
This feature is controlled by the IOM Order History Service. Once this service is configured and activated, the order status information in My Account | Order History is provided by IOM in real time. In order to reduce the number of internal requests between the systems, the IOM Order History Service supports the caching of the results for a short time interval (few seconds).
My Account | Order History
Order Details | Carrier Tracking Information
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 |
---|---|
initial order | INITIAL |
in validation | CHECKED NOT_CHECKED |
canceled | CANCELED NOT_CHECKED_DO_CANCEL |
checked | CHECKED |
approval required | ORDER_APPROVAL_REQUIRED DEPRECATED (from IOM version 2.15) |
in approval | DO_CREATE_APPROVALTRANSMISSION DEPRECATED (from IOM version 2.15) CREATED_APPROVALTRANSMISSION DEPRECATED (from IOM version 2.15) CHECK_ANNOUNCED |
waiting for approval | DO_APPROVE |
not approved | NOT_APPROVED |
approved | APPROVED |
assigning supplier | DO_ANNOUNCE |
will be canceled | NOT_ANNOUNCED |
assignment failed | NOT_ANNOUNCED_DO_CANCEL |
suppliers assigned | ANNOUNCED |
optimising supplier | DO_OPTIMIZE |
optimised | OPTIMIZED |
prepare response | DO_PREPARE_RESPONSE |
prepare documents | DO_PREPARE_DOCUMENT |
documents prepared | PREPARED_DOCUMENT |
ready to transmit | DO_CREATE_TRANSMISSION |
waiting for transmission | WAIT_FOR_TRANSMIT |
order transmission | CREATED_TRANSMISSION |
reservation commissioned | RESERVATED |
partly canceled | RESERVATION_PARTLY_RETURNED |
partly commissioned | PARTLY_COMMISSIONED |
partly shipped | PARTLY_COMMISSIONED_PARTLY_DISPATCHED COMMISSIONED_PARTLY_DISPATCHED |
partly returned | PARTLY_COMMISSIONED_PARTLY_RETURNED PARTLY_COMMISSIONED_PARTLY_DISPATCHED_PARTLY_RETURNED COMMISSIONED_PARTLY_DISPATCHED_PARTLY_RETURNED DISPATCHED_PARTLY_RETURNED |
transmitted | COMMISSIONED |
partly canceled/returned | COMMISSIONED_PARTLY_RETURNED |
shipped | DISPATCHED |
returned | RETURNED |
canceled | CANCELED |
export failed | (order transfer to IOM system failed, therefore no order status mapping available) |
For more information on the IOM order status models, see IOM Order Status Model.
The current status of the payment is very important for customers. After an order has been submitted, you can see information details in the Order History section. Click on View to show the 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 the percentage of the order that has already been paid. The total amount of money to be paid can be seen in the line Open Invoiced Amount. If an order is fully paid, the customer sees a green progress bar showing 100%, and the line Open Invoiced Amount states $ 0.
My Account | Order History | View
Order Invoice in IOM
The main task of the Inventory Service is to check the product availability status for a particular product in IOM. IOM Inventory Service works in real time, but at the same time it supports caching 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 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.
Note
Ensure to mark the checkbox Availability check on failure in the service configuration to guarantee that 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.
[2017-09-27 10:41:31.362 +0100] ERROR localhost ES2 appserver0 [inSPIRED-inTRONICS_Business-Site] [-] com.intershop.component.mvc.internal.inventory.InventoryServiceResolverImpl [] [Storefront] [-igcxxhSVC0cx0GZqycdxxgt17cb0TXN_T4xWB9E] [ESIFAFnLcgUBAAB_-1-07] "ESIFAFnLcgUBAAB_-1-07" Only one adapter allowed to be executable of InventoryService, but 2 adapters found. System Information
The customization image for the IOM Connector is available in Intershop's public repository.
Add customization to helm values:
icm-as: customizations: iom: repository: intershophub/icm-as-customization-iom-connector:<TAG> ... environment: CARTRIDGE_LIST: "ft_icm_as ft_iomconnector"
Before starting ICM with the IOM extension, ensure that all required services, the MSSQL database, and the web server are running.
CARTRIDGE_LIST
environment variable on the application server:version: "3.8" services: customize-iom: image: icm-as-customization-iom-connector:<TAG> volumes: - customizations:/customizations ... appserver: depends_on: - customize-iom ... environment: # ... more environment variables ... # Example cartridge list. Please adapt to your requirements. CARTRIDGE_LIST: "ft_icm_as ft_iomconnector" ...
When the application server is started, a DBPreparation process will run to configure the IOM service. Once this process is complete, you can log in to the back office. Under Services, the IOM service should be available for use.
To use the IOM service, configure the IOM service with the required credentials, Communication URLs, and other configuration parameters.
To customize the IOM Connector, it is necessary to create a customization project for the payment connector.
To add the customization image for the IOM Connector to your project, add it to the dependencies of your customization.
To achieve this, perform the following steps:
Register customization image in your main build.gradle.kts:
val icmDockerRegistry = "docker.tools.intershop.com/icm/intershophub" // specified in gradle.properties val demoDataVersion: String by project val iomConnectorVersion: String by project intershop { projectConfig { modules { // ... other modules ... register("iomconnector") { dependency.set("com.intershop.services.iomconnector:iomconnector:${iomConnectorVersion}") image.set("${icmDockerRegistry}/icm-as-customization-iom-connector:${iomConnectorVersion}") testImage.set("${icmDockerRegistry}/icm-as-customization-iom-connector:${iomConnectorVersion}") } // if the demo data is not necessary, the if statement can be removed entirely if(! demoDataVersion.isNullOrEmpty()) { register("demodata") { dependency.set("com.intershop.demodata:demodata:${demoDataVersion}") image.set("${icmDockerRegistry}/icm-as-customization-demo-data:${demoDataVersion}") testImage.set("${icmDockerRegistry}/icm-as-customization-demo-data:${demoDataVersion}") } } } } } subprojects { // ... other settings ... plugins.withType<JavaPlugin> { dependencies { // ... other dependencies ... cartridge(platform("com.intershop.services.iomconnector:iomconnector_versions:${iomConnectorVersion}")) implementation(platform("com.intershop.services.iomconnector:iomconnector_versions:${iomConnectorVersion}")) // if the demo data is not necessary, the if statement can be removed entirely if(! demoDataVersion.isNullOrEmpty()) { cartridge(platform("com.intershop.demodata:demo_versions:${demoDataVersion}")) implementation(platform("com.intershop.demodata:demo_versions:${demoDataVersion}")) } } } }
Add dependencies to IOM Connector to your project's feature definition (e.g., ft_myproject/build.gradle.kts):
dependencies { // ... more dependencies ... // IOM Connector (standard without demo) cartridgeRuntime "com.intershop.services.iomconnector:ft_iomconnector" // Optional: if you are creating a separate demo cartridge within your project and require demo data, you can include the demo features directly via runtime dependency // demodata // cartridgeRuntime "com.intershop.demodata:ft_demo" // IOM Connector with demo services // cartridgeRuntime "com.intershop.services.iomconnector:ft_iomconnector_demo" }
If you just want to set up the demo environment while developing without necessarily creating a dedicated demo cartridge you can simply add the required demo cartridges to your development config of your main build script
intershop_docker { // ... other configuration ... developmentConfig { appserverAsContainer = true if(! demoDataVersion.isNullOrEmpty()){ cartridgeList.set(setOf("ft_demo", "ft_iomconnector_demo", "ft_myproject")) testCartridgeList.set(setOf("ft_demo", "ft_iomconnector_demo", "ft_mytest")) } else { cartridgeList.set(setOf("ft_iomconnector", "ft_myproject")) testCartridgeList.set(setOf("ft_iomconnector", "ft_mytest")) } } }
Info
Note that all project configuration and dependencies are only necessary if you want to have a dedicated demo cartridge and/or wish to use the demo setup while developing locally. For a setup using docker compose or helm charts adding "ft_demo ft_iomconnector_demo" to the CARTRIDGE_LIST section is sufficient.
Define iomConnectorVersion in your gradle.properties:
... iomConnectorVersion = <TAG> ...
Use Gradle to manage the server instance by using the command gradlew startAS
Run gradlew tasks to see available tasks or check for further options.
For details on managing the artifacts, see:
Info
There is no configuration required to deploy the IOM Connector with Intershop Commerce Management.
For a proper interaction of the two systems (IOM and ICM), however, some configuration is necessary. For information on how to do this, refer to Guide - ICM and IOM Configuration Tasks.
Additionally, in order to get the IOM working with the ICM 11 demo scenario (inSPIRED storefront), specific demo content needs to be uploaded into IOM. For information on how to do this, please refer to Guide - IOM Basic Business Configuration | Product Import.
Do not use warranties. Intershop Order Management currently does not support service product types.
Do not use gift cards and certificates (limited tender payments). Intershop Order Management currently does not support multiple payments. Only a single so-called open tender payment method can be used.
The latest IOM versions support multiple shipping addresses. When the feature is enabled for ICM, there is an error printed into the log file when a new return request is created.
Caused by: java.lang.IllegalStateException: There might be multiple ship-to addresses. Call this method only if multiple shipments are not supported. at com.intershop.sellside.appbase.b2c.internal.order.OrderBOImpl.getCommonShipToAddressBO(OrderBOImpl.java:373)
The issue was located, has no influence on the functionality and needs to be resolved in ICM. If not required, you can disable the support of multiple shipping.
Migration to ICM 11
Services which are deprecated either in IOM or due to termination of SOAP support in ICM were removed:
IOM Order Service
IOM Order State Service
IOM Reverse Service
IOM Download Service