9 Implementing the Process Sales Order Fulfillment Business Flow

This chapter describes the Process Sales Order Fulfillment business flow and explains how the Oracle Communications Order to Cash Integration Pack for Siebel customer relationship management (Siebel CRM), Oracle Communications Order and Service Management (OSM), and Oracle Communications Billing and Revenue Management (BRM) (the integration) implements the business flow using Siebel CRM interfaces, communications industry-specific Oracle Application Integration Architecture (Oracle AIA) components, and integration services. It also describes how the integration supports order priorities and multiple price lists.

Process Sales Order Fulfillment Business Flow Overview

The following Pre-Built Integration options enable the Process Sales Order Fulfillment business flow:

  • Oracle Communications Order to Cash for Siebel CRM, OSM, and BRM Pre-Built Integration option

  • Oracle Communications Order to Cash for Siebel CRM and OSM Pre-Built Integration option

The Oracle Communications Order to Cash for Siebel CRM and BRM Pre-Built Integration option includes a Test Orchestration Process (TOP) to test the ready-to-use order flow. You must replace the TOP with your own order management system. See Oracle Application Integration Architecture Installation and Upgrade Guide for Pre-Built Integrations for more information.

The Process Sales Order Fulfillment business flow supports the following integration flow:

  • Submitting Orders from Siebel CRM to OSM

Submitting Orders from Siebel CRM to OSM Integration Flow

This integration flow uses the following services:

  • ProcessSalesOrderFulfillmentSiebelCommsJMSConsumer

  • ProcessSalesOrderFulfillmentSiebelCommsReqABCSImpl

  • ProcessSalesOrderFulfillmentOSMCFSCommsJMSProducer

Figure 9-1 illustrates the Submitting Orders from Siebel CRM to OSM integration flow.

Figure 9-1 Submitting Orders from Siebel CRM to OSM Integration Flow Sequence Diagram

This image is described in the surrounding text.

The integration submits orders from Siebel CRM to OSM as follows:

  1. A Siebel CRM user submits a new order.

  2. Siebel CRM creates an application business message (ABM) called SalesOrderABM with all the sales order details and drops the ABM into the AIA_SALESORDERJMSQUEUE queue.

  3. The ProcessSalesOrderFulfillmentSiebelCommsJMSConsumer service picks up the ABM and passes it on to the ProcessSalesOrderFulfillmentSiebelCommsReqABCSImpl service.

  4. ProcessSalesOrderFulfillmentSiebelCommsReqABCSImpl checks the values of the handleLargeOrderEnabled and numOrderLinesInLargeOrder properties in the AIAConfigurationProperties.xml file and does the following:

    • If the value of handleLargeOrderEnabled is true and the number of order lines is less than the value of numOrderLinesInLargeOrder, or if the value of handleLargeOrderEnabled is false, ProcessSalesOrderFulfillmentSiebelCommsReqABCSImpl transforms the ABM into an enterprise business message (EBM) called ProcessSalesOrderFulfillmentEBM and sends it to the ProcessSalesOrderFulfillmentOSMCFSCommsJMSProducer service.

    • If the value of handleLargeOrderEnabled is true and the number of order lines is greater than or equal to the value of numOrderLinesInLargeOrder, ProcessSalesOrderFulfillmentSiebelCommsReqABCSImpl does the following:

      1. Splits the large SalesOrderABM into mini ABMs. Each mini ABM contains no more order lines than the value of the numOrderLinesInMiniABM configuration property, unless those order lines are part of a Siebel CRM promotion.

        Order lines that are part of a promotion always belong to the same mini ABM, even if this ABM has more order lines than the value of numOrderLinesInMiniABM.

      2. Transforms the mini ABMs into mini EBMs.

      3. Merges the mini EBMs into one ProcessSalesOrderFulfillmentEBM and sends it to ProcessSalesOrderFulfillmentOSMCFSCommsJMSProducer.

    The Siebel CRM order structure does not support multiple charge types for a single order line, but the order enterprise business object (EBO) structure does. For this reason, the order lines referencing a complex product of billing type Subscription and its component products of billing type Event (multi-event billing products) are transformed into a single EBO order line referencing a product with multiple charge types.

  5. ProcessSalesOrderFulfillmentOSMCFSCommsJMSProducer wraps the EBM into OSM CreateOrder message format and enqueues the CreateOrder message into the AIA_CRTFO_IN_JMSQ.

    The CreateOrder message is then wrapped in a SOAP envelope. OSM expects the following additional JMS properties to be set with the JMS payload:

    • JMSPriority

    • URI -- /osm/wsapi

    • _wls_mimehdrContent_Type -- text/xml; charset=utf-8

  6. The store and forward mechanism forwards the CreateOrder message from the AIA WebLogic server to the OSM WebLogic server.

    OSM receives the CreateOrder message and decomposes the order, creating EBMs to send for fulfillment and provisioning.

See "Understanding the Process Integration for Order Lifecycle Management" for more information on how OSM processes the order.

Defining Transaction Boundaries and Recovery Details

For this flow, there is one transaction boundary. Table 9-1 describes the transactions involved, the database operations, and what actions to take in case of an error.

If order submission from Siebel CRM causes a system or business error, any further order to the account does not get processed until the error is fixed. All order submissions for that account are locked in the sequencer table. If the error is a business error then the message must be removed from the sequencer table and if the error is a system error then the message must be resubmitted.

See "Using Error Type to Control Response to Order Fallout" for more information on system and business errors.

The following services are involved:

  • ProcessSalesOrderFulfillmentSiebelCommsJMSConsumer

  • ProcessSalesOrderFulfillmentSiebelCommsReqABCSImpl

  • ProcessSalesOrderFulfillmentOSMCFSCommsJMSProducer

Table 9-1 Transaction Boundaries and Recovery Details

Transaction DB Operations In Case of Error Recovery

ProcessSalesOrderFulfillmentSiebelCommsJMSConsumer passes the Siebel CRM message to ProcessSalesOrderFulfillmentSiebelCommsReqABCSImpl, which invokes transformation logic to convert that Siebel CRM message into an EBM. The EBM is then routed to ProcessSalesOrderFulfillmentOSMCFSCommsJMSProducer.

AIA cross-reference entries.

Rollback cross-reference transactions.

Rollback JMS message to AIA_SALESORDERJMSQUEUE_ErrorQ

Resubmit the order from either AIA_SALESORDERJMSQUEUE_ErrorQ or from Siebel CRM.


See "Configuring Oracle AIA Processes for Error Handling and Trace Logging", Configuring Fault Policies to Not Issue Rollback Messages in Oracle Fusion Middleware Developer's Guide for Oracle Application Integration Architecture Foundation Pack for more information about rollback procedures.

Supporting Order Priorities

Customers can add other order priority values in Siebel CRM. Additionally, customers can use the SWI_ORDER_JMS_PRIORITY mapping, which maps these string values to integers.

You are required to set up some JMS compatibility properties on the Siebel CRM queue and to make manual changes to seeded priority values.

See "Modifying the Order Priority Mapping" in Siebel Order Management Guide Addendum for Communications, Employee Asset-Based Ordering for more information about priority values.

The integration supports 10 priority values, 0-9, as dictated by JMS queuing technology. You can extend Siebel CRM to support priority values other than the four that are supported when delivered.

See the Siebel CRM product documentation for Lists of Values for more information.

These steps describe how the integration handles order priorities:

  1. When the order is submitted, Siebel CRM sets the JMS Priority message in the JMS headers and also populates the following field: ListOfSWIOrderIO/SWIOrder/OrderPriority.

  2. Based on the priority, the ProcessSalesOrderFulfillmentSiebelCommsJMSConsumer consumes the message and routes it to the ProcessSalesOrderFulfillmentSiebelCommsReqABCSImpl. This process does a lookup on the SALESORDER_PRIORITY domain value map (DVM) and populates the ProcessSalesOrderFulfillmentEBM/DataArea/ProcessSalesOrderFulfillment/FulfillmentPriorityCode.

  3. The ProcessSalesOrderFulfillmentOSMCFSCommsJMSProducer looks for the FulfillmentPriorityCode and does a lookup on SALESORDER_PRIORITY DVM for the JMS column and populates the priority in the JMS Headers in JMSPriority field.

  4. The store and forward (SAF) mechanism honors the JMS priority and picks up the message with high priority first and passes it to OSM CFS.

  5. OSM CFS and OSM Provisioning honor the priority through internal mechanisms. Higher priority orders are fulfilled and provisioned first, followed by lower priority orders.

  6. OSM is expected to maintain the priority of the orders and must populate the FulfillmentPriorityCode element in all outbound messages.

  7. The population of JMS priority from the FulfillmentPriorityCode is done using the BPEL assign activity as follows:

    Look up the DVM column for priority value and copy it to the JMSPriority field in JMS headers:

    <assign>
      <copy>
        <from expression="orcl:lookup-dvm('oramds:/apps/AIAMetaData/dvm/SALESORDER_PRIORITY.dvm','COMMON',bpws:getVariableData('priority_value'),'JMS',null)"/>
        <to variable="msg_priority"/>
      </copy>
      <copy>
        <from variable="msg_priority"/>
        <to variable="jmsHeaders" part="outboundHeader" query="/ns5:JMSOutboundHeadersAndProperties/ns5:JMSOutboundHeaders/ns5:JMSPriority"/>
      <copy>
    </assign>
    
    • jmsHeaders is a variable which is of type JMSOutboundHeadersAndProperties.

    • msg_priority is a string variable.

    The ProcessSalesOrderFulfillmentOSMCFSCommsJMSProducer follows this logic to populate the JMSPriority.

Other producers need not do a DVM lookup since the priority value is an integer and is directly populated in the EBMs in the FulfillmentPriorityCode. The integration can use this value to populate the JMS priority. OSM and Oracle AIA, unlike Siebel CRM, follow the same values for JMS priorities.

Supporting Multiple Price Lists

The Process Sales Order Fulfillment business flow supports multiple price lists on orders as follows:

  1. A Siebel CRM user submits an order with separate price lists for the order lines. Siebel CRM creates an application business message (ABM) containing the order information, including the price lists specified for the order header and order lines. While creating the ABM, Siebel CRM automatically populates empty price list order lines for the components of customizable products with the price list from the customizable product order line.

  2. Siebel CRM drops the ABM into the AIA_SALESORDERJMSQUEUE queue.

  3. The ProcessSalesOrderFulfillmentSiebelCommsJMSConsumer service receives the ABM and passes it to the ProcessSalesOrderFulfillmentSiebelCommsReqABCSImpl service.

  4. The ProcessSalesOrderFulfillmentSiebelCommsReqABCSImpl service looks up the Siebel CRM row ID in the PRICELIST domain value map (DVM) and populates the ProcessSalesOrderFulfillmentEBM message with the corresponding price list information.

  5. The ProcessSalesOrderFulfillmentSiebelCommsReqABCSImpl service passes the ProcessSalesOrderFulfillmentEBM message to the ProcessSalesOrderFulfillmentOSMCFSCommsJMSProducer service.

  6. The ProcessSalesOrderFulfillmentOSMCFSCommsJMSProducer service wraps the ProcessSalesOrderFulfillmentEBM message in CreateOrder message format and drops it into the AIA_CRTFO_IN_JMSQ queue.

  7. OSM receives the CreateOrder message and transforms it into a ProcessFulfillmentOrderBillingEBM message. During this transformation, OSM populates empty price list order lines with the price list from the order header.

  8. OSM passes the ProcessFulfillmentOrderBillingEBM message on for billing. See "Bill Fulfillment Order Business Flow Overview" for information about how this message is used.

Siebel CRM Interfaces

The Process Sales Order Fulfillment business flow uses the following Siebel CRM interface:

  • SISOMBillingSubmitOrderWebService

This is the outbound Siebel CRM web service used to submit orders.

See Siebel Order Management Guide Addendum for Communications for more information about web services.

Industry Oracle AIA Components

The Process Sales Order Fulfillment business flow use these industry components:

  • SalesOrderEBO

  • ProcessSalesOrderFulfillmentEBM

The industry enterprise business object (EBO) and EBM XSD files are located here: $AIA_HOME/AIAMetaData/AIAComponents/EnterpriseObjectLibrary/Industry/Communications/EBO/

The industry EBS WSDL files are located here: $AIA_HOME/AIAMetaData/AIAComponents/EnterpriseBusinessServiceLibrary/Industry/Communications/EBO/

For detailed documentation of individual EBOs and EBMs, click the AIA Reference Doc link on EBO and EBM detail pages in the Oracle Enterprise Repository (OER).

EBOs can be extended, for instance, to add new data elements. These extensions are protected and remain intact after a patch or an upgrade, so long as the extensibility guidelines are followed.

See Oracle Fusion Middleware Developer's Guide for Oracle Application Integration Architecture Foundation Pack for more information about:

  • Configuring and using OER as the Oracle SOA Repository to provide the AIA Reference doc link

  • Extending existing schemas and EBOs

Integration Services

The following services are delivered with the Process Sales Order Fulfillment business flow:

  • ProcessSalesOrderFulfillmentSiebelCommsJMSConsumer

  • ProcessSalesOrderFulfillmentSiebelCommsReqABCSImpl

  • ProcessSalesOrderFulfillmentOSMCFSCommsJMSProducer

ProcessSalesOrderFulfillmentSiebelCommsJMSConsumer

The ProcessSalesOrderFulfillmentSiebelCommsJMSConsumer service is implemented as a Mediator process.

This consumer listens over the AIA_SALESORDERJMSQUEUE into which Siebel CRM enqueues the simple object access protocol (SOAP)-wrapped Siebel CRM Order application business message (ABM). This consumer dequeues the messages from this queue, unwraps the message from the SOAP envelope, and routes the Siebel CRM ABM to the ProcessSalesOrderFulfillmentSiebelCommsReqABCSImpl.

ProcessSalesOrderFulfillmentSiebelCommsReqABCSImpl

ProcessSalesOrderFulfillmentSiebelCommsReqABCSImpl is a business process execution language (BPEL) process with a single operation: Initiate.

This service is invoked when an order is submitted in the Siebel CRM application. It converts the Siebel CRM ABM into the sales order EBM.

Before converting the ABM into an EBM, this service checks whether it should use the Process Large Order sub-flow. The service uses the Process Large Order sub-flow if the handleLargeOrderEnabled property is set to true and the number of order lines in the ABM is greater than or equal to the value of the numOrderLinesInLargeOrder property. In the Process Large Order sub-flow, ProcessSalesOrderFulfillmentSiebelCommsReqABCSImpl does the following:

  1. Splits the ABM into mini ABMs

  2. Transforms the mini ABMs into mini EBMs

  3. Merges the mini EBMs into one sales order EBM

While transforming the ABM or mini ABMs, the service does the following:

  • Looks up the following cross-reference values to find common IDs to appropriately populate the sales order EBM:

    • customer account ID

    • billing profile ID

    • pay profile ID

    • organization ID

    • product or discount ID

    • promotion group member ID

    • -price list common ID (from the PRICELIST DVM)

    If no cross-reference values exist for promotions and service bundles, the service creates ones.

  • Creates the following cross-reference values between Siebel CRM values and generated common values:

    • order ID

    • order line ID

    • installed product ID

    • account ID

    • bill profile ID

    • pay profile ID

    • contact ID

    • address ID

    • balance group ID

    • promotion group member ID

    • asset ID

  • Sets the OrderSubject attribute to CUSTOMER.

  • Records any payment IDs on the order in the SalesOrderReceivedPayment section of the EBM.

See Table 25-2, "Order Lifecycle Management Cross-References" for more details about the cross-references created by this service.

ProcessSalesOrderFulfillmentOSMCFSCommsJMSProducer

The ProcessSalesOrderFulfillmentOSMCFSCommsJMSProducer is a BPEL process that has a JMS Adapter Service, which enqueues the message ProcessSalesOrderFulfillmentEBM into AIA_CRTFO_IN_JMSQ after wrapping it into SOAP envelope (for putting WS-security information for OSM) and OSM's CreateOrder envelope.

This service has one operation: ProcessSalesOrderFulfillment. It takes the ProcessSalesOrderFulfillmentOSMCFSCommsJMSProducerRequestMessage as input.