Tuesday, September 23, 2025

Siebel's PATCH issue is fixed in 25.9 release

 

Well, well , well. Look where we are. Back in Siebel. Yep, turns out Siebel is still alive and kicking. And Oracle has noticed.


Siebel 25.9 release is out, and the big highlight , for me , at least, is the fix for PATCH outbound apis. 

Now , if you are unaware of this issue, chances are , you are not using Siebel. Or maybe your application does not invoke outbound REST apis using the PATCH method.


Issues in the linked Java libraries had broken the PATCH method for years now. The error returned was: 

java.net.ProtocolException: Invalid HTTP method: PATCH


https://stackoverflow.com/questions/73606502/why-does-http-patch-method-not-supported-in-jdk8


Our application had this issue , and we had raised it with Oracle for a permanent fix. This was finally delivered in this month's binary.





Thursday, November 26, 2020

Workspace issues in Siebel 20.3

Hi there ! Long time, no post, no see, eh ? As it turns out, a pandemic filled year leaves one no free time. 

After losing track in lower versions of the trusted Siebel CRM , I have now had the chance to work on an upgraded version. Siebel 20.3. Work started earlier this year, with a massive upgrade on my customer's systems.

And I must say, I am impressed. But also frustrated. 

The new workspace system fixes some of the issues in an earlier checkin/checkout system, but it opens up a whole bunch of new ones.

Like, you have to choose which workspace to merge into, at the time of creation, not at the time of delivery. Strange.



Also, you can't checkin the same workspace to more than one delivery branch. The only way I know to do this is to take SIF backups, and check them into a new workspace under a different branch.



But the one that frustrates the most...is that...there are still some tools objects that do not stay inside workspaces. 

Like Tasks. Of the famous Task Based UIs.

And ...get this...Tables !

These two objects, when modified, or created, immediately get delivered to the main branch !!




Currently, the following object types and their child objects remain as non-workspace objects:
    Table
    Dock Object
    EIM Interface Table
    Repository
    Workflow Policy Column
    Workflow Policy Object
    Workflow Policy Program
    Task
    Task Group
    Project

Now, I am on 20.3 version, so some of these might have been fixed on a newer version. But we are going to be on this version for a while longer so...


...need more coffee.

Tuesday, May 21, 2019

SalesForce comes crashing down. Again !


I first read about this last Friday. Beloved cloud CRM solution had a data breach, and fixed it by removing all security features.

It seems the US tech giant granted Pardot customers access privileges they should not have, which is to say access to everything and alter any data. As was observed on Reddit, "One of our projects had all its profiles modified to enable modify all, allowing all users access to all data."

To deal with the mess, Salesforce's IT team has denied all access to more than 100 cloud instances that host Pardot users, shutting out everyone else using those same systems, whether or not they were using Pardot.


And the outage continued on Monday. Over the weekend, Salesforce staff developed, tested, and ran a script that attempted to restore user permissions from backups, though this was not always successful. In some cases, it even went backwards, and regranted full read-write permissions to users.


Timeline

- A dodgy database script on Friday gave all current and past Pardot users sysadmin-level create-read-write-delete access to all data, which is a huge security and privacy blunder.

- Instances running Pardot were disabled to avoid any data theft or tampering, which kicked any customers using those instances – Pardot and non-Pardot – off Salesforce.

- Salesforce removed all access permissions from affected users and restored full permissions to customers' administrator accounts, allowing them to repair users' permissions. Some instances were fired back up so folks could log back in, others remained offline. Admins were encouraged to reassign their users' access permissions by hand to allow users to continue working.

- On Saturday, Salesforce was able to restore previous user permissions from a backup using a script on one instance of 105 affected.

- By Sunday, the permission restoration script had been run on the majority of instances, repairing user permissions with an "89 per cent" success rate – meaning about one in ten organizations still had their user rights wiped. Admins were told, if they still had permission issues, to fix it themselves or contact Salesforce support.

- On Monday, Salesforce staff are still working to restore sandboxed instances. We're told GovCloud was not affected by the snafu.



So if you are contemplating moving to the cloud, now will be…a good time ?






Saturday, March 30, 2019

BIP: Number to Text , complex version



Oracle never ceases to amaze me. I recently saw this question being asked again on stackoverflow.

Basically, this is an RTF template supposed to print a check. And the amount has to be converted to text, to be printed on the 'Amount' line on the check. BIP provides a function for this called xdofx:to_check_number.
It is documented over here. The function can print the output text in different locales, and decimal number settings. But the number to be printed has to be in an XML node. It only accepts simple XPATH notations, and the value itself cannot be a result of a sum() function, or the result of any mathematical operation.
Which means, if you have an XML like this:

<root>
     <amt>3243243</amt>
     <amt>6436464</amt>
     <amt>243</amt>
     <amt>445454</amt>
     <amt>67676</amt>
</root>


And you want to print the output as the sum of all the 'amt' elements, that cannot be done.

<?xdofx:to_check_number(sum(amt),'EUR')?>

Outputs:
Zero and xx/100



Which leads me to say: WTF Oracle ?

I had solved this problem years ago, but I couldn't remeber how. So I deep dived, again, into the same problem.


Using the RTF template, I exported the XSL-FO stylesheet out:




This extracts the intermediate XSL file BIP uses to generate the final report output.
Search for "to_check_number" in this XSL:



It can be seen that although there is a for-each loop there, the template itself is not called recursively.  It access the element 'amt' without a proper XPATH, and then does a stupid (.///)[1]  whatever that means.

But if you pass a string with the number into the function to_check_number, this works out perfectly.


For the foe-each loop to sum up all the values, it has to call itself recursively. Obviously, this function is broken.

But is there a way to fix this ?

Turns out, there is. Look two lines lower in the XSL file.



It can be seen that the XSL finally invokes another hidden function xdoxslt:toCheckNumber. This namespace is unique, I am guessing it is shared between the XSL and XDO name spaces.

So I tried using this 'hidden' function directly in the template.

Like this:



<?xdoxslt:toCheckNumber($_XDOLOCALE, sum(amt), ('EUR'))?>


Which produces the output:



Voila !!

So in case you have to convert a dynamically generated number to text, use the toCheckNumber function directly.


Which leads to the question, why have the xdo function in the first place ?

But do bear in mind, that this is an undocumented function, which works for now.


Monday, November 12, 2018

The awesome EAI Transaction Service

 

After I finally got to leave the ‘Siebel ecosystem’, I had to return as that was indeed my core competency. And because there are places were Siebel is still awesome.

Like, the concept of a Webservice transaction in Siebel session. I am yet to see other systems implement it.

Siebel provides an awesome business service called ‘EAI Transaction Service’.  It has two methods , BeginTransaction, and EndTransaction. Like the name denotes, you mark the beginning of the your webservice transaction , and then proceed to use ‘EAI Siebel Adapter’ to make your updates, and finally commit everyting with the EndTransaction method.

Nothing gets committed to the system until you End the transaction successfully.

On commit, the last updated date and time on the objects is correctly preserved.

Now, the truly awesome thing. Although the documentation mentions use of Siebel EAI services, any update can be done in the transaction, and they all will be treated the same way.

It works for scripting !

It works of Workflow updates as well.

So if you use a script to update a record, that update also will be commited only if the EndTransaction method is invoked successfully.

 

Otherwise, everything gets rolled back.

In other words, you don’t have to be doing EAI work in Siebel to use this BS. You can use it wherever you need to rollback changes in case something does not work out well. Doc ID 1293943.1

 

 

If only we could rollback our own mistakes in life like that .

Thursday, October 25, 2018

Hard sell

 

Been hearing some stories about Oracle's power plays here in Australia. It seems they are strong arming existing customers to force them to move directly into their cloud offerings.

And it is not even cheap. Instead of a direct upgrade of any on-premise siebel installation, they are trying to sell my current client their CX cloud offering. With a total cost of 10 million over 5 years ! 4 million per annum for CX cloud !


This is a hard sell. Specially looking at other alternatives in the market.

So it was no surprise there, when we unanimously threw that option out of the window.


So now, back to  Siebel On-Premise for now.

 

Thursday, August 23, 2018

xmlstarlet & xidel, xml parsing from the command line

 

For xml parsing from the command line, xmlstartlet and xidel require the ‘-‘ switch at the end to read from stdin. This has to be used during piping

 

curl http://gist.bbldtl.int:9000/ema/HUBQ1\?page\=log\&message_id\=52285748 | xidel -e '//pre' -   

image

 

 

Or:

curl http://gist.bbldtl.int:9000/ema/HUBQ1\?page\=log\&message_id\=52285748 | xmllint --format --xpath '//pre' - 

 

image

xidel removes the enclosing tags by default. So that’s better.

Saturday, August 4, 2018

SAP back with C/4 HANA


SAP has overhauled its CRM offering, launching a suite of applications under the banner C/4HANA, as the German biz best known for ERP aims to take on Salesforce.
Speaking today at SAP’s annual gabfest, Sapphire Now, chief executive Bill McDermott touted the move as a huge step change for SAP that would modernise CRM by focusing not on sales but the consumer.
The firm is aiming to use its strong position in the back-office market to convince users to also adopt its front-office, CRM, products.
It is offering full integration with ERP suite S/4HANA, as well as various other bells and whistles, such as a new data management suite for full control of highly distributed data, which was also launched today.
McDermott said that users were tired of “legacy CRM” and were unhappy with the customer experience offered by existing vendors.
He described the change as being “from a 360 degree view of sales automation, where some companies focus, to a 360 degree view of the actual customer.”
This is central to what the firm is pushing when it talks about C/4HANA: their system is based on the consumer, when existing offerings focus on sales.
Alex Atzberger, president of SAP Customer Experience, said during the keynote session that customers are increasingly in charge of defining their relationships with companies.
“They don’t think about B2B and B2C, they think about ‘Me2b’,” he said, arguing that companies need to recognise that consumers are gaining the power to define brands, and will “rebel against being treated like sales opportunities.”
The CRM suite was heavily hinted at during the firm’s Q1 earnings call, when McDermott said SAP was going to “rebrand the whole CRM category.”
In a press and analysts session today, McDermott threw more shots across the bows, saying of SAP’s competitors: “We have a new idea, a better idea - and the better idea always wins.”
He added: “We will not waiver, we will not bend until we finally take over the CRM marketplace.”
Although he didn’t mention Salesforce by name, he didn’t have to: the firm has dominated the CRM market for years, with SAP ranked second, followed by Oracle and then Microsoft, Adobe and others.
In 2017, Gartner put Salesforce with an 18.8 per cent market share, and was growing faster than the market rate, while SAP had 8.5 per cent worldwide share and grew slightly slower.
And the pressure is on SAP to catch up - Gartner analyst Ed Thompson said the CRM market is expected to reach more than $75bn by end of 2022, compared with $44nn for ERP, meaning that SAP has to do well in CRM - but it still has more to do.
"It will take more than just launching C4/HANA to close the gap," he said. "They’ll need to find a way to appeal to those who are not existing SAP customers for CRM, widen their ecosystem of ISV and consulting partners, and make ground in the industries they haven’t traditionally sold CRM to."
SAP's launch comes after a series of CRM acquisitions made by the firm, including one announced today, of Swiss field service management biz Coresystems, which provides real-time scheduling for customer service requests.
Other recent acquisitions include a $2.4bn deal to buy sales performance management firm CallidusCloud and a $350m buy of customer identity management biz Gigya, while it acquired ecommerce plaform Hybris for $1.4bn in 2013.
These have been built into the C/4HANA suite as SAP Sales Cloud, SAP Customer Data Cloud, SAP Marketing Cloud, SAP Service Cloud and SAP Commerce Cloud.
Thompson said that bringing these products under one brand, as C/4HANA, was a good move to consolidate SAP's architectures and "remove confusing sub-brands" so it had one roadmap in the CRM market.
"But it will require a quick follow up with details on architecture and roadmap to back up the strategy, and it doesn’t yet address the issue of how this will encourage a CRM ecosystem of partners and facilitate increased innovation," he added.
The decision to rebrand its CRM offering as an end-to-end service that integrates with SAP’s ERP offerings is part of wider moves to get customers back on side.
During 2017, the firm’s crackdown on indirect access saw customers with software that connected to data stored on SAP systems - even indirectly - worried they would be hit with a high cost sueball.
This became more of an issue in recent years due to the number of other systems accessing SAP’s increased rapidly - and indeed, Salesforce was among that number.
Although SAP recently overhauled its licensing rules, presumably the firm will be happy to ease customers’ minds by suggesting they just use SAP’s new CRM suite instead. 



Wednesday, January 24, 2018

Siebel IP 18 - 2018 SOD

Oracle is going ahead and staying with Siebel. For now. They have just released the statement of direction for IP 2018.

At a high level the document describes features and improvements:

  • Business agility - Siebel Composer enhancements for Web Tools and Parallel Development.
  • Enhanced deployment and migration options.
  • High Availability architecture with clustering support for the new Gateway
  • Integration improvement via enhancements to the REST API
  • Customer experience improvements with Open UI, including intuitive Dashboards
  • Industry innovations - Product Configurator, cross-Industry User Dashboards, Oracle Policy Automation, Real Time Scheduler and Siebel UCM improvements.
  • Autonomous CRM - Business Process Discoverer, Automated iHelp and Test Automation improvements

Access the Statement of Direction:

Innovation Pack 2018 (18.0) for Siebel CRM Statement of Direction / Planned Features (Doc ID 2328111.1)

Monday, November 6, 2017

Is it over ?


Today I came across a rather brave article predicting the end of cloud computing. It is a bold statement to make, but the author has clearly backed up his claim with facts. The biggest problem being any cloud system is a sitting duck when it comes to security. Interesting read.

image

Tuesday, April 4, 2017

OpenUI , I get it now

 

After years of questioning it , I am starting to understand the reason why people are crazy about OpenUI.  For decades, the crude activex based frontend was a big pain area in Siebel. Customers were always using an older, outdated version of Internet Explorer for Siebel CRM, because the latest version never supported it. There was also that crazy 32bit, 64bit IE version problem.

So when the move to a open standards based frontend was announced, it was welcomed with open arms. No more IE. Any browser, any device. But  then started the crazy ideas, crazy configurations, outrageous themes. People started implementing all their business processes purely in OpenUI ! I have stayed away fro this kind of work, for a long time.

But for the past 6 months, I have been working on pure OpenUI requirements. For integration. Yes, Siebel EAI integrations triggered from OpenUI ! Only reason I agreed to it, was because that was exactly what my customer wanted. And the challenge was too sweet to ignore. Javascript is a horrible language, but with OpenUI, it opens up possibilites endless.  Whatever restriciton Siebel puts up to you, can be bypassed in Javascript. I was able to implement a purely asynchronous VBC like applet in OpenUI, something which is not possible using traditional Siebel code.

But OpenUI works poses its own challenges. Unlike tools, there is no object locking system, so better have some kind of CVS in place  if you have multiple people working on OpeUI files. Also, test in every browser. Do not assume that IE or Edge will honour the code the same way Firefox does. Test your code specially with the  Show More button on the applet (tip),  because Show More has lots of issues in OpenUI.

And finally, Siebel still provides the best architecture for a CRM system. Try to implement whatever you can OOB, and OpenUI should be the last option. Unless you want to get into maintenance hell.

 

Wednesday, March 22, 2017

On a Learning Spree

After almost a decade of teaching stuff, I am now on a learning spree. Here is shot of my training calendar.

 

 

 

Technology has clearly grown exponentially over the years.  Makes Siebel look like a dinosaur.

 

 

Friday, December 30, 2016

Back to Siebel


After about 2 years of getting lost in various Oracle clouds, I am finally back to the Siebel game. Right on the latest version, Siebel IP 2016. Open UI. Yup, that’s there. And on a telecom project with tonnes of EAI integration and Order Management. And now I truly see why Siebel cannot be fully replaced. Until a worthy contender and full cloud replacement comes in, these kind of projects can only be implemented in Siebel.

I’ve come to understand that Oracle Cloud is a joke. At least for the time being, it can only be used for medium sized companies who have standard sales and service business processes. The amount of extensibility available is very less. And although one can write their own customization on Oracle PaaS and Java Clouds, that kind of beats the purpose anyway. The whole point of modern cloud is to reduce the amount of code written.

I’m hoping to ride out this last wave of Siebel projects before I too am forced to move to the cloud for good. 

For the time being, it’s good to be back. Happy New Year !




Thursday, December 1, 2016

TCC: Date Manipulation

 

 

 

 

cleartext.blogspot.com

<quer:projection id="idEEO2bDisabledPersonAnswerNo" alias="CorrectedStartDate">
    <!--quer:customFunction name="TO_CHAR"-->
    <quer:query projectedClass="Location" alias="Corr_Start_Dt">
        <quer:projections>
            <quer:projection>
                <quer:add>
                    <quer:field ownerQuery="MainQuery" path="Applications,Offers,ActualStartDate"/>cleartext.blogspot.com
                    <quer:divide>
                        <quer:add>
                            <quer:field path="NetworkLocation,TimeZone,Offset"/>
                            <quer:multiply>
                                <!---->
                                <quer:add>
                                    <quer:customFunction name="TO_NUMBER">
                                        <quer:customFunction name="SUBSTR">
                                            <quer:customFunction name="TZ_OFFSET">
                                                <quer:customFunction name="TO_CHAR">
                                                    <quer:field ownerQuery="MainQuery" path="Applications,Offers,ActualStartDate"/>
                                                    <quer:string>TZR</quer:string>
                                                </quer:customFunction>
                                            </quer:customFunction>
                                            <quer:integer>1</quer:integer>
                                            <quer:integer>3</quer:integer>
                                        </quer:customFunction>
                                    </quer:customFunction>
                                    <quer:divide>
                                        <quer:customFunction name="TO_NUMBER">cleartext.blogspot.com
                                            <quer:customFunction name="SUBSTR">
                                                <quer:customFunction name="TZ_OFFSET">
                                                    <quer:customFunction name="TO_CHAR">
                                                        <quer:field ownerQuery="MainQuery" path="Applications,Offers,ActualStartDate"/>
                                                        <quer:string>TZR</quer:string>
                                                    </quer:customFunction>
                                                </quer:customFunction>
                                                <quer:integer>5</quer:integer>
                                                <quer:integer>2</quer:integer>
                                            </quer:customFunction>
                                        </quer:customFunction>
                                        <quer:integer>60</quer:integer>cleartext.blogspot.com
                                    </quer:divide>
                                </quer:add>
                                <quer:integer>-1</quer:integer>
                                <!---->
                            </quer:multiply>
                        </quer:add>
                        <quer:integer>24</quer:integer>
                    </quer:divide>
                </quer:add>
            </quer:projection>
        </quer:projections>
        <quer:filterings>
            <quer:filtering>
                <quer:equal>
                    <quer:field path="Code"/>cleartext.blogspot.com
                    <quer:field ownerQuery="MainQuery" path="Applications,Requisition,JobInformation,PrimaryLocation,Location.Code"/>
                </quer:equal>
            </quer:filtering>
        </quer:filterings>
    </quer:query>
    <!--quer:string>yyyy-MM-dd hh:mm:ss</quer:string></quer:customFunction-->
</quer:projection>

cleartext.blogspot.com

Monday, September 19, 2016

Too Much Javascript

 

I can't understand this trend. After years of focus and interest in compiled languages and binary executables, now everyone is focussed  on what can be done in the humble browser. And its programming language, Javascript. And that's where the action is. Everyday I hear about new javascript based libraries and frameworks. And the language syntax is getting worse. With new conventions of invoking script and processing data, its almost as if they are re-inventing multiple wheels again. There are new graphing and charting libraries, and it is now possible to build entire standalone desktop applications running on javascript. It seems to be everyone's favourite, enjoying a position once occupied by Java. I can straightly see the advantages of moving your UI code to Javascript.

image

  • It is truly portable. Runs in all modern browsers, even on smartphones and tablets.
  • Flash and Java, the previous leaders in browser programming, are no longer supported by newer browsers. Maybe due to security vulnerabitlies in them.
  • None of that bytecode compilation you see in Java class files.
  • The source stays with you, so it is still modifyable.
  • It is free. Truly free. It is open source.

But I can't help noticing that it greatly increases the amount of data being downloaded into the final browser. And takes up a lot of bandwidth. Sure, many of those applications use require.js and files are loaded only conditionally. But still, they need to be downloaded. And the humongous task of executing the program is now transferred from the server to the end-user's browser. Which is definitely good for the server, lesser load balancing to take care of. But on many sites, I can actually feel the browser slowing down due to the additional processing power it needs.

I like browsing light weight. I sometimes turn off javascript completely on some news sites, I feel it gives a much faster rendering of the site, as none of those additional garbage is loaded and run. The URL links still work, because those are in the HTML.

But the bigger problem is see is un-regulated development. Everyone is writing their own libraries and packages. First it was just google and facebook. Now even new players like oracle has entered the race and are giving out their own libraries. And the tutorials of all their libraries does the same thing: render graphs and charts in the browser.

Too many tools. Too much configuration. That is the problem. Javascript experts have written better about these problems, so I will leave that there.

The bigger problem I see lines of code. After programming for more than 20 years now, I have learned to understand is that the real challenge (and fun) in programming is to achieve maximum tasks writing as little code as possible. You don't have to be Phd to understand that it is easier to debug and test a 10 line program than a 100 line program. Every extra line added to the codebase increases the difficulty in debugging it at a later stage. Not to mention the huge effort of merging code written by large teams during checkin. But all these javascript based boilerplates, linters and generators don't solve this problem, they just make it worse.

A library should be simple enough to add it into ones current code base, and the developer should not have to know how it is implemented to use it. All the real work must be transferred into the library being invoked, leaving the base code base minimal. Minimal. That should be the keyword.

Or there should be a way for RAD tools. A system of abstractions which will hide the complexity beneath and generate highly efficient code.

When I started work in Siebel, I used to hate the idea of Enterprise Application development. But I absolutely admired the way Siebel had built a layer of abstraction and user properties, and through them, indirectly invoked C++ code to achieve its functionality. Sure there is one extra layer in this packaged application method, but the final code which the consultant/developer writes is very minimal. I have seen entire projects implemented with a total of less than 1000 lines of escript code in it.

I was looking into the new Oracle JET library for javascript application development which was created by Oracle and it is completely bonkers. All they have done is to re-implement a couple of already perfecte ideas and re-do it in their own way. A lot of the final code looks exactly the same as from Angular or React. I have no idea why any enterprise customer would decided to writes thousands of lines of javascript code just to get charts rendered in the browser, when other Oracle delivered  packaged and cloud applications can do the same without ANY lines of code.

Hope somebody sits up and takes notice.

Friday, August 26, 2016

Linux is 25 today !

 

25 years ago , Linus Torvalds let the world know of his pet project for a new operating system. And started the revolution.

image

Wednesday, August 24, 2016

Oracle JET

 

Oracle has released the training videos of their new Java Toolkit, Oracle JET. They are calling it a MOOC, or Massive Open Online Course.

Tuesday, August 16, 2016

Importing WSDLs with cyclic references into Siebel


Siebel has some issues consuming WSDLs which had a little complicated schema structure. Like cyclic references. That is when one of the children elements of a complextype is the same complextype again.

In this example schema, element "LineItemARBOType" has a child of type "LineItemARBOType" again.
cleartext.blogspot.com
image
This WSDLs poses no problem when consumed into a programming language like .NET or Java, because the parser simply creates a class and references itself in it. But these kind of WSDLs were not supported in Siebel. Trying to import a WSDL with cyclic references would result in this error from tools.:
There are no web service definitions to be generated.(SBL-EAI-04340)
Following are warnings generated in the process:
Service 'xx' can not be imported, because none of its ports could be imported.(SBL-EAI-04333)
Port 'xx' can not be imported. PortType 'xx' can not be imported. The http://schemas.xmlsoap.org/wsdl/:operation 'xx' was ignored. Error importing XML schema via method 'xx' for 'element' 'xx' in 'xx'(SBL-EAI-08009)
Cycle detected in the 'xx' schema: xx 'xx' has a cycle (SBL-EAI-09008).
(SBL-EAI-04331).


But turns out, Oracle has fixed this issue in IP2014 (8.1.1.14) release of Siebel. Via bug:Bug 10539615. WSDLs with cyclic references can be consumed into tools IP2014 and upwards. But it creates hundred of integration component entries (sometimes even thousands).
cleartext.blogspot.com

Tuesday, August 2, 2016