19 Implementing the Synchronize Customer Account Business Flow

This chapter explains how the Oracle Application Integration Architecture (Oracle AIA) Oracle Communications Order to Cash Integration Pack (the integration) implements the Synchronize Customer Account business flow.

About the Synchronize Customer Account Business Flow

The following Pre-Built Integration options enable the Synchronize Customer Account business flow:

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

  • Order to Cash for Oracle Communications Billing and Revenue Management (BRM)

  • Order to Cash for Siebel CRM

The Synchronize Customer Account business flow supports the following integration flows:

  • Create/Sync Customer Account

  • Update Customer Account

About the Create/Sync Customer Account Integration Flow

The Create/Sync Customer Account integration flow synchronizes customer information from Siebel CRM to BRM.

This integration flow uses the following services:

  • CommunicationsCustomerPartyEBSV2Resequencer

  • QueryCustomerPartyListSiebelProvABCSImplV2

  • ProcessAccountHierarchyListSiebelCommsProvABCSImpl

  • SyncCustomerPartyListBRMCommsProvABCSImpl

  • ProcessCollectionSharingBRMCommsProvABCSImpl

This flow is called during the Interfacing Orders to Create Customer Data integration flow of the Synchronize Fulfillment Order Billing Account business flow.

See "About the Synchronize Fulfillment Order Billing Account Business Flow" for information about the sequence of events for this business flow.

About the Update Customer Account Integration Flow

This flow synchronizes account updates from Siebel CRM to BRM.

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

Figure 19-1 Update Customer Account Sequence

This figure is described in the following text.

The integration updates customer accounts in BRM as follows:

  1. A Siebel CRM user updates an attribute on a customer's account such as account name, address, contact information, or billing profile.

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

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

  4. 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).

  5. The SyncAcctSiebelEventAggrConsumer service picks up the account ID and all of its child IDs. This service sends updates for the same customer in sequence.

  6. SyncAcctSiebelEventAggrConsumer sends the account ID and child IDs to the SyncAccountSiebelReqABCSImpl service.

  7. SyncAccountSiebelReqABCSImpl sends the account and child IDs as an input application business message (ABM) for the Siebel CRM SWICustomerPartyQueryByExample web service operation.

  8. SWICustomerPartyQueryByExample sends an output ABM, which includes the entire account data, back to SyncAccountSiebelReqABCSImpl.

  9. SyncAccountSiebelReqABCSImpl transforms the output into the SyncCustomerPartyListEBM and sends it to the CustomerPartyEBSV2 service.

  10. CustomerPartyEBSV2 sends SyncCustomerPartyListEBM to SyncCustomerPartyListBRMCommsJMSProducer, which publishes it to the CPARTY_SYNC_TOPIC JMS topic.

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

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

  13. The opcode sends confirmation to SyncCustomerPartyListBRMCommsProvABCSImpl.

BRM Interfaces

Table 19-1 lists the BRM interfaces used by the Synchronize Customer Account business flow.

Table 19-1 BRM Interfaces

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 for detailed descriptions of individual opcodes.

Siebel CRM Interfaces

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.

  • QueryCustomerPartyListSiebelProvABCSImplV2 as part of creating a new account or adding a new billing profile to an existing account.

  • SyncAccountSiebelReqABCSImpl

Query account hierarchy -

(SWI Account Hierarchy)

Retrieves the full linear account hierarchy from Siebel CRM.

ProcessAccountHierarchyListSiebelCommsProvABCSImpl


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.

Industry Oracle AIA Components

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

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 such as adding new data elements. These extensions are protected and will remain intact even 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 Synchronize Customer Account business flow:

Additional services are delivered with the Synchronize Customer Account business flow as part of the Interfacing Orders to Create Customer Data integration flow, which is part of the Synchronize Fulfillment Order Billing Account business flow. See "Integration Services" in "Implementing the Synchronize Fulfillment Order Billing Account Business Flow" for more information about these services.

CommsProcessBillingAccountListEBF

This service invokes Siebel CRM services to query account information and BRM services to create accounts.

This service does the following:

  1. Receives ProcessBillingAccountListEBM, which contains a list of customer account IDs, billing profile IDs, and the target system ID, and transforms it into QueryCustomerPartyListEBM.

  2. Sends QueryCustomerPartyListEBM to QueryCustomerPartyListSiebelProvABCSImplV2.

  3. Receives QueryCustomerPartyListResponseEBM, which contains detailed account information, and transforms it into SyncCustomerPartyListEBM.

  4. Sends SyncCustomerPartyListEBM to CommunicationsCustomerPartyEBSV2Resequencer.

  5. Receives SyncCustomerPartyListResponseEBM from SyncCustomerPartyListBRMCommsProvABCSImpl.

  6. If the owner account in ProcessBillingAccountListEBM is different than the billing account, this service does the following:

    1. Sends ProcessBillingAccountListEBM to ProcessCollectionsSharingBRMCommsProvABCSImpl.

    2. Receives ProcessBillingAccountListResponseEBM.

  7. Combines the response messages into ProcessBillingAccountListResponseEBM and sends the message back to CommsProcessFulfillmentOrderBillingAccountListEBF.

CommunicationsCustomerPartyEBSV2Resequencer

This service groups account messages from CommsProcessBillingAccountListEBF by account ID. This process receives SyncCustomerPartyListEBM and sends it to SyncCustomerPartyListBRMCommsProvABCSImpl.

See "Using the Oracle Mediator Resequencer Feature" for more information about Oracle Mediator Resequencer.

SyncCustomerPartyListBRMCommsProvABCSImpl

This service creates or updates customer accounts in BRM. It does following:

  1. Receives the SyncCustomerPartyListEBM.

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

  3. For each account in the EBM with the ADD action code, the service creates the account as follows:

    1. Transforms the SyncCustomerPartyListEBM to the BRM-specific account creation ABM.

    2. Calls PCM_OP_CUST_COMMIT_CUSTOMER to create the customer account.

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

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

  4. For each account in the EBM with the UPDATE action code, the service updates the account as follows:

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

    2. Transforms the SyncCustomerPartyListEBM into a BRM-specific account update ABM.

    3. Calls PCM_OP_CUST_UPDATE_CUSTOMER to update the account.

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

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

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

    7. Transforms the SyncCustomerPartyListEBM to SyncCustomerPartyListResponseEBM.

  5. Sends SyncCustomerPartyListResponseEBM back to the calling service.

SyncCustomerPartyListBRMCommsJMSProducer

This producer service receives the SyncCustomerPartyListEBM message with account update information from CustomerPartyEBSV2. This service drops the message into the C_PARTY_SYNC_TOPIC queue, where SyncCustomerPartyListBRM_01CommsJMSConsumer picks it up.

SyncCustomerPartyListBRM_01CommsJMSConsumer

This is a mediator process subscribed to the CPARTY_SYNC_TOPIC queue. It does the following:

  1. Picks up SyncCustomerPartyListEBM from CPARTY_SYNC_TOPIC.

  2. Checks the cross-reference table to identify the BRM ID that corresponds to the common ID.

  3. Stamps the EBM with the target BRM ID.

  4. Sends the EBM to the SyncCustomerPartyListBRMCommsProvABCSImpl service.

This process is intended for a topology 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.

CustomerPartyEBSV2

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-2 illustrates the relationship of CustomerPartyEBSV2 with the other services in the integration flow.

Figure 19-2 CustomerPartyEBSV2

Description of Figure 19-2 follows
Description of ''Figure 19-2 CustomerPartyEBSV2''

The process checks whether the incoming message has a target system identifier. If the target system identifier is not present, then the routing rule assumes multiple BRM systems and routes the incoming requests to SyncCustomerPartyListBRMCommsJMSProducer.

If you have only one BRM instance, you can change the routing rule to route incoming requests to the SyncCustomerPartyListBRMCommsProvABCSImpl directly. You must also apply a transformation before routing to stamp the target system identifier in the EBM. Apply the transformation in the following file:

esb:///ESB_Projects/Customer_CustomerPartyEBSV2/AddTargetID_BRM01.xsl

ProcessCollectionSharingBRMCommsProvABCSImpl

This service invokes opcodes in BRM to create collections sharing groups when the owner account on an order line is different from the billing account. This service does the following:

  1. Receives ProcessBillingAccountListEBM.

  2. Transforms ProcessBillingAccountListEBM into the correct input and invokes 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

  3. Receives the collections sharing group opcode response and transforms it into ProcessBillingAccountListResponseEBM.

  4. Sends ProcessBillingAccountListResponseEBM to CommsProcessBillingAccountListEBF.

ProcessAccountHierarchyListSiebelCommsProvABCSImpl

This service calls the Siebel CRM web service to query the account hierarchy for a given account ID.

It does the following:

  1. Receives ProcessBillingAccountListEBM from CommsProcessFulfillmentOrderBillingAccountListEBF.

  2. Transforms ProcessBillingAccountListEBM into a Siebel CRM ABM.

  3. Calls the Siebel CRM web services to query the complete linear account hierarchy for the account IDs listed in the ABM.

  4. Receives the response from the Siebel CRM web service.

  5. Transforms the response into ProcessBillingAccountListResponseEBM.

  6. Sends ProcessBillingAccountListResponseEBM to CommsProcessFulfillmentOrderBillingAccountListEBF.

QueryCustomerPartyListSiebelProvABCSImplV2

This service does the following:

  1. Receives QueryCustomerPartyListEBM from CommsProcessBillingAccountListEBF.

  2. Transforms QueryCustomerPartyListEBM into a Siebel CRM ABM.

  3. Invokes the Siebel CRM SWICustomerParty web service.

  4. Receives the response from SWICustomerParty.

  5. Transforms the response into QueryCustomerPartyListResponseEBM and sends it to CommsProcessBillingAccountListEBF.

SyncCustomerSiebelEventAggregator

This service receives Siebel CRM update account events and collates them into the AIA_AGGREGATED_ENTITIES database table.

Figure 19-3 illustrates the relationship of the SyncCustomerSiebelEventAggregator with the other services in the integration flow.

Figure 19-3 SyncCustomerSiebelEventAggregator

This graphic is described in the surrounding text.

This service provides the following operations:

  • Aggregateaccountevent:

    1. Receives the Account Updated message from Siebel CRM.

    2. Extracts the account ID, contact IDs, and address IDs from the message.

    3. Invokes the SyncAccountSiebelAggregatorAdapter to store these IDs into the AIA_AGGREGATED_ENTITIES database table.

  • Aggregatecontacttevent:

    1. Receives the Contact Update message from Siebel CRM.

    2. Extracts the account IDs, billing profile IDs, and contact IDs from the message.

    3. Invokes the SyncContactSiebelAggregatorAdapter to store these IDs in the AIA_AGGREGATED_ENTITIES database table.

  • Aggregateaddresstevent:

    1. Receives the Address Update message from Siebel CRM.

    2. Extracts the account IDs, billing profile IDs, and address IDs from the message.

    3. Invokes the SyncAddressSiebelAggregatorAdapter to store these IDs into the AIA_AGGREGATED_ENTITIES database table.

  • Aggregatebpevent:

    1. Receives the BillingProfile Updated message from Siebel CRM.

    2. Extracts the billing profile ID and the associated account ID from the message.

    3. Invokes the SyncBPSiebelAggregatorAdapter to store these IDs in the AIA_AGGREGATED_ENTITIES database table.

SyncAccountSiebelAggregatorAdapter

This service invokes the AIA_AGGREGATOR_PUB.SIEBEL_AGGREGATE_ACCOUNT PL/SQL procedure, which aggregates the account events generated in Siebel CRM when an account is created or updated.

SyncContactSiebelAggregatorAdapter

This service invokes the AIA_AGGREGATOR_PUB.SIEBEL_AGGREGATE_CONTACT PL/SQL procedure, which aggregates the account events generated in Siebel CRM when an account is created or updated.

SyncAddressSiebelAggregatorAdapter

This service invokes the AIA_AGGREGATOR_PUB.SIEBEL_AGGREGATE_ADDRESS PL/SQL procedure, which aggregates the account events generated in Siebel CRM when an account is created or updated.

SyncBPSiebelAggregatorAdapter

This service invokes the AIA_AGGREGATOR_PUB.SIEBEL_AGGREGATE_BP PL/SQL procedure, which aggregates the account events generated in Siebel CRM when an account is created or updated.

SyncAcctSiebelAggrEventConsumer

This service extracts the account IDs stored in the AIA_AGGREGATED_ENTITIES database table and sends them to the SyncAccountSiebelReqABCSImpl service.

Sequencing is enabled for this service. When this consumer calls the requester service for further processing and the requester service fails, any subsequent update for that customer is not processed until action is taken on the messages in the sequencer.

If the failure is due to a business error, you must remove the messages from the queue for the subsequent messages to process. If the failure is system related, you can retry messages in the resequencer, which moves the messages from the resequencer queue and enables 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.

SyncAccountSiebelReqABCSImpl

This service transforms the Siebel CRM aggregated message into the SyncCustomerPartyListEBM message and sends it to the CustomerPartyEBSV2 service.