Siebel – Reading data directly from Siebel SRF
by Nitin JainSRF or the Siebel Repository File as it is more commonly known, is the binary representation of data in Siebel Tools. Siebel Application refers this file for many of the objects and data in Siebel. This greatly helps performance as the data is already available in compiled form to the runtime instance at the time of execution. On the other hand, there are many other objects or data houses in Siebel which don’t form a part of the SRF, and are compiled at runtime. And thus, are slower. For eg. Client side Business Scripts.
“Every now and then, there comes about a thought powerful enough, to make me sit straight in my chair and start hitting the keyboard!!” – Nitin Jain
When I first looked at this problem statement on one of the public forums, it got me thinking. I had already been thinking about it for some time, just that wasn’t really implementing the possible solution to this. In this blog post, I will demonstrate how I read the data from the Siebel SRF, and exposed its objects to me.
I did this with the Business Services which are from one of the objects that you generally compile from Siebel Tools into the Siebel SRF.
I noticed that Siebel generally accesses all objects in the Siebel SRF using special Business Components (dare I call them virtual!!).
For accessing the Business Services, it uses the Business Component called, “SRF Service”. From my experiments, it seems that this Business Component returns the list of all the Business Services compiled into the SRF, and also, those that are present in Siebel Web Client.
Similarly, siebel uses the BC, “SRF Service Method” to get the list of all the available Business Service Methods from the SRF.
I noted that these Business Components are not mapped to any particular Business Object in Siebel. So, for my experiments, I created some custom Business Objects using these Virtual BCs exposing the Siebel SRF functionality. After creating Applets, Views, etc. you can see what I ended up with in the image below:
Similarly, for all the different entities in Siebel Tools, which upon compilation go into the Siebel SRF, Siebel has exposed the list through these Business Components. You can see the complete list by typing out, “SRF*” against Business Components in Siebel Tools.
Let me know what you think about it. You can add your comments to this thread.
From when I started working on this problem, I got this within the first 10 minutes. So, I guess this is very very limited and there must be much more. I would appreciate if people with better insight could add to the understanding for all of us here.
“Knowledge is the only thing in the world which grows by sharing”. So, “Let’s Share!!”
Related posts:
- Siebel – About SRF Window – Remove data Okay. This is something those who like to toy with...
- Siebel – Autosave Opportunity data – The concept Requirement: System should have capability to automatically save opportunity(RFPs) data...
- Siebel – Autosave Opportunity data – Sample Code This is a follow up post on my previous post,...
- Siebel – ActivateField() split wide open In Siebel, we generally tend to use the fields on...
- Siebel – Fetch Active view properties – III I will discuss a practical example, and the corresponding Inputs...
- Siebel – Unable to check out objects I will discuss the following most prominent ways to enable...
- Siebel – Scrolling between records – UP and DOWN Generally in Siebel Client, we very often have the need...

Following is the link which acted as an inspiration for me to try out the above:
reading-repository-data-from-the-actual-srf-file
I feel ‘Hui Ye’ has given a beautiful explanation to the Siebel SRF here.
Good one! thats very nice exploration
Thanks, Smita. Just an effort to try and understand the vast world of Siebel..!
Excellent finding Nitin .!!!
This thing can be really helpful at times,,especially when we try to debug some thing in multiple environments…
Keep it up!
Thanks, TJ. I will take it as a compliment. Cheers!
Hey good work dude…. i hope there are many more like this to come from you.. hope you remember me…
Thanks for the compliment, Abhishek. Of course I remember you.
HI Nitin
Good Post. But I think you are not really reading a data from Siebel SRF. basically siebel stores the Object definition in Database. Even if you execute up a below query at Database you will see all the BS in repository.
Select * from siebel.S_SERVICE
I believe you have just exposed the data contains in S_SERVICE table by basing a applet on repository BC. I think that is true for any object definition.
I think it is quite tedious to read a data from Siebel SRF alone.
I could be wrong as well. Please let me know your thoughts.
Cheers
Piyush
Hi Piyush
Thanks for your comment. Nice thought I would say.
I understand that the concept is not very clear from the example I have chosen. I will try to find a good example and come back in a couple of days. Please do pardon me for being deeply engaged in my work at the moment.
As far S_SERVICE is concerned, you are right in that Siebel stores the BS Descriptions in this table. But, let me assure you that the SRF and the S_SERVICE table would not necessarily hold the same values.
I will come back to this post with an example. When we discuss and share, many new thoughts come forward.
Hi Piyush
Based on your comment, in order to re-check I just reran my entire process. My conclusion is, what I mentioned in the blog above is correct. I’ll explain.
Basically, I will divide the Business Services in Siebel to be of 3 different types:
1) Our new Business Service records created in Siebel Tools. These are created by doing a NewRecord() on Business Services view in Siebel Tools. As soon as you save the record, or step off it, it creates an entry in the S_SERVICE table as pointed out by you. However, please note that this new BS record is not yet a part of the SRF and you would not be able to use it in workflows, scripts, or any configuration function.
2) New Business Service records created in Siebel Web Client. These upon being saved, create a new record in the table, S_RT_SVC. You can verify by taking an example on your own and running a query in the DB. These don’t appear in the Siebel SRF either. So, these need to be compiled at runtime, whenever they are called for eg. from a Workflow.
3) Business Service in Siebel SRF. A Business Service once created in Siebel Tools, has to be compiled for it to appear in SRF. Please note that though the original definition appears in S_SERVICE, on compilation, it loses its original reference in Repository. You must compile the BS again onto the SRF for the changes that you make to reflect.
As an example, I created a new BS in Tools with the name, “04 Nitin Test Geek SRF Display”. Please refer the image here. I noted a new record was created in S_SERVICE. However, it was not a part of my custom view that I have explained in my blog above. I tried refreshing the Applet, query and go, logout n login, still not able to see any such record there. You can see the view before compilation here.
Now, I compiled this BS onto the SRF. click here to see my custom view after the compilation and Client restart. As you can see, now the record is clearly visible. Hence proven!
Piyush, I request you to please go through the blog post once again, and try to implement it step by step. I am not using the regular BC based on S_SERVICE here, but the Business Component “SRF Service”. The blog post is correct.
As they say, “Some of the most complex problems in the world, have some very simple solutions!!”. Cheers
Hi Nitin, really a good post very informative.
1)Also have you ever tried to find out the number of script lines in the whole repository. Do yo have any idea?
2) And can you create web tools like web client.
Nitin – Hope all is well… It is easy to get the number of scripts via some simple SQL. Number of lines is more complex. There are 2 main ways to get the number of lines of scripts:
1. Custom COM program to read the objects
2. Custom SQL scripts combined with Excel and some nifty macros
I sat down and made #2 in a couple days.
FYI, I had played with these same SRF objects before to the same result. Tried to do more direct approach (not using Siebel objects) using C# and such, but to no avail…