focus yourself glad to have found a quick solution for a possibly common requirement. Users are trained to use the Account name field in the opportunity list to search for opportunities. However, when they use ALT+Q to enter query mode, the first column in the list has the focus, so they have to tab to the Account column. They want to have the cursor in the Account column once they enter query mode, irrespective of the placement of the column. Here is a simple way to implement this. It introduces the DefaultFocus Applet User Property, which, if memory serves me correctly, has been introduced in Siebel 7.8. First we add a new Applet User Prop to the Opportunity List Applet. We use DefaultFocus_Query = Account to define the default focus column for the Query Mode. Note that you can use DefaultFocus_Edit for Base, Edit and EditList mode and DefaultFocus_New for the New mode. After compiling the .srf file, we can run a test.... And voilá, click Query and you find the focus on the Account column. So you can speed up your work by simply entering the search string and hitting the ENTER key. There also was another requirement to have the focus on the Query button. However, using DefaultFocus_Edit = NewQuery did not yield the desired result. The funny thing was that the Query button only got focus after pressing ALT+ENTER (or invoking the ExecuteQuery command). Maybe the answer to that problem is somewhere out there......
...welcome back to Part II of our tour de workflow Let's reiterate the requirement #2 Retrieve total opportunity revenue for an Account Sum up the revenue of the current Opportunities for an Account and write the result to an Account field. This is the prototype workflow. As in part I, Siebel 8.1 was the implementation platform. The workflow itself has the following properties: Business Object: Account Process Properties created: CurrentRevenue, LastRecord, RecordCount, TotalRevenue Get Oppties Step: Business Component: Opportunity Operation: Query Search Spec Expression: "[Account Id]='" + [&Object Id] + "'" Output Args: TotalRevenue = BC Oppty.Primary Revenue Amount RecordCount = Output Argument NumAffRows Decision Step Last Record? yes = Process Property LastRecord = true no = Default Go to next Oppty Step BC: Opportunity Operation: NextRecord Output Args: CurrentRevenue = Opportunity.Primary Revenue Amount (1) TotalRevenue = Expression: [&TotalRevenue] + [&CurrentRevenue] (2) LastRecord = Output Arg: NoMoreRecords (3) Note: Numbers in brackets indicate the sequence of the output arguments Update Account Step BC: Account Operation: Update Field Input Arg: Revenue = Process Property TotalRevenue Note #1: The workflow operates on the Account Business Object with Account BC as the primary BC and Opportunity as a child BC. Note #2: Despite Note #1 it is still necessary to execute a query to get the Opportunites associated with the Account. Note #3: The fairly new Siebel Operation NextRecord (along with its siblings PreviousRecord and QueryBiDirectional) has been introduced in Siebel 8.0. It is the first version that allows us to loop through a record set in a workflow without being outwitted by the complexity of looping. The NextRecord operation has an output argument of NoMoreRecords (true or false) which must be used in a decision step to determine whether the loop has to end or not. Pitfall #1: Adding up the revenue amount requires two process properties. One to get the field value from the BC and the other one to serve as the accumulator. Note the sequence in the NextRecord operation to fill them in the correct order. Hope you enjoyed this small workflow series. If you want more, drop a comment ;-) @lex...
Recently, I had to do some prototyping for typical requirements which led me to the Siebel Workflow framework as a solution. As indicated in a previous post, workflow processes (along with the business services they call) account for almost every piece of functionality and automation in Siebel CRM). So in general it is a good idea to have an eye on workflow when it comes to automation solutions. However, there are some pitfalls for the novice developer that often lead to frustration and even refusal of using workflow. In this and a following post, I will describe two workflows that should serve as examples how to solve common problems in Siebel. These are the requirements 1. Update multiple records (this post) Users should be able to enter a search string to retrieve a list of Accounts and the target value of the Account Status field. The system should then update the Account Status field of all records in the result set to the target value. 2. Retrieve total opportunity revenue for an Account (future post) Sum up the revenue of the current Opportunities for an Account and write the result to an Account field. I implemented both requirements on Siebel 8.1.0.0 Let's have a look at the solution to requirement #1. To be honest, I was surprised at the simplicity of the workflow. It is a really nice example, how the Siebel framework works. The workflow is configured as follows: Business Object: Account Process Properties created: QueryField, Querytext, RecordCount, TargetValue The first Siebel Operation step is configured as follows: BC: Account (No Link) Operation: Query Search Spec Expression: "[" + [&QueryField] + "] LIKE '" + [&QueryText] + "*'" Output: RecordCount = NumAffRows The second Siebel Operation step is configured as follows: BC: Account (No Link) Operation: Update Field Input Argument: Account State = Process Property: TargetValue Pitfall #1: Too complicated approach Siebel Operations inside a workflow which operate on the same BC inherit the context of the previous step, so all you need is one query operation and then the update operation will update all records in the query result set. That's it. Pitfall #2: Problems with the primary BC There is strange behaviour to report when the Siebel Operations use the primary BC of the workflow's Business Object (Account, that is). I used the Account (No Link) BC instead and it worked like a charm. Please don't ask why ;-) Pitfall #3: Externalize the query string How in god's name can someone figure out the query string if she/he is not a complete geek? "[" + [&QueryField] + "] LIKE '" + [&QueryText] + "*'" is built as follows: 1. Parenthesize the value of the QueryField process property in square brackets "[" + [&QueryField] + "]" 2. Append the LIKE operator "[" + [&QueryField] + "] LIKE" 3. Append an asterisk to the value of the QueryText process property and parenthesize it in single quotes "'" + [&QueryText] + "*'" 4. Bring all together "[" + [&QueryField] + "] LIKE '" + [&QueryText] + "*'" Not too difficult - but devilish Note that the Siebel Operations have an output argument which is useful to get the number of affected records. Several tests showed that the workflow updated several hundreds of records in short time....
once and for all Hierarchical picklists in Siebel CRM... It's a long story. There are numerous approaches (even in the standard repository) and myths out there how to implement them. A hierarchical picklist is one that allows a user to pick a value for the first field and then shows only values for the second field that are dependent on the first one and so on. Here is a cookbook style example (tested on Siebel Industry Applications 8.1) how to implement a hierarchical picklist with indefinite levels: 1. Create the list of values data Use the Siebel Web Client to enter the data for the picklist. You should use the same TYPE and distinguish the levels using the Parent field. Note that the first level does not have a parent 2. Create the business component fields Create one field for each level. For all levels but the lowest set the property Immediate Post Changes to true (for resetting the lower fields when changing the value in the applet). 3. Create picklist objects Use the Picklist wizard to create a static bounded picklist object for the new fields. Create separate picklist objects for the first level and all subsequent levels (you will use 2 different picklist objects). When the wizard is finished, navigate to the picklists and make the following changes manually: For the first level picklist, change the Business Component property to PickList Hierarchical and set the Search Specification property to [Parent Id] IS NULL. For the second (and subsequent) level picklist, change the Business Component Property to PickList Hierarchical. PickList Hierarchical is a standard BC used for example in the BC Service Request to implement the Product, Area and Sub-Area hierarchy. 4. Edit pick maps Navigate to the Pick Map specifications for the new fields and set the following: For the first level field add pick map records for all dependent fields and enter Dummy as the picklist field. Dummy is a calculated field (evaluating to an empty string) in the PickList Hierarchical BC. For the subsequent fields add the Dummy mapping for all remaining dependent fields and add an additional record for the upper level field where you set the Picklist Field to Value and the Constrain flag to true. Do not add a dummy mapping for the last field in the hierarchy. The screenshot should give you the general idea: 5. Expose the new fields as controls/list columns in an applet Do the UI work as usual and test. The dropdown for field 1 should only display the highest level values and lower level fields should be constrained to the child values of the higher level field value. When changing an upper level field, the lower level fields should be reset to empty strings. Users should not be able to select values in "wrong order". have a nice day @lex...
Introduced in Siebel 7.7 and greatly enhanced in 7.8, the Quick Print feature allows end users to bring the data they see in the Siebel view to paper (or Excel, HTML or - if a pdf writer is installed - to PDF). Quick Print seems to be somewhat neglected in most projects, as it comes with default settings that are not very attractive. The screenshot below shows the result of pressing the Quick Print toolbar button in the Account > Orders view. Not very impressive indeed, but let's set the user preferences for Printing as follows (note that we use HTML output which also allows to print form applets; Excel output is only supported for list applets). Now you're talking As we see, Quick Print is capable of producing a fully featured report-style printout of the entire view, even if it contains HTML icons or side-by-side applets. Hierarchical list in quick print Side-by-side applets in quick print Have fun @lex...
Change After giving good ol' Free Download Manager (yes this is an official editor's choice recommendation for really cool freeware - see below for more kudos) a sleepless night, I was able to embark on a rather ritual ride of uninstalling the old version of my typical 3-pack of Siebel Developer Web Client, Sample Database and Tools (that is 8.1.0 - dot zero) and replacing it with the latest (8.1.1 - dot one) to have a first sniff. There are some remarkable differences between those two versions which I would like to share with all you early adopters out there. Given the fact that 8.1.0 was never released under general availability, only a few selected humans might ever had an eye on it. Another fact is that 8.1.0 was available under certain limitations for selected customers for example to prepare an upgrade to 8.1 or to evaluate the revamped Loyalty module (now the fourth pillar of Siebel CRM among Sales, Service and Marketing). I also downloaded the fresh-from-the-oven 8.1.1 bookshelf and made my way through some very recommended literature, the "What's New in this Release" chapters of the guides that are relevant to you (e.g. Installation Guide). These are the first details I am posting on 8.1.1 and I am quite sure that more posts will follow. SIA (Siebel Industry Applications aka Verticals) and SBA (Siebel Business Applications aka Horizontals) released separately The Network Image Creator, which you still need to launch after unpacking all those .jar files does not allow you to choose between SBA and SIA. The package you download from edelivery.oracle.com is limited to one of the two. 8.1.1 is a SIA release (containing the Loyalty pillar). Oracle Universal Installer for Developer/Mobile Web Client and Siebel Tools The first thing you will have to say "Hello" to is the oui.exe which launches Oracle Universal Installer. OUI now takes care of installing and configuring the Siebel Developer/Mobile Web Client and Siebel Tools. Not too weird as it prompts for the same parameters as the old Installshield wizard did. However oui leaves a mark of several directories in the client's and tools' installation folders. Oracle Universal Installer busily installing Siebel Developer Web Client, the ad to the right is for Database 11g, not for the Client ;-) The Siebel Sample database is still using the Installshield wizard to copy itself into the client (or tools) directory. Actuate replaced by BI Publisher When I browsed through the Installation Guide for Windows, I noticed a statement that left me somewhat worried: "The Actuate products formerly provided as Siebel Reports Server are no longer shipped with or supported by Siebel CRM version 8.1 or later. Reporting functionality is now available using Oracle Business Intelligence Publisher." This two-sentence statement means a lot of work ahead for all those customers who invested (sometimes heavily) in Actuate reports. Oracle announced its decision to say goodbye to Actuate quite early and version 8.1.0 actually supported both reporting tools side by side. But this short-lived and rarely known coexistence is now over and I feel a little worried about the projects with hundreds of heavily scripted Actuate reports given the fact that an automated migration from an Actuate rol/rod/bas/rox mix to a BI Publisher template is highly impossible. If anyone has more positive news on migrating from Actuate to BI Publisher please share your knowledge in a comment. [Update 2]: The Siebel CRM 8.1.1 Planned Features/SOD document (login required for metalink3) states the planned availability of an Actuate to BIP Migration Tool as part of the BI Publisher server. Stay tuned for updates on that. [Update 3]: As Anonymous points out in his/her comment to this post, Actuate is still supported for existing Siebel customers. I hope there will be more official clarification on that as there might be the need for some extra patches for existing customers (as the installers from edelivery have no Actuate binaries with them - neither for the Mobile/Developer Web Client nor in form of the Siebel Report Server). As the Siebel CRM 8.1.1 Planned Features/SOD document (login required for metalink3) points out, there will be support for Actuate 8 until end of 2009. The document mentions "Post-2009", see below. Customers with earlier Actuate versions will need to upgrade to Actuate 8. I haste to state that I'm a big fan of BI Publisher and consider it the ideal choice but maybe the decision to cut the support for Actuate so quickly was a bit hasty. In version 8.1.0 it was possible to set the System Preference ReportEngineType to BOTH (which is still the default setting in the sample database for 8.1.1) but in 8.1.1 there are no Actuate binaries available, so BIP is the only thing left to create reports. The already obsolete ReportEngineType System Preference is still set to BOTH in the sample db. Siebel Update Server and CTI Connect no longer supported Let me conclude this post with two more statements from bookshelf and join me in saying farewell to the Siebel Update Server and the CTI simulation. "Siebel Update Server and Siebel Update Client are no longer shipped with or supported by Siebel CRM version 8.1 or later." "Siebel CTI Connect is no longer supported as of the current release. CTI Simulation, which used the CTI Connect driver and configuration data, is also no longer supported." Casey Cheng is no longer able to demonstrate CTI functionality, note the error message [Update 1]: SmartAnswer is a dead parrot, too As stated in the Siebel CRM 8.1.1 Planned Features document (download requires login to metalink3), SmartAnswer is no longer sold, albeit supported: "Siebel SmartAnswer is no longer sold as part of the Siebel CRM suite of applications. The product is no longer shipped effective for all new and upgrading customers beginning with Siebel 8.1 / 8.1.1. Existing customers of Siebel SmartAnswer can continue to use their products, but will not be able to buy additional seats." About Free Download Manager Ideal for large downloads (from edelivery.oracle.com) as it integrates in...
It has been a view years or Siebel versions that a nice little feature named "Rapid Unit Test" has been introduced. If memory serves me correctly it was 7.5.3.2xx. The feature allows you to start a compile in Siebel Tools while the Developer Web Client (siebel.exe) is still running. The effect is such that the browser closes and siebel.exe releases the srf. When the compile process completes, siebel.exe starts up again from its suspended mode (gray icon in the system tray becomes colorful again) and the browser launches AND navigates to the previously opened view. So developers can continue testing without having to shut down the Siebel client and restart it, hence "Rapid Unit Test". So far so good. Then - out of a sudden in version 7.8 - a bug prevented this feature to work. Most of us are familiar with the gruesome error message of wrong username and password. I am not sure if the bug has been fixed in the latest patch release, but there is a generation of developers who either do not know about that feature or have a version running which contains the bug. I have developed a workaround (it is nothing more) which goes as follows (the following being a script you can run on your windows workstation after applying the correct installation folders): rem rename sscfsaodbc.dll to sscfsaodbc.dll.orig ren %SIEBEL_INSTALL_DIR%\client\bin\sscfsaodbc.dll sscfsaodbc.dll.orig rem make a backup copy of sscfsadb.dll to sscfsadb.dll.backup copy %SIEBEL_INSTALL_DIR%\client\bin\sscfsadb.dll %SIEBEL_INSTALL_DIR%\client\bin\sscfsadb.dll.backup rem rename sscfsadb.dll to sscfsaodbc.dll ren %SIEBEL_INSTALL_DIR%\client\bin\sscfsadb.dll sscfsaodbc.dll Basically, we have to swap the database connectivity dll files. All I can say is that it works for me, you have to try it for yourselves and of course download and install the latest patch. have a nice day @lex...
The new major release of Siebel CRM is still stirring up the blogosphere and newswires and while it's of course worthwhile watching Anthony Lye's webcast and reading the several news articles and blog posts, the question is still there: What's in it? The following should serve as a first appetizer and is (as always) an incomplete list. New: Fusion Applications: eCommerce and eSupportNew: BI Publisher Integration for ReportingNew: Gateway Name Server AuthenticationNew: Contact Center ChatNew: Helpdesk Integration with Oracle Enterprise ManagerNew: Siebel Management Framework APIEnhanced: PRM View Visibility and Web ServicesEnhanced: Sales ForecastingEnhanced: Global Account HierarchyEnhanced: Integration Objects (EAI)Enhanced: ST Script Engine – Script Performance ProfilerEnhanced: Siebel Workflow and Task UIEnhanced: Marketing AutomationEnhanced: Siebel LoyaltyEnhanced: Application Deployment Manager (ADM)Each of the above is of course worth a post, which I will deliver on later occasions....
file under: rtfm Know that feeling of getting stuck while searching the pdf version of Siebel Bookshelf? Want to use your favorite search engine to look for that specific string? Since Oracle has put all of its documentation - including Siebel Bookshelf - online on OTN, the search bots of Google and the like have happily parsed them and so it's now a part of the index databases of the internet giants. The following is a Google example, using the site: keyword to narrow the search to Siebel Bookshelf 8.0, but it should work in other search engines as well. First thing is to verify the base URL for the bookshelf by simply browsing to a document in OTN. Doing so you find that the base URL for Siebel Bookshelf 8.0 is download.oracle.com/docs/cd/B40099_02 Now let's open Google and type in your query, for example "EAI Siebel Adapter" site:download.oracle.com/docs/cd/B40099_02 (of course you can bookmark this for later use) Et voilá: all results for "EAI Siebel Adapter" Works for Oracle BI, Oracle Database, you name it ;-) have a nice day...
still going strong Sometimes you stumble across a promising Business Service in Siebel Tools, such as Read CSV File. Of course you do a bookshelf search...a Google search...but did you search in Siebel Tools? What about using the Flat tab and querying the WF Step object type? Currently there are two standard workflow processes that use the Read CSV File business service Import Marketing ContactImport KPIsSo, interestingly enough, Siebel engineers use the Read CSV File business service to import data into Siebel. Let's take a look at the Import Marketing Contact workflow. This workflow is invoked when marketing campaigns are loaded. For more information on this functionality, please refer to the Siebel Marketing guides in bookshelf. Obviously the data for the marketing members comes as a csv file, which is btw generated by the Oracle BI Presentation Server using a Marketing List Format. Inspecting the Campaign Load Formats in the default presentation catalog delivered with Oracle BI Applications and/or studying the documentation on Campaign Load Formats reveals, that the csv files have very specific content in the first two rows. First Row: a hash sign followed by a space (!) and the name of an integration object Example: # Internal Account Interface Second Row: a hash sign followed by a comma separated list of integration component field names, using double quotes and dot notation. Example: #"Account.Name","Account.Location","Account.Primary Organization" Everything from the third row onward is interpreted as data. So a simple test file could look like this: Now let's bring up the good old Business Service Simulator. We are invoking the CsvToPropSet method with the following inputs CsvFileName = path to test file DeleteFile = false (default is true, so we set it to false in order not to lose our test file ;-) The output property set contains a SiebelMessage and a SiebelMessageError child property set, the latter being filled with "bad records" (if any). The SiebelMessage is generated according to the integration object, which acts as a template. This even works with denormalized data, that is you could have the same account name 5 times in the csv file and have a different address each time. When you write the output property set to an XML file it looks like this: In a final test step, we move the output to the input and delete the SiebelMessageError child property set from the test case. Then we run EAI Siebel Adapter using its Insert method and voilá, 3 new accounts appear. Hopefully, this gives you a basic idea how the Read CSV File business service works. As it is used in vanilla workflows, it should be safe to use but due to several reasons I have to put a word of caution here: Please verify with Oracle Sales if you are licensed to use the Read CSV File business service in production. Please pay special attention when using non-documented business services as you might not get support from Oracle. have a nice day...
This is for all of you who work with Runtime Events and Action Sets in Siebel CRM. Action Sets allow you to define one or more actions to be executed when the associated event occurs. There are three action types: Attribute Set: Set a profile attributeInvokeMethod: Invoke a method on the event objectBusService: Call a business service methodThere are many examples in bookshelf which describe creating an action set to call a built-in business service such as Workflow Process Manager. However when it comes to calling your custom written business service method, then you find a note that you have to use the "Context" property to pass the arguments. What happens when the action is executed is that the Siebel framework creates a property set which contains information about the runtime event and the content of the context field as a string. We can use the EAI XML Write to File business service and its WritePropSet method to send the input property set to a file. This is what the file looks like when your business service is called from an action set: click to enlarge The action set passes the following information: Object Name: The name of the object experiencing the eventBusiness Component Name: The current active BCContext: The content of the Business Service Context fieldAction Set: The name of the action setEvent Type: The type of event (BusComp, Applet or Application)EventId: The ROW_ID of the eventSub Event: The content of the Sub Event field (usually a method or field name)Action: The name of the actionEvent Name: The name of the event such as PreWriteRecord, etc....The developer can now write appropriate code to peruse this information in the business service. Usually you would be most interested in the Context property which normally contains something like the following: "Param1", "Value1", "Param2", "Value2" This is how it is used for standard business services like Workflow Process Manager. Note that the syntax contains strings in double quotes and they are separated by a comma and a space. Of course, for your custom written business service, you could use any other syntax but this may not be "close to the standard" and could cause problems in larger projects where other developers would not be aware of a different context string syntax. So basically you have to split the string into the distinct values. Here is a code snippet which gives you the general idea: //read the string from the input property set var context_string = Inputs.GetProperty("Context"); //the split method creates a char array, we use comma and space as the delimiter var context_array = context_string.split(", "); //now we can get the parameters and values, the odd indexes contain the values //use for() loops for larger arrays... var param1 = context_array[1]; var param2 = contaxt_array[3]; //use the replace() function to cleanse the double quotes from the string //the replace() function uses regular expressions which are a little tricky //see examples here param1 = param1.replace(/\"/g,''); param2 = param2.replace(/\"/g,''); happy scripting ;-)...
About large objects with character A while ago during a Siebel CRM upgrade project, a consultant approached me and asked how and why Oracle has changed the data model of Audit Trail from version 7 to version 8. After a brief discussion we found out that he referred to a new column in the S_AUDIT_ITEM table. The column is named AUDIT_LOG and has the data type of CLOB (Character Large OBject - newly supported in Siebel 8.0 and above), which enables it to carry a whopping 2 gigabytes of data for each record. A little bit of investigation reveals that this column stores a string that documents the changes made to the audited record during an update or insert operation. The following screenshot gives you a general idea how this string looks like. click to enlarge In earlier versions of Siebel CRM, the S_AUDIT_ITEM table stored one record for each field that was audited, so the table grew very large. Creating a single string with all fields for each update reduces the size of the table significantly. What was a little unfortunate in the specific project is that they accessed the S_AUDIT_ITEM table with Informatica to incorporate the Audit Trail data into their data warehouse. After the Siebel CRM upgrade, the ETL did no longer work because of the new column. Furthermore, because of the data type of CLOB and the cryptic nature of the string it was impossible to retrieve Audit Trail data with simple SQL. I proposed a solution which encouraged accessing the Siebel business component layer using EAI techniques such as Siebel ASI (Application Services Interfaces) and web services. This would eliminate the need to access the physical table directly. The business component used to display the Audit Trail data is based on a specialized class CSSBCVAuditTrail which makes it a virtual business component. But you can still use it in an integration object and create a read-only ASI. Please find more information about Siebel EAI and ASIs in the Siebel Bookshelf and the Integrating Siebel Applications course. As the more inquisitive among you might have already found out, the data string in the AUDIT_LOG column looks quite familiar to the one that stores the data modifications for Siebel Remote in the S_DOCK_TXN_LOG table (see screenshot below). But this is a different story... click to enlarge...
a great expedition... The following is a subject that has been on my mind ever since I started working with Siebel Scripting, a technique to extend (yes - scripting in Siebel is treated as an "extension language") the functionality of Siebel CRM. Of course many Siebel consultants are familiar with (or have at least several years of exposure to) Siebel Scripting. Sometimes they take it too far and the project is in danger of becoming a house of pain. But let's not delve into details and the horror of bad code, what I really want to show you today is the Siebel event handling model. This is something that every script writer in Siebel is exposed to because the only place where you can write your code are the provided event handlers for scripting, such as PreInvokeMethod on a business service. Hopefully, you heard about Runtime Events, another technique to track events in Siebel in a far more elegant manner than script (sorry about that - I know, I frequently step on your programmers toes). In my classes, I usually do a flipchart drawing on the event model and the so called event flow (which event handler comes first, etc.). It usually looks like this. click to enlarge I am quite happy with this chart as it points out that the first opportunity to track the event (and execute custom code) is the browser script, then comes the server side with runtime events first(!), then server scripts, etc. But the above flipchart drawing does not tell the whole truth, as there is another way to execute custom code when a method is invoked. Namely named methods (pun intended), user properties you can set on the applet or business component level to invoke other methods or business services. click to enlarge So it was time for a little experimental setup, which involved creating a small helper business service which allows us to write messages to a trace file. Then I added script code to the applet and business component layer, added named methods and administered runtime events, all of which had the same target: the tracing business service. Below is a code snippet of the tracing helper service, so you get the basic idea. There is some more code than just TheApplication().Trace() because of the fact that action sets in runtime events encode their context in the property set, so you have to unwrap it (which is nice stuff for yet another post, I think). click to enlarge Now we can place a button control on an applet and use it to invoke our method. Once we have compiled everything and click the button, a trace file is written which contains one line per call of our helper business service thus giving us a clear picture of the event handler execution flow inside Siebel. click to enlarge Now we can put that information into a nice chart, hopefully useful for all of you who have to extend Siebel functionality with either Scripting, Runtime Events or Named Methods. click to enjoy ;-) It wouldn't be Siebel CRM if this would be a complete picture. Of course there are...yes...Signals. This special way to invoke business services as a response to a method invocation has been developed by the team that created the Siebel Order Management module in version 7.8. Signals are only supported by business components that use a special class. have fun...
The ability to respond: Responsibility It seems futile to write a blog post about responsibilities in Siebel CRM. Everyone knows that they are used to grant access to views. But if you look closer, there is more than that, especially in newer versions of Siebel. But let me begin with a different perspective. Let’s consider an ideal project, where business analysts follow the golden rule to document the existing processes and start on a high level with mapping the process steps to Siebel views. They would put that information down in a spreadsheet. Then they would extend the spreadsheet with information about the details for every step such as which fields should be filled with what values. The analysts would also analyze the end user community and identify groups of users who have to execute similar processes. Finally they would identify gaps in the standard application and design solutions for these gaps. For example a missing field would have to be created by the developer. Besides the fact that this ideal analyst behavior is rarely found, what does business process analysis or business processes in general have to do with responsibilities? A lot. Consider the graphic below as an attempt to depict the facts stated above. When you start viewing a business process as a set of steps which are carried out in a Siebel view then you need to give all users who have to execute the business process access to these views. So the group maps to the Siebel entity we know as responsibility. A Siebel Responsibility allows an employee to execute one or more business processes in the Siebel application by granting access to the necessary views. If you conduct a decent business process analysis and documentation, you end up with all the information you need to create both the administrative data (i.e. responsibility and their associations with views and users) and the end user guidance either with iHelp or Task UI. But there is more to business processes than just navigating from one view to the other and manipulating data. As we discussed in “Close to the Standard”, much of the functionality and automation behind the UI is implemented using business services and workflows, so they are a part of the business process. And indeed, responsibilities also allow an administrator to grant access to business services and workflows (since version 8.0). The detail views in the Administration – Application > Responsibilities view clearly indicate this (Note that Business Process is used synonymously for Workflow Process). What else? Responsibilities also allow an administrator to override the sequence of screen and view tabs by creating individual tab layouts for each combination of responsibility and application. The primary responsibility of an end user will be the driver for the sequence of screen and view tabs that an end user sees after logging in. Tab layout can also be overriden by the end user in the User Preferences > Tab Layout view. In Siebel 7.5 a simple list applet appeared on the home page view which was labeled "Tasks" offering links to views (as the starting point of a business process such as "Create a service request"). The content of this applet is also driven by the primary responsibility of an end user. Because of the naming conflict with the UI Tasks in Siebel 8.0 the applet and view tab were renamed to "Links". Responsibilities also provide access to UI Tasks and iHelp items which are the two main tools to guide end users through a business process. So we are back where we started our journey: Responsibilities have a direct relationship to business processes and the application functionality that lies within them. Let’s summarize the objects which responsibilities can provide access to: Views, of courseTab LayoutLinks (to views)WorkflowsBusiness Services and MethodsiHelp ItemsTasks (Siebel 8.0 Task UI)have fun...
books at bedtime If you read technical blogs, you get the impression that these guys don't have a life and if they sleep at all, they sleep with the Siebel Bookshelf under their pillow. I can confirm it is not that bad. However, rtfm is always a good thing and it sometimes reveals features that are quite helpful. This post tries to shed some light on the Client-Side Logging or High-Interactivity Siebel applications. You can read the full documentation in the System Monitoring and Diagnostics Guide. Client-side logging for high-interactivity applications writes information to a local log file. It is useful to close the gap in monitoring that existed in earlier Siebel versions, which means you can now capture browser activity data for troubleshooting, such as when a Siebel Web Client stops responding or failsLog individual user or global session information for a specific Siebel ServerDebug the source code using JavaScriptTrace the sequences of operations You can enable Client-Side Logging either by setting the SEBLCL_TRACEMODE environment variable on the client machine or setting parameters for the object manager component on the Siebel server like in the following example: change param ClientSideLogging=True, ClntTraceMode=1, ClntLogFileSize=50, ClntLogArchiveCount=5, ClntLogDirectory=D:\SiebelLogs, ClntTraceUnicode=true for compdef SCCObjMgr_enu Once enabled, log files are created in the given local directory of each client. Let's look at a typical file's content. click to enlarge So each entry in the file shows which area it belongs to along with the log level, timestamp and - most notably - a SARM id, which allows you to correlate the client file content with SARM files from the server components. So it is possible to trace a complete client session from the the click in the browser to the operation in the database connector layer of the object manager....
...and siebdev.exe too ;-) siebel.exe, as we all know, is the engine behind the non-zero-footprint flavour of Siebel applications, namely the Mobile Web Client or the Developer Web Client. Some call it fat client, some call it dedicated web client, depending mostly on the year when they first heard about it. Discussions whether the Mobile Web Client is a different installer than the Developer Web Client and whether the Developer Web Client is the same thing as the fat client often reach religious depths. The installer places a bunch of shortcuts in the windows start menu which usually follow the syntax of <path to siebel.exe> /c <path to .cfg file> So /c is a mandatory switch because any Siebel applications consists of the very same executable along with a different configuration file from which it reads the rest of its knowledge. In order to please the more inquisitive among you, find below a complete list of switches that you can use with siebel.exe. If you know of any other switch, please inform us. Typical switches (used in shortcuts) /c Path to .cfg file (required), directory path defaults to <client_installdir>\bin\enu /d Datasource (as in .cfg file), defaults to local /l language (optional, language pack must be installed), defaults to enu /u Username (optional) /p Password (optional) /s Path to spool file (optional, to spool all SQL generated by siebel.exe) Extra switches /b Path to Browser executable (optional, for multi-browser testing of customer or partner (SI) applications) /h Debug Mode (used with Siebel Tools for debugging) /ctsim (often confused with /ctisim, which does not work ;-) CTI Simulation mode (used for demo) /editseeddata allows modification of seed data, often referred to in maintenance release guides And now for siebdev.exe: siebdev.exe is the engine behind Siebel Tools, which is the only application that does not run in a browser window. However, Siebel Tools is defined in the Siebel Repository and the siebdev.exe works just like the siebel.exe. That is, it reads a .cfg file and an .srf file (the file that newbies usually try to compile to during their first steps with Siebel Tools). So siebdev.exe accepts most of the switches that siebel.exe does, namely /c, /d, /u, /p and /s. But there are some additional switches, used in conjunction with the "classic" ones. They have been passed along from consultant mouth to consultant ear for eons before they found their way into the documentation. /bv runs all validation rules for the entire repository, so take your time /batchimport automates the import of .sif files /batchexport automates the export of objects to .sif files /bc allows to run batch compilation /tl language (typically used with /bc for multiple language deployments) /applybatchpatch is used for applying batch patches, or patches in batches. Have a nice day @lex...
Romeo and Julian... About the Siebel Query Language First of all, it abbreviates to SQL which is kind of funny, of course it has nothing to do with SQL. Just like you can get more out of a spreadsheet application like Excel when you are familiar with its internal functions and syntax, you can get much more out of Siebel CRM if you are familiar with the Siebel Query Language. Where is it used? The answer to this question is very interesting, it is used almost everywhere when you define expressions. It is available in both Siebel Tools and the Siebel Web Client and since version 8.0 both the developement environment and the Web Client (that one since 7.0) sport an expression designer. Expression Designer in the Siebel Web Client click to enlarge Expression Designer in Siebel Tools (since 8.0) Here is a probably complete list of areas where you can use the Siebel Query Language: Siebel Web Client Predefined QueriesConditional Expressions for Personalization RulesConditional Expressions for Runtime EventsData Validation Manager rulesData Map Editor Siebel Tools Calculated fieldsPre-default and post-default values for fieldsField Validation propertyUser propertiesExpressions in Siebel Workflow and UI Tasks Where is the reference? The Siebel Query Language is documented in the Personalization Administration Guide of the Siebel Bookshelf. An example: The following is an example for a predefined query. The task is to filter the list of contacts so that it displays only persons that have their birthday in the current month. Working with date fields can be tricky and you just can't type something like *June* in a date field. This is where the date functions, also known as julian functions come into play. Our first choice would be the JulianMonth() function. This function takes a date field as a parameter and returns the julian number of the current month which is for example 80660 for August 2008. So the nerds among you will have quickly calculated this back and month #1 is of course January of 4713 BC. If we want to query for persons who have their birthday in the current month, then the JulianMonth() function alone is not helpful because the return value for August 1968 is different from August 2008, so we need a way to extract the month number (1-12) from the date. This can be accomplished by multiplying the julian year number (6721 for 2008) by 12 and subtracting it from the julian month number. So the equation is: # of current month = JulianMonth(Today()) - JulianYear(Today())*12 This equation will be the base for our query in Siebel CRM. So basically if we want to match the Birth Date field of a Contact with the # of current month, the query goes as follows: JulianMonth([Birth Date])-JulianYear([Birth Date])*12 = JulianMonth(Today()) - JulianYear(Today())*12 Creating the predefined query: Usually you can enter even complex queries directly in any control or list column of the applet (in query mode) but there are restrictions in field length and data type. So here is a way that always works. Navigate to the Contacts List and save the current query (even an empty query would do). click to enlarge Navigate to Site Map -> Administration - Application -> Predefined Queries and retrieve your previously saved query. Replace anything that might be between the two double quotes after 'Contact'.Search = with JulianMonth([Birth Date])-JulianYear([Birth Date])*12 = JulianMonth(Today()) - JulianYear(Today())*12 So finally it looks like this: click to enlarge In the Household Contact view you can enter some birth dates and run your test in the contact List. I have added the Birth Date field to the Contact List Applet to verify. List of contacts with a birth date in August click to enlarge...
gotcha! Whenever you wish to use an external script such as browser script (which IS external because it runs in the browser) to call a method of a Siebel Business Service, you have to declare this Business Service so that the application accepts the call. This is a security feature which has been introduced in Siebel 7.5. Because otherwise any script kiddie could inject javascript code into the Siebel Web Client, call any Business Service and wreak havoc. Most of you are familiar with the odd entries in the applications .cfg file ClientBusinessServiceN = Name of the Business Service (where N is a sequential number) However, during some upgrades to Siebel 8, things went bump in the night.That is, their browser scripts didn't work anymore, and adding the line to the .cfg file didn't help either. Here is the solution, and it is in fact related to the year-long effort to get away from text files to configure server components. So since Siebel 8 you have to declare the Business Services which you would like to call from external scripts as an Application User Property. Migration is rather easy, because they have the same syntax as in the .cfg file. As you can see in the screenshot below, also PDQDisabledViewN made it into the Application User Props....
office humor, eh ;-) glad that humorous posts fresh up the discussion, I found that my post on staying close to the standard in Siebel CRM projects has been cited on another blog site. It is very good to see that there are now several blogs on Siebel CRM to be found on the internet (please see the blog roll on the left)....
one-stop shop This is a somewhat structured list of websites which are related to Oracle, the Siebel CRM and Oracle BI EE product lines as well as training and documentation links. Please also consider the list of favorite blogs on this site. Oracle Website Siebel Product Site Business Intelligence Product Site Oracle Technology Network Siebel Bookshelf download and online library Oracle BI EE documentation download and online library Oracle BI Applications documentation download and online library Oracle Education Oracle Certification Certification Upgrade Information Page ilearning - web based training for Siebel (login required) Oracle BI EE Tutorials (free) Oracle Software Download - edelivery (registration required) License Codes metalink3 - support portal (login required) Special Links: Siebel Query Language online reference (Personalization Administration Guide) Ospace - Oracle Applications Business Community...
If you use an RSS reader, you can subscribe to a feed of all future entries tagged 'Siebel CRM'.