This chapter describes the Synchronize Customer Account 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 and BRM interfaces, communications industry-specific Oracle Application Integration Architecture (Oracle AIA) components, and integration services.
The following Pre-Built Integration options enable the Synchronize Customer Account 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 BRM Pre-Built Integration option
The Synchronize Customer Account business flow supports the following integration flows:
Create/Sync Customer Account
Update Customer Account
The Create/Sync Customer Account integration flow enables the synchronization of customer information from Siebel CRM to BRM. This flow is called during the Interfacing Orders to Create Customer Data in BRM integration flow of the Synchronize Fulfillment Order Billing Account business flow.
See "Implementing the Synchronize Fulfillment Order Billing Account Business Flow" for information about the sequence of events for these integration flows.
This flow is initiated to propagate updates to accounts in Siebel CRM to BRM.
This Update Customer Account integration flow uses the following services:
SyncCustomerSiebelEventAggregator
SyncAcctSiebelEventAggrConsumer
ProcessAccountHierarchyListSiebelCommsProvABCSImpl
SyncAccountSiebelReqABCSImpl
CustomerPartyEBSV2
SyncCustomerPartyListBRM_01CommsJMSConsumer
SyncCustomerPartyListBRMCommsProvABCSImpl
Figure 19-1 illustrates the Update Customer Account integration flow.
The integration updates customer accounts in BRM as follows:
A Siebel CRM user updates an attribute on a customer's account such as account name, address, contact information, or billing profile.
Siebel CRM sends the SiebelUpdateABM message containing the updated attribute to the SyncCustomerSiebelEventAggregator service. SiebelUpdateABM takes one of the following forms, depending on the updated attribute:
ListOfSWICustomerIO for name and hierarchy updates
ListOfSWIAddressIO for address updates
ListOfSWIContactIO for contact updates
ListOfSWIBillingProfileIO for billing profile updates
SyncCustomerSiebelEventAggregator send the SiebelUpdateABM to one of the following database adapters, depending on the updated attribute:
SyncAccountSiebelAggregatorAdapter for name and hierarchy updates
SyncAddressSiebelAggregatorAdapter for address updates
SyncContactSiebelAggregatorAdapter for contact updates
SyncBPSiebelAggregatorAdapter for billing profile updates
The adapter extracts the account, contact, address, or billing profile ID from the ABM, stores it in the AIA_AGGREGATED_ENTITIES database table, and sends an acknowledgment to Siebel CRM.
The IDs in the database table are stored in the same hierarchy as in Siebel CRM (for example, BillingProfileID is always the child of an account ID).
The SyncAcctSiebelEventAggrConsumer service picks up the account ID and all of its child IDs. This service sends updates for the same customer in sequence.
SyncAcctSiebelEventAggrConsumer sends the account ID and child IDs to the SyncAccountSiebelReqABCSImpl service.
SyncAccountSiebelReqABCSImpl sends the account and child IDs as an input application business message (ABM) for the Siebel CRM SWICustomerPartyQueryByExample web service operation.
SWICustomerPartyQueryByExample sends an output ABM, which includes the entire account data, back to SyncAccountSiebelReqABCSImpl.
SyncAccountSiebelReqABCSImpl transforms the output into the SyncCustomerPartyListEBM and sends it to the CustomerPartyEBSV2 service.
CustomerPartyEBSV2 sends SyncCustomerPartyListEBM to SyncCustomerPartyListBRMCommsJMSProducer, which publishes it to the CPARTY_SYNC_TOPIC JMS topic.
The consumer subscribed to this topic by default, SyncCustomerPartyListBRM_01CommsJMSConsumer, picks up SyncCustomerPartyListEBM, checks which service it should be sent to, stamps it with the target ID, and sends it to SyncCustomerPartyListBRMCommsProvABCSImpl.
You can define more consumers for multiple instances of BRM or other billing systems and subscribe them to CPARTY_SYN_TOPIC.
SyncCustomerPartyListBRMCommsProvABCSImpl calls one of the following opcodes to update the data in BRM:
PCM_OP_CUST_UPDATE_CUSTOMER
PCM_OP_CUST_DELETE_PAYINFO
PCM_OP_CUST_SET_STATUS
PCM_OP_BILL_GROUP_MOVE_MEMBER
The opcode sends confirmation to SyncCustomerPartyListBRMCommsProvABCSImpl.
Table 19-1 lists the BRM interfaces used by the Synchronize Customer Account business flow.
Opcode | Purpose |
---|---|
PCM_OP_CUST_COMMIT_CUSTOMER |
Creates a new account with one or more /billinfo and /payinfo objects. |
PCM_OP_CUST_UPDATE_CUSTOMER |
Updates account information (name, address, phone), contact information, and billing information. |
PCM_OP_CUST_DELETE_PAYINFO |
Delete a /payinfo from an account. |
PCM_OP_CUSTCARE_MOVE_ACCT |
Moves a child account to a new parent account. |
PCM_OP_CUST_SET_STATUS |
Modifies the account status. |
PCM_OP_BILL_GROUP_MOVE_MEMBER |
Modifies a hierarchical account group (moves an account between groups, creates a group if one doesn't exist, deletes a group if it is empty) |
PCM_OP_COLLECTIONS_GROUP_CREATE |
Creates a collections sharing group with the owner account as the owner and the billing account as a member. |
PCM_OP_COLLECTIONS_GROUP_ADD_MEMBER |
Adds the billing account as a member of the owner account's collections sharing group. |
PCM_OP_COLLECTIONS_GROUP_DELETE_MEMBER |
Removes the billing account as a member of the owner account's collections sharing group. |
PCM_OP_COLLECTIONS_GROUP_GET_BILLINFO |
Checks whether an account already owns or is a member of a collections sharing group. |
PCM_OP_COLLECTIONS_GROUP_DELETE |
Deletes the owner account's collections sharing group. |
See BRM Developer's Reference Guide for detailed descriptions of individual opcodes.
Table 19-2 describes the Siebel CRM web service interface.
Table 19-2 Siebel CRM Web Service Interface
Web Service | Description | Used by |
---|---|---|
Query Account- (SWICustomerParty) |
Retrieves account, bill profile, contact, and address data from Siebel CRM. |
|
See Siebel CRM Web Services Reference for more information about this web service.
Table 19-3 describes the Siebel CRM workflow event interfaces.
Table 19-3 Siebel CRM Workflow Event Interfaces
Event | Description | Consumed by |
---|---|---|
SWI Account Updated |
This workflow event is started when an account is updated in Siebel CRM. |
This event message is consumed by the SyncCustomerSiebelEventAggregator.aggregateaccountevent service, which extracts all the relevant IDs from the input payload and stores them in a database table (AIA_AGGREGATED_ENTITIES). |
SWI Bill Profile Updated |
This workflow event is started when a bill profile is updated in Siebel CRM. |
The event message is consumed by the SyncCustomerSiebelEventAggregator.aggregatebpevent service, which extracts all the relevant IDs from the input payload and stores them in a database table (AIA_AGGREGATED_ENTITIES). |
SWI Contact Updated |
This workflow event is started when a contact is updated in Siebel CRM. |
The event message is consumed by the SyncCustomerSiebelEventAggregator.aggregatecontactevent service, which extracts all the relevant IDs from the input payload and stores them in a database table (AIA_AGGREGATED_ENTITIES). |
SWI Address Updated |
This workflow event is started when an address is updated in Siebel CRM. |
The event message is consumed by the SyncCustomerSiebelEventAggregator.aggregateaddressevent service, which extracts all the relevant IDs from the input payload and stores them in a database table (AIA_AGGREGATED_ENTITIES). |
See the discussion of workflows for employee asset-based ordering in Siebel Order Management Guide Addendum for Communications for more information.
The Synchronize Customer Account business flow uses the following enterprise business objects (EBOs) and enterprise business messages (EBMs):
CustomerPartyEBO
QueryCustomerPartyListEBM
QueryCustomerPartyListResponseEBM
SyncCustomerPartyListEBM
SyncCustomerPartyListResponseEBM
ProcessBillingAccountListEBM
ProcessBillingAccountListResponseEBM
FulfillmentOrderEBO
ProcessFulfillmentOrderBillingAccountListEBM
ProcessFulfillmentOrderBillingAccountListResponseEBM
The industry enterprise business object (EBO) and enterprise business message XML schema (EBM XSD) files are located here: $AIA_HOME/AIAMetaData/AIAComponents/EnterpriseObjectLibrary/Industry/Communications/EBO/
The industry enterprise business service (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
The following services are delivered with the Synchronize Customer Account business flow:
ProcessFulfillmentOrderBillingAccountListOSMCFSCommsJMSConsumer
CommunicationsCustomerPartyEBSV2Resequencer
CommsProcessFulfillmentOrderBillingAccountListEBF
CommsProcessBillingAccountListEBF
SyncCustomerSiebelEventAggregator
SyncAccountSiebelAggregatorAdapter
SyncContactSiebelAggregatorAdapter
SyncAddressSiebelAggregatorAdapter
SyncBPSiebelAggregatorAdapter
SyncAcctSiebelAggrEventConsumer
ProcessAccountHierarchyListSiebelCommsProvABCSImpl
SyncAccountSiebelReqABCSImpl
CustomerPartyEBSV2
QueryCustomerPartyListSiebelProvABCSImplV2
SyncCustomerPartyListBRMCommsProvABCSImpl
SyncCustomerPartyListBRM_01CommsJMSConsumer
For more information about integration services, see the following topics:
Designing and constructing enterprise business flows in Oracle Fusion Middleware Developer's Guide for Oracle Application Integration Architecture Foundation Pack
Enterprise business flow processes in Oracle Fusion Middleware Concepts and Technologies Guide for Oracle Application Integration Architecture Foundation Pack
Describing the event aggregation programming model in Oracle Fusion Middleware Developer's Guide for Oracle Application Integration Architecture Foundation Pack
This process listens to the AIA_CRTCUST_OUT_JMSQ JMS queue and as soon as a message is picked up, forwards it to the CommsProcessFulfillmentOrderBillingAccountListEBF enterprise business flow, which extracts the relevant customer data. The ProcessBillingAccountListEBM is then routed to the CommsProcessBillingAccountListEBF.
The CommunicationsCustomerPartyEBSV2Resequencer enterprise business service sequences the account message from CommsProcessBillingAccountListEBF. The messages are grouped by account ID. This process receives the customer EBM and passes it to SyncCustomerPartyListBRMCommsProvABCSImpl for routing to BRM.
See "Using the Oracle Mediator Resequencer Feature" for more information about the Oracle Mediator Resequencer.
This enterprise business flow (EBF) is an asynchronous delayed response Business Process Execution Language (BPEL) process that extracts customer data from the order. The process loops through every order line and extracts customer accounts and billing profiles. It uses these data to call the services that query Siebel CRM for account information, including account hierarchy.
This service does the following as part of the Create/Sync Customer Account integration flow:
Receives ProcessFulfillmentOrderBillingAccountListEBM from ProcessFulfillmentOrderBillingAccountListOSMCFSCommsJMSConsumer
If there is a value for the O2C.CorporateHierarchyAccountType configuration property, the service:
Transforms ProcessFulfillmentOrderBillingAccountListEBM into QueryAccountHierarchyEBM
Sends QueryAccountHierarchyEBM to ProcessAccountHierarchyListSiebelCommsProvABCSImpl
Receives QueryAccountHierarchyResponseEBM from ProcessAccountHierarchyListSiebelCommsProvABCSImpl
Transforms QueryAccountHierarchyResponseEBM into ProcessBillingAccountListEBM
Sends ProcessBillingAccountListEBM to CommsProcessBillingAccountListEBF
Receives ProcessBillingAccountListResponseEBM from CommsProcessBillingAccountListEBF
Transforms ProcessBillingAccountListResponseEBM into ProcessFulfillmentOrderBillingAccountListResponseEBM
Sends ProcessFulfillmentOrderBillingAccountListResponseEBM to ProcessFulfillmentOrderBillingAccountListResponseOSMCFSCommsJMSProducer
This EBF service creates or synchronizes the accounts and billing profiles from the order in an appropriate billing system. The Order Processing integration flow invokes this service with a list of customer account IDs, billing profile IDs, and the target system ID. When the process is complete, a response is sent back to the order flow confirming that all accounts have been set up in BRM, and the order processing can continue.
This service provides two operations. One accepts the ProcessBillingAccountListEBM which contains the customer data to be synchronized, including account IDs, billing profile IDs, and paying hierarchies. The other sends SyncCustomerPartyListResponseEBM to the calling process.
The responsibilities of this service include:
Determining whether the customer exists and is up to date in BRM
Retrieving the customer data from the appropriate Siebel CRM system using the provided IDs
Optimizing the number and size of queries into Siebel CRM for customer data.
Creating or updating the customers and billing profiles in BRM
This service is responsible for receiving Siebel CRM update account events and collating them into an Oracle AIA database table.
Figure 19-2 illustrates the relationship of the SyncCustomerSiebelEventAggregator with the other services in the integration flow.
This service provides four operations, one for each of the object types that are updated:
Aggregateaccountevent:
Receives the Account Updated Siebel message. Extracts the account ID, contact IDs, and address IDs from the message. Invokes the SyncAccountSiebelAggregatorAdapter to store these IDs into the AIA_AGGREGATED_ENTITIES database table.
Aggregatecontacttevent:
Receives the Contact Update Siebel message. Extracts the account IDs, bill profile IDs, and contact IDs from the message. Invokes the SyncContactSiebelAggregatorAdapter to store these IDs in the AIA_AGGREGATED_ENTITIES database table.
Aggregateaddresstevent:
Receives the Address Update Siebel message. Extracts the account IDs, bill profile IDs, and address IDs from the message. Invokes the SyncAddressSiebelAggregatorAdapter to store these IDs into the AIA_AGGREGATED_ENTITIES database table.
Aggregatebpevent:
Receives the BillingProfile Updated Siebel message. Extracts the BillingProfile ID and the associated account ID from the message. Invokes the SyncBPSiebelAggregatorAdapter to store these IDs in the AIA_AGGREGATED_ENTITIES database table.
This service aggregates the account events generated in Siebel CRM when an account is created or updated. This service invokes a PL/SQL procedure, AIA_AGGREGATOR_PUB.SIEBEL_AGGREGATE_ACCOUNT, which does the actual aggregation in the AIA aggregator table.
This service aggregates the account events generated in Siebel CRM when an account is created or updated. This service invokes a PL/SQL procedure, AIA_AGGREGATOR_PUB.SIEBEL_AGGREGATE_CONTACT, which does the actual aggregation in the AIA aggregator table.
This service aggregates the account events generated in Siebel CRM when an account is created or updated. This service invokes a PL/SQL procedure, AIA_AGGREGATOR_PUB.SIEBEL_AGGREGATE_ADDRESS, which does the actual aggregation in the AIA aggregator table.
This service aggregates the account events generated in Siebel CRM when an account is created or updated. This service invokes a PL/SQL procedure, AIA_AGGREGATOR_PUB.SIEBEL_AGGREGATE_BP, which does the actual aggregation in the AIA aggregator table.
This service extracts the account IDs stored in the AIA_AGGREGATED_ENTITIES database table and sends them forward to the SyncAccountSiebelReqABCSImpl service.
Sequencing is enabled for this service. When this consumer calls the requestor for further processing and the requestor fails, any subsequent update for that customer is not processed until proper action is taken on the messages in the sequencer. If the failure is due to a business error then messages must be removed from the queue for the subsequent messages to process. If the failure is system related then messages in the resequencer can be retried to move the message from the resequencer queue and thereby enabling subsequent messages to be processed. Any updates for other errors are processed as usual.
See "Using the Oracle Mediator Resequencer Feature" for more information about the resequencer.
This service calls the Siebel web service to query the account hierarchy for a given account ID.
It does the following as part of the Create/Sync Customer Account integration flow:
Receives ProcessBillingAccountListEBM from CommsProcessFulfillmentOrderBillingAccountListEBF.
Transforms ProcessBillingAccountListEBM into a Siebel CRM ABM.
Calls the Siebel CRM web services to query the complete linear account hierarchy for the account IDs listed in the ABM.
Receives the response from the Siebel CRM web service.
Transforms the response into ProcessBillingAccountListEBM.
Sends ProcessBillingAccountListEBM to CommsProcessFulfillmentOrderBillingAccountListEBF.
This service transforms the Siebel CRM message into the SyncCustomerPartyList EBM format and invokes the SyncCustomerPartyList operation of the CustomerPartyEBSV2.
The process checks whether the incoming message has a target system identifier. If the target system identifier is not present, then the delivered rule assumes multiple BRM systems and routes the incoming requests to a Java message service (JMS) producer service SyncCustomerPartyListBRMCommsJMSProducer::Produce_Message.
If you have only one BRM instance, you can change the routing rule to route incoming requests to the SyncCustomerPartyListBRMCommsProvABCSImpl_1_0::SyncCustomerPartyList directly. You must also apply a transformation before routing to stamp the target system identifier in the EBM. The transformation file name is esb:///ESB_Projects/Customer_CustomerPartyEBSV2/AddTargetID_BRM01.xsl.
CustomerPartyEBSV2 a lightweight EBS routing service that exposes all of the enterprise operations that can be performed with a CustomerParty enterprise object.
CustomerPartyEBSV2 service uses the following operations:
SyncCustomerPartyList
QueryCustomerPartyList
Figure 19-3 illustrates the relationship of QueryCustomerPartyListSiebelProvABCSImplV2 with the other services in the integration flow.
CustomerPartyEBSV2 invokes the QueryCustomerPartyListSiebelProvABCSImplV2 service when the routing rules determine that Siebel CRM is to be the service provider for the QueryCustomerPartyList EBS operation.
This service has one synchronous request and reply operation, QueryCustomerPartyList.
SyncCustomerPartyListBRMCommsProvABCSImpl performs the following actions:
Receives the SyncCustomerPartyListEBM.
For child accounts, checks whether the parent account has been synchronized. The integration can only synchronize a child account after the parent account has been synchronized.
For each account in the EBM with the ADD action code, the service creates the account as follows:
Transforms the SyncCustomerPartyListEBM to the BRM-specific account creation ABM.
Calls PCM_OP_CUST_COMMIT_CUSTOMER to create the customer account.
For child accounts where the billing account on the order is different from the owner account and the O2C.LegalGroup configuration property is set to TRUE, calls any of the following opcodes:
PCM_OP_COLLECTIONS_GROUP_GET_BILLINFO to check if the owner account already owns a collections sharing group
PCM_OP_COLLECTIONS_GROUP_CREATE to create a collections sharing group if the owner account doesn't own one
PCM_OP_COLLECTIONS_GROUP_ADD_MEMBER to add the billing account to the owner account's collections sharing group
Transforms the response from the opcode calls to SyncCustomerPartyListResponseEBM and populates the following cross-reference tables with the BRM IDs obtained:
CUSTOMERPARTY_ACCOUNTID
CUSTOMERPARTY_ADDRESSID
CUSTOMERPARTY_CONTACTID
CUSTOMERPARTY_BILLPROFILEID
CUSTOMERPARTY_PAYPROFILEID
For each account in the EBM with the UPDATE action code, the service updates the account as follows:
For child accounts where the parent in the EBM is different from the parent obtained in the opcode response, moves the child account to the parent in the EBM by calling the PCM_OP_CUSTCARE_MOVE_ACCT.
Transforms the SyncCustomerPartyListEBM into a BRM-specific account update ABM.
Calls PCM_OP_CUST_UPDATE_CUSTOMER to update the account.
For child accounts where the billing account on the order is different from the customer account and the O2C.LegalGroup configuration property is set to TRUE, calls any of the following opcodes:
PCM_OP_COLLECTIONS_GROUP_GET_BILLINFO to check if the owner account already owns a collections sharing group or the billing account is already a member of a collections sharing group
PCM_OP_COLLECTIONS_GROUP_CREATE to create a collections sharing group if the owner account doesn't own one
PCM_OP_COLLECTIONS_GROUP_ADD_MEMBER to add the billing account to the owner account's collections sharing group
PCM_OP_COLLECTIONS_GROUP_DELETE_MEMBER to remove the billing account from a collections sharing group if the owner account on the EBM and the owner account in the PCM_OP_COLLECTIONS_GROUP_GET_BILLINFO response are different
PCM_OP_COLLECTIONS_GROUP_DELETE to delete the collections sharing group if the billing account being moved was the only member
Checks whether the AIA configuration property EnableAccountStatusSync is set to True. If set to True, then it creates the PCM_OP_CUST_SET_STATUS input message from the SyncCustomerPartyListEBM. Calls the opcode PCM_OP_CUST_SET_STATUS to synchronize the status mentioned in the EBM to BRM.
If the result of an account update, in which the PayProfile of the account is changed, is SyncCustomerPartyListEBM, then after calling the PCM_OP_CUST_COMMIT_CUSTOMER, it calls the PCM_OP_CUST_DELETE_PAYINFO to delete the earlier PAYINFO object from BRM.
Transforms the SyncCustomerPartyListEBM to SyncCustomerPartyListResponseEBM.
Sends SyncCustomerPartyListResponseEBM back to the calling service.
This is a mediator process that listens to the topic CPARTY_SYNC_TOPIC and as soon as a message is picked up, forwards it to the SyncCustomerPartyListBRMCommsProvABCSImpl.
This service performs the following actions:
Receives the SyncCustomerPartyListEBM.
Does an cross-reference lookup to determine whether for the given common ID, the corresponding BRM ID (for BRM_01 or BRM_02, based on the consumer name) exists.
If it exists, then the service stamps the message with the particular target system ID and passes it forward to the SyncCustomerPartyListBRMCommsProvABCSImpl.
This process is intended for an installation with multiple BRM instances. Deploy a version of this consumer for each BRM instance. See "Configuring Multiple BRM Instances for Communications Integrations" for more information about multiple BRM instances.