9 Implementing the Process Sales Order Fulfillment Business Flow

This chapter explains how the Oracle Application Integration Architecture (Oracle AIA) Oracle Communications Order to Cash Integration Pack (the integration) implements the Process Sales Order Fulfillment business flow. It also describes how the integration supports order priorities and multiple price lists.

About the Process Sales Order Fulfillment Business Flow

The following pre-built integration options enable the Process Sales Order Fulfillment business flow:

  • Order to Cash for Oracle Communications Order and Service Management (OSM)

  • Order to Cash for Siebel CRM

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

  • Submitting Orders from Siebel CRM to OSM

About the Submitting Orders from Siebel CRM to OSM Integration Flow

This integration flow uses the following services:

  • ProcessSalesOrderFulfillmentSiebelCommsJMSConsumer

  • ProcessSalesOrderFulfillmentSiebelCommsReqABCSImpl

  • ProcessSalesOrderFulfillmentOSMCFSCommsJMSProducer

Figure 9-1 shows the sequence of integration services for the Submitting Orders from Siebel CRM to OSM integration flow.

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

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

Table 9-1 describes the transactions, the database operations, and what actions to take in case of an error for this flow.

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.

The following services are involved:

  • ProcessSalesOrderFulfillmentSiebelCommsJMSConsumer

  • ProcessSalesOrderFulfillmentSiebelCommsReqABCSImpl

  • ProcessSalesOrderFulfillmentOSMCFSCommsJMSProducer

Table 9-1 Transaction Boundaries and Recovery Details for Siebel CRM Flow

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.

Roll back cross-reference transactions.

Roll back JMS message to AIA_SALESORDERJMSQUEUE_ErrorQ

Resubmit the order from either AIA_SALESORDERJMSQUEUE_ErrorQ or from Siebel CRM.


See the discussion of configuring Oracle AIA processes for error handling and trace logging in Oracle Fusion Middleware Developer's Guide for Oracle SOA Core Extension for more information about rollback procedures.

Supporting Order Priority

The integration supports order priority as follows:

  1. A Siebel CRM user submits an order with a string value for priority.

  2. The Siebel CRM JMS consumer consumes the message and sends it to the Siebel CRM requester ABCS. While transforming the order message into the EBM, the ABCS looks up the value of the OrderPriority field in the Siebel CRM column of the SALESORDER_PRIORITY domain value map (DVM) and populates the ProcessSalesOrderFulfillmentEBM/DataArea/ProcessSalesOrderFulfillment/FulfillmentPriorityCode with the corresponding value from the common column.

  3. When creating the OSM create order message, the ProcessSalesOrderFulfillmentOSMCFSCommsJMSProducer service looks up the value of the FulfillmentPriorityCode in the common column of the SALESORDER_PRIORITY DVM and populates the priority in the JMSPriority field in the JMS headers with value from the JMS column using the following BPEL assign activity:

    <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>
    

    where:

    • jmsHeaders is a variable of type JMSOutboundHeadersAndProperties

    • msg_priority is a string variable

  4. The store and forward mechanism picks up the messages according to their priority and sends them to OSM.

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

    OSM maintains the priority of the orders and populates the FulfillmentPriorityCode element in all outbound messages.

Other producers need not do a DVM lookup because 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.

You can extend Siebel CRM to set JMS priority on the order message. See the discussion of modifying the order priority mapping in Siebel Order Management Guide Addendum for Communications, Employee Asset-Based Ordering for more information about priority values in Siebel CRM.

Supporting Price Lists

The integration 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. When the ProcessSalesOrderFulfillmentSiebelCommsReqABCSImpl service receives the ABM, it 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.

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

  4. OSM passes the ProcessFulfillmentOrderBillingEBM message on for billing. See "About the Bill Fulfillment Order Business Flow" 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

  • OptimizedSalesOrder

The following directories contain the industry component files:

  • Enterprise business object (EBO) and enterprise business message (EBM) XML schema files:

    Oracle_home/comms_home/source/soainfra/apps/AIAMetaData/AIAComponents/EnterpriseObjectLibrary/Industry/Communications/EBO/

  • Enterprise business service (EBS) WSDL files:

    Oracle_home/comms_home/source/soainfra/apps/AIAMetaData/AIAComponents/EnterpriseBusinessServiceLibrary/Industry/Communications/EBO/

  • OptimizedSalesOrder EBO files:

    Oracle_home/comms_home/source/soainfra/apps/AIAMetaData/AIAComponents/PIPS/Communications/Schemas

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 the discussion of Oracle AIA assets extensibility patterns in Oracle Fusion Middleware Developer's Guide for Oracle SOA Core Extension for more information about extending EBOs.

Integration Services

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

ProcessSalesOrderFulfillmentSiebelCommsJMSConsumer

The ProcessSalesOrderFulfillmentSiebelCommsJMSConsumer service is implemented as a Mediator process.

This consumer listens to 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.