Siebel Web Service Call with SOAP

If you’re currently working with Siebel you might be familiar with their SOAP interface. When the software was originally developed, this was in accordance with best practices. However, today REST has become the dominant standard for connectivity on the web, so if you’re consuming Siebel with Ruby, PHP, Python, .NET, you’re probably looking for a REST API. Siebel does support REST, but you must buy Fusion Middleware, a costly addon to your existing platform.

This tutorial will give you basic steps for consuming the SOAP API directly from Node.js. You’ll see that the SOAP connection is fairly straightforward with the help of some libraries. Our demonstration will use the order creation service – which is what you’d use if you were building an ecommerce site that needed to submit orders to Siebel.

By consuming SOAP directly, we can avoid the extra costs of the REST translation, with very little down side.

Siebel API Overview

Siebel’s API is organized by:

Service – This is a high level grouping that covers a whole area of the API. For instance, we’ll be working with the Order Management service.
Port – This is a specific resource managed by the service. For instance, within the Order Management service you will find two ports – Order and OrderItem.
Method – This is the actual process that you will interact with. Among others each PORT will have the familiar CRUD operations.

Termonology: When I say “service” I often mean a single function, which in Siebel/SOAP terminology is a “method”. Sorry in advance for any confusion.

You can find a reference for the Siebel Order Management API here. Scroll to the bottom section for a list of the methods.

What You’ll Need

Siebel instance v7.8 or later

I’m going to assume that if you’re reading this article you’re probably already using Siebel and have an instance available.

Node.js v0.10.0 or later

You’ll need this to run our sample code. Node includes a package manager (npm) which will bring in all the other dependencies we need.

A terminal

If you’re in Windows I’d recommend git-bash.

A text editor

Whatever you’re comfortable with here. My code is written in CoffeeScript with 2 spaces for indentation, so if you’re going to edit that, make sure you’re not mixing tabs in or you’ll get strange syntax errors.

Overview of the Node-Siebel Project

The primary responsibilities we’ve taken on with node-siebel are:

  1. Generate services that can be called programmatically. We make some assumptions about the data formats in an attempt to make your life easier, so this probably won’t work for a non-Siebel API.
  2. Create a REST router for the services and hand it back to you. This is something you can plug in as express/connect/http middleware in node, and start serving your REST endpoints in just a few lines of code.

Let’s walk through the included tests, which should give you a sense of how to utilize this functionality in your own app. Go ahead and open the tests, which you’ll find here.

The first test, “should generate services” shows the services that will be generated from the sample WSDL, which is for the Order service. Each “service” in our world corresponds to a “method” in the SOAP world.

The next test “should create an order” demonstrates calling a service. If you look at the sample data being passed, you’ll notice that it differs from the message schema in the WSDL. Namely, the header elements are included for you, and you are just responsible for specifying the fields in a single document, represented as an object. This is in attempt to be more consistent with what I would expect from a REST interface. You’ll still need to provide the list/header elements for any sub-documents (e.g. OrderItems). Refer to the WSDL for the exact schema, and print the last request if you’re unsure what’s being sent.

NOTE: The Id and OrderNumber fields have a unique constraint, so you’ll need to change the values in order to run this multiple times.

The next test “should list orders” doesn’t really add much that’s new, but it’s not stateful, so you can safely run it many times.

The last test, “should generate REST API” is an integration test. It should be pretty close to the code you’d need to integrate with your own application.

You’ll notice that in addition to returning a set of services, the serviceGenerator also gives you a router. This can be plugged into connect or express, just as any other middleware would be. It has REST routes preconfigured that will forward your requests to the node-soap client, which communicates with the SOAP interface.

The code used to configure the connect middleware and start a server is standard boilerplate, and well documented in the Connect project.

Using Your Own Siebel Services

Assuming your API follows the same conventions as the Siebel standard methods, things will be easy. (Nothing is easy though, so brace yourself.)

Install Node-Siebel

npm install --save node-siebel

Obtain a WSDL

To communicate with other standard Services, or a custom one that you’ve created, you’ll need a WSDL file. This is an XML file that contains a description of where the service is and what it’s capabilities and requirements are.

Let’s go grab one from Administration – Web Services.

  1. Make sure the Siebel instance is running.
  2. Navigate to the Siebel Client in Internet Explorer.
  3. Log in as sadmin.
  4. Go to the Administrative – Web Services tab.
  5. Find the service you want to connect to and select it.
  6. Click the Generate WSDL button and complete the wizard.
  7. Transfer the WSDL file to the machine and project directory where you’ll be coding.

For reference, the Administrative – Web Services screen should look like this:

web services interface

Towards the end of your WSDL file you will find one or more <soap:address> fields. You’ll need to modify the hostnames to match the actual location of your dev server. I found in my tests that I needed to change SecureWebService to WebService, and add &WSSOAP=1 at the end. Here’s some info about the setting.

Connecting

Look at our test helper for an example of how to initialize the Node-Soap library… or follow the node-soap docs.

Option A: Programmatic Access

You can probably just use the node-soap client directly if you just need programmatic access. But if you prefer to not have to include the headers in the document, go ahead and follow the “should create an order” test example.

Option B: REST Access

Follow the example on in the main README. This should have everything you need.

Install

npm install node-siebel

Run Tests

npm install -g mocha
mocha

Tutorial

For more details and background, please see the tutorial.

Create A REST Server

With some minor changes, this should allow you to start a REST server that forwards requests to a node-soap client.

This is from example.js.

// get HTTP modules
var connect = require('connect'),
    http = require('http'),
    request = require('request'),
    server = connect();

// create a node-soap client
var soap = require('soap'),
    join = require('path').join,
    wsdlPath = join(__dirname, "../data/OrderWebService.WSDL"),
    username = 'SADMIN',
    password = 'SADMIN',
    sessionType = 'None';

soap.createClient(wsdlPath, function(err, client) {
    if (err) {
      throw err;
    };

    client.addSoapHeader("<UsernameToken xmlns='http://siebel.com/webservices'>" + username + "</UsernameToken>");
    client.addSoapHeader("<PasswordText xmlns='http://siebel.com/webservices'>" + password + "</PasswordText>");
    client.addSoapHeader("<SessionType xmlns='http://siebel.com/webservices'>" + sessionType + "</SessionType>");

    // create a REST router to forward to the node-soap client
    var serviceGenerator = require('node-siebel'),
        router = serviceGenerator(client).router;

    // connect the router and start the server
    server.use(connect.bodyParser());
    server.use(router);
    http.createServer(server).listen(4000);
});

REST endpoints will be generated based on the WSDL you provide. An example Siebel Order Management WSDL is provided which will generate the following endpoints:

POST   /order/:Id  =>  Order/SynchronizeOrder
DELETE /order/:Id  =>  Order/DeleteOrder
GET    /order/:Id  =>  Order/GetOrderById
PUT    /order/:Id  =>  Order/UpdateOrder
GET    /order      =>  Order/GetOrder
POST   /order      =>  Order/InsertOrder

anything else

POST /order/<action>  =>  Order/<action>

Advertisements

Back to School: What Open UI Does for You – And What Not(GOOD BYE SIEBEL, AT LEAST FOR ME)re-blogged from siebel-essentials

With the upcoming Siebel Innovation Pack 2014, the Siebel community is rightfully excited about Siebel Open UI. IP 2014 will be the fourth release (after 8.1.1.9 two years ago, 8.1.1.10 and IP 2013) and once it is generally available, there will be a lot of exciting things to write about.

Siebel Open UI – now in 3D. Coming to a browser near you soon 😉

But here we are, still with IP 2013 and many customers contemplating if they should do ‘the switch’ from traditional Siebel web clients to the new Redeemer UI. In our ‘back to school’ series we also contemplate today and nurse some deep thoughts about what Open UI could do for us and what we should better not expect.

What Open UI does for you

There are many non-arguable points for Open UI such as:

Open UI gives you browser independency: Un-chain your project from IE8 and ActiveX lock-in. The prospect of accessing all your Siebel data in any browser on any device is a truly compelling argument.

It makes your applications rich: Well, if we don’t get rich with Siebel, our applications do with Open UI. Siebel Open UI is built on modern web standards like HTML5, JavaScript and CSS3. So if your browser can do it, you can do it.

Open UI provides an extensible browser-side framework: You no longer have to feel bad for writing browser script. Siebel Open UI provides a JavaScript API and multi-tier architecture that guarantees goosebumps 😉

Open UI can rejuvenate your project: Siebel Open UI has a rejuvenating effect on the Siebel family. Instead of desperately ‘hanging on’ you can now stay on the scene as a project lead or developer. End users (mostly) will love Open UI, if you manage their expectations right from day one (see below).

…and if I forgot anything, here’s Oracle’s official data sheet. And of course, your comments are welcome as always.

What Open UI does NOT do for you

Open UI does NOT teach you good manners: That you have to do yourself. What I have seen often is that when Open UI is introduced in a project, everyone gets so excited that all ‘good manners’ are thrown overboard. Business process analysis? Requirements mapping? Design? Source control? Forget it, we’ve got Open UI, so we do all the fancy stuff because we can do it. That of course is a recipe for disaster.

It does NOT make you a web developer overnight: With Open UI, the typical Siebel developer can be easily overwhelmed with all the web technologies such as JavaScript, HTML and CSS. Oh, you wrote eScript for the last ten years? Jolly good but sorry, that does not make you a web developer even if you argue that JavaScript is based on the same standard (ECMA) as eScript. Most of us will have to start learning, not only the Open UI API but also web standards. And it’s better to start learning today than tomorrow.

It does NOT grant you the ‘license to code’: While Open UI provides us with a three-tier browser-side architecture and a JavaScript API, you should still think twice before you code. Any line of code that you add to your project is likely to make your life harder during troubleshooting, debugging, maintenance, monitoring and upgrades. That does not change just because you now write code in a friggin cool JavaScript IDE.

Open UI will NOT pardon you for things you did in the past: If you hacked your way through browser scripting and ActiveX in the old world of High or Standard Interactivity, you’re gonna have a bad time in Open UI. But even if you obeyed the rules, expect some things to break (see next points).

It will NOT manage your expectations (nor your customer’s): You still have to be realistic. Open UI relies heavily on JavaScript, so choose your browser wisely and do not expect your heavily customized Open UI client to perform equally fast on every device and browser combination. Do not expect that you just ‘turn the key’ and your Siebel application that you customized over the past 10 years will ‘magically’ become a modern web application. Migrating all your customizations (especially browser script) to Open UI can be hard work. The more you stayed on the standard path and away from (browser) scripting, the faster your migration will be.

Siebel Open UI will NOT be 100% compliant with the old world: The HI and SI clients have had their time. Personally, I still consider the HI client (from 7.7 onwards) to be one of the best enterprise app UIs in existence (I have used plenty of other ‘enterprise apps’, believe me). But times are a’changin’ and we have to leave some dear acquaintances behind (right mouse click, anyone?). Oracle does a great job to migrate most of the HI goodies (iHelp is planned for IP 2014 for example) to Open UI but you will fare better if you do not expect a 100% transition.

Automating the Application Deployment Manager (ADM) packaging process

Automating the Application Deployment Manager (ADM) packaging process

“Open the box, open the box!”

Introduced in version 7.7 of Siebel CRM, ADM (Application Deployment Manager) has been significantly enhanced in version 8.0. The purpose of ADM is to assist developers and administrators to deploy changes made to the Siebel Repository, the physical UI files, Actuate report files and – last but not least – the administrative data of a Siebel CRM application from one enterprise (e.g. development) to another (e.g. test).

Version 8.0 of Siebel CRM also introduces the Siebel Management Server and Siebel Management Agent. These java based modules are used for the packaging and deployment of the a/m changes.

This post covers the techniques to automate the ADM packaging process. It mainly focuses on command line utilites which can be invoked as part of a shell script.

1. Initialize the package / create folder structure using admpkgr

The command line utility for ADM packaging is admpkgr. It resides in the <installdir>/mgmtsrvr directory of the Siebel Management Server installation.

For automation purposes, shell scripts can be used similar to the following:

call admpkgr init d:\ousea\mgmtsrvr\adm\packages\xyz_package_01

2. Export database types (administrative data) using srvrmgr

Bookshelf Reference: Application Deployment Manager Guide version 8.0: Creating ADM Deployment Units from Database Types Directly from Command-Line

To automate the export of administrative data objects such as LOVs, Data Maps, Responsibilites and many more (ADM natively supports more than 60 data types in version 8.0), the ADM Batch Processor server component (new in version 8.0) can be used.

Using the ‘start task’ command from a srvrmgr prompt works as expected for the ADM Batch Processor, however some issues have been reported with passing the parameters. Here are two versions to do it. The first one is passing the parameters using the ‘with’ clause. The second is setting the parameters and then restarts the component.

We are using an input file here, so the basic command would be as follows (note the /i switch):

<installdir>\bin\srvrmgr /g <gateway_host> /e <enterprise> /u <username> /p <password> /s <siebel server name> /i “<path_to_inputfile>”

Sample input file for version 1:

start task for comp admbatchproc with admpath=<install_dir>\mgmtsrvr\adm\packages\xyz_package_01\database,admdatatype=’EAI Data Map’,admfilter='[Name] LIKE “XYZ*”‘,admeaimethod=synchronize,admprefix=XYZ_EAIDMAP

Sample input file for version 2 (which is safe especially for the admfilter parameter):

shutdown comp admbatchproc
sleep 60
change param admpath=d:\ousea\mgmtsrvr\adm\packages\xyz_package_01\database for comp admbatchproc
change param admdatatype=’EAI Data Map’ for comp admbatchproc
change param admfilter='[Name] LIKE “XYZ*”‘ for comp admbatchproc
change param admeaimethod=synchronize for comp admbatchproc
change param admprefix=XYZ_EAIDMAP for comp admbatchproc
startup comp admbatchproc
sleep 20

Here is an explanation of the parameters for admbatchproc:

admpath = Location for resultant export files
admdatatype = Name of Data Type (as in Application Deployment Manager screen)
admfilter = Filter to be applied on the data type. For example, ‘[List Of Values Parent(UDA).Value]=”NM”‘
admeaimethod = One of three methods: upsert, synchronize, or custom
admprefix = Prefix for the name of exported XML file

3. Export repository changes using consoleapp.exe

Bookshelf Reference: Application Deployment Manager Guide Version 8.0: “Using Consoleapp.exe to Create Repository Deployment Units”

The command line utility consoleapp.exe (in the Siebel Tools bin directory) can be generically used to invoke business service methods within a Siebel application from the command line (headless, i.e. without rendering a GUI). The ADM framework provides a bunch of business services which are used mainly for reloading the various caches or – in this case – for exporting repository changes.

In a shell script example, one would use consoleapp.exe to call the “Siebel Tools Export Support for ADM” business service as follows to export the “XYZ New Order for Account” Workflow:

<tools_installdir>\bin\consoleapp “<tools_installdir>\bin\enu\tools.cfg” ENU SADMIN <password_for_sadmin> “Siebel Tools Export Support for ADM” “Export:Repository=Siebel Repository,Object_1=XYZ New Order for Account,Type_1=Workflow Process,ExportFile=<install_dir>\mgmtsrvr\adm\packages\xyz_package_01\repository\XYZ_WF_1.sif,DescriptorFile=<install_dir>\mgmtsrvr\adm\packages\xyz_package_01\repository\XYZ_WF_1_des.xml,ExportCount=1,LogFile=d:\temp\adm.log”

If this is your first exposure to consoleapp.exe, it might feel a little weird. Here is the syntax:

consoleapp.exe <configuration_file.cfg> <language> <username> <password> “<business_service_name>” “<business_service_method>:<property1=value1,property2=value2,propertyn=valuen,…>”

An alternative way to use consoleapp.exe according to bookshelf is to use an xml input file. I have not yet had the privilege to test this in real life, however. The syntax is as follows:

consoleapp.exe <configuration_file.cfg> <language> <username> <password> /f inputfile.xml

Caveat: Make sure that the descriptor file name is exactly spelled like the export file name, having .xml (instead of .sif) as the file type and des as the suffix. Example: ExportFile=XYZ_WF_1.sif, DescriptorFile=XYZ_WF_1_des.xml.

4. Export file types using OS utilities

Files, such as web template files (.swt), must also be copied into the respective package directories. Since there is no dedicated utility provided by Oracle, the shell script would refer to classic file copy utilities. The following is an example for Windows xcopy:

#copy all web template files changed since June, 1st 2007 to the webtempl directory
xcopy <tools_installdir>\WEBTEMPL\*.swt <install_dir>\mgmtsrvr\adm\packages\xyz_package_01\file\AppServer\webtempl /D:06-01-2007

5. Delete empty subdirectories using OS utilities

It is best practice to delete empty subdirectories to increase processing time and decrease the amount of warnings during packaging and deployment. This would be accomplished using classic OS utilities. The following is a windows example:

rd <install_dir>\mgmtsrvr\adm\packages\xyz_package_01\File\AppServer\reports\enu

6. Generate the package descriptor file using admpkgr

Now it’s time for admpkgr again. As in step 1, it can be used in a shell script with the ‘generate’ option as follows:

call admpkgr generate <install_dir>\mgmtsrvr\adm\packages\xyz_package_01

7. Validate the package using admpkgr

Here is a windows example how to call admpkgr from a shell script and direct the output to a log file:

call admpkgr validate <install_dir>\mgmtsrvr\adm\packages\xyz_package_01 >> “d:\temp\admpkgr_out.txt”

Summary

The ADM packaging process is multifold, and various command line tools come into play when you want to automate it, namely admpkgr, srvrmgr, consoleapp.exe and OS file system manipulation tools.

Copy Production data to Development environment Part -2-

1) Data can be exported while the Production database server is on if you are using Oracle 11x.
2) To import data, we need to first shut down Siebel server
/install_folder/siebel/8.1/siebsrvr
. ./siebenv.sh
cd bin
./stop_server -r /install_folder/siebel/8.1/siebsrvr -e ENT_NAME SERVER_NAME
After that ask DBA to import this data.
3) DBA should change the passwords for GUESTCST, SADMIN and SIEBEL. GUESTCST is the default anpnymous user, it could be different in your case.
4) Run these commands against the database after that (we used SQL Developer)
Truncate table S_WFA_INST_WAIT;
Truncate table S_WFA_INSTANCE;
Truncate table S_WFA_INSTP_LOG;
Truncate table S_WFA_INST_LOG;
Truncate table S_WFA_INST_PROP;
Truncate table S_ESCL_ACTN_REQ;
Truncate table S_ESCL_LOG;
Truncate table S_ESCL_STATE;
Truncate table S_ESCL_REQ;
Truncate table S_DOCK_TXN_LOG;
Truncate table S_COMM_REQ;
commit;

5) We now need to change SADMIN and SIEBEL passwords in Siebel application
precondition (Siebel server should be in stopped state, gateway should be running)

Changing SADMIN password
log into servermanager

./srvrmgr -g IP_ADDRESS:2320 -u SADMIN -p PASSWORD -e ENT_NAME
change enterprise parameter Password=PASSWORD (new sadmin password)
change enterprise parameter TableOwnPass=PASSWORD (new Siebel password)
IP_ADDRESS is the gateway server i.p.

list enterprise parameter TableOwnPass show PA_SETLEVEL
this value should not be ”Never set”. It was 0 after change

remove, move or rename this file
/install_folder/siebel/8.1/siebsrvr/sys/svc.siebsrvr.ENT_NAME:SERVER_NAME
type (make sure you have siebenv.sh loaded first)
siebctl -r /install_folder/siebel/8.1/siebsrvr -S siebsrvr -i ENT_NAME:SERVER_NAME -a -g “-g IP_ADDRESS:2320 -e ENT_NAME -s SERVER_NAME -u sadmin” -e PASSWORD -L ENU

IP_ADDRESS is the gateway server i.p. address
Now we need to restart gateway.
Go to
/package_folder/siebel/8.1/gtwysrvr

siebel@servername:/install_folder/siebel/8.1/gtwysrvr> . ./siebenv.sh
siebel@servername:/install_folder/siebel/8.1/gtwysrvr> cd bin
siebel@servername:/install_folder/siebel/8.1/gtwysrvr/bin> stop_ns
siebel@servername:/install_folder/siebel/8.1/gtwysrvr/bin> start_ns

to check if gateway is running type
siebel@servername:/install_folder/siebel/8.1/gtwysrvr/bin> ps -ef | grep siebsvc
siebel 19836 29152 0 11:03:53 pts/1 0:00 grep siebsvc
siebel 18536 25550 0 11:01:05 pts/1 0:04 siebsvc -s gtwyns -a /f /install_folder/siebel/8.1/gtwysrvr/sys/siebns.dat /t 232
6) Changing GUESTCST password

first we need to find out where these passwords are stored. the configuration files (eapps.cfg can be renamed or there may be multiple files with this name)
The only file that is constant is magnus.conf files. There could be more than one magnus.conf file that is being used (e.g. one for the ssl and one for non ssl).
Open these files and search for string config-file
Currently the correct configuration files are
for non ssl
config-file=”/apps/servername/javaweb/sweapp/bin/eapps.cfg”
for ssl
config-file=”/apps/servername/javaweb/sweapp/bin/eapps_ssl.cfg”

Get the new password for GUESTCST from DBA. Log into siebel server
cd /install_folder/siebel/8.1/siebsrvr
. ./siebenv.sh
cd bin
apps/package_folder/siebel/8.1/siebsrvr/bin>encryptstring PASSWORD
I3OFbQV5a3gBAAAFCg==apps/package_folder/siebel/8.1/siebsrvr/bin>

Copy the first part i.e. I3OFbQV5a3gBAAAFCg==

Open eapps.cfg and eapps_ssl.cfg files and in the password field paste this new password.
e.g.
[defaults]
EncryptedPassword = True
AnonUserName = GUESTCST
AnonPassword = I3OFbQV5a3gBAAAFCg==
After this restart Web Servers. Go to the web server root for the servers, in this case we have two root folders. One
is for ssl , another for non ssl.

siebel@webservername:/apps/servername/javaweb/https-ta-sfa> ./stop
siebel@webservername:/apps/servername/javaweb/https-ta-sfa-ssl> ./stop

siebel@webservername:/apps/servername/javaweb/https-ta-sfa> ./start
siebel@webservername:/apps/servername/javaweb/https-ta-sfa-ssl> ./start

7) change SRF/Browser Scripts if the deployment version is different

8) Start siebel server and log in as SADMIN

cd /install_folder/siebel/8.1/siebsrvr
. ./siebenv.sh
cd bin
./start_server -r /install_folder/siebel/8.1/siebsrvr -e ENT_NAME -L ENU -g IP_ADDRESS:2320 SERVER_NAME
IP_ADDRESS is the gateway server i.p. address

8) Update triggers in Siebel

First remove triggers, then generate them
To generate DB Triggers perform next steps:
1. Log On to Siebel Application.
2. Through Site Map navigate to view Administration ? Server Management > Jobs
3. In list applet Jobs create new record
4. In field Component Job select value Generate Triggers
5. In bottom applet Job Parameters create new records and set parameters by below name – value key:
a. EXEC ? True
b. Privileged User ? siebel
c. Privileged User Password ? <siebel password>
d. Remove ? TRUE
6. Submit created Job by clicking button Submit on applet Jobs

for the second time, run the same job except for point d. Instead of TRUE, put false and run the job again.
After that from SQL Developer/SQL Plus

update siebel.s_srm_req_param set value = ”removepass” where value = ”siebel_password”;
commit;

This update is needed because of a Siebel security issue. When you generate triggers, Siebel stores the password of user Siebel
in the database without encryption. Any siebel user can view this running an SQL.

9) Go to Administration -> Web Services, select Outbound Web Services

Delete all the URLs in the second applet, change them to http://localhost
If you have active Web Services in Development environment, you need to set the correct URLs for all active web services.

10) After that go to some screens and check if everything is ok.
11) We need to do some other cleaup activities – the ucf file used to generate ddlsync uses both siebel and sadmin passwords.
Deployments will not work if the ddlsync fails. This is how we can generate a new ddlsync file

Log in as siebel, go to siebsrvr directory /install_folder/siebel/8.1/siebsrvr

Load siebenv.sh

siebel@servername:/install_folder/siebel/8.1/siebsrvr/bin> ssincfgw -is:javaconsole -console -args LANG=ENU MODEL_FILE=/dbsrvr.scm
InstallShield Wizard

Initializing InstallShield Wizard…

Preparing Java(tm) Virtual Machine…
……………………………..
……………………………..
……………………………..
……………………………..
……………………………..
……………………………..
……………………………..
……………………………..
……………………………..
……………………………..
……………………………..
……………………………..
……………………………..
……………………………..
……………………………..
……………………………..
……………………………..
……………………………..
……………………………..
……………………………..
………………….
Running InstallShield Wizard…

——————————————————————————-
[X] 1 – Configure Product in Live Mode
[ ] 2 – Configure Product for Offline Deployment
[ ] 3 – Exit Configuration Wizard

To select an item enter its number, or 0 when you are finished: [0] 1
[X] 1 – Configure Product in Live Mode
[ ] 2 – Configure Product for Offline Deployment
[ ] 3 – Exit Configuration Wizard

To select an item enter its number, or 0 when you are finished: [0]
Press 1 for Next, 3 to Cancel or 4 to Redisplay [1]

——————————————————————————-
Directory where the Siebel Server is installed

Siebel Server Directory [/install_folder/siebel/8.1/siebsrvr]
Press 1 for Next, 2 for Previous, 3 to Cancel or 4 to Redisplay [1]

——————————————————————————-
Directory where the Siebel Database Server is installed

Siebel Database Server Directory [/install_folder/siebel/8.1/dbsrvr]
Press 1 for Next, 2 for Previous, 3 to Cancel or 4 to Redisplay [1]

——————————————————————————-
Choose the appropriate database platform

[ ] 1 – IBM DB2 UDB for Linux UNIX Windows
[X] 2 – Oracle Database Enterprise Edition

To select an item enter its number, or 0 when you are finished: [0]
Press 1 for Next, 2 for Previous, 3 to Cancel or 4 to Redisplay [1]

——————————————————————————-
[X] 1 – Install Database
[ ] 2 – Upgrade Database
[ ] 3 – Apply Additive Schema Changes
[ ] 4 – Import/Export Repository
[ ] 5 – Migrate Repository
[ ] 6 – Run Database Utilities

To select an item enter its number, or 0 when you are finished: [0] 6
[ ] 1 – Install Database
[ ] 2 – Upgrade Database
[ ] 3 – Apply Additive Schema Changes
[ ] 4 – Import/Export Repository
[ ] 5 – Migrate Repository
[X] 6 – Run Database Utilities

To select an item enter its number, or 0 when you are finished: [0]
Press 1 for Next, 2 for Previous, 3 to Cancel or 4 to Redisplay [1]

——————————————————————————-
Select one of the following Database utilities options

[X] 1 – Synchronize Schema Definition
[ ] 2 – Universal Time Code Conversion
[ ] 3 – Multilingual List of Value Conversion

To select an item enter its number, or 0 when you are finished: [0]
Press 1 for Next, 2 for Previous, 3 to Cancel or 4 to Redisplay [1]

——————————————————————————-
Choose whether the Siebel Database you are synchronizing with the physical
schema is UNICODE or not.

[ ] 1 – UNICODE Database
[X] 2 – Non-UNICODE Database

To select an item enter its number, or 0 when you are finished: [0] 1
[X] 1 – UNICODE Database
[ ] 2 – Non-UNICODE Database

To select an item enter its number, or 0 when you are finished: [0]
Press 1 for Next, 2 for Previous, 3 to Cancel or 4 to Redisplay [1]

——————————————————————————-
Select the base language (also called primary language) from the list

[ ] 1 – English (American)
[X] 2 – Turkish

To select an item enter its number, or 0 when you are finished: [0] 1
[X] 1 – English (American)
[ ] 2 – Turkish

To select an item enter its number, or 0 when you are finished: [0]
Press 1 for Next, 2 for Previous, 3 to Cancel or 4 to Redisplay [1]

——————————————————————————-
Enter a valid ODBC (Open Database Connectivity) Data Source Name to access the
Siebel Database connection. Default value is Siebel_DSN.

ODBC Data Source Name [] DSN_NAME
Press 1 for Next, 2 for Previous, 3 to Cancel or 4 to Redisplay [1]

——————————————————————————-
Siebel Database User Name
Siebel Database Password

Database User Name []
Siebel Database Password

Database User Name [] SADMIN
Database Password: heslo
Database Password–(confirm): heslo
Press 1 for Next, 2 for Previous, 3 to Cancel or 4 to Redisplay [1]

——————————————————————————-
Siebel Database Table Owner
Siebel Database Table Owner password

Database Table Owner [] siebel
Database Table Owner Password: heslo
Database Table Owner Password–(confirm): heslo
Press 1 for Next, 2 for Previous, 3 to Cancel or 4 to Redisplay [1]

——————————————————————————-
Index Table Space Name
Table Space Name

Index Table Space Name [] SIB_INDEX
Table Space Name [] SIB_DATA
Press 1 for Next, 2 for Previous, 3 to Cancel or 4 to Redisplay [1]

——————————————————————————-
Name of the repository you want to synchronize with the physical schema

Repository Name [Siebel Repository]
Press 1 for Next, 2 for Previous, 3 to Cancel or 4 to Redisplay [1]

——————————————————————————-
Please indicate if the target server will use the Oracle Parallel Indexing
option:

[X] 1 – Does not use the Oracle Parallel Indexing option
[ ] 2 – Uses the Oracle Parallel Indexing option

To select an item enter its number, or 0 when you are finished: [0]
Press 1 for Next, 2 for Previous, 3 to Cancel or 4 to Redisplay [1]

——————————————————————————-
Identifies an authorization ID designated for a group of Siebel users defined
in a mainframe security package
Security Group ID / Grantee [SSE_ROLE]
Log Output Directory [ddlsync]
Press 1 for Next, 2 for Previous, 3 to Cancel or 4 to Redisplay [1]

——————————————————————————-
Configuration is complete: your output will be saved under
$SiebelRoot/siebsrvr/bin/master_<process>.ucf. To deploy the process you
configured to the database please run the below command line:
$SiebelRoot/siebsrvr/bin/srvrupgwiz /m master_<process>.ucf
To select an item enter its number, or 0 when you are finished: [0]
Press 1 for Next, 2 for Previous, 3 to Cancel or 4 to Redisplay [1]
title The Siebel Configuration Wizard will execute using the following settings:)

——————————————————————————-
The Siebel Configuration Wizard will execute using the following settings:)

Siebel Server Directory : /install_folder/siebel/8.1/siebsrvr
Siebel Database Server Directory : /install_folder/siebel/8.1/dbsrvr
RDBMS Platform : Oracle Database Enterprise Edition
Siebel Database Operation : Run Database Utilities
Database Utility Selection : Synchronize Schema Definition
Database Encoding : UNICODE Database
Base Language : English (American)
Language Selection : ENU
ODBC Data Source Name : DSN_NAME
Database User Name : SADMIN
Database Password : ********
Database Table Owner : siebel
Database Table Owner Password : ********
Index Table Space Name : SIB_INDEX
Table Space Name : SIB_DATA
Repository Name : Siebel Repository
Oracle Parallel Index : Does not use the Oracle Parallel Indexing option
Security Group ID / Grantee : SSE_ROLE
Log Output Directory : ddlsync
Configuration is complete: your output will be saved under

Press ENTER to read the text [Type q to quit]

$SiebelRoot/siebsrvr/bin/master_<process>.ucf. To deploy the process you
configured to the database please run the below command line:
$SiebelRoot/siebsrvr/bin/srvrupgwiz /m master_<process>.ucf :

Press 1 for Next, 2 for Previous, 3 to Cancel or 4 to Redisplay [1]

1. Yes
2. No

Do you want to execute configuration? [2] 1

Execution Successful.

——————————————————————————-
[X] 1 – Configure Product in Live Mode
[ ] 2 – Configure Product for Offline Deployment
[ ] 3 – Exit Configuration Wizard

To select an item enter its number, or 0 when you are finished: [0] 3
[ ] 1 – Configure Product in Live Mode
[ ] 2 – Configure Product for Offline Deployment
[X] 3 – Exit Configuration Wizard

To select an item enter its number, or 0 when you are finished: [0]
Press 1 for Next, 3 to Cancel or 4 to Redisplay [1]

Generating Data to UI mappings in Siebel

This is one of those tasks which is fairly simple to do. However, can be very time consuming considering you have to generate a mapping for an entire/multiple repositories. We’ve all have had to do this at some point, not enjoying it one bit!

Well, here is a code that will save you some time and your sanity :).

The below code generates a screen to Applet, and an Applet to BC mapping which can be then exported to excel.

Screen to Applet – 

select scr.name “Screen Name”
,nvl(nvl(ptabi.tab_text, scri.viewbar_text), scr.viewbar_text) “Screen”
,scrv.sequence “View Seq”
,vw.name “View Name”
,vwi.title “View”
,vw.busobj_name “Business Object”
,vwti.item_num “Item Num”
,ap.name “Applet Name”
,api.title “Applet”
,ap.buscomp_name “Business Component”
from   siebel.s_repository rep
inner join siebel.s_screen scr on scr.repository_id = rep.row_id
left outer join siebel.s_screen_intl scri on scri.screen_id = scr.row_id and scri.repository_id = rep.row_id and scri.name = ‘ENU-STD’
inner join siebel.s_screen_view scrv on scrv.screen_id = scr.row_id and scrv.repository_id = rep.row_id
inner join siebel.s_application appl on rep.row_id = appl.repository_id
left outer join siebel.s_page_tab ptab on ptab.application_id = appl.row_id and ptab.repository_id = rep.row_id and ptab.screen_name = scr.name
left outer join siebel.s_page_tab_intl ptabi on ptabi.page_tab_id = ptab.row_id and ptabi.repository_id = rep.row_id and ptabi.name = ‘ENU-STD’
inner join siebel.s_view vw on vw.name = scrv.view_name and vw.repository_id = rep.row_id
left outer join siebel.s_view_intl vwi on vwi.view_id = vw.row_id and vwi.repository_id = rep.row_id and vwi.name = ‘ENU-STD’
inner join siebel.s_view_web_tmpl vwt on vwt.view_id = vw.row_id and vwt.repository_id = rep.row_id
left outer join siebel.s_view_wtmpl_it vwti on vwti.view_web_tmpl_id = vwt.row_id and vwti.repository_id = rep.row_id
inner join siebel.s_applet ap on ap.name = vwti.applet_name and ap.repository_id = rep.row_id
left outer join siebel.s_applet_intl api on api.applet_id = ap.row_id and api.repository_id = rep.row_id and api.name = ‘ENU-STD’
where  rep.name = ‘Siebel Repository’
and    appl.name = ‘Siebel Power Communications’
and    nvl(rep.inactive_flg,’N’) = ‘N’
and    nvl(scr.inactive_flg,’N’) = ‘N’
and    nvl(scri.inactive_flg,’N’) = ‘N’
and    nvl(scrv.inactive_flg,’N’) = ‘N’
and    nvl(vw.inactive_flg,’N’) = ‘N’
and    nvl(vwi.inactive_flg,’N’) = ‘N’
and    nvl(vwt.inactive_flg,’N’) = ‘N’
and    nvl(vwti.inactive_flg,’N’) = ‘N’
and    nvl(ap.inactive_flg,’N’) = ‘N’
and    nvl(api.inactive_flg,’N’) = ‘N’
union
select scr.name “Screen Name”
,nvl(nvl(ptabi.tab_text, scri.viewbar_text), scr.viewbar_text) “Screen”
,scrv.sequence “View Seq”
,vw.name “View Name”
,vwi.title “View”
,vw.busobj_name “Business Object”
,vwti.item_num “Item Num”
,apta.name “Applet Name”
,api.title “Applet”
,apta.buscomp_name “Business Component”
from   siebel.s_repository rep
inner join siebel.s_screen scr on scr.repository_id = rep.row_id
left outer join siebel.s_screen_intl scri on scri.screen_id = scr.row_id and scri.repository_id = rep.row_id and scri.name = ‘ENU-STD’
inner join siebel.s_screen_view scrv on scrv.screen_id = scr.row_id and scrv.repository_id = rep.row_id
inner join siebel.s_application appl on rep.row_id = appl.repository_id
left outer join siebel.s_page_tab ptab on ptab.application_id = appl.row_id and ptab.repository_id = rep.row_id and ptab.screen_name = scr.name
left outer join siebel.s_page_tab_intl ptabi on ptabi.page_tab_id = ptab.row_id and ptabi.repository_id = rep.row_id and ptabi.name = ‘ENU-STD’
inner join siebel.s_view vw on vw.name = scrv.view_name and vw.repository_id = rep.row_id
left outer join siebel.s_view_intl vwi on vwi.view_id = vw.row_id and vwi.repository_id = rep.row_id and vwi.name = ‘ENU-STD’
inner join siebel.s_view_web_tmpl vwt on vwt.view_id = vw.row_id and vwt.repository_id = rep.row_id
left outer join siebel.s_view_wtmpl_it vwti on vwti.view_web_tmpl_id = vwt.row_id and vwti.repository_id = rep.row_id
inner join siebel.s_applet ap on ap.name = vwti.applet_name and ap.repository_id = rep.row_id
inner join siebel.s_applet_toggle apt on apt.applet_id = ap.row_id and apt.repository_id = rep.row_id
inner join siebel.s_applet apta on apta.name = apt.applet_name and apta.repository_id = rep.row_id
left outer join siebel.s_applet_intl api on api.applet_id = apta.row_id and apta.repository_id = rep.row_id and api.name = ‘ENU-STD’
where  rep.name = ‘Siebel Repository’
and    appl.name = ‘Siebel Power Communications’
and    nvl(rep.inactive_flg,’N’) = ‘N’
and    nvl(scr.inactive_flg,’N’) = ‘N’
and    nvl(scri.inactive_flg,’N’) = ‘N’
and    nvl(scrv.inactive_flg,’N’) = ‘N’
and    nvl(vw.inactive_flg,’N’) = ‘N’
and    nvl(vwi.inactive_flg,’N’) = ‘N’
and    nvl(vwt.inactive_flg,’N’) = ‘N’
and    nvl(vwti.inactive_flg,’N’) = ‘N’
and    nvl(ap.inactive_flg,’N’) = ‘N’
and    nvl(api.inactive_flg,’N’) = ‘N’
order by “Screen”
,”View Seq”
,”View Name”
,”Item Num”
,”Applet Name”

Output looks like –

Applet to BC mapping –

select  “Applet Name”
,”BC Name”
,”BC Field”
,”Required”
,”Calculated”
,”Calculated Value”
,”Join Name”
,”Table”
,”Column”
,”Data Type”
,”Length”
,”Multi-valued”
,”MV Link”
,”Pick List”
,”LOV Name”
,min(“Caption”) “Caption”
,”Display Order”
from (
select ap.name “Applet Name”
,bc.name “BC Name”
,fld.name “BC Field”
,fld.required “Required”
,fld.calculated “Calculated”
,fld.calcval “Calculated Value”
,fld.join_name “Join Name”
,(case when fld.mvlink_name is null then nvl(nvl(jotab.name, fld.join_name), case when fld.calculated = ‘Y’ then null else bc.table_name end) else null end) “Table”
,fld.col_name “Column”
,fld.type “Data Type”
,(case when fld.prec_num is null then to_char(fld.textlen)
else to_char(fld.prec_num) || to_char(case when fld.scale is null or fld.scale = 0 then ” else ‘,’ || fld.scale end)
end) “Length”
,fld.multi_valued “Multi-valued”
,fld.mvlink_name “MV Link”
,pl.name “Pick List”
,pl.type_value “LOV Name”
,coi.caption “Caption”
,co.sequence “Display Order”
from   siebel.s_control co
inner join siebel.s_control_intl coi on coi.control_id = co.row_id and coi.name = ‘ENU-STD’
inner join siebel.s_applet ap on co.applet_id = ap.row_id
inner join siebel.s_buscomp bc on ap.buscomp_name = bc.name
inner join siebel.s_field fld on fld.name = co.field_name and fld.buscomp_id = bc.row_id
inner join siebel.s_repository rep on bc.repository_id = rep.row_id
left outer join siebel.s_join jo on jo.buscomp_id = fld.buscomp_id and fld.join_name = jo.name
left outer join siebel.s_table jotab on jotab.name = jo.dest_tbl_name and jotab.repository_id = rep.row_id
left outer join siebel.s_picklist pl on fld.picklist_name = pl.name and pl.repository_id = rep.row_id
where  rep.name = ‘Siebel Repository’
and    ap.repository_id = rep.row_id
and    co.repository_id = rep.row_id
and    bc.repository_id = rep.row_id
and    fld.repository_id = rep.row_id
and    nvl(co.inactive_flg,’N’) = ‘N’
and    nvl(ap.inactive_flg,’N’) = ‘N’
and    nvl(bc.inactive_flg,’N’) = ‘N’
and    nvl(fld.inactive_flg,’N’) = ‘N’
and    nvl(rep.inactive_flg,’N’) = ‘N’
and    nvl(jo.inactive_flg,’N’) = ‘N’
union all
select ap.name “Applet Name”
,bc.name “BC Name”
,fld.name “BC Field”
,fld.required “Required”
,fld.calculated “Calculated”
,fld.calcval “Calculated Value”
,fld.join_name “Join Name”
,(case when fld.mvlink_name is null then nvl(nvl(jotab.name, fld.join_name), case when fld.calculated = ‘Y’ then null else bc.table_name end) else null end) “Table”
,fld.col_name “Column”
,fld.type “Data Type”
,(case when fld.prec_num is null then to_char(fld.textlen)
else to_char(fld.prec_num) || to_char(case when fld.scale is null or fld.scale = 0 then ” else ‘,’ || fld.scale end)
end) “Length”
,fld.multi_valued “Multi-valued”
,fld.mvlink_name “MV Link”
,pl.name “Pick List”
,pl.type_value “LOV Name”
,coi.display_name “Caption”
,co.sequence “Display Order”
from   siebel.s_list li
inner join siebel.s_applet ap on li.applet_id = ap.row_id
inner join siebel.s_list_column co on co.list_id = li.row_id
left outer join siebel.s_list_col_intl coi on coi.list_column_id = co.row_id and coi.name = ‘ENU-STD’
inner join siebel.s_buscomp bc on ap.buscomp_name = bc.name
inner join siebel.s_field fld on fld.name = co.field_name and fld.buscomp_id = bc.row_id
inner join siebel.s_repository rep on bc.repository_id = rep.row_id
left outer join siebel.s_join jo on jo.buscomp_id = fld.buscomp_id and fld.join_name = jo.name
left outer join siebel.s_table jotab on jotab.name = jo.dest_tbl_name and jotab.repository_id = rep.row_id
left outer join siebel.s_picklist pl on fld.picklist_name = pl.name and pl.repository_id = rep.row_id
where  rep.name = ‘Siebel Repository’
and    li.repository_id = rep.row_id
and    ap.repository_id = rep.row_id
and    co.repository_id = rep.row_id
and    bc.repository_id = rep.row_id
and    fld.repository_id = rep.row_id
and    nvl(li.inactive_flg,’N’) = ‘N’
and    nvl(co.inactive_flg,’N’) = ‘N’
and    nvl(ap.inactive_flg,’N’) = ‘N’
and    nvl(bc.inactive_flg,’N’) = ‘N’
and    nvl(fld.inactive_flg,’N’) = ‘N’
and    nvl(rep.inactive_flg,’N’) = ‘N’
and    nvl(jo.inactive_flg,’N’) = ‘N’
)
group by  “Applet Name”
,”BC Name”
,”BC Field”
,”Required”
,”Calculated”
,”Calculated Value”
,”Join Name”
,”Table”
,”Column”
,”Data Type”
,”Length”
,”Multi-valued”
,”MV Link”
,”Pick List”
,”LOV Name”
,”Display Order”
order by “Applet Name”
,”BC Name”
,”MV Link” desc
,”Table”
,”Display Order”
Output looks like –

So there you go…you could later consolidate both to have a full UI to Data level mapping.