Wishing everyone who reads this a very happy Christmas and a prosperous New Year!
Monday, December 26, 2011
Wednesday, November 16, 2011
Google sure has been busy lately. Gmail has a brand new look, Google+ received some new add-ons and even YouTube is getting a facelift. But did you notice the changes to Google Reader? If you’re a regular user, you must have noticed how the color scheme changed, how the spacing changed in list mode, and to top it all off, that you can’t share items anymore, unless you use Google+.
As opposed to Gmail, where you can control the spacing between items in the new look, no such option has been added to Google Reader. This means your screen is now less utilized and you can see less items in your feed, just because of added padding. And if you were used to sharing items via Reader’s sharing options, they no longer exists. The only way to share is via Google+. So what are avid Google Reader users to do?
Here are two add-ons that will help you restore some of these features and get your good old Reader back.
Reader Sharer [Chrome]
Reader Sharer is a simple Chrome add-on that restores the sharing functionality to Google Reader. If you want to continue sharing through Google Reader with its own sharing configuration, or if you simply don’t have Google+ and don’t feel like opening an account just so you can share, you should definitely try out Reader Sharer.
Once you install the add-on, head over to Reader and check if your sharing buttons have been restored. You might need to refresh the page to get them back. But sure enough, here they are!
Reader Sharer restores the entire Reader sharing interface. You can set up who you want to share with, and then share items or share with note, exactly like it used to be. The sharing settings are now back on your sidebar where they used to be, between “All items” and “Explore”.
Reader Sharer comes in two versions. One that simply adds the sharing options (linked above), and another one which also takes care of the new spacing problem in list mode. Using the second version, you can kill two birds with one rock – get your sharing options back and fix the spacing.
Reader Sharer [Firefox]
Reader Sharer Monkey for Firefox comes in just one version, the one that also takes care of the spacing problem. This is not a Firefox add-on, but a Greasemonkey userscript. In order to get it, you have to first install Greasemonkey, and then head over to the userscript page and install the script.
Now, when you open Google Reader, all your sharing options will be back, and the extra spacing in list mode will be reduced.
If you’re OK with Google+ sharing, and don’t want to mess with sharing options, try FixStyleSheet for GoogleReader. This is a simple Chrome extension that does just one thing: it changes the new spacing in Google Reader and lets you use your screen efficiently again. Here is what Google Reader looks like in list mode with the new look:
It’s not that this looks especially bad, but many people have lots of different feeds, and the more items you have on your screen, the easier it is to scan through them and find what you really want to read. The extra spacing also makes the post excerpt smaller, which makes it just a bit harder to understand what the post is about without clicking.
If you’re ready to fix this, download FixStyleSheet, and take another look at Google Reader. The change is automatic, you don’t even have to refresh.
See how much more compact it is? On my 15’’ screen, it increased the number of posts I can see without scrolling from 13 to 23! That’s a lot of wasted space recovered.
Another small thing FixStyleSheet does is make the post view a bit wider and a bit more compact. This is what it normally looks like:
And this is what it looks like after installing the add-on. The title is now smaller, and the whole post stretches over a somewhat wider area, so it takes up less room on your screen.
The change is not huge here, but if you’re minimalistic and don’t care much for formatting, it’s a nice change.
Changes to the user interface of a product you use regularly is always a tough ride. We all have our way of doing things, and when a company comes in and changes everything on us, we’re bound to be looking for ways to soften the blow. This doesn’t mean the change is necessarily bad.
Making users share only through Google+ is quite a different move, and is not necessarily meant to improve our experience as users, but to improve Google+’s standing. So don’t be shy, if you’ve been using the share option in Google Reader, get the add-on and resume your normal sharing routine.
What do you think of all these changes from Google? Do you like the changes to Reader, or are there other elements to the change you don’t like? Share in the comments!
Monday, October 17, 2011
Saturday, August 6, 2011
Anyone who has worked on the Siebel version 8 flavours is bound to have run into problems with its new local db encryption feature. As a default setting, Siebel encrypts the local db with an RSA encryption key, which means the local db thus extracted, cannot be accessed via the backend. Tools and the locally installed client will continue to work, but if you need to actually debug data entry issues in the database, the system will just respond saying incorrect password.
Traditionally, there is a tool called dbisqlc, an executable present in the Tool\Bin folder, which is mean to access Sybase databases. I have used this tool numerous times in the past to debug data entry issues and run spooled SQL statements. But if your localdb is encrypted, you will need to provide some more inputs to dbisqlc so that it can open up the dbf file.
- Determine the location of the local database that user wants to connect to and note down the full path of the database file for example %SIEBEL_CLIENT_ROOT%\local\sse_data.dbf.
- Launch dbisqlc.exe from the %SIEBEL_CLIENT_ROOT%\bin directory to bring up the Connect to Adaptive Server Anywhere dialog. On the Login tab fill out the following fields.NOTE: The values for the User ID and Password have to be in upper case:
<Enterprise Name> in ALL CAPITALS
NOTE: The default DBA password value is the enterprise name. If the enterprise name has less than 8 characters, the name is padded with consecutive digits 1234. For example:
o If the Enterprise Name is Siebel2005, then the DBA password is SIEBEL2005.
o If the Enterprise Name is Siebel, then the DBA password is SIEBEL12.
On the Database tab fill out the following field:
NOTE: Starting in Siebel version 8.0, you will need to run the following query to retrieve the encrypted value for the local database owner and enter this value on the Encryption Key field.
SELECT PREF_CD, VAL FROM S_NODE_PREF s1, S_NODE s2 WHERE s1.PREF_CD ='RemLocSec:PlainKey' AND s1.NODE_ID = s2.ROW_ID AND s2.NAME='<mobile client name of the local database';
- After clicking on the OK button, the user will connect to the local database. A message "Connected to database" should appear in the Statistics sub-window.
Knowing the DBA password for your local db can also be useful when the tables need to be extended. Sometimes in Siebel tools, when you do an apply activate, the tools wizard goes into a hang and refuses to come out. I found that when I entered the userid as DBA and corresponding password generated as in the steps above, the tools system was able to complete the apply DDL step easily.
Also refer to this excellent post which explains how to reset forgotten passwords.
Sunday, June 12, 2011
A few weeks back we had this requirement to have a Java client connect to our Siebel Webservice and do various operations. In this model, the Siebel side was the backend, and a Java applet was the frontend to the system. I setup the inbound Webservice in Siebel in no time, using ASIs. But the Java folks were having problems in setting up a connection to the system. They even said there were problems in the WSDL and Webservice, and that they were getting various parser errors on their side. Guess they were too dependent on eclipse, and they could not find an import WSDL feature on it !!
Truth is, Java is one of those languages which understands webservices very well, and if properly used, could make the integration work easiest to implement. You don’ have to build the SOAP request by hand (though, that is one option) as is done in some scripting languages. You just have to figure out how to generate the stub file, or the necessary class files into the system.
Now there are two ways to import a WSDL into a Java system, you would use the WSDLtoJava.bat file if you are using the apache axis framework. This is when a Java servlet on Tomcat/Apache is talking to another server. I preferred the easier way to using the wsimport command as this is a simple client talking to a Siebel server. I will be using the Service Request ASI WSDL from a previous post.
You need to have the Java SDK installed and the paths properly configured on your system. Open up a command prompt window and type in “java -version” or “javac” to see if the paths have been added correctly.
Go ahead and import the wsdl using the command wsimport SR_WSDL.wsdl. Here I am running the command from the root of C: drive. You will see the importer at work generating class files.
You can ignore any warnings you see as long as you don’t get any errors. wsimport would have created a nested folder structure with multiple class files. Here the path created is C:\com\siebel\xml\sm_servicerequest.
Now its time to start writing your main java file which will make an instance of these class files and trigger the integration to siebel. You will have to know which class represents the webservice, here it is SMServiceRequestWS_Service.class. You can also generate the actual java files to see how the class and methods under them have been defined. Inorder to do this, use the command wsimport –keep.
This time wsimport will create the java files for each class file.
Back to our main java file. Import the generated class files using:
As can be seen, this string is actually the path of the generated class files. This is what my final Client.java file looked like :
//the above namespace is from the generated code from the wsdl.
public class Client
static SMServiceRequestWS_Service service = new SMServiceRequestWS_Service();
public static void main(String args)
Client client = new Client();
public void doTest(String args)
SMServiceRequestWS pm = service.getSMServiceRequestWS();
// Building the Request hierachy
QueryPageSRInput req = new QueryPageSRInput();
ListOfSmServicerequest list = new ListOfSmServicerequest();
ServiceRequest SR =new ServiceRequest();
// Variable to store Response hierarchy
QueryPageSROutput res = new QueryPageSROutput();
// Invoke the service
System.out.println("Invoking the Webservice ");
for (int i = 0; i < res.getListOfSmServicerequest().getServiceRequest().size(); i++)
System.out.print(res.getListOfSmServicerequest().getServiceRequest().get(i).getStatus() + "\t");
System.out.print(res.getListOfSmServicerequest().getServiceRequest().get(i).getSRNumber() + "\t");
All the information you need to build up the request and parse out the response is in the .java files created by wsimport. As can be seen, the final code does not have any variables for the URL,namespace or SOAPAction. These details are taken care of in the .java files.
Time to compile and run the Client.java file. Commands are:
The client instance should connect to the Siebel Webservice now :
This code runs a Query and prints out the Service Request Status, RowId and Owner details.
That’s it !! This is all you need to have a java client invoking a Siebel Webservice.
Friday, June 10, 2011
What is the easiest way to setup a new inbound web service in Siebel ? Well, a lot depends on the actual requirement, the complexity of the schema, error handling features etc. If the requirement is really simple, I try to go for an Application Service Interface or ASI. And specially if the requirement calls for multiple operations at a single web service, then ASI is the way to go.
An Application Services Interface (ASI) is a release-independent interface published by Oracle that allows you to integrate Siebel applications with external applications. An ASI is a collection of related methods; each method contains input and output parameters. The methods and parameters are listed on the business service definition. Simple method parameters (such as a string or number) are defined directly in the service definition. Hierarchical method parameters are defined using integration objects
Lets assume that the requirement here is to expose a query operation as a web service. The end point would invoke a Siebel web service which would extract data in a schema. Simple query operation. Here is how to do it in an ASI.
Step 1 : Define your schema. Decide upon an already present Integration Object or design a new IO from scratch. Here I’m choosing a custom Service Request IO, with attachments as the child IC. Don’t forget to decide upon the user keys and status keys.
Step 2: Define the ASI business service. Create a new business service, and set the class as CSSEAIDataSyncService. Define a method for this BS as QueryPage. Here I have added one more method for InsertOrUpdate.
Define the arguments of the methods. There has to be at least one argument of type Integration Object. Mention the IO name you had chosen in Step1
Two Business Service User properties are required.
Instead of creating the BS, an existing ASI can be simply cloned, in which case you would only need to change the IO name.
Step 3: Expose the BS as an Inbound web service. Compile the IO and BS. On Siebel 8, simply right click the BS and choose deploy as web service. Or you could setup the service yourself.
In the application, go to Sitemap > Administration – Webservices > Inbound Webservice.
In service name, give any name and set the namespace. The namespace can be taken from the IO userproperties.
In Service Port, choose the newly created BS. Set the binding and transport values. Here I have chosen SOAP_DOC_LITERAL and HTTP Transport
In the Operations applet, the methods of the custom BS will be available. Set them up, and clear the cache.
That’s it, your done !! You can generate the WSDL, and this can be consumed by the end point. The end system will get to see the various operations exposed under the service.
Here is how the WSDL looks when consumed in XML Spy:
And on choosing QueryPage method, XML Spy will generate this SOAP Request.
ASIs implement error handling in their own way and return SOAP fault codes back to the calling system.
Siebel ASIs are prebuilt and can be used immediately. ASIs provide a release-independent integration interface to the Siebel application, which remains unchanged with each upgrade to a new release. This is one of those few areas in Siebel where there is an upgrade-proof guarantee from Siebel/Oracle.
Saturday, May 14, 2011
The requirement was to conditionally disable tasks in the Task View pane applet. The Task Groups have to be associated with the triggering views, and when the logged in user enables the tasks by clicking on its button, an applet opens up in the UI on the left side, always showing all the tasks associated with the current opened view.
trigger the task from script.
So now, instead of showing the tasks in the task pane applet, we trigger it from scripts behind buttons in the UI. We have buttons for different tasks, and the buttons themselves are enabled/disabled based on positions.
I'm hoping Siebel provides an vanilla way of achieving conditional task enabling/disabling in the UI soon.
Saturday, April 30, 2011
Tuesday, April 26, 2011
Oracle is providing a free online training session on the tools used to create Fusion Applications.
Learn how Rich Enterprise Applications, powered by Oracle Application Development Framework (Oracle ADF), are developed, assembled and configured using Oracle Fusion Middleware technologies like Oracle JDeveloper, Oracle WebCenter, Oracle BPM Suite, and Oracle SOA Suite. These applications uniquely deliver:
- Desktop Quality, Multi-Channel User Experience
- Integrated Collaboration and Social Computing Services
- Enterprise Services like Content Management, BPM, Security and Entitlement
- Integration with Business Processes and Oracle Applications
Another issue I ran into in IE 8, regarding the Siebel 8.1 Mobile client. This issue was reproduceable on both debug and non-debug modes.
After the mobile client opened up fine, none of the menu items inside the UI framework would open. The menu items at each applet would not drop down, and even the Help->About View would not open up.
At first I thought the pop-up blockers were playing spoilsport again, but the problem persisted even after pop-up blockers were turned off.
Then , a colleague suggested making a change to the client CFG file. In my case, it was scomms.cfg.
1) Open the client CFG file.
2) Find this line :
EnableFQDN = FALSE
3) Change it to :
EnableFQDN = TRUE
And that fixed the problem !! I don't know what FQDN has to do with menu items, maybe its something wrong with the UI framework.
Monday, April 25, 2011
The last few months have been some of the worse in my career so far. The hectic project schedule and huge amount of "last minute changes" left me very little time to relax. Hopefully, its all going to change soon.
I am working on Siebel 8.1, and had Internet explorer 7 running, which ran without any issues. After an upgrade to IE 8 (thanks to the IT guys), I found that the Siebel debug mode would no longer open. The IE window would open up and throw a "page not found" error. But the Siebel client would open fine, when started via its own shortcut.
A little experimenting, and I found that inorder for the Siebel 8.1 debug mode to open up in IE, there should be no other instances of IE running. Just kill all other IE instances, and simulating the workflow should be fine.
Not sure if there is another way to fix this.
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 th...
This is something I struggled a lot with, and I am posting this in the hope that the next person struggling with this will find it helpfu...
Dynamic toggle applets were probably the first piece of automation a Siebel developer gets to work on; switch the applet depending on som...
The Taleo Connect Client has a lot of filters to form queries, and a bigger bunch of functions which can be used in the export definition...