Nav
You are viewing an older version of this section. Click here to navigate to the latest version.

Siebel Connector

Premium

Anypoint Connector for Siebel lets you access connections between Mule integration applications and the Oracle Siebel customer relationship manager (CRM).

The connector provides these options to connect to Siebel applications:

  • Oracle Siebel Business Objects: Create, update, upsert, query, and delete Siebel business components.

  • Oracle Siebel Integration Objects: Create, update, upsert, query, delete, query page, execute, and synchronize Siebel integration objects.

  • Oracle Siebel Business Services: Execute Siebel business services.

Prerequisites

Because of how closely the connector is coupled with Siebel CRM, this document assumes you have a working knowledge of Siebel Business Components, Business Objects, Business Services, and Integration Objects.

This document assumes you are familiar with Mule, Anypoint Connectors , and Anypoint Studio Essentials To increase your familiarity with Studio, consider completing one or more Anypoint Studio Tutorials. Further, this page assumes that you have a basic understanding of  Mule flows and Mule Global Elements.

The Siebel connector requires the following two Siebel JAR files: Siebel.jar and SiebelJI_xxx.jar.

Choose the SiebelJI_xxx.jar based on the locale of the Siebel installation. For instance, if the locale of Siebel installation is US_EN, use SiebelJI_enu.jar.

The Siebel.jar and SiebelJI_enu.jar are available in the  <%SIEBEL_HOME%>\8.1\Tools_1\CLASSES folder on the Siebel server.  %SIEBEL_HOME% is the installation directory of Siebel.

You can add the JAR files to your Studio project while configuring the Siebel global element. Learn how to configure the Siebel connector global element.

Compatibility

The Siebel connector is compatible with:

Application/Service Version

Mule Runtime

3.6.1 or higher

Siebel

v8.1

The Siebel v2.1.0 connector is built and tested using Oracle Siebel 8.1. Because the Java Data Bean interface is generic, the Siebel v2.1.0 connector works with Siebel versions 7.7, 7.8, and 8.0. However, the compatibility of the connector with any other version beside 8.1 has not been tested. The connector is not compatible with Siebel v7.5 and below.

Siebel Connector Architecture

The Siebel connector is built using the Siebel Java Data Beans interface. Java Data Beans provides a native Java interface to access the Siebel Object Manager.

The Siebel Object Manager lets a connector use a generic interface that doesn’t depend on a customized installation. To discover the metadata of Siebel objects in design time, use DataSense in Anypoint Studio. The Siebel connector takes advantage of the Siebel Repository to show a list of available objects as well as their structures in a Siebel custom installation.

The objects can be business components, business objects, integration objects, or business services based on the connector option you configure.

Following is the integration architecture of the Anypoint Connector for Siebel:

Integration+architecture

Installing and Configuring

Installing

You can install a connector in Anypoint Studio using the instructions in Installing a Connector from Anypoint Exchange.

To use the Siebel connector in a production environment, you must have either:

  • An Enterprise license to use Mule 

  • A CloudHub Starter, Professional, or Enterprise account

Contact the MuleSoft Sales Team to arrange for either license. See also Installing an Enterprise License.

Studio displays three new connectors in the palette:

  • Oracle Siebel Business Objects: Connects to Siebel business objects and components.

  • Oracle Siebel Business Services: Connects to Siebel business services.

  • Oracle Siebel Integration Objects: Connects to Siebel integration objects.

Creating a New Project

To use the Siebel connector in a Mule application project:

  1. In Studio, select File > New > Mule Project.PS_0001B_installing_new

  2. Enter a name for your new project and leave the remaining options with their default values.
    New+Project

  3. If you plan to use Git, select Create a .gitignore file for the project with default ignores for Studio Projects, and then click Next.

  4. Click Finish to create the project.

Configuring the Siebel Global Element

To use the Siebel connector in your Mule application, you must configure a global element for each of the following Siebel business layers:

  • Business Objects

  • Business Services

  • Integration Objects

Siebel Connector and DataSense

If you intend to use a Siebel connector in conjunction with a DataMapper transformer to map and transform data, you can make use of Anypoint Studio’s DataSense functionality. You can enable DataSense as part of configuring the global element. 

  • Follow the DataSense instructions to drop the transformer into your flow, then test the connection to Siebel using the Siebel connector. 

  • For a more DataMapper-friendly experience, use the XML Version to select XML Version 2 (DataMapper).

  • Add a DataMapper to your flow, before or after the Siebel connector, and click the DataMapper transformer to display the DataMapper properties editor. Having collected metadata from Siebel, Mule automatically prescribes the input or output (relative to the position of the Siebel connector to DataMapper) to map and transform data.

  • Define specific mappings to or from Siebel, then save your flow.

To configure the Siebel connector global elements in your Mule application:

  1. Click the Global Elements tab at the base of the canvas.

  2. On the Global Mule Configuration Elements screen, click Create.

  3. In the Choose Global Type wizard, expand Connector Configuration, and then select the connector you want to configure: Oracle Siebel Business Objects , Oracle Siebel Business Services, or Oracle Siebel Integration Objects.

    connectorconfiguration

  4. Click OK

  5. Enter the global element properties:

    1. For the Oracle Siebel Business Objects connector:

      Business+Objects+Config

      Field Description

      Name

      Enter a name to this connector to reference it later.

      User

      Enter the Siebel username to use.

      Password

      Enter the corresponding Siebel password.

      Server

      Enter the server IP address of your Siebel instance.

      Port

      Enter the port number.

      Server Name

      Enter the Siebel Enterprise server name.

      Object Manager

      Enter the value of the Object Manager of your Siebel instance. The default value is EAIObjMgr_enu.

      Language

      Enter the language corresponding to the locale of the Siebel instance.

      Encoding

      Enter an encoding type supported by the Siebel server.

      Enable DataSense

      This option is selected by default. If you want to disable the option, click the check box to clear it.

      DataSense Filters Business Components:

      Default View Mode

      Enter the default view for Data Sense. The default value for this field is 3. 

      Supported values:

      • 0 (SalesRepView):

        • Applies access control according to a single position or a sales team.

        • Displays records according to one of the following items: The user position or the sales team that includes a user’s position. The Visibility field or Visibility MVField of the business component determines the visibility. 

      • 1 (ManagerView): Displays records that a user and others who report to the user can access. For example, it includes the records that Siebel CRM displays in the My Team’s Accounts visibility filter. 

      • 2 (PersonalView): Displays records that a user can access, as determined by the Visibility Field property of the BusComp view mode object. For example, it includes the records that Siebel CRM displays in the My Accounts visibility filter.

      • 3 (AllView): Displays all records that includes a valid owner. For example, it includes the records that Siebel CRM displays in the All Accounts Across Organizations visibility filter.

      Data Sense Filter Query

      Use this field to write a query to filter the Business Components metadata being downloaded into the application. 

      Limit the number of objects to retrieve through DataSense to a few objects using search specifications, otherwise retrieving metadata slows down Studio.

      DataSense Filters Business Objects:

      Default View Mode

      Use to set the visibility type for a business component. The Supported values:

      • 0 (SalesRepView):

        • Applies access control according to a single position or a sales team.

        • Displays records according to one of the following items: The user position or the sales team that includes the user position. The Visibility field or Visibility MVField of the business component determines the visibility. 

      • 1 (ManagerView):

        • Displays records that the user and the others who report to the user can access. For example, it includes the records that Siebel CRM displays in the My Team’s Accounts visibility filter. 

      • 2 (PersonalView):
        Displays records that the user can access, as determined by the Visibility Field property of the BusComp view mode object. For example, it includes the records that Siebel CRM displays in the My Accounts visibility filter.

      • 3 (AllView):
        Displays all records that includes valid owner. For example, it includes the records that Siebel CRM displays in the All Accounts Across Organizations visibility filter.

      Data Sense Filter Query

      Use this field to write a query to filter the Business Objects metadata being downloaded into the application.

      Limit the number of objects to retrieve through DataSense to a few objects using search specifications; otherwise retrieving metadata slows down Studio.

      Required Dependencies

      Click Add File to browse to and attach the required jar files to your project’s Build path. 

      requireddependencies1

      After the jar files are attached, they appear in the lib\siebel directory of your project’s root folder.

      required+dependencies

      If you provide the wrong files (either an invalid jars or a completely different library), Studio displays the following error message: 

      depedencies+error

    2. For the Siebel Business Services connector:

      businessservicesconfig

      Field Description

      Name

      Enter a name to this connector to reference it later.

      User

      Enter the Siebel username you want to use for this configuration.

      Password

      Enter the corresponding Siebel password.

      Server

      Enter the server IP address of your Siebel instance.

      Port

      Enter the port number.

      Server Name

      Enter the Siebel Enterprise server name.

      Object Manager

      Enter the value of the Object Manager of your Siebel instance. This defaults to EAIObjMgr_enu.

      Language

      Enter the language corresponding to the locale of the Siebel instance.

      Encoding

      Enter an encoding type supported by the Siebel server.

      Enable DataSense

      This option is selected by default. If you want to disable the option, click the box to clear it.

      Default View Mode

      Default View Mode is 3. It is used to set the visibility type for a business service.

      Supported values:

      • 0 (SalesRepView):

        • Applies access control according to a single position or a sales team.

        • Displays records according to one of the following items: The user position or the sales team that includes the user position. The Visibility field or Visibility MVField of the business component determines the visibility. 

      • 1 (ManagerView):
        Displays records that the user and the others who report to the user can access. For example, it includes the records that Siebel CRM displays in the My Team’s Accounts visibility filter. 

      • 2 ( PersonalView):
        Displays records that the user can access, as determined by the Visibility Field property of the BusComp view mode object. For example, it includes the records that Siebel CRM displays in the My Accounts visibility filter.

      • 3 (AllView):
        Displays all records that includes valid owner. For example, it includes the records that Siebel CRM displays in the All Accounts Across Organizations visibility filter.

      Data Sense Filter Query

      Use this field to write a query to filter the Business Services metadata being downloaded into the application. 

      Limit the number of objects to retrieve through DataSense to a few objects using search specifications, otherwise retrieving metadata slows down Studio. The Siebel Vanilla installation comes with 8000 predefined objects versus 350 in SFDC.

      Required Dependencies

      Click Add File to attach required jar files to your project’s Build path. 

      requireddependencies1

      After the jar files are attached, they appear in the lib/siebel directory of your project’s root folder.

      required+dependencies

      If you provide the wrong files (either an invalid jars or a completely different library), Studio displays the following error message: 

      depedencies+error

    3. For the Siebel Integration Objects connector:

      integrationobjectconfig

      Field Description

      Name

      Enter a name to this connector to reference it later.

      User

      Enter the Siebel username you want to use for this configuration.

      Password

      Enter the corresponding Siebel password.

      Server

      Enter the server IP address of your Siebel instance.

      Port

      Enter the port number.

      Server Name

      Enter the Siebel Enterprise server name.

      Object Manager

      Enter the value of the Object Manager of your Siebel instance. This defaults to EAIObjMgr_enu.

      Language

      Enter the language corresponding to the locale of the Siebel instance.

      Encoding

      Enter an encoding type supported by the Siebel server.

      Enable DataSense

      This option is selected by default. If you want to disable the option, click the box to clear it.

      Default View Mode

      The default value for this field is 3. It is used to set the visibility type for a integration object.

      Supported values:

      • 0 (SalesRepView):

        • Applies access control according to a single position or a sales team.

        • Displays records according to one of the following items: The user position or the sales team that includes the user position. The Visibility field or Visibility MVField of the business component determines the visibility. 

      • 1 (ManagerView):
        Displays records that the user and the others who report to the user can access. For example, it includes the records that Siebel CRM displays in the My Team’s Accounts visibility filter. 

      • 2 ( PersonalView):
        Displays records that the user can access, as determined by the Visibility Field property of the BusComp view mode object. For example, it includes the records that Siebel CRM displays in the My Accounts visibility filter.

      • 3 (AllView):
        Displays all records that includes valid owner. For example, it includes the records that Siebel CRM displays in the All Accounts Across Organizations visibility filter.

      Data Sense Filter Query

      Use this field to write a query to filter the Integration Objects metadata being downloaded into the application. 

      Limit the number of objects to retrieve through DataSense to a few objects using search specifications; otherwise retrieving metadata slows down Studio. The Siebel Vanilla installation comes with 8000 predefined objects versus 350 in SFDC.

      Data Sense Flat Fields

      Select this box to allow Studio to flatten the object for DataSense purposes.

      Anypoint Studio doesn’t support hierarchical objects.

      Required Dependencies

      Click Add File to attach required jar files to your project’s Build path. requireddependencies1 After jar files are attached, they appear in the lib/siebel directory of your project’s root folder. required+dependencies If you provide the wrong files (either an invalid jars or a completely different library), Studio displays the following error message:  depedencies+error

  6. Keep the Pooling Profile and the Reconnection tabs with their default entries.

  7. Click Test Connection to confirm that the parameters of your global Siebel connector are accurate, and that Mule is able to successfully connect to your instance of Siebel. Read more about Testing Connections.

  8. Click OK to save the global connector configurations. 

  1. To configure the Siebel Business Objects connector:

    1. Ensure you have included the following namespaces in your configuration file:

      
                
                         
                      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      
      &lt;mule xmlns="http://www.mulesoft.org/schema/mule/core"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns:siebel="http://www.mulesoft.org/schema/mule/siebel"
            xsi:schemaLocation="
                     http://www.mulesoft.org/schema/mule/core
                     http://www.mulesoft.org/schema/mule/core/current/mule.xsd
                     http://www.mulesoft.org/schema/mule/siebel
                     http://www.mulesoft.org/schema/mule/siebel/current/mule-siebel.xsd"&gt;
            &lt;!-- here goes your flows and configuration elements --&gt;
      &lt;/mule&gt;
    2. Create a global Siebel Business Object configuration outside and above your flows, using the following global configuration code:

      
                
                         
                      
      1
      
      &lt;siebel:config name="Oracle_Siebel_Business_Object" user="${siebel.user}" password="${siebel.password}" server="${siebel.server}" serverName="${siebel.servername}" objectManager="${siebel.mgr}" dataSenseFilterQueryBusComp="[Name] = 'Action_IO' OR [Name] = 'Contact_IO'" dataSenseFilterQueryBusObjects="[Name] = 'Action_IO' OR [Name] = 'Contact_IO'" doc:name="oracle siebel business objects"&gt;
      Parameter Description

      name

      Enter a name for this connector to reference it later.

      user

      Enter the Siebel username to use.

      password

      Enter the corresponding Siebel password.

      server

      Enter the server IP address of your Siebel instance.

      serverName

      Enter the Siebel Enterprise server name.

      objectManager

      Enter the value of the Object Manager of your Siebel instance. This defaults to EAIObjMgr_enu.

      dataSenseFilterQueryBusComp

      Write a query to filter the Business Components metadata being downloaded into the application.

      defaultViewModeBusComp

      Enter the default view for DataSense purposes. The default value for this field is 3. 

      Supported values:

      • 0 (SalesRepView):

        • Applies access control according to a single position or a sales team.

        • Displays records according to one of the following items: The user position or the sales team that includes a user’s position. The Visibility field or Visibility MVField of the business component determines the visibility. 

      • 1 (ManagerView):

        • Displays records that a user and others who report to the user can access. For example, it includes the records that Siebel CRM displays in the My Team’s Accounts visibility filter. 

      • 2 ( PersonalView):
        Displays records that a user can access, as determined by the Visibility Field property of the BusComp view mode object. For example, it includes the records that Siebel CRM displays in the My Accounts visibility filter.

      • 3 (AllView):
        Displays all records that includes a valid owner. For example, it includes the records that Siebel CRM displays in the All Accounts Across Organizations visibility filter.

      dataSenseFilterQueryBusObjects

      Write a query to filter the Business Objects metadata being downloaded into the application.

      defaultViewModeBusObjects

      Use to set the visibility type for a business component. Supported values:

      • 0 (SalesRepView):

        • Applies access control according to a single position or a sales team.

        • Displays records according to one of the following items: The user position or the sales team that includes the user position. The Visibility field or Visibility MVField of the business component determines the visibility. 

      • *1 (ManagerView):
        Displays records that the user and the others who report to the user can access. For example, it includes the records that Siebel CRM displays in the My Team’s Accounts visibility filter. 

      • 2 ( PersonalView):
        Displays records that the user can access, as determined by the Visibility Field property of the BusComp view mode object. For example, it includes the records that Siebel CRM displays in the My Accounts visibility filter.

      • 3 (AllView):
        Displays all records that includes valid owner. For example, it includes the records that Siebel CRM displays in the All Accounts Across Organizations visibility filter.

  2. To configuring the Siebel Business Services Connector:

    1. Ensure you have included the following namespaces in your configuration file:

      
                
                         
                      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      
      &lt;mule xmlns="http://www.mulesoft.org/schema/mule/core"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns:siebel-bs="http://www.mulesoft.org/schema/mule/siebel-bs"
            xsi:schemaLocation="
                     http://www.mulesoft.org/schema/mule/core
                     http://www.mulesoft.org/schema/mule/core/current/mule.xsd
                     http://www.mulesoft.org/schema/mule/siebel-bs
                     http://www.mulesoft.org/schema/mule/siebel-bs/current/mule-siebel-bs.xsd"&gt;
            &lt;!-- here goes your flows and configuration elements --&gt;
      &lt;/mule&gt;
    2. Create a global Siebel Business Services configuration outside and above your flows, using the following global configuration code.

      
                
                         
                      
      1
      
      &lt;siebel-bs:config name="Oracle_Siebel_Business_Services__Connection" user="${siebel.user}" password="${siebel.password}" server="${siebel.server}" serverName="${siebel.servername}" objectManager="${siebel.mgr}" dataSenseFilterQuery="${siebel.filterBusComp}" doc:name="Oracle Siebel Business Services: Connection" fileEncoding="${siebel.encoding}" language="${siebel.language}" port="${siebel.port}"/&gt;
      Field Description

      Name

      Enter a name for this connector to reference it later.

      user

      Enter the Siebel username to use.

      password

      Enter the corresponding Siebel password.

      server

      Enter the server IP address of your Siebel instance.

      serverName

      Enter the Siebel Enterprise server name.

      objectManager

      Enter the value of the Object Manager of your Siebel instance. This defaults to EAIObjMgr_enu.

      language

      Enter the language corresponding to the locale of the Siebel instance.

      fileEncoding

      Enter an encoding type supported by the Siebel server.

      dataSenseFilterQuery

      Use this field to write a query to filter the Business Services metadata being downloaded into the application. 

      Limit the number of objects to retrieve through DataSense to a few objects using search specifications, otherwise retrieving metadata slows down Studio. The Siebel Vanilla installation comes with 8000 predefined objects versus 350 in SFDC.

      defaultViewMode

      It is used to set the visibility type for a business service.

      Supported values:

      • 0 (SalesRepView):

        • Applies access control according to a single position or a sales team.

        • Displays records according to one of the following items: The user position or the sales team that includes the user position. The Visibility field or Visibility MVField of the business component determines the visibility. 

      • 1 (ManagerView):
        Displays records that the user and the others who report to the user can access. For example, it includes the records that Siebel CRM displays in the My Team’s Accounts visibility filter. 

      • 2 ( PersonalView):
        Displays records that the user can access, as determined by the Visibility Field property of the BusComp view mode object. For example, it includes the records that Siebel CRM displays in the My Accounts visibility filter.

      • 3 (AllView):
        Displays all records that includes valid owner. For example, it includes the records that Siebel CRM displays in the All Accounts Across Organizations visibility filter.

  3. To configure the Siebel Integration Objects connector:

    1. Ensure you have included the following namespaces in your configuration file:

      
                
                         
                      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      
      &lt;mule xmlns="http://www.mulesoft.org/schema/mule/core"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns:siebel-io="http://www.mulesoft.org/schema/mule/siebel-io"
            xsi:schemaLocation="
                     http://www.mulesoft.org/schema/mule/core
                     http://www.mulesoft.org/schema/mule/core/current/mule.xsd
                     http://www.mulesoft.org/schema/mule/siebel-io
                     http://www.mulesoft.org/schema/mule/siebel-io/current/mule-siebel-io.xsd"&gt;
            &lt;!-- here goes your flows and configuration elements --&gt;
      &lt;/mule&gt;
    2. Create a global Siebel Integration Objects configuration outside and above your flows, using the following global configuration code:

      
                
                         
                      
      1
      
      &lt;siebel-io:config name="Oracle_Siebel_Integration_Objects__Connection" user="${siebel.user}" password="${siebel.password}" server="${siebel.server}" serverName="${siebel.servername}" objectManager="${siebel.mgr}" dataSenseFilterQuery="${siebel-io.dataSenseFilterQuery}" doc:name="Oracle Siebel Integration Objects: Connection" fileEncoding="${siebel.encoding}" language="${siebel.language}" port="${siebel.port}"/&gt;
      Field Description

      name

      Enter a name for this connector to reference it later.

      user

      Enter the Siebel username to use.

      password

      Enter the corresponding Siebel password.

      server

      Enter the server IP address of your Siebel instance.

      serverName

      Enter the Siebel Enterprise server name.

      objectManager

      Enter the value of the Object Manager of your Siebel instance. The default value is EAIObjMgr_enu.

      language

      Enter the language corresponding to the locale of the Siebel instance.

      fileEncoding

      Enter an encoding type supported by the Siebel server.

      dataSense FilterQuery

      Use this field to write a query to filter the Integration Objects metadata being downloaded into the application. 

      Limit the number of objects to retrieve through DataSense to a few objects using search specifications; otherwise retrieving metadata slows down Studio. The Siebel Vanilla installation comes with 8000 predefined objects versus 350 in SFDC.

      defaultViewMode

      Use this field to set the visibility type for a integration object.

      Supported values:

      • 0 (SalesRepView):

        • Applies access control according to a single position or a sales team.

        • Displays records according to one of the following items: The user position or the sales team that includes the user position. The Visibility field or Visibility MVField of the business component determines the visibility. 

      • 1 (ManagerView): Displays records that the user and the others who report to the user can access. For example, it includes the records that Siebel CRM displays in the My Team’s Accounts visibility filter. 

      • 2 ( PersonalView):
        Displays records that the user can access, as determined by the Visibility Field property of the BusComp view mode object. For example, it includes the records that Siebel CRM displays in the My Accounts visibility filter.

      • 3 (AllView):
        Displays all records that includes valid owner. For example, it includes the records that Siebel CRM displays in the All Accounts Across Organizations visibility filter.

Using the Connector

Siebel connector is a operation based connector, which means that when you add a Siebel connector to your flow, you need to configure a specific operation for the connector to perform. 

Use cases

The following are the common use cases for the Siebel connector: 

  • Poll a Siebel connector at a regular interval for new registries and send the output into Salesforce.

  • Poll a Salesforce connector at a regular interval for new registries and send the output into Siebel.

Adding the Oracle Siebel Business Objects Connector to a Flow

  1. Create a new Mule project in Anypoint Studio.

  2. Add a suitable Mule Inbound endpoint, such as the HTTP Inbound Endpoint or File endpoint, to begin the flow.

  3. Drag the business objects connector onto the canvas, then select it to open the properties editor.

  4. Configure the connector’s parameters according to the table below.  

    oracl+business+objects+connector

    Field Description Default Value

    Display Name

    Enter a unique label for the connector in your application.

    Oracle Siebel Business Objects

    Connector Configuration

    Select the global Siebel connector element that you create.

    General:

    The values in the General section vary depending on the operation you choose. The fields below are specific to Query Business Component operation. For a detailed explanation of all the available options, access the Mule API Reference documentation for Siebel connector.

    Sort specification

    Specify sorting criteria for the list of business components returned by the query.

    Business Object Component Type

    Define the Siebel business object type to act upon. The Siebel Jdb connector can access any one of the many business objects available in the Siebel CRM.

    Search Expression

    Use Mule Expression Language (MEL) to define a search expression that would return a list of business components.

    View Mode

    Define the Siebel view mode for the results the connector returns.

    3

    Fields to Retrieve

    Use this section to specify the list of fields to retrieve in the query:

    From Message: Specify the Business Component fields to retrieve in the incoming payload.

    Create Object manually: Specify the fields manually using the Object Builder editor.

    From Message

    Search Spec

    Specify the search values to use as filters in the search query:

    From Message: Define which values to use as search filters in the incoming payload.

    Create Object manually: Define which values to use as search filters manually using the Object Builder editor.

    Generic:

    Operation

    Define the action this component must perform: create, delete, update, insert, upsert, or query business components

    Create Business Component

  5. Click blank space on the canvas to save your Oracle Siebel Business Objects connector configurations.

Adding the Oracle Siebel Business Services Connector to a Flow

  1. Create a new Mule project in Anypoint Studio.

  2. Add a suitable Mule Inbound endpoint, such as the HTTP Inbound Endpoint or File endpoint, to begin the flow.

  3. Drag the business services connector onto the canvas, then select it to open the properties editor.

  4. Configure the connector’s parameters according to the table below.
    oraclebusinessservices

Field Description Default Value

Display Name

Define a unique label for the connector in your application.

Oracle Siebel Business Services

Connector Configuration

Select the global Siebel connector element that you create.

Operation

Define the action this component must perform:

  • Execute: Executes a Siebel Service using SiebelPropertySets.

  • Execute business service: Executes a Siebel Service using Maps instead of SiebelPropertySet.

General

If you select the Execute operation:

Method Name

Enter the name of the method to be executed.

Service Name

Enter the name of the Siebel service to be executed

Input Properties

From Message: Define the SiebelPropertySet in the incoming payload.

Create Object manually: Define the SiebelPropertySet manually

If you select the Execute business service operation:

Business Service

Enter the name of the Siebel service to be executed.

Input

From Message: Specify which service to execute in the incoming payload.

Create Object manually: Specify which service to execute manually.

Click blank space on the canvas to save your Oracle Siebel Business Services connector configurations.

Adding the Oracle Siebel Integration Objects Connector to a Flow

  1. Create a new Mule project in Anypoint Studio.

  2. Add a suitable Mule Inbound endpoint, such as the HTTP Inbound Endpoint or File endpoint, to begin the flow.

  3. Drag the business objects connector onto the canvas, then select it to open the properties editor.

  4. Configure the connector’s parameters according to the table below.

    io22

    Field Description Default Value

    Display Name

    Define a unique label for the connector in your application.

    Oracle Siebel Business Services

    Connector Configuration

    Select the global Siebel connector element that you create.

    Operation

    Define the action this component must perform: Executes Siebel Adapter.

    Executes Siebel Adapter

    General

    Integration Object

    Define the Siebel integration object type to act upon

    Method

    Define the EAI Siebel Adapter method.

    Input Properties

    From Message: Map the Integration Object fields from the incoming payload.

    Create Object manually: Define the SiebelPropertySet manually

    From Message

  5. Click blank space on the canvas to save your Oracle Siebel Business Objects connector configurations.

Example Use Case 1

Poll a Siebel connector at a regular interval, looking for new registries, and send the output into Salesforce.

Refer to documentation on the Poll ScopeDataMapper, and the Salesforce connector for in-depth information about these Mule elements.

example+use+case

  1. Drag a Poll Scope into a new flow. + poll2

    Poll Scope executes any Mule element you place inside it, at regular intervals. In this case, it is a Siebel endpoint.

  2. Configure the Poll Scope as follows

    pollnew

    Attribute Value

    Frequency

    60000

    Start Delay

    0

    Time Unit

    MILLISECONDS

    Enable Watermark

    check

    Variable Name

    lastUpdate

    Default Expression

    #[new org.joda.time.DateTime().withZone(org.joda.time.DateTimeZone.forID("PST8PDT")).minusSeconds(5).toString("MM/dd/yyyy HH:mm:ss")]

    Update Expression

    #[new org.joda.time.DateTime().withZone(org.joda.time.DateTimeZone.forID("PST8PDT")).minusSeconds(5).toString("MM/dd/yyyy HH:mm:ss")]

    The poll scope triggers once a minute. The watermark ensures that registries in the Siebel DB aren’t processed more than once. It does this by keeping track of  the last element processed in the last poll.

    To learn how watermarks work and what each attribute is for, read about  Poll Schedulers.
  3. Drag an Oracle Siebel Business Objects connector into the space provided by the Poll Scope.

    poll 

    The Siebel connector is now polled at the intervals you specified in the Poll Scope.

  4. Open Siebel connector’s properties editor, and next to the Config Reference field, click the + sign to add a new Global Element.

    boconfig

  5. On the Global Element Properties window, configure the global element according to the settings below: config

    Attribute Value

    Name

    Oracle_Siebel_Business_Object

    User

    <Your Siebel user name>

    Password

    <Your Siebel password>

    Port

    <Port you’re using>

    Server Name

    <Server name on which the Siebel instance is hosted>

    Object Manager

    <Object manager you use>

    Default View Mode

    3

    Data Sense Filter Query

    [Name] = 'Action_IO' OR [Name] = 'Contact_IO'

    Default View Mode

    3

    Data Sense Filter Query

    [Name] = 'Action_IO' OR [Name] = 'Contact_IO'

    DataSense is filtered via a query to extract data only from Contacts and Action. This aids better performance by avoiding unnecessary data extraction.
  6. Click Test Connection at the bottom of the window to ensure that everything is correctly configured.

  7. Next, configure the Oracle Siebel Business Objects connector according to the settings below:

    boconfig1

    Attribute Value

    Display Name

    Oracle Siebel business objects

    Connector Configuration

    Oracle_Siebel_Business_Object

    Business Object Component Type

    Contact.Contact

    Search Expression

    [Last Update - SDQ] > '#[flowVars.lastUpdate]'

    View Mode

    3

    fields-to-retrieve

    Create Object Manually

    search-spec

    None

    Operation

    Query business components

    Note: The search expression uses the same variable that is being updated by the Poll Scope. In this way, the Siebel connector returns only those DB records that Mule hasn’t processed in the last poll.

    Child Element Description

    siebel:fields-to-retrieve

    Lists the output fields of the query

  8. To set up the structure of the output message, switch views to the Studio XML Editor. Look for the Siebel connector in your XML code in a tag that looks like the tag below:

    
           
                   
                
    1
    2
    
    &lt;siebel:query-business-components config-ref="Oracle_Siebel_Business_Object" businessObjectComponentType="Contact.Contact" searchExpression="[Last Update - SDQ] &amp;gt; '#[flowVars.lastUpdate]'" doc:name="oracle siebel business objects"&gt;
                &lt;/siebel:query-business-components&gt;

    In between the start and end tags of the  siebel:query-business-components , add the following child element structure:

    
           
                   
                
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    &lt;siebel:fields-to-retrieve&gt;
        &lt;siebel:fields-to-retrieve&gt;Last Name&lt;/siebel:fields-to-retrieve&gt;
        &lt;siebel:fields-to-retrieve&gt;Email Address&lt;/siebel:fields-to-retrieve&gt;
        &lt;siebel:fields-to-retrieve&gt;First Name&lt;/siebel:fields-to-retrieve&gt;
        &lt;siebel:fields-to-retrieve&gt;Primary Organization&lt;/siebel:fields-to-retrieve&gt;
        &lt;siebel:fields-to-retrieve&gt;Personal Contact&lt;/siebel:fields-to-retrieve&gt;
        &lt;siebel:fields-to-retrieve&gt;Employee Number&lt;/siebel:fields-to-retrieve&gt;
        &lt;siebel:fields-to-retrieve&gt;Account Integration Id&lt;/siebel:fields-to-retrieve&gt;
    &lt;/siebel:fields-to-retrieve&gt;
  9. Drag a Logger after the Poll to register the Poll output.

    logger

    Attribute Value

    Message

    Polling from Siebel #[payload]

    Level

    Info

  10. Drag a Salesforce Connector after the Logger. It uploads the output of the poll into your Salesforce account.
    salesforce

  11. Open the Properties editor of the Salesforce connector, and click the + sign to add a new Salesforce global element.
    salesforce1

  12. On the Choose Global Type window, click Salesforce: Basic authentication, and then click Ok.

    sfbasicauth

  13. Configure the Salesforce global element properties:

    Salesconfig

    Attribute Value

    Name

    Salesforce

    Username

    <Your user name>

    Password

    <Your password>

    Security Token

    <Your Token>

    Url

    <The URL on which your Salesforce account is hosted>

    Proxy Port

    80

    Enable DataSense

    check

  14. Click Test Connection to ensure that everything is correctly configured.

  15. Configure the Salesforce connector according to the settings below:

    salesforce2

    Attribute Value

    Display Name

    Salesforce

    Connector Configuration

    Salesforce

    Operation

    Create

    sObject Type

    contact

    sObjects

    From Message:#[payload]

  16. Add a Data Mapper element between the Logger and the Salesforce connector. It maps fields from the data structure returned by Siebel into the data structure required by Salesforce.
    datamapper

  17. Configure the Data Mapper element:

    If you have already configured both connectors properly, DataMapper automatically suggests the mapping you need to make.

    Input:

    Attribute Value

    Type

    Connector

    Connector

    Oracle_Siebel_Business_Object

    Operation

    query-business-components

    Object

    List<Contact.Contact>

    Output:

    Attribute Value

    Type

    Connector

    Connector

    Salesforce

    Operation

     create

    Object

     List<Contact>

  18. Click Create mapping for the DataMapper to build a mapping between both the data structures.

  19. The following fields don’t have the same names in Salesforce and Siebel. You need to configure them manually.

    Name in Siebel Name in Salesforce

    Email_Address

    Email

    First_Name

    FirstName

    Last_Name

    LastName

  20. There are two ways you can link these:

    1. Look for the fields on both columns in DataLoader’s graphical view, then simply drag and drop one onto the other.

      This is usually the easiest way to go, but given the number of fields to navigate, it may be hard to find the fields you need. Use the search box above the field list to find these quickly.
    2. Enter DataLoader’s Script view and paste the following lines of code below what is already written:

      
                
                        
                     
      1
      2
      3
      
      output.Email = input.Email_Address;
      output.FirstName = input.First_Name;
      output.LastName = input.Last_Name;

      The full code should look like this:

      
                
                        
                     
      1
      2
      3
      4
      5
      6
      7
      8
      
      //MEL
      //START -&gt; DO NOT REMOVE
      output.__id = input.__id;
      //END -&gt; DO NOT REMOVE
      output.Department = input.Department;
      output.Email = input.Email_Address;
      output.FirstName = input.First_Name;
      output.LastName = input.Last_Name;
  21. Add a Logger at the end of the flow to register the outcome of the operation:

    Siebel+to+Salesforce

    Attribute Value

    Message

    #[payload.toString()]

    Level

    Info

  22. Save and run the project as a Mule Application.

  1. At the start of your project, add a Salesforce Global Element to set up global configuration attributes for this connector:

    
           
                   
                
    1
    2
    3
    
    &lt;sfdc:config name="Salesforce" username="${salesforce.user}" password="${salesforce.password}" securityToken="${salesforce.securitytoken}" url="${salesforce.url}" doc:name="Salesforce"&gt;
    &lt;sfdc:connection-pooling-profile initialisationPolicy="INITIALISE_ONE" exhaustedAction="WHEN_EXHAUSTED_GROW"/&gt;
    &lt;/sfdc:config&gt;
    Element Description

    sfdc:config

    Configures connection settings for Salesforce

    Attribute Value

    name

    Salesforce

    username

    <Your username>

    password

    <Your password>

    security token

    <Your security token>

    url

    <The URL on which your Salesforce account is hosted>

    doc:name

    Salesforce

    Child Element Description

    sfdc:connection-pooling-profile

    Configures connection pooling settings for connecting to Salesforce

    Attribute Value

    initialisationPolicy

    INITIALISE_ONE

    exhaustedAction

    WHEN_EXHAUSTED_GROW

  2. After the Salesforce Global Element, add a Siebel Global Element to set up global configuration attributes for this connector:

    
           
                   
                
    1
    2
    3
    
    &lt;siebel:config name="Oracle_Siebel_Business_Object" user="${siebel.user}" password="${siebel.password}" server="${siebel.server}" serverName="${siebel.servername}" objectManager="${siebel.mgr}" dataSenseFilterQueryBusComp="[Name] = 'Action_IO' OR [Name] = 'Contact_IO'" dataSenseFilterQueryBusObjects="[Name] = 'Action_IO' OR [Name] = 'Contact_IO'" doc:name="oracle siebel business objects"&gt;
           &lt;siebel:connection-pooling-profile initialisationPolicy="INITIALISE_ONE" exhaustedAction="WHEN_EXHAUSTED_GROW"/&gt;
        &lt;/siebel:config&gt;
    Element Description

    siebel:config

     Configures connection settings for Siebel

    Attribute Value

    name

    Oracle_Siebel_Business_Object

    user

    <Your user name>

    password

    <Your password>

    server

    <The IP address of your Siebel server>

    serverName

    <The Siebel Enterprise server name>

    objectManager

    <The object manager you use>

    dataSenseFilterQueryBusComp

    [Name] = 'Action_IO' OR [Name] = 'Contact_IO'

    dataSenseFilterQueryBusObjects

    [Name] = 'Action_IO' OR [Name] = 'Contact_IO'

    doc:name

    oracle siebel business objects

    Child Element Description

    siebel:connection-pooling-profile

     Configures connection pooling settings for connecting to Siebel

    Attribute Value

    initialisationPolicy

    INITIALISE_ONE

    exhaustedAction

    WHEN_EXHAUSTED_GROW 

  3. Build a new Flow:

    
           
                   
                
    1
    2
    
    &lt;flow name="Poll_Siebel_2_Salesforce" doc:name="Poll_Siebel_2_Salesforce" processingStrategy="synchronous"&gt;
        &lt;/flow&gt;
  4. Add a Poll Scope inside your new Flow.

    
           
                   
                
    1
    2
    3
    4
    
    &lt;poll doc:name="Poll"&gt;
        &lt;fixed-frequency-scheduler frequency="60000"/&gt;
        &lt;watermark variable="lastUpdate" default-expression="#[new org.joda.time.DateTime().withZone(org.joda.time.DateTimeZone.forID(&amp;quot;PST8PDT&amp;quot;)).minusSeconds(5).toString(&amp;quot;MM/dd/yyyy HH:mm:ss&amp;quot;)]" update-expression="#[new org.joda.time.DateTime().withZone(org.joda.time.DateTimeZone.forID(&amp;quot;PST8PDT&amp;quot;)).minusSeconds(5).toString(&amp;quot;MM/dd/yyyy HH:mm:ss&amp;quot;)]"/&gt;
    &lt;/poll&gt;
    Element Description

    poll

    A Poll Scope executes the Mule element you place inside it at regular intervals. In this case, it will be a Siebel endpoint.

    Child Element Description

    fixed-frequency-scheduler

    Sets the interval for polling

    Attribute Value

    frequency

    6000

    The poll scope triggers once a minute. The watermark ensures that registries in the Siebel DB aren’t processed more than once. It does so by keeping track of  the last element processed in the last poll.

    Child Element Description

    watermark

    The watermark ensures that registries in the Siebel DB aren’t processed more than once by keeping track of what was the last element that was processed in the last poll.

    To learn how watermarks work and what each attribute is for, read about Poll Schedulers.
    Attribute Value

    variable

    lastUpdate

    default-expression

    #[new org.joda.time.DateTime().withZone(org.joda.time.DateTimeZone.forID(&quot;PST8PDT&quot;)).minusSeconds(5).toString(&quot;MM/dd/yyyy HH: mm:ss&quot ;)]

    update-expression

    #[new org.joda.time.DateTime().withZone(org.joda.time.DateTimeZone.forID(&quot;PST8PDT&quot;)).minusSeconds(5).toString(&quot;MM/dd/yyyy HH:mm:ss&quot;)]

  5. Inside this Poll Scope, add a Siebel:query-business-components element

    
           
                   
                
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    &lt;siebel:query-business-components config-ref="Oracle_Siebel_Business_Object" businessObjectComponentType="Contact.Contact" searchExpression="[Last Update - SDQ] &amp;gt; '#[flowVars.lastUpdate]'" doc:name="oracle siebel business objects"&gt;
        &lt;siebel:fields-to-retrieve&gt;
            &lt;siebel:fields-to-retrieve&gt;Last Name&lt;/siebel:fields-to-retrieve&gt;
            &lt;siebel:fields-to-retrieve&gt;Email Address&lt;/siebel:fields-to-retrieve&gt;
            &lt;siebel:fields-to-retrieve&gt;First Name&lt;/siebel:fields-to-retrieve&gt;
            &lt;siebel:fields-to-retrieve&gt;Primary Organization&lt;/siebel:fields-to-retrieve&gt;
            &lt;siebel:fields-to-retrieve&gt;Personal Contact&lt;/siebel:fields-to-retrieve&gt;
            &lt;siebel:fields-to-retrieve&gt;Employee Number&lt;/siebel:fields-to-retrieve&gt;
            &lt;siebel:fields-to-retrieve&gt;Account Integration Id&lt;/siebel:fields-to-retrieve&gt;
        &lt;/siebel:fields-to-retrieve&gt;
    &lt;/siebel:query-business-components&gt;

    The Siebel connector polls at the intervals you specified in the Poll Scope:

    Element Description

    siebel:query-business-components

    Connects to Siebel Business Components

    Attribute Value

    config-ref

    Oracle_Siebel_Business_Object

    businessObjectComponentType

    Contact.Contact

    searchExpression

    [Last Update - SDQ] &gt; '#[flowVars.lastUpdate]

    doc:name

    oracle siebel business objects

    Child Element Description

    siebel:fields-to-retrieve

    Lists the output fields of the query

  6. After the Poll Scope, add a Logger to verify the output of this poll:

    
           
                   
                
    1
    
    &lt;logger message="Polling from Siebel #[payload]" level="INFO" doc:name="Logger"/&gt;
    Element Description

    logger

    Logs messages to the Mule console

    Attribute Value

    Message

    Polling from Siebel #[payload]

    Level

    Info

  7. Add a Salesforce connector after this logger. It uploads the output of the poll into your Salesforce account.

    
           
                   
                
    1
    2
    3
    
    &lt;sfdc:create config-ref="Salesforce" type="Contact" doc:name="Salesforce"&gt;
        &lt;sfdc:objects ref="#[payload]"/&gt;
    &lt;/sfdc:create&gt;
    Element Description

    sfdc:create

    Creates a contact entry on the specified Salesforce account

    Attribute Values

    config-ref

    Salesforce

    type

    Contact

    doc:name

    Salesforce

    Child Element Description

    sfdc:objects

    Defines what structure the created object will have

    Attribute Values

    ref

    #[payload]

  8. Add another logger after the Salesforce connector to verify the success of the operation.

    
           
                   
                
    1
    
    &lt;logger message="#[payload.toString()]" level="INFO" doc:name="Logger"/&gt;
    Element Description

    logger

    Logs messages to the Mule console

    Attribute Value

    Message

    #[payload.toString()]

    Level

    Info

  9. Add a DataMapper component between the first logger and the Salesforce connector. It maps fields from the data structure returned by Siebel into the data structure required by Salesforce

    
           
                   
                
    1
    
    &lt;data-mapper:transform doc:name="DataMapper"/&gt;
  10. Switch to Studio Visual editor to configure DataMapper correctly. Click on the DataMapper icon to edit its fields:

    If you have already configured both connectors properly, DataMapper should be able to automatically suggest the mapping you need to make.

    Input:

    Attribute Value

    Type

    Connector

    Connector

    Oracle_Siebel_Business_Object

    Operation

    query-business-components

    Object

    List<Contact.Contact>

    Output:

    Attribute Value

    Type

    Connector

    Connector

    Salesforce

    Operation

    create

    Object

    List<Contact>

  11. Click Create mapping for DataMapper to build a mapping between both data structures.

  12. A few fields don’t have the same names in Salesforce as they do in Siebel. You must configure them manually.

    Name in Siebel Name in Salesforce

    Email_Address

    Email

    First_Name

    FirstName

    Last_Name

    LastName

    There are two ways in which you can link these:

    1. Look for the fields on both columns in DataLoader’s graphical view, then simply drag and drop one onto the other.

      This is usually the easiest way to go, but given the number of fields to navigate, it may be hard to find the fields you need. Use the search box above the field list to find these quickly.
    2. Enter DataLoader’s Script view and paste the following lines of code below what is already written:

      
                
                        
                     
      1
      2
      3
      
      output.Email = input.Email_Address;
      output.FirstName = input.First_Name;
      output.LastName = input.Last_Name;

      The full code should look like this:

      
                
                        
                     
      1
      2
      3
      4
      5
      6
      7
      8
      
      //MEL
      //START -&gt; DO NOT REMOVE
      output.__id = input.__id;
      //END -&gt; DO NOT REMOVE
      output.Department = input.Department;
      output.Email = input.Email_Address;
      output.FirstName = input.First_Name;
      output.LastName = input.Last_Name;
  13. Save and run the project as a Mule Application.

Example Code

For this code to work in Anypoint Studio, you must provide the credentials for both Siebel and Salesforce accounts. You can either replace the variables with their values in the code, or you can add a file named mule.properties in the src/main/properties folder to provide values for each variable.

         
      
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<mule xmlns:context="http://www.springframework.org/schema/context" xmlns:batch="http://www.mulesoft.org/schema/mule/batch" xmlns:tracking="http://www.mulesoft.org/schema/mule/ee/tracking" xmlns:json="http://www.mulesoft.org/schema/mule/json" xmlns:data-mapper="http://www.mulesoft.org/schema/mule/ee/data-mapper" xmlns:sfdc="http://www.mulesoft.org/schema/mule/sfdc" xmlns:siebel-io="http://www.mulesoft.org/schema/mule/siebel-io" xmlns:siebel="http://www.mulesoft.org/schema/mule/siebel" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
    xmlns:spring="http://www.springframework.org/schema/beans" version="EE-3.6.1"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/siebel http://www.mulesoft.org/schema/mule/siebel/current/mule-siebel.xsd
http://www.mulesoft.org/schema/mule/siebel-io http://www.mulesoft.org/schema/mule/siebel-io/current/mule-siebel-io.xsd
http://www.mulesoft.org/schema/mule/sfdc http://www.mulesoft.org/schema/mule/sfdc/current/mule-sfdc.xsd
http://www.mulesoft.org/schema/mule/ee/data-mapper http://www.mulesoft.org/schema/mule/ee/data-mapper/current/mule-data-mapper.xsd
http://www.mulesoft.org/schema/mule/json http://www.mulesoft.org/schema/mule/json/current/mule-json.xsd
http://www.mulesoft.org/schema/mule/ee/tracking http://www.mulesoft.org/schema/mule/ee/tracking/current/mule-tracking-ee.xsd
http://www.mulesoft.org/schema/mule/batch http://www.mulesoft.org/schema/mule/batch/current/mule-batch.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-current.xsd">
    <sfdc:config name="Salesforce" username="${salesforce.user}" password="${salesforce.password}" securityToken="${salesforce.securitytoken}" url="${salesforce.url}" doc:name="Salesforce">
        <sfdc:connection-pooling-profile initialisationPolicy="INITIALISE_ONE" exhaustedAction="WHEN_EXHAUSTED_GROW"/>
    </sfdc:config>
    <siebel:config name="Oracle_Siebel_Business_Object" user="${siebel.user}" password="${siebel.password}" server="${siebel.server}" serverName="${siebel.servername}" objectManager="${siebel.mgr}" dataSenseFilterQueryBusComp="[Name] = 'Action_IO' OR [Name] = 'Contact_IO'" dataSenseFilterQueryBusObjects="[Name] = 'Action_IO' OR [Name] = 'Contact_IO'" doc:name="oracle siebel business objects">
        <siebel:connection-pooling-profile initialisationPolicy="INITIALISE_ONE" exhaustedAction="WHEN_EXHAUSTED_GROW"/>
    </siebel:config>
    <data-mapper:config name="listcontact.contact_to_listcontact" transformationGraphPath="list&lt;contact.contact&gt;_to_list&lt;contact&gt;.grf" doc:name="listcontact.contact_to_listcontact"/>
    <context:property-placeholder location="mule.properties"/>
    <data-mapper:config name="listcontact.contact_to_listcontact_1" transformationGraphPath="list&lt;contact.contact&gt;_to_list&lt;contact&gt;_1.grf" doc:name="listcontact.contact_to_listcontact_1"/>
    <flow name="siebel2salesforce" doc:name="siebel2salesforce">
        <poll doc:name="Poll">
            <fixed-frequency-scheduler frequency="60000"/>
            <watermark variable="lastUpdate" default-expression="#[new org.joda.time.DateTime().withZone(org.joda.time.DateTimeZone.forID(&quot;PST8PDT&quot;)).minusSeconds(5).toString(&quot;MM/dd/yyyy HH:mm:ss&quot;)]" update-expression="#[new org.joda.time.DateTime().withZone(org.joda.time.DateTimeZone.forID(&quot;PST8PDT&quot;)).minusSeconds(5).toString(&quot;MM/dd/yyyy HH:mm:ss&quot;)]"/>
         <siebel:query-business-components config-ref="Oracle_Siebel_Business_Object" businessObjectComponentType="Contact.Contact"  doc:name="oracle siebel business objects" searchExpression="[Last Update - SDQ] &gt; '#[flowVars.lastUpdate]'">
                <siebel:fields-to-retrieve>
                    <siebel:fields-to-retrieve>Last Name</siebel:fields-to-retrieve>
                    <siebel:fields-to-retrieve>Email Address</siebel:fields-to-retrieve>
                    <siebel:fields-to-retrieve>First Name</siebel:fields-to-retrieve>
                    <siebel:fields-to-retrieve>Primary Organization</siebel:fields-to-retrieve>
                    <siebel:fields-to-retrieve>Personal Contact</siebel:fields-to-retrieve>
                    <siebel:fields-to-retrieve>Employee Number</siebel:fields-to-retrieve>
                    <siebel:fields-to-retrieve>Account Integration Id</siebel:fields-to-retrieve>
                </siebel:fields-to-retrieve>
            </siebel:query-business-components>
        </poll>
        <logger message="Polling from Siebel #[payload]" level="INFO" doc:name="Logger"/>
        <data-mapper:transform doc:name="List&lt;Contact.Contact&gt; To List&lt;Contact&gt;" config-ref="listcontact.contact_to_listcontact_1"/>
          
        <sfdc:create config-ref="Salesforce" type="Contact" doc:name="Salesforce">
            <sfdc:objects ref="#[payload]"/>
        </sfdc:create>
        <logger message="#[payload.toString()]" level="INFO" doc:name="Logger"/>
    </flow>
</mule>

Example Use Case 2

Poll a Salesforce connector for new registries at a regular interval and send the output into Siebel.

Refer to documentation on the Poll Scope, DataMapper, and the Salesforce Connector for in depth information about these elements.

example+use+case2

  1. Drag a Poll Scope  into a new flow:

    poll2

    Poll Scope  executes the Mule element placed inside it at regular intervals. In this case, it is a Salesforce connector.

  2. Configure the Poll Scope according to the settings below:
    pollnew

    Attribute Value

    Frequency

    60000

    Start Delay

    0

    Time Unit

    MILLISECONDS

    Enable Watermark

    check

    Variable Name

    lastUpdateSalesforce

    Default Expression

    #[org.joda.time.format.ISODateTimeFormat.dateTime().print(new org.joda.time.DateTime().withZone(org.joda.time.DateTimeZone.forID("PST8PDT")).minusSeconds(5))]

    Update Expression

    #[org.joda.time.format.ISODateTimeFormat.dateTime().print(new org.joda.time.DateTime().withZone(org.joda.time.DateTimeZone.forID("PST8PDT")).minusSeconds(5))]

    The poll scope now triggers once a minute. The watermark ensures that registries in the Salesforce aren’t processed more than once. It does this by keeping track of  the last element processed in the last poll.

    To learn how watermarks work and what each attribute is for, read about Poll Schedulers
  3. Drag a Salesforce Connector into the space inside the Poll Scope.

    poll3

    The Salesforce connector is polled at the intervals you specify in the Poll Scope

  4. Open the Properties editor of the Salesforce connector and click the + sign to add a new Salesforce global element.

    sf12

  5. On the Choose Global Type window, click Salesforce: Basic authentication, and then click Ok.

    sfbasicauth

  6. Configure the Salesforce global element properties:

    Salesconfig

    Attribute Value

    Name

    Salesforce

    User

    <Your user name>

    Password

    <Your password>

    Port

    <Port you’re using>

    URL

    <URL of your Salesforce repository>

    Enable DataSense

    check

  7. Click Test Connection to ensure that everything is correctly configured.

  8. Configure the Salesforce connector according to the settings below:

    sf22

    Attribute Value

    Display Name

    Salesforce

    Coding Reference

    Salesforce

    Operation

    Query

    Language

    Native Query Language

    Query Text

    SELECT Id, email, firstname, lastname from Contact WHERE LastModifiedDate >#[flowVars.lastUpdateSalesforce]

    Note: The search expression uses the same variable that is being updated by the Poll Scope. In this way, the Salesforce connector only returns the DB records that Mule hasn’t processed in the last poll to avoid redundancies.

  9. Drag a Logger right after the Poll Scope, it registers the output of the Poll.

    sftolog

    Attribute Value

    Message

    From SFDC: #[payload]

    Level

    Info

  10. Drag an Oracle Siebel Integration Object after the Logger. It uploads the output of the poll into your Siebel repository.
    logger+to+oracle

  11. Open the Properties editor of the Siebel connector and click the + sign to add a new Global Element: io21

  12. Configure the global element according to the settings below

    globalprop1

    Attribute Value

    Name

    Oracle_Siebel_Integration_Object

    Username

    <Your user name>

    Password

    <Your password>

    Server

    <The server where you host Siebel>

    Object Manager

    <The object manager you use>

    Enable DataSense

    check

    Default View Mode

    3

    Data Sense Filter Query

    [Name] = 'Action_IO' OR [Name] = 'Contact_IO'

  13. Click Test Connection to ensure that everything is correctly configured.

  14. Configure the Siebel connector as follows:

    io22

    Attribute Value

    Display Name

    Oracle Siebel Integration Object

    Coding Reference

    Oracle_Siebel_Integration_Object

    Operation

    Execute Siebel Adapter

    Integration Object

    Contact IO

    Method

    UPSERT

    input-properties

    From Message:  #[payload]

  15. Add a  Data Mapper element between the Logger and the Siebel connector. It maps fields from the data structure returned by Salesforce into the data structure required by Siebel.

    flow+IO

  16. Configure the Data Mapper element:

    Input:

    Attribute Value

    Type

    Connector

    Connector

    Salesforce

    By Type

    check

    List

    check

    Object

    Contact

    Output:

    Attribute Value

    Connector

    Oracle_Siebel_Integration_Object

    Operation

    execute-siebel-adapter

    Object

    Contact IO

    If DataSense works correctly, DataMapper should be able to populate all of the output fields on its own
  17. Click Create mapping for the DataMapper to build a mapping between both the data structures.

  18. A few fields don’t have the same names in Salesforce and Siebel. You must configure them manually.

    Attribute Value

    Email_Address

    Email

    First_Name

    FirstName

    Last_Name

    LastName

    Person_UId

    Id

    Also, Siebel requires two fields that don’t exist in Salesforce. You must provide some default values for these. You can set the variables to use the following default values:

    Variable Value

    Primary_Organization

    Default Organization

    Personal_Contact

    N

    There are two ways you can link these:

    1. Look for the fields on both the columns in DataLoader’s graphical view, then simply drag and drop one onto the other.

      This is usually the easiest way to go, but given the number of fields to navigate, it may be hard to find the fields you need. Use the search box above the field list to find these quickly.
    2. Enter DataLoader’s Script view and paste the following lines of code below what is already written:

      
                
                        
                     
      1
      2
      3
      4
      5
      6
      
      output.First_Name = input.FirstName;
      output.Last_Name = input.LastName;
      output.Email_Address = input.Email;
      output.Person_UId = input.Id;
      output.Primary_Organization = 'Default Organization';
      output.Personal_Contact = 'N';

      The full code should look like this: 

      
                
                        
                     
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      
      //MEL
      //START -&gt; DO NOT REMOVE
      output.__id = input.__id;
      output.__parent_id = input.__id;
      //END -&gt; DO NOT REMOVE
      output.First_Name = input.FirstName;
      output.Last_Name = input.LastName;
      output.Email_Address = input.Email;
      output.Person_UId = input.Id;
      output.Primary_Organization = 'Default Organization';
      output.Personal_Contact = 'N';
  19. Add another Logger at the end of the flow. It displays the outcome of the operation on the Console.

    Attribute Value

    Message

    #[payload.toString()]

    Level

    Info

  20. Save and run the project as a Mule Application.

  1. At the start of your project, add a Salesforce Global Element to set up global configuration attributes for this connector

    
           
                   
                
    1
    2
    3
    
    &lt;sfdc:config name="Salesforce" username="${salesforce.user}" password="${salesforce.password}" securityToken="${salesforce.securitytoken}" url="${salesforce.url}" doc:name="Salesforce"&gt;
            &lt;sfdc:connection-pooling-profile initialisationPolicy="INITIALISE_ONE" exhaustedAction="WHEN_EXHAUSTED_GROW"/&gt;
        &lt;/sfdc:config&gt;
    Element Description

    sfdc:config

    Configures connection settings for Salesforce

    Attribute Value

    name

    Salesforce

    doc:name

    Salesforce

    url

    <URL where your Salesforce account is hosted>

    password

    <Your password>

    securityToken

    <Your security token>

    username

    <Your user name>

    Child Element Description

    sfdc:connection-pooling-profile

    Configures connection pooling settings for connecting to Salesforce

    Attribute Value

    initialisationPolicy

    INITIALISE_ONE

    exhaustedAction

    WHEN_EXHAUSTED_GROW

  2. Add a Siebel Global Element to set up global configuration attributes for this connector.

    
           
                   
                
    1
    2
    3
    
    &lt;siebel:config name="Oracle_Siebel_Business_Object" user="${siebel.user}" password="${siebel.password}" server="${siebel.server}" serverName="${siebel.servername}" objectManager="${siebel.mgr}" dataSenseFilterQueryBusComp="[Name] = 'Action_IO' OR [Name] = 'Contact_IO'" dataSenseFilterQueryBusObjects="false" doc:name="oracle siebel business objects"&gt;
        &lt;siebel:connection-pooling-profile initialisationPolicy="INITIALISE_ONE" exhaustedAction="WHEN_EXHAUSTED_GROW"/&gt;
    &lt;/siebel:config&gt;
    Element Description

    siebel:config

    Configures connection settings for Siebel

    Attribute Value

    name

    Oracle_Siebel_Business_Object

    user

    <Your username>

    password

    <Your password>

    server

    <The IP address of the Siebel server>

    serverName

    <The Siebel Enterprise server name>

    objectManager

    <The object manager you use>

    dataSenseFilterQueryBusComp

    [Name] = 'Action_IO' OR [Name] = 'Contact_IO'

    dataSenseFilterQueryBusObjects

    false

    doc:name

    oracle siebel business objects

    Child Element Description

    siebel:connection-pooling-profile

     Configures connection pooling settings for connecting to Siebel

    Attribute Value

    initialisationPolicy

    INITIALISE_ONE

    exhaustedAction

    WHEN_EXHAUSTED_GROW

  3. Build a new Flow:

    
           
                   
                
    1
    2
    
    &lt;flow name="salesforce2siebel" doc:name="salesforce2siebel" processingStrategy="synchronous"&gt;
        &lt;/flow&gt;
  4. Add a Poll Scope inside your new Flow:

    
           
                   
                
    1
    2
    3
    4
    
    &lt;poll doc:name="Poll"&gt;
        &lt;fixed-frequency-scheduler frequency="60000"/&gt;
        &lt;watermark variable="lastUpdateSalesforce" default-expression="#[org.joda.time.format.ISODateTimeFormat.dateTime().print(new org.joda.time.DateTime().withZone(org.joda.time.DateTimeZone.forID(&amp;quot;PST8PDT&amp;quot;)).minusSeconds(5))]" update-expression="#[org.joda.time.format.ISODateTimeFormat.dateTime().print(new org.joda.time.DateTime().withZone(org.joda.time.DateTimeZone.forID(&amp;quot;PST8PDT&amp;quot;)).minusSeconds(5))]"/&gt;
    &lt;/poll&gt;
    Element Description

    Poll

    Poll Scope executes the Mule element you place inside it at regular intervals. In this case, it is a Salesforce connector.

    Child Element Description

    fixed-frequency-scheduler

    Sets the interval for polling

    Attribute Value

    frequency

    6000

    The poll scope now triggers once a minute. The watermark ensures that registries in the Salesforce aren’t processed more than once. It does this by keeping track of the last element processed in the last poll.

    Child Element Description

    watermark

    The watermark ensures that registries in the Siebel DB aren’t processed more than once by keeping track of the last element that was processed in the last poll.

    To learn how watermarks work and what each attribute is for, read about  Poll Schedulers.
    Attribute Value

    variable

    lastUpdateSalesforce

    default-expression

    #[org.joda.time.format.ISODateTimeFormat.dateTime().print(new org.joda.time.DateTime().withZone(org.joda.time.DateTimeZone.forID(&quot;PST8PDT&quot;)).minusSeconds(5))]"

    update-expression

    #[org.joda.time.format.ISODateTimeFormat.dateTime().print(new org.joda.time.DateTime().withZone(org.joda.time.DateTimeZone.forID(&quot;PST8PDT&quot;)).minusSeconds(5))]

  5. Inside this Poll Scope, add a Salesforce Connector:

    
           
                   
                
    1
    
    &lt;sfdc:query config-ref="Salesforce" query="SELECT Id, email, firstname, lastname from Contact WHERE LastModifiedDate &amp;gt;#[flowVars.lastUpdateSalesforce]" doc:name="Salesforce"/&gt;

    The Salesforce connector polls at the intervals you specify in the Poll Scope.

    Element Description

    sfdc:query

    Connects to Salesforce

    Attribute Value

    config-ref

    Salesforce

    query

    SELECT Id, email, firstname, lastname from Contact WHERE LastModifiedDate &gt;#[flowVars.lastUpdateSalesforce]

    doc:name

    Salesforce

  6. After the Poll Scope, add a Logger to verify the output of this poll.

    
           
                   
                
    1
    
    &lt;sfdc:query config-ref="Salesforce" query="SELECT Id, email, firstname, lastname from Contact WHERE LastModifiedDate &amp;gt;#[flowVars.lastUpdateSalesforce]" doc:name="Salesforce"/&gt;
    Element Description

    logger

    Logs messages to the Mule console

    Attribute Value

    Message

    From SFDC: #[payload]

    Level

    Info

  7. Add a Siebel connector after this logger. It uploads the output of the poll into your Siebel repository.

    
           
                   
                
    1
    2
    3
    
    &lt;siebel-io:execute-siebel-adapter config-ref="Oracle_Siebel_Integration_Object" integrationObject="Contact IO" method="UPSERT" doc:name="Oracle Siebel Integration Object"&gt;
                &lt;siebel-io:input-properties ref="#[payload]"/&gt;
            &lt;/siebel-io:execute-siebel-adapter&gt;
    Element Description

    siebel-io:execute-siebel-adapter

    Creates a contact entry on the specified Siebel repository

    Attributes Values

    config-ref

    Oracle_Siebel_Integration_Object

    integrationObject

    Contact IO

    method

    UPSERT

    doc:name

    Oracle Siebel Integration Object

    Child Element Description

    siebel-io:input-properties

    Defines what structure the created object has

    Attributes Values

    ref

    #[payload]

  8. Add another logger after the Siebel connector to verify the success of the operation.

    
           
                   
                
    1
    
    &lt;logger message="#[payload.toString()]" level="INFO" doc:name="Logger"/&gt;
    Attribute Value

    Message

    #[payload.toString()]

    Level

    Info

  9. Add a DataMapper component between the first logger and the Siebel connector. It maps fields from the data structure returned by Salesforce into the data structure required by Siebel.

    
           
                   
                
    1
    
    &lt;data-mapper:transform doc:name="DataMapper"/&gt;
  10. Switch to the Studio Visual Editor to configure the Data Mapper element. Click Data Mapper to open its properties editor:

    Input:

    Attribute Value

    Type

    Connector

    Connector

    Salesforce

    By Type

    check

    List

    check

    Object

    Contact

    Output:

    Attribute Value

    Connector

    Oracle_Siebel_Integration_Object

    Operation

    execute-siebel-adapter

    Object

    Contact IO

    If DataSense works correctly, DataMapper should be able to populate all of the output fields on its own
  11. Click Create mapping for DataMapper to build a mapping between both data structures.

  12. A few fields don’t have the same names in Salesforce as they do in Siebel. You need to configure these fields manually in DataMapper.

    Siebel Field Salesforce Field

    Email_Address

    Email

    First_Name

    FirstName

    Last_Name

    LastName

    Person_UId

    Id

    Also, Siebel requires two fields that don’t exist in Salesforce. You need to provide some default value for these. You can set the variables to use the following default values:

    Variable Value

    Primary_Organization

    Default Organization

    Personal_Contact

    N

  13. There are two ways you can link these:

    1. Look for the fields on both columns in DataLoader’s graphical view , then simply drag and drop one onto the other. 

      This is usually the easiest way to go, but given the amount of fields to navigate, it may be hard to find the fields you need. Use the search box above the field list to find these quickly.
    2. Enter  DataLoader’s Script view and paste the following lines of code below what is already written:

      
                
                        
                     
      1
      2
      3
      4
      5
      6
      
      output.First_Name = input.FirstName;
      output.Last_Name = input.LastName;
      output.Email_Address = input.Email;
      output.Person_UId = input.Id;
      output.Primary_Organization = 'Default Organization';
      output.Personal_Contact = 'N';

      The full code should look like this:

      
                
                        
                     
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      
      //MEL
      //START -&gt; DO NOT REMOVE
      output.__id = input.__id;
      output.__parent_id = input.__id;
      //END -&gt; DO NOT REMOVE
      output.First_Name = input.FirstName;
      output.Last_Name = input.LastName;
      output.Email_Address = input.Email;
      output.Person_UId = input.Id;
      output.Primary_Organization = 'Default Organization';
      output.Personal_Contact = 'N';
  14. Save and run the project as a Mule Application.

For this code to work in Anypoint Studio, you must provide the credentials for both Siebel and Salesforce accounts. You can either replace the variables with their values in the code, or you can add a file named mule.properties in the `src/main/properties`folder to provide values for each variable.

         
      
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<mule xmlns:context="http://www.springframework.org/schema/context" xmlns:batch="http://www.mulesoft.org/schema/mule/batch" xmlns:tracking="http://www.mulesoft.org/schema/mule/ee/tracking" xmlns:json="http://www.mulesoft.org/schema/mule/json" xmlns:data-mapper="http://www.mulesoft.org/schema/mule/ee/data-mapper" xmlns:sfdc="http://www.mulesoft.org/schema/mule/sfdc" xmlns:siebel-io="http://www.mulesoft.org/schema/mule/siebel-io" 
xmlns:siebel="http://www.mulesoft.org/schema/mule/siebel" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
xmlns:spring="http://www.springframework.org/schema/beans" version="EE-3.6.1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/siebel http://www.mulesoft.org/schema/mule/siebel/current/mule-siebel.xsd
http://www.mulesoft.org/schema/mule/siebel-io http://www.mulesoft.org/schema/mule/siebel-io/current/mule-siebel-io.xsd
http://www.mulesoft.org/schema/mule/sfdc http://www.mulesoft.org/schema/mule/sfdc/current/mule-sfdc.xsd
http://www.mulesoft.org/schema/mule/ee/data-mapper http://www.mulesoft.org/schema/mule/ee/data-mapper/current/mule-data-mapper.xsd
http://www.mulesoft.org/schema/mule/json http://www.mulesoft.org/schema/mule/json/current/mule-json.xsd
http://www.mulesoft.org/schema/mule/ee/tracking http://www.mulesoft.org/schema/mule/ee/tracking/current/mule-tracking-ee.xsd
http://www.mulesoft.org/schema/mule/batch http://www.mulesoft.org/schema/mule/batch/current/mule-batch.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-current.xsd">
<siebel:config name="Oracle_Siebel_Business_Object" user="${siebel.user}" password="${siebel.password}" server="${siebel.server}" serverName="${siebel.servername}" objectManager="${siebel.mgr}" dataSenseFilterQueryBusComp="[Name] = 'Contact'" dataSenseFilterQueryBusObjects="[Name] = 'Contact'" doc:name="oracle siebel business objects">
<siebel:connection-pooling-profile initialisationPolicy="INITIALISE_ONE" exhaustedAction="WHEN_EXHAUSTED_GROW"/>
    </siebel:config>
    <sfdc:config name="Salesforce" username="${salesforce.user}" password="${salesforce.password}" securityToken="${salesforce.securitytoken}" url="${salesforce.url}" doc:name="Salesforce">
        <sfdc:connection-pooling-profile initialisationPolicy="INITIALISE_ONE" exhaustedAction="WHEN_EXHAUSTED_GROW"/>
    </sfdc:config>
    <data-mapper:config name="listcontact_to_contact_io" transformationGraphPath="listcontact_to_contact_io.grf" doc:name="listcontact_to_contact_io"/>
    <flow name="Poll_Salesforce_2_Siebel" doc:name="Poll_Salesforce_2_Siebel" processingStrategy="synchronous">
        <poll doc:name="Poll">
            <fixed-frequency-scheduler frequency="60000"/>
            <watermark variable="lastUpdateSalesforce" default-expression="#[org.joda.time.format.ISODateTimeFormat.dateTime().print(new org.joda.time.DateTime().withZone(org.joda.time.DateTimeZone.forID(&quot;PST8PDT&quot;)).minusSeconds(5))]" update-expression="#[org.joda.time.format.ISODateTimeFormat.dateTime().print(new org.joda.time.DateTime().withZone(org.joda.time.DateTimeZone.forID(&quot;PST8PDT&quot;)).minusSeconds(5))]"/>
            <sfdc:query config-ref="Salesforce" query="SELECT Id, email, firstname, lastname from Contact WHERE LastModifiedDate &gt;#[flowVars.lastUpdateSalesforce]" doc:name="Salesforce"/>
        </poll>
        <logger message="From SFDC: #[payload]" level="INFO" doc:name="Logger"/>
        <data-mapper:transform config-ref="listcontact_to_contact_io" doc:name="List&lt;Contact&gt; To Contact IO"/>
        <siebel-io:execute-siebel-adapter config-ref="Oracle_Siebel_Integration_Object" integrationObject="Contact IO" method="UPSERT" doc:name="Oracle Siebel Integration Object">
            <siebel-io:input-properties ref="#[payload]"/>
        </siebel-io:execute-siebel-adapter>
         <logger message="Updated in Siebel: #[payload]" level="INFO" doc:name="Logger"/>
    </flow>
</mule>

See Also