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 these entities.
IOM Connector | Intershop Commerce Management B2X | Intershop Order Management | |
---|---|---|---|
Version | 9.0 | 12.0+ | 4.7+ |
9.1 | 12.2+ | 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 are not exported to IOM until the appropriate approval processes have been completed. In addition, any information stored with the order, such as message to merchant, cost center, and project, is also exported.
As with any Intershop feature that connects ICM to another system, all features are implemented 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. However, these entities are different. In ICM, a sales organization can have multiple channels, while in IOM, a sales organization can 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.
Although not mandatory, some IOM services are created in the context of a channel. This ensures that the communication exchange between the ICM and the IOM takes place at the intended level.
The services mentioned in the previous chapter are implemented using 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 to IOM before any data is processed, either as input or output. To do this, you must create a user in the IOM with the appropriate permissions for the operations performed by the service. An easy way to ensure this is to assign the ShopServiceClient
role to the appropriate user. However, you can fine-tune the permissions for each service, as they require a username/password combination.
If you are using prepared demo data, you should 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 need to configure the order export (see Configure Order Export), which depends on an existing service configuration (see Configure IOM Order Service). You can 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 have been approved by the responsible user(s) in the customer's organization. All approval-related and additional information is exported to IOM when the order is placed. It is available 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 nature. While the sales channels in ICM have shipping methods that can be selected by the customer, in IOM the carriers that execute these shipping methods are listed. For example, you might have two shipping methods in ICM, DHL Express and DHL Standard, both of which are covered by a 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. 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 (a 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 as soon as they are updated in IOM. For example, any action taken in IOM, such as confirmation of delivery, will show up in ICM as soon as someone requests the Order History. The table below shows 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 payment status is very important for customers. After an order has been submitted, you can see 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.
When an order is fully paid, the customer will see a green progress bar showing 100% and the Open Invoiced Amount line will show $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 given product in IOM. The 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 containing the customer's desired product is opened, the Inventory Service queries IOM for an ATP (available to promise) status. If the product is available, the customer will see the Add to Cart button and a field to specify the desired quantity of the product. 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
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 the 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 during development, 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 needed 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, add ft_demo ft_iomconnector_demo
to the CARTRIDGE_LIST section.
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.
In addition, for the IOM to work with the ICM 12 demo scenario (inSPIRED storefront), specific demo content must be uploaded to the IOM. For information on how to do this, see 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 open tender payment method can be used.
The latest IOM versions support multiple shipping addresses. When this feature is enabled for ICM, an error is logged 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, does not affect functionality, and must be resolved in ICM. If not required, you can disable multiple shipping support.
Transmission of shipping cost taxes grouped by tax rate per bucket to IOM (ICM 12.2.0 feature)
Fix dependency issues; IOM Connector 9.0.1 could not be integrated into an ICM 12.0.0 based customization project
Migration to ICM 12