Category Archives: Siebel

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.

Advertisements

What Administrators Should Do for Siebel Reporting with BI Publisher?

There are a couple of things you want to perform as Administrators to manage the Siebel Reporting environment and maintain the BI Publisher reports in Siebel. Here is a list of the tasks that the Administrators should be responsible for.

  • Purging Siebel Reports
  • Optimize Siebel Reporting Environment
  • Enabling Logging for Debugging

Purging Siebel Reports

When the users run the Siebel reports all the generated reports output files will be stored on the Siebel database. These files can be opened from the ‘My BI Publisher Reports’ menu. However, at a certain point of time you might want to delete some of the files due to the size of keeping all the reports on the file system and also due to a compliance matter.

You as Siebel Administrator can purge such report files from the Siebel database using filters or by running a workflow process. I’m going to talk about how to set up reports to be automatically or manually purged.

Automatic Purge

You can set up to automatically purge your reports from the Siebel database after a specified time interval. The ‘BIP Delete After Days’ system preference allows you to specify any non-zero positive value that executes the Auto Purge workflow to purge the reports. Based on the value that you enter, the reports are purged from the database after the number of days specified.

To automatically purge reports

  1. Log in to the Siebel application with system administrator privileges.
  2. Navigate to the Administration – Application screen, then System Preferences view.
  3. In the System Preferences list, select ‘BIP Delete After Days’, and change the value to any positive nonzero value.
    By default, the value is set to -1 (minus 1), which means it never purge.

    BIP_Delete_After_Days

  4. Navigate to the Administration – Server Management screen, then Jobs view.
  5. Add a new job
  6. Click the search icon to select ‘Workflow Process Manager’
  7. Click ‘New’ button to add a Job Parameter to the job
  8. Select Workflow Process Name for the name
  9. Type ‘XMLP Purge Records’ as the value
  10. Click Submit.

Alternatively you can schedule this job to run periodically using the Siebel workflow, see Siebel Business Process Framework: Workflow Guide for the detail.

Manual Purge

When manually purging Siebel reports, you can specify criteria by which the reports are purged. Reports meeting that criteria will be removed from the Siebel database. You can also purge multiple reports together by selecting a date range, the reports that were generated within the specified date range will be purged. If both the report name and the date range are entered, then only those reports with that name and that were generated within that specified date range are purged. You can also purge reports for a specific user by entering his/her user ID as the criteria.

To manually purge a report:

  1. Log in to the Siebel application with system administrator privileges.
  2. Navigate to the Administration – BIP Reports screen, then Purge Administration view.

    Purge_Admin

  3. In the Purge Administration form, you can select a report name, type From Date, To Date, and select User ID. You don’t need to fill all of them. Whatever you enter will be used as a criteria to select the reports to be purged.
  4. Click Run.
    The reports that meet the specified criteria are purged.

Optimizing Performance for Siebel Reports

Now the next topic is to optimize the Siebel Reports runtime environment to have better performance and scalability. There are several attributes that you can use to best fit to your reporting and system requirements from performance and scalability perspective.

Here is a list of the attributes.

  • Report Execution Wait Time
  • Server Request Processor Wait Time
  • Setting Concurrency Parameters
  • Max Fetch Size (DSMaxFetchArraySize) for Large Data Volumes
  • Enabling Scalable Mode
Execution Wait Time

By setting this threshold value you can cancel some of the reports, which would take longer than the specified time duration, to run. In some cases some reports might take a long time and when you have multiple reports taking long time at the same time other users might have to wait for those reports to finish the jobs. Typically such long running reports should be executed at when most of the users are not accessing such as at night time as a batch process, but there is no control to prevent the users to run such reports as long as they have access to them. So you can use this attribute to control such.

Here is a list of the steps to set the Report Execution Wait Time for Siebel Reports

  1. Navigate to the Administration – Application screen, then System Preferences view.
  2. In the System Preferences list, select BIP Report Wait Time, and then change the value to any number greater than 100. By default, the threshold is set to 100 seconds.
Setting the Server Request Processor Wait Time for Siebel Reports

Some times your database doesn’t respond due to heavy duty work currently being performed at the database or simply not available. Or there is a quick temporary issue on the network. Whatever the reason your report request trying to access to the database might not getting any response back. Typically the applications try to reconnect to the database after a certain waiting time. You can control this waiting time with this setting.

Follow the steps below to set the Server Request Processor Wait Time for Siebel Reports

  1. Navigate to the Administration – Server Configuration screen,  Servers, and then Components view.
  2. In the Components list, select Server Request Processor (alias SRProc).
  3. Scroll down and click the Parameters subview, and then click Hidden.
  4. In the Parameter list, select Database Polling Interval, and change value from 10 to 1. The Value on Restart and Default Values are updated as well.
  5. Restart the Siebel Server.
Setting Concurrency Parameters for Siebel Reports

You can set a maximum number of tasks per XMLP Report Server, which is not the BI Publisher Enterprise but it’s the engine that takes care of the report request and response within the Siebel, per a single Siebel server. Also you can set a maximum number of MT (Multi Threaded) Servers per a single Siebel server.

Typical guideline would be:

  • MaxTasks = peak (concurrent users)
  • MaxMTServers = MaxTasks / 100

So, for example, let’s say you have 1000 users accessing to the reporting at the same time then the MaxTasks would be 1000 and the MaxMTServers would be 10. Note that this is a generic guide line and these numbers should not be used as a static number for your environment. Each environment and reporting needs would impact on the above numbers and requires a series of performance testing to come up with the best numbers.

You can follow the steps below to set concurrency parameters for using the GUI

  1. Log in to the Siebel application with administrator privileges.
  2. Navigate to the Administration – Server Configuration screen, Servers, and then Components view.
  3. In the Components list, select XMLP Report Server.
  4. Click on the Parameters view tab and set accordingly.
Optimizing Performance of Siebel Reports for Large Data Volumes

When you have a large data coming back for your reports then you can set a Data Source maximum fetch array size (DSMaxFetchArraySize) profile parameter value to ‘-1’ so that the size is unlimited. But again, this value should be fitting to your specific environment so you might want to increase the value to a certain threshold instead of setting it as unlimited.

You can follow the steps below to optimize performance of Siebel Reports for large data volumes

  1. Navigate to the Administration – Server Configuration screen, Enterprises, and then Profile Configuration view.
  2. In the Profile Configuration view list, select Server Datasource (alias ServerDataSrc).
  3. Scroll down to the Profile Parameters, and then click Advanced.
  4. In the Profile Parameters list, select Datasource maximum fetch array size (alias DSMaxFetchArraySize), and then change the value to -1.
  5. Restart the Siebel Server.
Enabling Scalable Mode for Siebel Reports

When you have a large data volume or have complex XSL transformation logic you might want to enable BI Publisher’s XSLT engine to be scalable so that the engine will transform the raw data to XSL-FO template and generate the final output by using the hard disk instead of loading the file onto the memory space. In this way you can avoid ‘out-of-memory’ related issue at the BI Publisher’s reports generation process. You can enable the scalable mode parameter by configuring the BI Publisher’s configuration file, xdo.cfg file, which is located under the %JRE_HOME%\lib directory, where JRE_HOME is the one used for BI Publisher Enterprise Server.

To enable scalable mode for Siebel Reports

  1. Navigate to the jre\lib installation directory.
    NOTE: The path for the Java installation folder varies depending on where you installed JRE.
  2. Open the xdo.cfg file, and in the <Properties></Properties> tag, use the following syntax to set the Scalable Mode property to true (if not already set):
    <property name=”xslt-scalable”>true</property>
    NOTE: You can set Scalable mode to either true or false.
  3. Save the xdo.cfg file.
  4. Restart BI Publisher Server

Next

There are a few other critical things you can do as an Administrator such as Migrating the reports from Development environment to QA/Production environment, Enabling Logging for Debugging.

How to capture business service inputs for use in Business Service Simulator

Often errors reported in Siebel CRM Application, such unexpected processing results, application error or process crash can be initiated calling a certain custom or standard Business Service (BS).

Analysis of Siebel log / FDR / SARM traces may show that failure of Siebel Object Manager was caused by calling a method of a Business Service.

In this document we want to illustrate how the input arguments of a Business Service that was invoked during execution of the case could be captured in a file,

that can be picked up by the Business Service simulator.

Note: Not all Business Services of Siebel CRM Application could be invoked directly by BS-Simulator.

Usually good candidates for simulation are custom Business Services (server-side scripting), standard EAI Toolset Business Services (EAI Siebel Adapter/EAI UI Data Apdater,

an ASI/UDS, an Outbound WS Proxy, various XML Converters, the EAI Dispatcher,  the EAI Data Transformation Engine and so on) and the “Workflow Process Manager” BS.

Simulation of the “RunProcess” method of the  “Workflow Process Manager” Business Service allows to execute a workflow process process

within the BS-Simulator session, while same method invoked for the “Workflow Process Manager (Server Request)” BS

makes the process execution happen in separate task of the “Workflow Process Manager” server component.

 

Paths (can be combined) to capture the BS method input arguments in a file, that can be loaded in BS-Simulator.

(A) The .dmp File – input property set stored as XML document

Setting to “True” of the advanced component parameter: “Enable Business Service Argument Tracing” (short alias: “EnableServiceArgTracing“)
allows Siebel Object Manager component task to produce *.dmp files with input arguments for a certain standard business services.

Example of the  command of Server Manager Command line  utility (“srvrmgr“) that amends this parameter for a given component (example: “EAI Object Manager (ENU)“):
change param EnableServiceArgTracing=True for comp EAIObjMgr_enu

Once the parameter is set to “True” one also need to raise the logging level to 5 for tracing of a desired component event type,
to component task to trace arguments of a given Business Service into a *.dmp file.

Following two event types could be found useful:

(1) “EAI Dispatcher Argument Tracing” (short alias: “EAIDispatchSvcArgTrc“)

to let Inbound Web Service Framework component produce  “EAITransportDispatchService_input_args_*.dmp” file with input arguments

(original SOAP Message and HTTP Transport headers) received from Web Service Client (via Siebel Web Server Extension).

The .dmp file can be used as input of the “GenericDispatch” method of the “EAI Dispatch Service” Business Service to mimic the Inbound Web Service call dispatch.

Example of the  command of Server Manager Command line  utility (“srvrmgr“) that amends logging level of this event type to 5 for a given component

(example: “EAI Object Manager (ENU)“):

change evtloglvl EAIDispatchSvcArgTrc=5  for comp EAIObjMgr_enu

NOTE: To use this file as input in  the BS-Simulation one need to rename its extension to “.xml“.

NOTE-2: After(!), loading the file in BS-Simulator View one need to insert/correct the xml-prologue to <?xml version=”1.0″ encoding=”UTF-16″?>

to indicate the unicode text encoding, used by  Siebel UI

(2)  “EAI Siebel Adapter Argument Tracing” (short alias: “EAISiebAdptSvcArgTrc“)

to let methods of the “EAI Siebel Adapter” standard Business Service to produce produce “EAISiebelAdapter_input_args_*.dmp” files   with input arguments of the invoked method.

The .dmp file can be used as input of accordant menthod of the “EAI Siebel Adapter” Business Service.

Example of the  command of Server Manager Command line  utility (“srvrmgr“) that amends  logging level of this event type to 5 for a given component

(example: “EAI Object Manager (ENU)“):

change evtloglvl EAISiebAdptSvcArgTrc=5  for comp EAIObjMgr_enu

NOTE: To use this file as input in  the BS-Simulation one need to rename its extension to “.xml

 

(B) The .log File - Siebel Object Manager traces of various event types
Input arguments can be also captured right from the Siebel Application log, whenever one sees strings (often long) that starts 
 with the prefix: @0*  and  contains argumenz names and values separated by <NN>* ,  where <NN> is legth of a text value AFTER the * .

This string represents an internal serialization of a property set hierarchy, used by Siebel Object Manager to trace the property set content as string.

The serialization and de-serialization of a property set into / from a string is performed by standard Business Service "Workflow Utilities" 
 and its methods: "PropSetToText" and "TextToPropSet".
Traces of the the "Workflow Process Execution" (short alias: "PrcExec") and "Workflow Step Execution" (short: alias: "StpExec") component events
 shows input and output arguments (property set) for a workflow process start and execution of each its steps.

Example of the  command of Server Manager Command line  utility ("srvrmgr") that amends this parameter for a given component 
(example: "EAI Object Manager (ENU)"):
    change evtloglvl PrcExec=5  for comp EAIObjMgr_enu
 change evtloglvl StpExec=5  for comp EAIObjMgr_enu  

NOTE: Oversized property set can not be completely held in  the trace, in this cases, the approach will not work, 
 Incomplete trace can be recognized if last text elemnt the string does not follow the <NN>*<C(NN)> rule
 whre <NN> is number of characters: <C..C> after the *.

Below is  example of the Object Manager log file that  withinput argument traces for a Workflow Process  and a Business Service step:
ObjMgrBusServiceLog … InvokeMethod 4 … Begin: Business Service ‘Workflow Process Manager’ invoke method: ‘RunProcess’ …

EngInv EngInv 3 … Workflow engine requested to perform method ‘RunProcess’.

EngInv Arg 4Input: @0*0*1*1*0*3*0*11*ProcessName15*TST_T1_EAIQuery4*1*13*SiebelMessage0*9*MessageId9*8SIA-IDGZ11*MessageType18*Integration Object13*IntObjectName26*Internal Account Interface15*IntObjectFormat19*Siebel Hierarchical0*1*32*ListOfInternal Account Interface0*37*6*7*Account0*16*PO Approved Flag0*30*PO Auto Approval Currency Code3*USD17*Skip Credit Check1*N23*Assignment Country Code0*11*DUNS Number0*19*Parent Account Name0*25*Price List Integration Id0*10*Account Id10*8SIA-7EIGB14*Account Status6*Active20*Assignment Area Code0*17*Main Phone Number10*415897654318*Credit Status Date0*13*Currency Code3*USD20*Primary Organization20*Default Organization23*Parent Account Location0*15*Competitor Flag1*N14*Parent HQ DUNS0*5*Alias0*14*Integration Id0*29*Parent Account Integration Id0*12*Partner Flag1*N26*Credit Auto Approval Limit0*22*PO Auto Approval Limit0*4*Type8*Customer22*Domestic Ultimate DUNS0*19*Number of Employees0*9*Home Page0*21*PO Auto Approval Date0*9*Expertise0*23*VAT registration number0*15*Main Fax Number0*8*Location12*HQ-Corporate20*Global Ultimate DUNS0*4*Name15*A.K Parker Inc.17*Parent Account Id0*10*Price List0*13*Price List Id0*0*1*22*ListOfBusiness Address0*11*0*16*Business Address0*12*IsPrimaryMVG1*Y16*Street Address 20*6*County0*4*City8*Danville14*Street Address17*100 Danville Blvd5*State2*CA7*Country3*USA10*Address Id8*1-1FIG+C22*Address Integration Id0*8*Province0*11*Postal Code5*945860*1*23*ListOfRelated Sales Rep0*6*0*17*Related Sales Rep0*8*Position42*FIN 00 30 – Financial Advisor Credit Cards8*Division20*Default Organization12*IsPrimaryMVG1*Y5*Login7*PCONNOR11*Position Id10*8SIA-70NAN23*Position Integration Id0*0*0*21*ListOfRelated Contact0*0*1*26*ListOfRelated Organization0*4*0*20*Related Organization0*12*IsPrimaryMVG1*Y15*Organization Id6*0-R9NH27*Organization Integration Id0*12*Organization20*Default Organization0*0*20*ListOfCredit Profile0*0*0*22*ListOfRelated Industry0*

PrcExec PrcExec 3 … Executing process definition ‘MyProcess’.

PrcExec Create 4 … Instantiating process definition ‘MyProcess‘.

PrcExec PropSet 4    …    @0*0*4*1*13*SiebelMessage0*9*MessageId…22*ListOfRelated Industry0*

StpExec Create  4    …    Instantiating step definition ‘Start‘.

StpExec Create 4 … Instantiating step definition ‘MyBSstep‘.

StpExec Task 4 … Invoking method ‘MyMethhod‘ on business service ‘MyBS‘.

StpExec TaskArg 4 … Input: @0*

 

To turn the string with serialized representation of a property set into .xml  file, so that can be used as input arguments with BS-Simulator,

following custom business service: “AUX_T2PS” (attached as the “AUX_T2PS.xml” file to this document) can be used,

The BS to combines calls of following standard BS::Methods

  • EAI File Transport::Receive” – to read the serialized property set string from a file (a UTF-8 text copied from a .log file and begins with @0*)
  • Workflow Utilities::TextToPropSet” – to de-serialize the string from a file into a property set hierarchy
  • EAI XML Write to File::WritePropSet” – to save property set into an .xml file, that can be loaded in BS-Simulator (input arguments applet).

The Business Service has single method (“Execute“) and following input arguments:

  • FileName” – to specify location / name of the input text wile with a serialized property set string that begins with @0*  (will be read)
  • FileName2″ – to specify location / name of the  output .xml file with the decoded property set (will be produced)
  • other input parameters are optional and if present, will be passed to the “Receive” method of the “EAI File Transport” BS

This Business Service can be defined as run-time BS (defined in Siebel Client and requires no .SRF compilation)

The Business Service code (for copy+paste into BS server code edit):

Service_PreInvokeMethod:
function Service_PreInvokeMethod (MethodName, Inputs, Outputs)
{
try
{
//
// Read text file with the property set (serilalized as string)
//
var psX = Inputs.Copy();
var                   sCP = “CharSetConversion”;
if(  psX.GetProperty( sCP ) == “” )
psX.SetProperty( sCP,”UTF-8″ );
TheApplication().GetService(“EAI File Transport”).InvokeMethod(“Receive”, psX, Outputs );

//
// De-serialize property set from string into a property set object
//
psX = Outputs.Copy();
TheApplication().GetService(“Workflow Utilities”).InvokeMethod(“TextToPropSet”, psX, Outputs );

//
// Write xml file with the property set (serialized as XML document)
//
psX = Outputs.Copy();
psX.SetType(“PropertySet”);
psX.SetProperty(“FileName”, Inputs.GetProperty( “FileName2”) );
TheApplication().GetService(“EAI XML Write to File”).InvokeMethod(“WritePropSet”, psX, Outputs );
}
finally
{
//
// Done.
//
psX =  null;
};
return (CancelOperation);
}

WARNING: The provided code example is given for illustration purpose only.

(C) the Service_PreInvokeMethod event handler (server side code)
Finally one can temporary put a server side code into the "Service_PreInvokeMethod" event handler of a Business Service, to capture input arguments of the invoked method.

Following provides an example of a Siebel eScript code, one could put in the business service in order to capture input arguments in an *.xml file. In this example, the file will be produced 
in the "../log" folder of the current Siebel Application directory (which is usually: "bin" folder of the software installation root). 
The name of the file will contain the Business Service name (with stripped blank characters), the method name, the sequential number - incremented at each call in
 this session and the random number, to provide unique (across all sessions) part to the file name.
(declarations):
var nCnt = 0;                                                        //dump files counter
var dmp_filePfx = “../log/” + this.Name().replace(/ /g,””) +  “_”;   //dump file prefix (folder + BS name)


Service_PreInvokeMethod:
function Service_PreInvokeMethod (MethodName, Inputs, Outputs)
{
try  //dump input arguments of any method
{
var psIn = Inputs.Copy();
psIn.SetProperty(“FileName“, dmp_filePfx + MethodName + “_” + ToString(++nCnt) + “_$$_input.xml” ); //provide the dump file name
psIn.SetType(“PropertySet“);
with(TheApplication() ) GetService(“EAI XML Write to File“).InvokeMethod(“WritePropSet”, psIn, NewPropertySet() ); //create the dump file
}
finally {   psIn = null; }; //cleanup
return(ContinueOperation);
}

NOTE: This code overwrites value of the “FileName” input argument if any would be provided the method invocation. To keep the original value of this input argument, one need to add extra code to obtain its value

and store into alternative parameter (such as :”Original_FileName”) and then, in the BS-Simulator View, correct the input argument name back to: “FileName”.

NOTE-2: An invocation of standard business service method may not necessary invoke the server side code of the event handler. Some specialized and internal business services may not presume use

of the scripting engine of Siebel Application. However in may “regular” cases the scripting engine is used to the custom code that will dump the input arguments, so that they could be used in the BS-Simulator.

WARNING: The provided code example is given for illustration purpose only.

Before this kind of solution could be placed in a production environment, it has to be verified/tested against potential data damage and loss.

 

Auxiliary Workflow Process to invoke a Business Service with complex arguments from Business Service Simulator View

In some cases, such as Siebel UI size constrains for input or output argument fields), need to use non UTF-16 encoding,
either input arguments cannot be loaded from an .xml file  or7and output arguments could not be displayed in the BS-Simulator View.

In such situation it is practical to define a 3 steps auxiliary workflow process or  a custom business service to that actual invokes being tested Business Service
so that initiation of simulation in the BS-Simulator View becomes just a start of this this auxiliary process (using the “RunProcess” method of the “Workflow Process Manager” BS) or business service.

The auxiliary process / business should:
– read the input arguments from an .xml file
– invoked the being tested method of the Business Service
– write the output arguments in an .xml file

The Business Service has single method (“Execute“) and following input arguments:

  • FileName” – to specify location / name of the input .xml with  with content of input argunents (will be read)
  • FileName2″ – to specify location / name of the  output .xml file with content of output argunents (will be produced)
  • BS” – to specify name of being tested Business Service
  • Method” – to specify name of the Business Service method
  • other input parameters are optional and if present, will be passed to the “Receive” method of the “EAI File Transport” BS

This Business Service can be defined as run-time BS (defined in Siebel Client and requires no .SRF compilation)

The Business Service code (for copy+paste into BS server code edit):

Service_PreInvokeMethod:
function Service_PreInvokeMethod (MethodName, Inputs, Outputs)
{
try
{
with( TheApplication() )
{
//
//  Load Input arguments
//
var psIn   = NewPropertySet();
GetService(“EAI XML Read from File“).InvokeMethod(“ReadPropSet”, Inputs, psIn ); //”FileName” in Inputs will be used to load ps from file
//
//  Invoke the Business Service
//
var sBS      = Inputs.GetProperty(“BS“);
var sMethod = Inputs.GetProperty(“Method“);
var psOut    = NewPropertySet();
GetService( sBS ).InvokeMethod( sMethod , psIn, psOut );
//
//  Save Output arguments
//
psOut.SetProperty(“FileName“, Inputs.GetProperty(“FileName2“) );
GetService(“EAI XML Write to File“).InvokeMethod(“WritePropSet”, psOut, Outputs ); //Outputs: will show result of saving ps in the file
}; // end-with: TheApplication
}
finally {   psIn = null; psOut = null; }; //cleanup
return(ContinueOperation);
}

Comparing Two Repository Files Using SRFDiff

Comparing Two Repository Files Using SRFDiff


The SRFDiff utility allows you to compare two repository (.srf) files. Both SRFs must be from the same locale and language and compliant with the current Siebel Tools schema version. From the Help menu in Siebel Tools, choose Technical Support to view the schema version of the SRF that Siebel Tools is using.

NOTE:  The SRFDiff utility validates only for a major schema version. Therefore, SRFs with different minor schema versions, such as 44.39.0.248 and 44.40.0.1, are valid schemas.

The differences between the two files, that is new, deleted, and changed objects, are recorded in two user-specified XML output files, depending on what the comparison discovers:

  • diff_srf1_srf2.xml. This output file contains differences between the two SRFs and provides a list of new and modified objects. It may also contain new objects found in srf2 that are not found in srf1. This output file shows the differences found during the comparison using an attribute name/value list format.
  • deleted_records_diff_srf1_srf2.xml. This output file contains deleted objects (objects present in srf1 but not in srf2).

If no differences are found or both SRF files are identical, then the SRFDiff utility does not generate output files.

To compare two repository files

  1. Log in to Siebel Tools.
  2. From the Tools menu, choose Utilities, and then the Compare SRFs menu item.
  3. In the Compare SRFs window, enter the following:
  • Full pathname for the first SRF file
  • Full pathname for the second SRF file you want to compare
  • Full pathname for the output file

NOTE:  If you do not specify a location for saving the output files, the SRFDiff utility by default saves these files to the Tools\objects directory.

  1. Click Compare.

The SRFDiff utility:                                    

  • Validates each SRF for file parameters, such as file existence, version, and language
  • Creates one or two output files as follows:
  • For new or changed objects or both, SRFDiff creates an output file that contains differences between the two SRFs. It also contains new objects present in one SRF file but not in the other file.
  • For deleted objects, SRFDiff creates an output file that contains deleted objects that are present in one SRF file but not in the other file.

 

Invoking the SRFDiff Utility Using the srvrmgr Command Line Interface

You can also invoke SRFDiff using the server manager (srvrmgr) command line utility by entering the following command:

siebdev /srfdiff “<srf1>” “<srf2>” “<outputfile>”

For example, if you want to compare the siebel.srf file with the siebel_1.srf file that reside in the C:\Programs Files\Siebel Tools 8.1\OBJECTS\ENU\ directory, you enter the following command:

siebdev /srfdiff “C:\Programs Files\Siebel Tools 8.1\OBJECTS\ENU\siebel.srf” “C:\Programs Files\Siebel Tools 8.1\OBJECTS\ENU\siebel_1.srf” “C:\Programs Files\Siebel Tools 8.1\OBJECTS\”

Advantages:
– No need of manual tracking
– It will shows what is added or removed from one srf to another and vice versa.

Disadvantage:
– It captures one change per object and does not captured multiple changes against same object for different change requirement i.e. If object is changed for two change request then it will only capture as object changed and does not shows how many times it is changed

Open the output file and see the differences:

diff_srf1_srf2.xml.

Installing Siebel 8.2.2 on Linux x86-64 Part-4

6. Configure a Siebel Server.  

Now as we have populated Siebel database, next step is to configure Siebel Server.
In this section we will:-

  1. Generate siebenv.sh for Siebel Server.
  2. Configure, Start and test an Installed Siebel Server.

To generate siebenv.sh

  • Add 32-bit database client library path to LD_LIBRARY_PATH variable
    export LD_LIBRARY_PATH=/u01/obi/dbHome/OBIDB/product/11.2.0/client/lib
  • Navigate to siebsrvr install directory as
    # cd siebsrvr/install_script/install/
  • Run CreateSiebSrvrEnvScript which takes 4 arguments base directory of Siebel server , gateway name server info , Language and database type.
    Like :-
    [dbuser@vm50 install]$ ./CreateSiebSrvrEnvScript /u01/siebel/8.2.2.0.0/ses/siebsrvr vm50:2320 ENU Oracle
    Here arguments are <Siebsrvr home > <Name Server connecting string > <Langauage> <Database Type>
  • Important Note:- Please enter correct location of the ODBCINI parameter in the created siebenv.sh file.{as in our case odbc.ini was located in the gtwysrvr’s sys subdirectory so we set ODBCINI variable accordingly in siebenv.sh file just created in previous step.}
  • After fixing Siebenv.sh we source it.
  • Now we are ready to configure Siebel Server.

To configure Siebel Server

  • Navigate to config directory and run the configuration Wizard in siebsrv mode .as
    # ./config.sh -mode siebsrvr
  • Select Create new configuration.
  • Enter Gateway Name Server Authentication Username and Password.
  • Enter Gateway Name server Host-name and port(2320 in our case).
  • If you receive any error after the above step Please recheck if Gateway Name Server is running properly or not.
  • Enter Siebel Enterprise name
  • Enter Siebel Server name which by default is machine name.
  • Enable Components groups that you want.
  • Select Siebel connection Broker Port default is  2321;
  • Select Remote Synchronization Port.{Default is 40400}
  • As we are not going to perform any additional task click next and follow GUI.
  • A summary screen will appear click next to continue
  • And you should get a success message like the one below :-
  • Click exit to end the Wizard
  • Siebel server is now configures but not started
  • To start the server we navigate to siebsrvr bin directory
  • Run StartServer script as :-
    start_server [-r <siebel root>] [-e <enterprise>] [-L <language code>] [-a] [-f] [-g <gateway:port>] { <server name> … | ALL }
  • We can use srvrmanager to connect to the enterprise and the server
  • and it should connect successfully as
  • We can list all components as
    Srvrmgr> list components

Now next step is to Install Siebel web Server extension and we will try to access Siebel server using a web browser.

7. Installing and configuring a Siebel Web Server Extension (SWSE).

In this section we will:-

  1. install the Siebel Web Server Extension (SWSE)
  2. Configure and test SWSE

 Note: – We need an Oracle HTTP Server already running on the machine

 Note:– Supported Web Servers.
http://docs.oracle.com/cd/E11886_01/V8/CORE/SRSP_81/SRSP_81_ServerEnv8.html
In our case we have http server listening on port 7777.{We have Installing Oracle Web Tier 32-bit on a 64-bit Linux Operating System}
Make sure http server is running as:-

  • Navigate to Server instance sub directory
    For Example :-
    #cd /u01/middleware/Oracle_WT1/instances/instance1/bin
  • Check the status of http server using opmn {oracle process management notification }
  • So http server is running fine, now we will configure Siebel we Server extension.
  • Go to the install image that we created earlier .
    #cd/u01/Siebel_Install_Image/8.2.2.0/Linux/Server/Siebel_Web_Server_Extension/
  • Run the “runInstaller” script from the Disk1/install directory.
  • Select  Home Location.
  • Select Language and Click Next.
  • We skipped the security update.
  • Once again (as we did earlier), we can skip the prerequisites check warnings as we are using  64 bit Operating System.
  • Cryptographic seed is used to encrypt user information in cookies used by SIEBEL.
  • Click Install on summary screen to proceed.
  • We can monitor installation from progress bar .
  • Click exit after you get success message

Now we will configure the Siebel we server extension that we just installed.

  • Navigate to sweapp directory
  • Source cfgenv.sh file and navigate to config subdirectory to run configuration tool in swse mode as
    ./config.sh -mode swse
  • Enter Siebel Server hostname
  • Enter Siebel Connection Broker Port{Default is 2321}
  • Select Siebel Web Server Logical Profile that we created earlier , its located in gtwsrvr’s admin subdirectory .
  • Select web server Instance location.
  • We need to restart web Server after configuration so we select restart option
  • Click next to execute settings
  • Click exit after you get a success message.
  • Now we can test it on a web browser
  • We can log as SADMIN User.
    This Concludes Siebel 8.2.2.0 Installation on Linux x86-64.