There’s another Siebel User Group event coming up in Sydney. On Thursday 21st August we’re back at the Australia Graduate School of Management for a panel discussion on The Single View of a Customer – Myth or Reality?
I’m personally interested to hear the panellists’ experiences with building business processes around search. Being able to locate an existing customer record is such a fundamental part of maintaining that ‘single view’ – yet it’s something Siebel hasn’t totally nailed. Fulcrum in Siebel 6 was limited, Hummingbird in 7 is only an incremental improvement and then in Siebel 8 we seem to have gone backwards again. In the age of Google and Spotlight and (even!) Vista Live Search, I think users should expect better results than come out of the box with Siebel. I wonder if the panellists agree, or if they’ve come up with solutions?
If you’re planning to attend then register now before spaces fill up.
August 14th, 2008
There’s no standard loop construction (For/While/Do) in Siebel Workflow, but there are still a couple of ways to have a Workflow Process handle multiple rows.
For a simple update to a child entity use a Siebel Operation. When a Workflow Process has a Business Object then a Siebel Operation Update step defined for a child Business Component will update all records that are children of the selected record in the Primary Buisiness Component. The update can be filtered to specific records by specifying a SearchSpec on the Update.
This technique can be expanded through the use of Runtime Events: define an Event on the child BusComp to catch a simple update operation and trigger further processing of the record.
Bear in mind that for this to work then the Object Id process property must specify a valid record in the Primary Business Component. Also, watch out for this gotcha if you’re trying to dynamically update a field.
Sub Process SearchSpec
An alternative way to process more complicated actions is to call a sub-process for multiple rows. In this case a Workflow Process is defined as normal to act on a single record specified through the Object Id. Then to have this workflow run for multiple rows, define a new ‘wrapper’ workflow and add a Sub Process step to call the original process. To this Sub Process step add the Input Argument SearchSpec, supplying a search specification through the Value in the normal way.
When the wrapper workflow is executed, the SearchSpec is applied to the primary Business Component of the sub-process and the child workflow is run once for each row returned.
August 6th, 2008
Top tip today from Neel over at Siebel Unleashed: using the IE address bar to enter browser script.
…then the browser will popup a message box with the value of the First Name attribute – exactly as you’d expect if this statement was in browser script. Much faster than navigating to Administration – Personalization > Test, plus it retains current context.
Nice quick-and-dirty hack to check (or set) the value of browser objects. Good work, Neel!
May 20th, 2008
A question on the Oracle discussion forum last week prompted me to dig out a MetaLink article that I’ve never noted here. The question was “How to call a local executable from the browser”: the answer is to use browser script to instantiate a Windows Scripting Host ‘Shell’ ActiveX object, like so:
var objWSH = new ActiveXObject("WScript.Shell");
More detail on using the ActiveXObject is available in the post on Client-side DLLS.
May 5th, 2008
I’ve mentioned previously that Siebel’s handling of phone numbers can cause havoc for EAI. The post on International Phone Formats outlines how Siebel stores phone numbers as a continuous string including the country code (+610298767654), appending a new line and format string to store special formats (+61041234567890<CR><LF>0000 0000 0000).
This fancy footwork works nicely in the UI, (mostly) displaying numbers in the expected format for the current country. However, imagine a standard Integration Object defined on business component Account, with a component field mapped to the Main Phone Number . Invoke an EAI Siebel Adapter Query for this integration object and the phone number result will be the database value – rather awkwardly including that unpleasant format string.
In older versions of Siebel, the only way around this ‘feature’ was to pass the integration object through a custom business service, stripping those format strings and rendering the phone number as desired: effectively, re-coding the function that Siebel apply at the UI. This was a pain.
Fortunately, Siebel 7.8 saw the introduction of the Integration Object User Property UseFormattedValues to force the EAI Siebel Adapter to use formatted values. If we add this undocumented user property to our Account Integration Object and set the value to Y, then the Siebel Adapter uses formatted values and Main Phone Number will contain exactly what you see in the UI. This eases the pain nicely.
If you’re more familiar with Siebel Scripting, this UseFormattedValues property forces the EAI Adapter to use Get/SetFormattedFieldValue-type requests, rather than Get/SetFieldValue. One restriction is that the User Property can only be applied to the whole Integration Object, not to individual fields – the property doesn’t work as an Integration Object Component User Property, nor as an Integration Object Component Field User Property. That’d be a feature request for future versions…
MetaLink mentions of UseFormattedValues are sparse, but there is a thin definition, plus a complaint about the inbound error handling.
April 29th, 2008