<?xml version="1.0" encoding="UTF-8" standalone="no"?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:gd="http://schemas.google.com/g/2005" xmlns:georss="http://www.georss.org/georss" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:thr="http://purl.org/syndication/thread/1.0"><id>tag:blogger.com,1999:blog-3508230947956282102</id><updated>2025-05-26T17:21:05.433+05:30</updated><category term="siebel-tech"/><category term="siebel"/><category term="escript"/><category term="generic"/><category term="sugarcrm"/><category term="crm"/><category term="web-2.0"/><category term="integration"/><category term="process"/><category term="saas"/><category term="social-crm"/><category term="analyst-views"/><category term="architecture"/><category term="cloud-computing"/><category term="data-import"/><category term="email"/><category term="humour"/><category term="know-how"/><category term="performance"/><category term="product-opinion"/><category term="report"/><category term="requirements"/><category term="social-media"/><category term="strategy"/><category term="tips"/><category term="usability"/><category term="vtiger"/><category term="x2engine"/><title type="text">crmcog - the Blog</title><subtitle type="html"/><link href="http://crmcog.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default?redirect=false" rel="self" type="application/atom+xml"/><link href="http://crmcog.blogspot.com/" rel="alternate" type="text/html"/><link href="http://pubsubhubbub.appspot.com/" rel="hub"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default?start-index=26&amp;max-results=25&amp;redirect=false" rel="next" type="application/atom+xml"/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><generator uri="http://www.blogger.com" version="7.00">Blogger</generator><openSearch:totalResults>43</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3508230947956282102.post-8176031523706134637</id><published>2013-01-19T19:52:00.004+05:30</published><updated>2013-01-19T20:09:15.759+05:30</updated><title type="text">crmcog has moved!</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;h2 style="text-align: left;"&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;a href="http://crmcog.com/" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUiOJa3Q9IQO1h0D3gO4k5b3JS7H5Baq4mL3Xu0CrLDH_cfyMBza-3BVoCFLV9nAheeE1IE8hclcCuy_DOfC0ZHBT0eVFb24E9l1ww5Q6jUIHQRCDgoZ8XX2gqMpY-ubJNlOFM5ZLfNhU/s200/customLogo.gif.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h2 style="text-align: left;"&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h2 style="text-align: left;"&gt;
&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Moved to &lt;a href="http://crmcog.com/"&gt;http://crmcog.com&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;br /&gt;
(for what it's worth)&lt;/div&gt;
</content><link href="http://crmcog.blogspot.com/2013/01/crmcog-has-moved.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/8176031523706134637" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/8176031523706134637" rel="self" type="application/atom+xml"/><link href="http://crmcog.blogspot.com/2013/01/crmcog-has-moved.html" rel="alternate" title="crmcog has moved!" type="text/html"/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUiOJa3Q9IQO1h0D3gO4k5b3JS7H5Baq4mL3Xu0CrLDH_cfyMBza-3BVoCFLV9nAheeE1IE8hclcCuy_DOfC0ZHBT0eVFb24E9l1ww5Q6jUIHQRCDgoZ8XX2gqMpY-ubJNlOFM5ZLfNhU/s72-c/customLogo.gif.png" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3508230947956282102.post-4585436411551787681</id><published>2012-09-25T21:35:00.003+05:30</published><updated>2012-09-28T11:18:30.977+05:30</updated><title type="text">Siebel: A Simple Log Analyser</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;div&gt;
&amp;nbsp;&lt;/div&gt;
&lt;div style="background-color: white; color: #29303b; font-family: Georgia, Verdana, Arial, serif; font-size: 12px; line-height: 1.5em; margin-bottom: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
&lt;/div&gt;
&lt;div style="line-height: 1.5em; margin-bottom: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
Deciphering Siebel log files is a chore. The basic premise has not varied since a long time now:&lt;/div&gt;
&lt;ol style="line-height: 18px;"&gt;
&lt;li&gt;Look out for all the errors logged in the file. Even if most of them are benign, there is a chance (bad word to use here) that they are contributing to&amp;nbsp;a larger error/system crash&lt;/li&gt;
&lt;li&gt;Keep a look out for the performance of various SQLs thrown at DB. If a transaction is taking a long time, that’s where you want to start&lt;/li&gt;
&lt;li&gt;Verify whether any Siebel transaction outside the DB is taking more time than expected (e.g. in cases where you have a really complex search spec that cannot be passed on to the DB)&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
Although I wanted to automate this somehow, for a very long time I just relied back on “proven” methods:&lt;br /&gt;
&lt;ul style="text-align: left;"&gt;
&lt;li&gt;&lt;div style="background-image: url(https://c2blogs.cognizant.com/blogs/187523/wp-content/themes/connections/img/bullet.gif); background-position: 0px 7px; padding-left: 1.5em; text-align: left;"&gt;
Open log file, search for execution times around the functionality that is causing the issue&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;div style="background-image: url(https://c2blogs.cognizant.com/blogs/187523/wp-content/themes/connections/img/bullet.gif); background-position: 0px 7px; padding-left: 1.5em; text-align: left;"&gt;
Search for errors – most likely around the section that is causing the issue&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;div style="background-image: url(https://c2blogs.cognizant.com/blogs/187523/wp-content/themes/connections/img/bullet.gif); background-position: 0px 7px; padding-left: 1.5em; text-align: left;"&gt;
Navigate back and forth a lot, so that rest of the people think I already have a feel for how Siebel works and doing something great&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;div style="background-image: url(https://c2blogs.cognizant.com/blogs/187523/wp-content/themes/connections/img/bullet.gif); background-position: 0px 7px; padding-left: 1.5em; text-align: left;"&gt;
Rely on grep, tail and perl (when working on UNIX and developer-friendly). Sadly, Windows does not&amp;nbsp;provide it out of the box, and to get open source/free tools in a restricted environment is no joy&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="line-height: 1.5em; margin-bottom: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
This changed when I took a look back at&amp;nbsp;&amp;nbsp;where .NET 2010 is, the culmination of which is here. “COGSiebelLogaliser” is a tool to parse Siebel logs generated by a client or server, and spool files to display useful information about:&lt;/div&gt;
&lt;ul style="text-align: left;"&gt;
&lt;li&gt;&lt;div style="background-image: url(https://c2blogs.cognizant.com/blogs/187523/wp-content/themes/connections/img/bullet.gif); background-position: 0px 7px; padding-left: 1.5em; text-align: left;"&gt;
Performance times&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;div style="background-image: url(https://c2blogs.cognizant.com/blogs/187523/wp-content/themes/connections/img/bullet.gif); background-position: 0px 7px; padding-left: 1.5em; text-align: left;"&gt;
Errors&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;div style="background-image: url(https://c2blogs.cognizant.com/blogs/187523/wp-content/themes/connections/img/bullet.gif); background-position: 0px 7px; padding-left: 1.5em; text-align: left;"&gt;
An included editor is used to open log files&amp;nbsp;(faster to open and navigate through large files)&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="line-height: 1.5em; margin-bottom: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
High level requirements:&lt;/div&gt;
&lt;ol style="line-height: 18px;"&gt;
&lt;li&gt;Tested it in Windows XP, with .NET 4.0&lt;/li&gt;
&lt;li&gt;Application should have write access to the folder from which it executes, and read access for the log files. It will not write back anything to the log files&lt;/li&gt;
&lt;/ol&gt;
&lt;div style="line-height: 1.5em; margin-bottom: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
Of course this has to be treated as Alpha version since it has gone through limited testing.&amp;nbsp;If you have blind trust in executables supplied from any person, and courageous enough to test out new things, you can try the application&amp;nbsp;&lt;a href="https://docs.google.com/open?id=0BwXwtj8EVN8pak5pS1RUa1ZDVDA" style="color: #8a3207; text-decoration: none;" target="_blank"&gt;here&lt;/a&gt;.&amp;nbsp;The tool must be tested against sample log files in a&amp;nbsp;local, isolated environment&amp;nbsp;until&amp;nbsp;&lt;span style="text-decoration: underline;"&gt;you&lt;/span&gt;&amp;nbsp;are sure what it does, and how it works. Source code is pretty amateurish, and has to wait for a later date to get released to the wild.&lt;/div&gt;
&lt;/div&gt;
</content><link href="http://crmcog.blogspot.com/2012/09/deciphering-siebel-log-files-is-chore.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/4585436411551787681" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/4585436411551787681" rel="self" type="application/atom+xml"/><link href="http://crmcog.blogspot.com/2012/09/deciphering-siebel-log-files-is-chore.html" rel="alternate" title="Siebel: A Simple Log Analyser" type="text/html"/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3508230947956282102.post-2072978541665509270</id><published>2012-08-13T18:07:00.002+05:30</published><updated>2012-08-13T18:09:11.489+05:30</updated><title type="text">Siebel: Trace Only When Needed</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
"Trace" statements&amp;nbsp;in Siebel script provides a good way to debug and know what indeed is going on in the background. It is common enough to use the following statements to do debugging in scripts:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
TheApplication().TraceOn("c:\trace.txt", "Allocation", "All");&lt;br /&gt;
...&lt;br /&gt;
...&lt;br /&gt;
TheApplication().Trace("Committed to the change " + rowId);&lt;br /&gt;
...&lt;br /&gt;
TheApplication().TraceOff();&lt;/blockquote&gt;
While this is easy enough,&amp;nbsp;an additional flexibility to trace only when required&amp;nbsp;works out better.&amp;nbsp;This can be easily accomplished using&amp;nbsp;VB Script (not Siebel, stand-alone).&lt;br /&gt;
&lt;br /&gt;
1. Open&amp;nbsp;Notepad and type the following lines&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
'Reference SiebelApplication object&lt;br /&gt;
&lt;br /&gt;
Set oSiebelApp = CreateObject("TWSiebel.SiebelWebApplication.1")&lt;br /&gt;
&lt;br /&gt;
'Start tracing with appropriate parameters. Uncomment one of the options&lt;br /&gt;
oSiebelApp.TraceOn "C:\sbl-trace.txt", "Allocation", "all"&lt;br /&gt;
'oSiebelApp.TraceOn "C:\sbl-sql-trace.txt", "sql", "all"&lt;br /&gt;
&lt;br /&gt;
'Continue tracing until stopped&lt;br /&gt;
set wshell = CreateObject("Wscript.Shell")&lt;br /&gt;
wshell.Run ("%comspec% /c title COGSiebelLog &amp;amp; echo Tracing in Siebel is currently on. &amp;amp; pause"), 1, true&lt;br /&gt;
&lt;br /&gt;
'Stop trace and destroy object&lt;br /&gt;
oSiebelApp.TraceOff&lt;br /&gt;
set wshell = Nothing&lt;/blockquote&gt;
2. Save the file and close it (assume the file is called "COGSiebelLog.vbs")&lt;br /&gt;
3. Open Siebel client as always, navigate to the specific screen of interest&lt;br /&gt;
4. Double click on the VBS file to run the script&lt;br /&gt;
5. Perform the transaction that needs to be traced, hit 'Enter' in the command prompt of the running script after the transaction&lt;br /&gt;
&lt;br /&gt;
You will find that the trace happens only when the VB script is running. You would still need to have 'Trace' statements in the script for any custom tracing though. A similar approach can be applied for SQL tracing as well (refer to the commented line in the above script).&lt;/div&gt;
</content><link href="http://crmcog.blogspot.com/2012/08/siebel-trace-only-when-needed.html#comment-form" rel="replies" title="1 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/2072978541665509270" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/2072978541665509270" rel="self" type="application/atom+xml"/><link href="http://crmcog.blogspot.com/2012/08/siebel-trace-only-when-needed.html" rel="alternate" title="Siebel: Trace Only When Needed" type="text/html"/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3508230947956282102.post-7858183860683371359</id><published>2012-06-03T16:01:00.000+05:30</published><updated>2012-06-03T16:08:50.374+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="product-opinion"/><category scheme="http://www.blogger.com/atom/ns#" term="x2engine"/><title type="text">x2engine: A Good Lead Management Tool</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
Readers would have kindly (or otherwise) taken note that my views of the CRM products are narrow, immature, and hurried at best. I want to create more disruption by yet another tool/product, and pray I will not meet anyone really angry on the way to office.&lt;br /&gt;
&lt;br /&gt;
This time, I will reverse the order - just for the fun of it.&lt;br /&gt;
&lt;br /&gt;
&lt;h3 style="text-align: left;"&gt;


&lt;span style="font-size: large;"&gt;Summary&lt;/span&gt;&lt;/h3&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;+ A good CRM product with lot of potential&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;+&amp;nbsp;Nicely done integrated interface, with lesser prompts to navigate throughout&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;+ Integrated collaboration features including message board, chat, forums&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;+ Easy drag &amp;amp; drop development, ala Sugar CRM and the likes&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;+ Open source [BSD license]&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;+ iPad ready :) - well, this from the marketing material. Can't test this unless some kind soul sponsors an iPad for me&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;++ Support for INR. Truly, I was left flabbergasted&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;- Limited feature set - targeted at lead management. Can only guess that the core industry support will find its way if the product survives for a few years&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;- UI needs some getting used to (notice the bottom-most links for History, Actions etc), and I was far from delighted to scroll up and down when I click something&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7an0N-VRMBhrDC1RVnqHLkOzwlOdZtQjLDnnRK1gv2D55cMsnYgXn8eBT96bcF1VZhb4w6_9sxMB0z8aDGqRAJg2xj0O3gy-5vBhDebDsOl2sZt7wc0OWBZ4NqzGYNeTYNwqnbzM7oxo/s1600/ss-ui-1.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="195" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7an0N-VRMBhrDC1RVnqHLkOzwlOdZtQjLDnnRK1gv2D55cMsnYgXn8eBT96bcF1VZhb4w6_9sxMB0z8aDGqRAJg2xj0O3gy-5vBhDebDsOl2sZt7wc0OWBZ4NqzGYNeTYNwqnbzM7oxo/s320/ss-ui-1.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;- Some of the features appeared buggy on my computer, nothing that dedicated support or my own tinkering couldn't solve (no harm in boasting about that anyway)&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Since it is open source, and the development team kindly provides a demo version and a trial version to find out more, the following is of real interest only to lazy people.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Now for some details.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h3 style="text-align: left;"&gt;


&lt;/h3&gt;
&lt;h3&gt;


&lt;span style="font-size: large;"&gt;Technology, Installation and Works&lt;/span&gt;&lt;/h3&gt;
&lt;div&gt;
&lt;span style="font-size: small; font-weight: normal;"&gt;x2engine uses PHP, works on a standard LAMP/WAMP stack. &lt;a href="http://www.xampp.org/" target="_blank"&gt;XAMPP&lt;/a&gt; is a good place to start if you are completely new, or if you don't want to invest lot of time in tweaking tens of configuration files.The installation itself is a breeze, a trusty old install.php takes care of everything, provided you already have a DB user and schema created. I was not too impressed with click-click installs until I came across another CRM product with a really complex list of instructions to setup (another story for another day). The product uses Yii PHP framework for what it's worth, and clearly I am not spending enough time to understand PHP frameworks a bit more.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-size: small; font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h3 style="text-align: left;"&gt;


&lt;span style="font-size: large;"&gt;Features&lt;/span&gt;&lt;/h3&gt;
&lt;div&gt;
Clearly, the company does not intend to throw all features under the sun in this product - their words, not mine. The core functionality is around lead management, and it sticks to the core. &amp;nbsp;The features don't get in the way, and enable users to concentrate on their business. However, this may also imply extensive customization even if you are a mid-segment business with slightly complex processes. The little things in the application are surely the highlights:&lt;/div&gt;
&lt;div&gt;
&lt;ul style="text-align: left;"&gt;
&lt;li&gt;Having an integrated screen where you can subscribe to a contact, lead (Chatter!), or chat with your fellow reps (new Chatter!)&lt;/li&gt;
&lt;li&gt;Promote a contact and make her watchable at the click of a button&lt;/li&gt;
&lt;li&gt;Search encompassing all entities&lt;/li&gt;
&lt;li&gt;Ability to see others activities so that you are well prepared to blame them at any time&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h3 style="text-align: left;"&gt;


&lt;span style="font-size: large;"&gt;Usability&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;div&gt;
x2engine is easy-to-use, does not require complex navigation through every link to gain access to data, and tries to do a lot of things in one screen. If you are left wondering - yes, all these are really good things for the users (those are the pesky people who use the application).&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgo2Mnf-BdUTFjpu0E765jByZop10EGNo89I-gzOWVRs-L38hKtsZScKaOU_rvRa1wY3a_ybzVG5m37JwTkAy3pazSGXkYlsPAJhO2HISpywPQrJqS3onW7b0e_jh6K-j0aZ3k4SAw_X9c/s1600/ss-xe2crm-ui-2.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="159" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgo2Mnf-BdUTFjpu0E765jByZop10EGNo89I-gzOWVRs-L38hKtsZScKaOU_rvRa1wY3a_ybzVG5m37JwTkAy3pazSGXkYlsPAJhO2HISpywPQrJqS3onW7b0e_jh6K-j0aZ3k4SAw_X9c/s320/ss-xe2crm-ui-2.JPG" width="320" /&gt;&lt;/a&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFvP3Ln6k1rQTR6Q47-iT8jf1xQBBzXOASC16iZCM-CF499pxgnlkBXu2w4LDpBv-aqQGQu9gRa0gJmxjqD6cBLLy1_uOWbuTiUrpKNDQ3T8U2gcMTh_mUbPwZQm7tpRO_-zYVro1lSns/s1600/ss-xe2crm-ui-3.JPG" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="100" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFvP3Ln6k1rQTR6Q47-iT8jf1xQBBzXOASC16iZCM-CF499pxgnlkBXu2w4LDpBv-aqQGQu9gRa0gJmxjqD6cBLLy1_uOWbuTiUrpKNDQ3T8U2gcMTh_mUbPwZQm7tpRO_-zYVro1lSns/s200/ss-xe2crm-ui-3.JPG" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFvP3Ln6k1rQTR6Q47-iT8jf1xQBBzXOASC16iZCM-CF499pxgnlkBXu2w4LDpBv-aqQGQu9gRa0gJmxjqD6cBLLy1_uOWbuTiUrpKNDQ3T8U2gcMTh_mUbPwZQm7tpRO_-zYVro1lSns/s1600/ss-xe2crm-ui-3.JPG" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
In-place edits is the most I missed, the UI is old school for most part though some of the actions like emailing, and display of allowed state transitions are intuitive.&lt;/div&gt;
&lt;div&gt;
Performance of the application has been indicated as a plus point in the marking materials, but I did not see any reason to get excited. On my machine (which is antique btw), the performance was comparable to Sugar CRM. Demo version was a real improvement, I have to find out where the configuration was not ideal (clearly, throwing more hardware at it is not the solution :).&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h3 style="text-align: left;"&gt;


Configuration&lt;/h3&gt;
&lt;div&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_IhFYxC6keZ7pXPjGZEfVPVuvik0JdkAqWoTz4whx8v4Dqvff1Cyd-XEfOXRM4mmOkw1FOxOOGWFH2Q0u2nhJTI5Uj_yfK4I43Py2VFsklZLZgoiQ1o_ST7glCJQlc7WR4l3a7ZmoVtM/s1600/ss-xe2crm-ui-5.JPG" imageanchor="1" style="clear: right; display: inline !important; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;br /&gt;&lt;/a&gt;The product allows power users or developers to configure everything of interest through drag &amp;amp; drop functionality.&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFH1vBGUkjIM6YEz9UsNwKjMmmlr6APLMoVUUBz-jK2cUtZcaFVLRMZIr0v7GLGv33jvaMz4TJf6QO6wTSbJ7oEUIVvfSO9poXS4qq45Xsal2v_UcX8yT8w59BaZfFwrUPMD-76QJs0q8/s1600/ss-xe2crm-ui-4.JPG" imageanchor="1" style="clear: left; display: inline !important; margin-bottom: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="202" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFH1vBGUkjIM6YEz9UsNwKjMmmlr6APLMoVUUBz-jK2cUtZcaFVLRMZIr0v7GLGv33jvaMz4TJf6QO6wTSbJ7oEUIVvfSO9poXS4qq45Xsal2v_UcX8yT8w59BaZfFwrUPMD-76QJs0q8/s400/ss-xe2crm-ui-4.JPG" width="400" /&gt;&lt;/a&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_IhFYxC6keZ7pXPjGZEfVPVuvik0JdkAqWoTz4whx8v4Dqvff1Cyd-XEfOXRM4mmOkw1FOxOOGWFH2Q0u2nhJTI5Uj_yfK4I43Py2VFsklZLZgoiQ1o_ST7glCJQlc7WR4l3a7ZmoVtM/s1600/ss-xe2crm-ui-5.JPG" imageanchor="1" style="clear: right; display: inline !important; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="101" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_IhFYxC6keZ7pXPjGZEfVPVuvik0JdkAqWoTz4whx8v4Dqvff1Cyd-XEfOXRM4mmOkw1FOxOOGWFH2Q0u2nhJTI5Uj_yfK4I43Py2VFsklZLZgoiQ1o_ST7glCJQlc7WR4l3a7ZmoVtM/s200/ss-xe2crm-ui-5.JPG" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
The drag and drop of fields is impressive, and you are not expected to stick to ONE layout. The customization options are fairly limited. Other than adding fields and UI elements, you could define state models, basic assignment rules and do some Google integration.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
That's about it for now folks. I am sure you are enthused about this a bit - so check out more at&amp;nbsp;&lt;a href="http://www.x2engine.com/live-demo-server/"&gt;http://www.x2engine.com/live-demo-server/&lt;/a&gt;, or&amp;nbsp;&lt;a href="http://www.x2engine.com/download/" target="_blank"&gt;download&lt;/a&gt;&amp;nbsp;and do your own setup.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;</content><link href="http://crmcog.blogspot.com/2012/06/x2engine-good-lead-management-tool.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/7858183860683371359" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/7858183860683371359" rel="self" type="application/atom+xml"/><link href="http://crmcog.blogspot.com/2012/06/x2engine-good-lead-management-tool.html" rel="alternate" title="x2engine: A Good Lead Management Tool" type="text/html"/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7an0N-VRMBhrDC1RVnqHLkOzwlOdZtQjLDnnRK1gv2D55cMsnYgXn8eBT96bcF1VZhb4w6_9sxMB0z8aDGqRAJg2xj0O3gy-5vBhDebDsOl2sZt7wc0OWBZ4NqzGYNeTYNwqnbzM7oxo/s72-c/ss-ui-1.PNG" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3508230947956282102.post-4412523569023119980</id><published>2012-03-20T13:10:00.001+05:30</published><updated>2012-06-03T13:10:01.536+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="process"/><category scheme="http://www.blogger.com/atom/ns#" term="requirements"/><title type="text">Documenting Requirements - A Few Thoughts</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
Even after being in development projects for more than a few years now, I am always not far from being awe-struck at every requirement phase we have had (well, almost). The process of gathering and validating requirements, and converting everything to specs that a developer can understand, and maintaining traceability through all the rewrites and changes - are the most critical phases that always excite and worry me. Documenting all these in a language that finds common acceptance across user groups (&amp;amp; probably, across cultures) is, well, crucial to say the least (ALM tools not withstanding). &lt;br /&gt;
&lt;div&gt;
How well do you indeed document requirements? There may be entire books written on the subject, but where should one start? The following summary and lists should help one think in the right direction. A lot of it seems direct and too easy - I would think so too, but there have been instances where I was too busy to take note in a few of the projects.&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Structure and Language&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
Two things that cause the max impact to the requirement document, and simple in hind-sight. The structure is fairly straight forward - you just group user requirements into buckets, and order it in a way that makes sense to the stakeholders. &lt;/div&gt;
&lt;div&gt;
Evaluate each statement of a requirement against the following list to apply the "few good rules".&lt;/div&gt;
&lt;ul style="text-align: left;"&gt;
&lt;li&gt;Correct: Speaks for itself, doesn't it?&lt;/li&gt;
&lt;li&gt;Complete: Should not be open-ended, and should carry forward on its own weight to functional spec &lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;div style="text-align: left;"&gt;
Avoid use of "including ...", "not limited to "&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;div style="text-align: left;"&gt;
Don't make subjective or vague statements&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;div style="text-align: left;"&gt;
Avoid use of 'TBD', but do note that this is not disallowed&lt;/div&gt;
&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;div style="text-align: left;"&gt;
Clearly state factors that have caused the exercising of that option&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;div style="text-align: left;"&gt;
Describe the conditions that will remove TBD&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;ul style="text-align: left;"&gt;
&lt;li&gt;Consistent: Consistency in description, language, and functionality expectations&lt;/li&gt;
&lt;li&gt;Bounded: Measurable conditions have to be described and relative statements have to be avoided &lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;"System shall provide response time less than or equal to 5 seconds" is better than "System shall provide quick response times"&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;ul style="text-align: left;"&gt;
&lt;li&gt;Unambiguous &lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;You cannot have a requirement listed but at the same time excluding from scope&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
While the use of language becomes a hot debate in some circles, I try to apply simpler rules:&lt;/div&gt;
&lt;ul style="text-align: left;"&gt;
&lt;li&gt;Use of "shall" (vs. use of "will")&lt;/li&gt;
&lt;li&gt;Use of definitive sentences that are deemed complete. Do not use "etc.", "including ... " and such terminologies which leave things to interpretation or imagination&lt;/li&gt;
&lt;li&gt;Avoid usage of double negatives in a sentence&lt;/li&gt;
&lt;li&gt;Simple to understand and well articulated&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
Each requirement should be unique in the set of requirements identified for a project or a program, and be identifiable as such. Inputs from all stakeholders - business and technical teams, and consideration of external environmental factors (regulatory policies, organization strategy etc.) are equally necessary. At the same time do not include designs to address a problem or solutions in the requirement document.&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Handling Changes&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
This is a separate section since this is what we dislike the most. While change management by itself can be a clearly marked process, do you articulate on how to carry forward these changes to the requirements documentation? An indication of versioning of requirements document, and scoping of individual projects that align with the overall requirements go a long way in bringing enough clarity here.&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Important Sections&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
While customers are free to exercise right on the template structure, it is imperative for us to make sure it has a place for some important sections.&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;ul style="text-align: left;"&gt;
&lt;li&gt;Business Rules and Business process diagrams: While not separate sections, making them part of the core requirements, or wherever needed, will help everyone to stay on the same page. Especially in case of COTS products, implementing business rules will demand a big share of development effort&lt;/li&gt;
&lt;li&gt;Non Functional requirements: Everything that is deemed important other than the core business requirements - like performance of the application, security requirements, usability requirements and supportability requirements have to be articulated. Even if the customer does not have this practice, it is never late to educate them and include such requirements in order to bring in enough clarity to business expectations&lt;/li&gt;
&lt;li&gt;Regulatory requirements: This is applicable and really important for certain industries like Life Sciences that are subject to intense auditing. For a newly proposed system, or even for changes to an existing system, capture and document requirements around regulatory considerations&lt;/li&gt;
&lt;li&gt;Assumptions: Clearly categorise assumptions while documenting them&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
The above points should act as a starter, but can no way be deemed comprehensive. Documentation standards available from IEEE standards talk about some of these and much more - for software requirements and specs. Evaluate them if you have access to the artifacts - that will be time well spent on establishing standards ourselves. Two of the documents that I liked while browsing through: &lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;ul style="text-align: left;"&gt;
&lt;li&gt;830-1998: IEEE Recommended Practice for Software Requirements Specifications. &lt;a href="http://ieeexplore.ieee.org/servlet/opac?punumber=5841"&gt;http://ieeexplore.ieee.org/servlet/opac?punumber=5841&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;1233-1998: IEEE Guide for Developing System Requirements Specifications. &lt;a href="http://ieeexplore.ieee.org/servlet/opac?punumber=5982"&gt;http://ieeexplore.ieee.org/servlet/opac?punumber=5982&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;/div&gt;</content><link href="http://crmcog.blogspot.com/2012/03/documenting-requirements-few-thoughts.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/4412523569023119980" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/4412523569023119980" rel="self" type="application/atom+xml"/><link href="http://crmcog.blogspot.com/2012/03/documenting-requirements-few-thoughts.html" rel="alternate" title="Documenting Requirements - A Few Thoughts" type="text/html"/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3508230947956282102.post-8693640887117209584</id><published>2012-02-04T22:12:00.000+05:30</published><updated>2012-02-04T22:12:21.093+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="crm"/><title type="text">Top CRM Blogs</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Chris Bucholtz has listed the &lt;a href="http://www.crmoutsiders.com/2012/01/09/the-top-20-crm-blogs-of-2011/?utm_source=rss&amp;amp;utm_medium=rss&amp;amp;utm_campaign=the-top-20-crm-blogs-of-2011" target="_blank"&gt;top CRM blogs of 2011&lt;/a&gt;. Well, as you can make out from this blog - I am not a good creator, but do read up from time to time. Even if you don't care about the blogs listed here, you should go through them at least four times in four weeks before outright rejecting any of them. They take up precious little time, but have the potential to give you something new (in CRM ofcourse).&lt;br /&gt;
&lt;br /&gt;
My own list of sites (note - not &lt;i&gt;only&lt;/i&gt; blogs) is not as lengthy, but does keep me occupied for a couple of hours in the week.&lt;br /&gt;
&lt;br /&gt;
&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;a href="http://the56group.typepad.com/" target="_blank"&gt;Paul Greenberg's blog:&lt;/a&gt; Though Mr. Greenberg dropped the organization I work for in this year's CRM idol :). His posts are informative, full of CRM with a touch of humor&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.enterpriseirregulars.com/" target="_blank"&gt;Enterprise Irregulars&lt;/a&gt;: I am fairly regular on this site (through my reader). There are a bunch of really smart people who talk about a lot of things (not CRM, or IT alone)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.destinationcrm.com/" target="_blank"&gt;DestinationCRM&lt;/a&gt;: Well, this looks like a 90s magazine, and website. But, is a good source of information&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.crmbuyer.com/" target="_blank"&gt;CRM Outsiders&lt;/a&gt;: This started more because of my interest in SugarCRM, but has continued ever since&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.crm-daily.com/" target="_blank"&gt;CRM Daily&lt;/a&gt;: A few good posts about CRM information can make one's day&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;What do you think, are you a regular anywhere else!?&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</content><link href="http://crmcog.blogspot.com/2012/02/top-crm-blogs.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/8693640887117209584" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/8693640887117209584" rel="self" type="application/atom+xml"/><link href="http://crmcog.blogspot.com/2012/02/top-crm-blogs.html" rel="alternate" title="Top CRM Blogs" type="text/html"/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3508230947956282102.post-3984601471714450874</id><published>2011-08-31T19:45:00.001+05:30</published><updated>2011-08-31T19:49:09.913+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="crm"/><category scheme="http://www.blogger.com/atom/ns#" term="vtiger"/><title type="text">vTiger - A Serious Open Source CRM Contender</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: left;"&gt;I had been intending to explore vTiger CRM for sometime now, and am glad I finally came to it. vTiger CRM has been out there for a while, and I had been hearing about it everytime I hear "CRM" and "open source" in one sentence. What follows are bits and pieces of my first impression, a few cool things and some not-so-cool stuff.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-size: large;"&gt;Product and the Company &lt;/span&gt;&lt;/div&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;vTiger is a small company, one of the two offices is in my own home town (= Bangalore, yeah!). The product is based on the LAMP/WAMP stack, and guess what, Sugar CRM. One of those instances of open source projects introducing competing products? Yes, this is (or can be) good for the customer, but do I want to see this as the Sugar CRM CEO? :). Some of us, open-source proponents, might want to think that this leads to a better all-round product, since there should be mutual learning for the two streams!&amp;nbsp;&lt;/li&gt;
&lt;li&gt;The entire product is open source, thankfully there are no "different editions" (yet) &lt;/li&gt;
&lt;li&gt; While going through the various screens, one cannot help but compare how this stacks with Sugar. Since vTiger exposes all functionality, it has an unfair advantage in some of the below points (I only have access to SugarCE)&lt;/li&gt;
&lt;li&gt;While the CRM product is completely open source and available for download, vTiger can also be &lt;a href="http://www.vtiger.com/vtiger-crm-demo?task=view"&gt;tried online&lt;/a&gt;. There is a on-demand version available for $12/user (&lt;a href="http://www.vtiger.com/crmproducts/ondemand#pricing"&gt;check price list&lt;/a&gt;). Again, no editions, no limits - except for space - 5GB per client. &lt;/li&gt;
&lt;li&gt;The overall product is polished, and works well. I liked the UI finish and overall functionality better than Sugar&lt;/li&gt;
&lt;/ul&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-size: large;"&gt;Features and Functionality&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;ul style="text-align: left;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1L-N8-BSqJ-A45mvIWJoNrkIqdgYjTCjSaLtTVBy6N6RdvDMW4heNxECQmWc7KyWh39VQT8xT0dJ0t78L_n37ranU5uSP3TpUVnYB64pWZN81UlD74G9S99ZxxU-OSVY7xQXeZc6hbg8/s1600/vtiger-home.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1L-N8-BSqJ-A45mvIWJoNrkIqdgYjTCjSaLtTVBy6N6RdvDMW4heNxECQmWc7KyWh39VQT8xT0dJ0t78L_n37ranU5uSP3TpUVnYB64pWZN81UlD74G9S99ZxxU-OSVY7xQXeZc6hbg8/s320/vtiger-home.jpg" width="320" /&gt;&lt;/a&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1L-N8-BSqJ-A45mvIWJoNrkIqdgYjTCjSaLtTVBy6N6RdvDMW4heNxECQmWc7KyWh39VQT8xT0dJ0t78L_n37ranU5uSP3TpUVnYB64pWZN81UlD74G9S99ZxxU-OSVY7xQXeZc6hbg8/s1600/vtiger-home.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-left: 1em;"&gt; &lt;/a&gt;
&lt;li&gt;UI is very similar to Sugar, but some of the features are a sure welcome. A brighter UI (with the colour buttons thrown in) is not helpful on its own, but adds to the lustre&lt;/li&gt;
&lt;/ul&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGCOTuPNAqDAzboMaX4Z_kw0sKDy4mxQmP1RSMOLkGmATa7vtCCBR9TUtprk6PMLBY-r3zxjkp80i7c-ozNLCx-SFEbsYV-pED4_ii2bRskxnqtpuGVBBzXk1Vh7Fs2889_3m6Qdqz3o8/s1600/vtiger-account-list.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="182" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGCOTuPNAqDAzboMaX4Z_kw0sKDy4mxQmP1RSMOLkGmATa7vtCCBR9TUtprk6PMLBY-r3zxjkp80i7c-ozNLCx-SFEbsYV-pED4_ii2bRskxnqtpuGVBBzXk1Vh7Fs2889_3m6Qdqz3o8/s320/vtiger-account-list.jpg" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul style="text-align: left;"&gt;&lt;li&gt;Entities like accounts can be assigned to individuals or groups. This is a far cry from person-based/team-based visibility, but still something powerful for small or mid-sized businesses&lt;/li&gt;
&lt;li&gt;As in other web-based CRM products, by default the user lands in the list view. Drilling down on the record will show detailed information for the entity. Associated information (like activities or contacts for the account) do not show up by clicking on another 'tab'. But getting individual entities like activities, contacts by clicking each time is a pain.&lt;/li&gt;
&lt;/ul&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg964JwhNYCQbPAJMwFeLjh6asH8fymuKnXc5lCI5517xS7BlKz9jOAyVqSCsVrKVc-g9_EJ9MXZszVC2lgr1S5o9QGRSEFJ6QwFUlAdI-p4iz9FKOBYEsH4qtiKsaog3MgWQAlotBf2vw/s1600/vtiger-account-assignment.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="183" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg964JwhNYCQbPAJMwFeLjh6asH8fymuKnXc5lCI5517xS7BlKz9jOAyVqSCsVrKVc-g9_EJ9MXZszVC2lgr1S5o9QGRSEFJ6QwFUlAdI-p4iz9FKOBYEsH4qtiKsaog3MgWQAlotBf2vw/s320/vtiger-account-assignment.jpg" width="320" /&gt;&lt;/a&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGCOTuPNAqDAzboMaX4Z_kw0sKDy4mxQmP1RSMOLkGmATa7vtCCBR9TUtprk6PMLBY-r3zxjkp80i7c-ozNLCx-SFEbsYV-pED4_ii2bRskxnqtpuGVBBzXk1Vh7Fs2889_3m6Qdqz3o8/s1600/vtiger-account-list.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="114" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGCOTuPNAqDAzboMaX4Z_kw0sKDy4mxQmP1RSMOLkGmATa7vtCCBR9TUtprk6PMLBY-r3zxjkp80i7c-ozNLCx-SFEbsYV-pED4_ii2bRskxnqtpuGVBBzXk1Vh7Fs2889_3m6Qdqz3o8/s200/vtiger-account-list.jpg" style="cursor: move;" width="200" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEEKOgE1Nt8N8sELAtuQynFUfzeR6BRa6A-UwdcifxVVFO1AWqNuNKNDng3SqkWs7Bec6JIBK99TL8YF2a8iCkh44y5VXlO2veWk0gfw5-BSUipN0huUkCaO-rMcGU61hU7z5Cjp0ZVps/s1600/vtiger-account-tag.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="183" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEEKOgE1Nt8N8sELAtuQynFUfzeR6BRa6A-UwdcifxVVFO1AWqNuNKNDng3SqkWs7Bec6JIBK99TL8YF2a8iCkh44y5VXlO2veWk0gfw5-BSUipN0huUkCaO-rMcGU61hU7z5Cjp0ZVps/s320/vtiger-account-tag.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJL1QKmoUtVsuW_fNF3kJf3mLl2_zoURIx2JUJqIev4utiaupReiRWNA6gm-ggNluHY5WKBCewXt-n6BNXg4bdOxxpvT-seTp00GG9KBo4FeZmiBmbAxVAtAizha30MnEcHfMbSv-HGVM/s1600/vtiger-account-moreinfo.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="113" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJL1QKmoUtVsuW_fNF3kJf3mLl2_zoURIx2JUJqIev4utiaupReiRWNA6gm-ggNluHY5WKBCewXt-n6BNXg4bdOxxpvT-seTp00GG9KBo4FeZmiBmbAxVAtAizha30MnEcHfMbSv-HGVM/s200/vtiger-account-moreinfo.jpg" width="200" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div style="text-align: left;"&gt;&lt;br /&gt;
&lt;ul style="text-align: left;"&gt;&lt;li&gt;An interesting feature is tagging. All entities can be tagged with any custom attributes, and these show up in a 'tag cloud'. Users sure will love this feature, anything to find out 'all accounts that are important for this campaign' in a single click :)&lt;/li&gt;
&lt;/ul&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Users of this application are assigned a role, while roles can have one or more profiles. Access to entity views or the individual fields can be pre-determined&lt;/li&gt;
&lt;/ul&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Analytical reports can be customized by end-user. It kind of provides "actionable-intelligence" since any record in the report can be drilled-down to see more details&lt;/li&gt;
&lt;/ul&gt;&lt;div style="text-align: left;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4DhDhyphenhyphen5-Q691FNj35dEx_7Pb4IGdPRhXWH4X8wmyD5D4ZQ72mL1E1OwONzVbpKYjqtYTs1RrvWPjnAvHhkjYxjIXeRrkGVnSEWAT7P2YbC5vljuXAVZbFzZHEBHi4W9bk-XBksE7hvPQ/s1600/vtiger-analytics-report.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="227" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4DhDhyphenhyphen5-Q691FNj35dEx_7Pb4IGdPRhXWH4X8wmyD5D4ZQ72mL1E1OwONzVbpKYjqtYTs1RrvWPjnAvHhkjYxjIXeRrkGVnSEWAT7P2YbC5vljuXAVZbFzZHEBHi4W9bk-XBksE7hvPQ/s400/vtiger-analytics-report.jpg" style="cursor: move;" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-size: large;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-size: large;"&gt;Development and Maintenance&lt;/span&gt;&lt;/div&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt; As in other web-based CRM systems, vTiger provides an administration screen where UI and fields can be configured. Changing UI and adding new fields is real easy and intuitive&lt;/li&gt;
&lt;/ul&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiPcVQ87bjwpm-RsMz0mhPbSUDdyNBYCimpQ_2mkSJChH1qYN2PUUdwchowcVT78mcFd8zjDX-8OpZPX2H956Rl7jxoXHgViRaJlvza4pypjvfmUxonuEoZI7UzcSi3nCECwu1Cpfr9Ws/s1600/vtiger-settings-layout.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="366" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiPcVQ87bjwpm-RsMz0mhPbSUDdyNBYCimpQ_2mkSJChH1qYN2PUUdwchowcVT78mcFd8zjDX-8OpZPX2H956Rl7jxoXHgViRaJlvza4pypjvfmUxonuEoZI7UzcSi3nCECwu1Cpfr9Ws/s640/vtiger-settings-layout.jpg" style="cursor: move;" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;ul style="text-align: left;"&gt;&lt;li&gt;One of the interesting features is the ability to take backups. You can schedule a backup to be taken locally (where the server runs), or to any location through FTP&lt;/li&gt;
&lt;li&gt;There is also a provision to build workflows. OOB you get to do a few things like create an activity or send an email, and is also extensible. Workflows can run immediately upon satisfying the given criteria or wait for a pre-configured/customizable time to get initiated&lt;/li&gt;
&lt;li&gt;vTiger is extensible like Sugar, and getting new modules (mostly) is as easy as importing the zip file within the application. vTiger has its own &lt;a href="http://vtiger.com/market-place"&gt;market place&lt;/a&gt;, contributions have been mostly from the product development team. Some of the extensions sure seem interesting (keep a look out here for more :)&lt;/li&gt;
&lt;/ul&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: left;"&gt;With continued development, vTiger sure is set to become more interesting. Sufficient to get you to try it? - head on over to &lt;a href="http://www.vtiger.com/"&gt;vTiger site&lt;/a&gt; and try the click-click installation or the demo!&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link href="http://crmcog.blogspot.com/2011/08/vtiger-serious-open-source-crm.html#comment-form" rel="replies" title="10 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/3984601471714450874" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/3984601471714450874" rel="self" type="application/atom+xml"/><link href="http://crmcog.blogspot.com/2011/08/vtiger-serious-open-source-crm.html" rel="alternate" title="vTiger - A Serious Open Source CRM Contender" type="text/html"/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1L-N8-BSqJ-A45mvIWJoNrkIqdgYjTCjSaLtTVBy6N6RdvDMW4heNxECQmWc7KyWh39VQT8xT0dJ0t78L_n37ranU5uSP3TpUVnYB64pWZN81UlD74G9S99ZxxU-OSVY7xQXeZc6hbg8/s72-c/vtiger-home.jpg" width="72"/><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3508230947956282102.post-5174810242504946807</id><published>2011-03-14T23:01:00.002+05:30</published><updated>2011-03-14T23:03:48.519+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="sugarcrm"/><title type="text">SugarCRM: Working with Google Maps</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;There was a time when if you had to show how Siebel integrates seamlessly with the world outside, it was considered cool enough to create a mash-up with Google maps. Sad to say, I feel stuck in that time warp sometimes and this post actually confirms that. &amp;nbsp;The premise is simple - integrate with Google maps as seamlessly as you can, the problem simpler - I am still on page 21 of the PHP manual. That brings us to the next best thing - &lt;a href="http://www.sugarforge.org/projects/jjwgooglemaps/" target="_blank"&gt;JJWGoogleMaps&lt;/a&gt;! Again, the best screenshots had been provided by the products that charge a fee (e.g &lt;a href="http://www.sugarexchange.com/product_details.php?product=668" target="_blank"&gt;this&lt;/a&gt;), they simply would have to wait :).&lt;br /&gt;
The steps to integrate maps using this connector is simple/not simple as it is demonstrated below:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;You install module in the standard fashion to see a new 'Maps' module showing up in the main menu&lt;/li&gt;
&lt;li&gt;Navigate to the Maps screen and select the entity to which you want to map&amp;nbsp;&lt;img alt="" height="368" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvTBTXAwcCFjAcQ-GLSeSegoPXAc3Y656MR7Cb6bhbFNEaNPoyxdVN0wYnzoGU1pt3LKkCBoX8eQHq_6DCrQ0_vs0TrPiMwTrGV2yjq6MibEN55steNEhMSmnKtex7NZ2f5LsDGJ3NG8s/s640/sugarcrm-map-0.JPG" style="vertical-align: top;" width="640" /&gt;&lt;/li&gt;
&lt;li&gt;Select an existing map / create a new map&amp;nbsp;&lt;img alt="" height="368" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBFkATE8VrimACNcwAOR5gYyZVnTr5E58v6XedQJlPN4HfGRYUvVvosefbqJaTw1Mats8AiQjKDcQcZ5TOTEKYxsYxA8gi5etAdlXQ94iR3B4RstXa7d9YyA9mJ09hS5j_voZZleftoJo/s640/sugarcrm-map-1.JPG" style="vertical-align: top;" width="640" /&gt;&lt;/li&gt;
&lt;li&gt;If you have not already done that, click on 'Geocode Addresses' in the Maps module. This will fetch geocodes for the addresses entered in Sugar CRM&lt;/li&gt;
&lt;li&gt;Finally, see the map in Maps screen and have a blast (while you can)&amp;nbsp;&lt;img alt="" height="368" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJw7IreHiaI7PgvFoRXEuyJYTgKC0rq5MRjgEoEQe-0JswVX6uhNvZl8EsZXYdkGShtnEmLbEdoJsbU88GPi0OVm-jn8IqnE7I1MsxQPPs5PL7rVLQgkRjsPzwCa0JckrC-DCxpX-5Nug/s640/sugarcrm-map-2.JPG" style="vertical-align: top;" width="640" /&gt;&lt;/li&gt;
&lt;li&gt;The catch before you begin the party - don't forget to check the statistics and keep your requests within limit of 2500 requests/day. Though this module claims to cache the geocoded addresses to limit these requests, you cannot start testing it prior to a customer demo (to avoid effects of Murphy's 101st law)&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;</content><link href="http://crmcog.blogspot.com/2011/03/sugarcrm-working-with-google-maps.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/5174810242504946807" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/5174810242504946807" rel="self" type="application/atom+xml"/><link href="http://crmcog.blogspot.com/2011/03/sugarcrm-working-with-google-maps.html" rel="alternate" title="SugarCRM: Working with Google Maps" type="text/html"/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvTBTXAwcCFjAcQ-GLSeSegoPXAc3Y656MR7Cb6bhbFNEaNPoyxdVN0wYnzoGU1pt3LKkCBoX8eQHq_6DCrQ0_vs0TrPiMwTrGV2yjq6MibEN55steNEhMSmnKtex7NZ2f5LsDGJ3NG8s/s72-c/sugarcrm-map-0.JPG" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3508230947956282102.post-8706075317495260788</id><published>2011-03-14T22:35:00.003+05:30</published><updated>2011-03-14T23:05:43.245+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="sugarcrm"/><title type="text">SugarCRM: Being Social</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;br /&gt;
SugarCRM is one of the few CRM companies that made all the right noises before Social CRM was known by that name. As I started looking into what the product can do, it was natural enough to have high expectations. Now that I have touched the surface, you will get a chance to sneak-peak as well.&lt;br /&gt;
Social CRM, as they say, is customer's territory. As the fact goes, the customer does not give a damn about your beautiful website and the associated paraphernalia. So being Social has been to a large extent providing seamless ways of integrating the product with the external websites that are in the business of getting people to socialize. If the product can achieve that without inflicting pain on its users, it is indeed a welcome development.&lt;br /&gt;
&lt;br /&gt;
I can confidently say Sugar CRM does not disappoint one, although I hasten to add it will not pass in flying colours either. I would have to warn you - all my experiments are confined to &amp;nbsp;the 'community edition' version. To do justice I would have to go through the enterprise/standard editions one day, but I am not doing any implementation now and I am too lazy to follow-up for a trial version :). Here follows some tidbits:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;LinkedIn integration stands out indisputably, to such extent that I wondered whether there is any advertising revenue involved! Accounts within Sugar CRM are easily located, and can be processed through whatever LinkedIn offers&amp;nbsp;&lt;img alt="" height="368" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXKFMdXvEmGInhzP_m1N6K9HXNjkIm4pxP-U46k6f0mJB3LHpfBXpJV-xlHcJ1BzoWF5FGgb8ABfMr6tvU6XnViKY3kknwb5vcE_NgV-gzC5ULOLRT1ERO64P9cPDKhJ-rzHIhrlx4FGM/s640/sugarcrm-social-linkedin.JPG" style="vertical-align: top;" width="640" /&gt;&lt;/li&gt;
&lt;li&gt;There was a lot of gaga about the Twitter integration sometime back. Was quite dismayed to see that it is only present in higher editions. However I &lt;a href="http://www.sugarexchange.com/product_details.php?product=593" target="_blank"&gt;did find something&lt;/a&gt; on Sugar Exchange which does exactly that, except that it just didn't do it. Well I am quite proud of writing a Twitter connector in Siebel, one of these days I should be repeating that here - with far better customization capabilities&lt;/li&gt;
&lt;li&gt;As one can expect on an open forum, Sugar Exchange does offer connectors to a few of the well known 'social' platforms out there. But they seem to be nothing but 'connectors' or connecting frameworks, with all the heavy lifting yet to be done to have something that will be of some use. One of the examples I quote is the &lt;a href="http://www.sugarexchange.com/product_details.php?product=983" target="_blank"&gt;Jigsaw connector&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;I tend to think about (&amp;amp; catalog) the 'social crm' part separate from the 'enterprise 2.0' part (sorry, Oracle Social CRM). &lt;a href="http://www.sugarexchange.com/product_details.php?product=931" target="_blank"&gt;Integration with Box.net&lt;/a&gt; tends to fall into both spaces, and it has a free connector for higher editions (what is with these guys and editions - not enough money in open source, sigh!). But the best and simple example is the Sugar Feed dashlet on the home page. It lets the user type a message and let the world (his world) see - ain't that cool? In the below screenshot you see the user feed below the blog feed.&lt;img alt="" height="368" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidHe8rJqDAQmRDxH5pbDFB4rfsjUH-odS0ls4SkCbN-TT_rGsPwSA7_4W3apU5UkisokKf0qJNAUcb568JnbPiib9g3ZwsljPIDxk37p_XKqRH7x16AgqtvQ8JjcXVmi3SH31mt-6adiA/s640/sugarcrm-social-homepage.JPG" style="vertical-align: top;" width="640" /&gt;&lt;/li&gt;
&lt;li&gt;There are also more than a few small players which provide enterprise 2.0 capabilities, and have provided connectors to them. For e.g &lt;a href="http://www.sugarexchange.com/product_details.php?product=719" target="_blank"&gt;Broadchoice&lt;/a&gt;, and&amp;nbsp;&lt;a href="http://www.sugarexchange.com/product_details.php?product=977" target="_blank"&gt;Quontext&lt;/a&gt;, but did not interest me enough to 'actually' test them&lt;/li&gt;
&lt;/ul&gt;That is it for now I am afraid, watch this space to not see anything radical happening to Sugar CRM implementation space (you didn't miss the NOT there, did you?).&lt;/div&gt;</content><link href="http://crmcog.blogspot.com/2011/03/sugarcrm-being-social.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/8706075317495260788" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/8706075317495260788" rel="self" type="application/atom+xml"/><link href="http://crmcog.blogspot.com/2011/03/sugarcrm-being-social.html" rel="alternate" title="SugarCRM: Being Social" type="text/html"/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXKFMdXvEmGInhzP_m1N6K9HXNjkIm4pxP-U46k6f0mJB3LHpfBXpJV-xlHcJ1BzoWF5FGgb8ABfMr6tvU6XnViKY3kknwb5vcE_NgV-gzC5ULOLRT1ERO64P9cPDKhJ-rzHIhrlx4FGM/s72-c/sugarcrm-social-linkedin.JPG" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3508230947956282102.post-7484161106048447765</id><published>2011-03-07T00:00:00.001+05:30</published><updated>2011-03-07T00:01:18.749+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="report"/><category scheme="http://www.blogger.com/atom/ns#" term="sugarcrm"/><title type="text">SugarCRM: Reporting</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;One big thing for any CRM application (or any enterprise application - sooner or later) will be the reporting capabilities of a given application. This is where custom applications often suffer, while packaged applications exhibit a hue of colours denoting their respective capabilities. Siebel (there we go again!) was heavily invested into Actuate reporting capabilities for online transactional (a.k.a OLTP) reporting. More recently we have BI Publisher replacing Actuate, the pain &amp;amp; pleasure to implement that is a story for another day. Siebel Analytics (alias Oracle Business Intelligence - OBI) has been the defacto application for analytical reporting (a.k.a OLAP reporting). Both Actuate (now BIP) and OBI are tightly integrated with the Siebel CRM application, which provides a strategic advantage to get started with reports that make sense quickly.&lt;br /&gt;
But, we are here to discuss more about how reporting plays a role in SugarCRM. Sugar does offer a reporting module, but that is limited to professional/enterprise versions, so it doesn't exist as far as I am concerned. When I started looking out for what can be done about the problem, I realized once more the open-source advantage. Almost nothing (barring my technical competence or lack thereof) will bar me from getting any BI suite with decent enough APIs to integrate with the Sugar CRM application. The whole problem can now be percolated to two major steps:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;First, an application that can enhance/provide good reporting capabilities, and hooks/libraries to integrate. Since it makes obvious sense to first check out free (freer as in you get the code) software, the list is not bad at all.&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Jasper reports - transactional/analytical &lt;/li&gt;
&lt;li&gt;Eclipse BIRT - carried forward in association with Actuate, transactiona/analytical reporting&lt;/li&gt;
&lt;li&gt;Spago BI - if not anything, the website is quite well done. Again, provides transactional and analytical reporting capabilities&lt;/li&gt;
&lt;li&gt;Rapid Miner&lt;/li&gt;
&lt;li&gt;Pentaho&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;li&gt;Next, apply the criteria of integration with SugarCRM, which is a PHP based application. &lt;/li&gt;
&lt;/ol&gt;Now, for the actual decisions to address these two problems. As far as I am concerned, any BI suite will do if it lets me do things easily and produces beautiful reports. Due to my limited background in BI, it is a no-brainer - I have to give a bigger weightage to the next point.&lt;br /&gt;
The second problem about integration was supposedly big now. Almost all reporting applications are java-based, and integration can  pose a problem due to the steep learning curve required. But, again here comes to rescue another most big  aspect nowadays - 'third-party app development'. There  are more than few components on SugarExchange that provide  utilities/connectors to some of the BI suites mentioned above. After some searching around I selected one of the third party components&amp;nbsp; called Zucker Reports, for the obvious reason that it was available for development. This module deals with SugarCRM and Jasper reporting tool, so Jasper it is.&lt;br /&gt;
As simple as that, and without a line of code actually written, a bridge was established between SugarCRM and Jasper. Now, for some initial exploration:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;ZuckerReports provides the ability to generate On Demand reports or schedule them at your own convenience&lt;/li&gt;
&lt;li&gt;Reports designed and directly implemented in Jasper server can also be made available in the CRM application&lt;/li&gt;
&lt;li&gt;Parameterized reports can be generated as well (though I might add, the functionality is largely limited)&lt;/li&gt;
&lt;li&gt;Generated reports can be stored against a account/opportunity or some such record, and emailed to anyone interested&lt;/li&gt;
&lt;/ol&gt;Below are two screen shots that demonstrate what it actually translates to in the application.&lt;br /&gt;
&lt;img alt="" height="384" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCC74uCkuKg_ORA3emtXLQp5vObDPjwaIKRWD-Cz4UEYHwSw6a7LWvP9E2FEyitcEAbnIvIbdng1msL0l3ZPl3C0X8M8XpVGf2JZ4kg3tjRxhhFsIl1Pw-o1Z7nKbIFgtWe3fEZy9agYs/s640/sugar-report-jasper-myopty.JPG" style="border: 1px solid black;" width="640" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;img alt="" height="384" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCgPJp5r8wuONMAD8qnNa2ys0a-1v92cUBC2vSeYjt9OqKbQB88fgJ9rQz3x3Vu20-eTucYBFVmbI3tm_irtCIkapyV9rWRXfANLjmMWt61RuJYQ5nP2hErTuoNl5iyI1yaX6v1cg4Ac8/s640/sugar-report-jasper-singleacct.JPG" style="border: 1px solid black;" width="640" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Yes, I understand this is no reporting nirvana. But there were one too many times I stifled 'a wow' when things fall into place almost automatically. Capabilities listed in other tools, and integration challenges certainly look promising to me and that is something I have to address sometime in the near future.&lt;br /&gt;
&lt;ol&gt;&lt;/ol&gt;&lt;/div&gt;</content><link href="http://crmcog.blogspot.com/2011/03/sugarcrm-reporting-in-sugar.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/7484161106048447765" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/7484161106048447765" rel="self" type="application/atom+xml"/><link href="http://crmcog.blogspot.com/2011/03/sugarcrm-reporting-in-sugar.html" rel="alternate" title="SugarCRM: Reporting" type="text/html"/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCC74uCkuKg_ORA3emtXLQp5vObDPjwaIKRWD-Cz4UEYHwSw6a7LWvP9E2FEyitcEAbnIvIbdng1msL0l3ZPl3C0X8M8XpVGf2JZ4kg3tjRxhhFsIl1Pw-o1Z7nKbIFgtWe3fEZy9agYs/s72-c/sugar-report-jasper-myopty.JPG" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3508230947956282102.post-6182208858682709332</id><published>2011-02-27T22:13:00.003+05:30</published><updated>2011-02-27T22:25:40.393+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="email"/><category scheme="http://www.blogger.com/atom/ns#" term="integration"/><category scheme="http://www.blogger.com/atom/ns#" term="sugarcrm"/><title type="text">SugarCRM: Seamless Mail Sync</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;The disclaimer first - my knowledge with SugarCRM has been limited and I only try to dig into things when I find something interesting enough. I have been playing around the latest version (6.12) of SugarCRM lately, and was fairly delighted to see a good email integration feature.&lt;br /&gt;
&lt;br /&gt;
How it works is pretty straight-forward.&lt;br /&gt;
1. The user can setup his own account to connect to an email account - gmail, yahoo, MS Exchange enabled by default&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiM1xNVv9O235AYhXU4A2pi4W_VjXVk7T218kVDZWf8tx7SqAkmSPeakL2RNcpgsiDvaBzW9gSsKFsen36_v0BDCS1NWSHds1J_fWObHRUpagXEzFdTXTbxrp01FwF5hdnlBf2r8hvH3jo/s1600/sugarcrm-email_setup.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="384" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiM1xNVv9O235AYhXU4A2pi4W_VjXVk7T218kVDZWf8tx7SqAkmSPeakL2RNcpgsiDvaBzW9gSsKFsen36_v0BDCS1NWSHds1J_fWObHRUpagXEzFdTXTbxrp01FwF5hdnlBf2r8hvH3jo/s640/sugarcrm-email_setup.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-size: 12pt;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
2. Connect to email box and check things in Sugar&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhw-oQznWAfB5d8F0qJ6NrSSXETJIkijTRUU87w6vtJnXXvjNHdHYUxjrnFBYmA_0wKN_48gX1BPb0S2twtuVxSTLKDqPiwdRWX9Bu2kKLFXvWyBlQ6fk84CQsrHE-HKR79s8srfKp0-Ck/s1600/sugarcrm-email_inbox.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="384" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhw-oQznWAfB5d8F0qJ6NrSSXETJIkijTRUU87w6vtJnXXvjNHdHYUxjrnFBYmA_0wKN_48gX1BPb0S2twtuVxSTLKDqPiwdRWX9Bu2kKLFXvWyBlQ6fk84CQsrHE-HKR79s8srfKp0-Ck/s640/sugarcrm-email_inbox.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-size: 12pt;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
3. Import the received/sent email within Sugar, and build other entities like account, opportunity etc. around it&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihvRO6ky22p3ytKVRaI1muNZbtiqeiAJDDLVwbtIxkCCO5rdsj1S7M8_lJS_PP5a7YD0eAC4No3T9h-56qXheUYfqXtRJwrHntQaEMylo6FV_Q_1jyx3nX19wxl0UG6DnTGMR0CSba888/s1600/sugarcrm-email_working_around.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="384" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihvRO6ky22p3ytKVRaI1muNZbtiqeiAJDDLVwbtIxkCCO5rdsj1S7M8_lJS_PP5a7YD0eAC4No3T9h-56qXheUYfqXtRJwrHntQaEMylo6FV_Q_1jyx3nX19wxl0UG6DnTGMR0CSba888/s640/sugarcrm-email_working_around.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-size: 12pt;"&gt; &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-size: 12pt;"&gt;I was also impressed by the level of integration a calendar entry has. For example, a divisional manager sends a meeting request to his boss and the rep working on a proposal. This is what the rep gets in the email.&lt;/span&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicKAE_C-X5gI5d8npS0oozD9JD1NHVTbTeqF5kDfOy1hT3IyY242cJptgEZcsnnzl9dBusRhgNoDhWIuG3oS3isOT7of02mh1ntO9iSsa29CDwAw4TBmFJaAFTxdJrzI2K3sy8kdyJ1dA/s1600/sugarcrm-email_invite.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="292" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicKAE_C-X5gI5d8npS0oozD9JD1NHVTbTeqF5kDfOy1hT3IyY242cJptgEZcsnnzl9dBusRhgNoDhWIuG3oS3isOT7of02mh1ntO9iSsa29CDwAw4TBmFJaAFTxdJrzI2K3sy8kdyJ1dA/s640/sugarcrm-email_invite.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Ofcourse, the point to note is that this was sent from the SugarCRM calendar. There is greater flexibility if it was google calendar (yes, there is a mod to connect with Google calendar).&lt;br /&gt;
&lt;br /&gt;
The reason I was so delighted should probably be attributed to the way PIM Sync works. Until that is re-written, we probably would not miss out on 'complex' projects to implement email integration.&lt;/div&gt;</content><link href="http://crmcog.blogspot.com/2011/02/sugarcrm-seamless-mail-sync.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/6182208858682709332" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/6182208858682709332" rel="self" type="application/atom+xml"/><link href="http://crmcog.blogspot.com/2011/02/sugarcrm-seamless-mail-sync.html" rel="alternate" title="SugarCRM: Seamless Mail Sync" type="text/html"/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiM1xNVv9O235AYhXU4A2pi4W_VjXVk7T218kVDZWf8tx7SqAkmSPeakL2RNcpgsiDvaBzW9gSsKFsen36_v0BDCS1NWSHds1J_fWObHRUpagXEzFdTXTbxrp01FwF5hdnlBf2r8hvH3jo/s72-c/sugarcrm-email_setup.jpg" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3508230947956282102.post-3073439443133933912</id><published>2011-02-05T11:36:00.002+05:30</published><updated>2011-02-05T11:39:50.656+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="escript"/><category scheme="http://www.blogger.com/atom/ns#" term="siebel-tech"/><title type="text">Siebel: Prototype in eScript - Part 3</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;In &lt;a href="http://crmcog.blogspot.com/2011/02/siebel-prototype-in-escript-part-2.html" target="_blank"&gt;earlier&lt;/a&gt; &lt;a href="http://crmcog.blogspot.com/2011/01/siebel-prototype-in-escript.html" target="_blank"&gt;posts&lt;/a&gt;, we have seen using prototypes to extend OOB objects. In other posts we have also dealt with &lt;a href="http://crmcog.blogspot.com/2010/12/siebel-user-defined-objects.html" target="_blank"&gt;user defined objects&lt;/a&gt; and &lt;a href="http://crmcog.blogspot.com/2011/01/siebel-script-libraries.html" target="_blank"&gt;scripts libraries&lt;/a&gt;. Time for seeing all three in action you say? And I hear you, we shall see how user defined object can be prototyped, and used across the application.&lt;br /&gt;
&lt;strong&gt;Problem:&lt;/strong&gt;&amp;nbsp;I need a function to lookup the description of a LOV provided its type and value&lt;br /&gt;
&lt;strong&gt;Solution:&lt;/strong&gt;&amp;nbsp;We address the problem in two steps:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;blockquote&gt;Define a user object and make sure it is available for the session. One of the common ways of doing this is in Application object&lt;/blockquote&gt;&lt;/li&gt;
&lt;li&gt;&lt;blockquote&gt;Use the custom object to define a prototype for useful function(s) - in our case 'LookupDesc'&lt;/blockquote&gt;&lt;/li&gt;
&lt;/ol&gt;&amp;nbsp;Now, the how..&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Define a variable in the application script, for example: Siebel Life Sciences&lt;/li&gt;
&lt;/ul&gt;&lt;div style="padding-left: 60px;"&gt;[Application: Siebel Life Sciences,&amp;nbsp;(declarations)]&lt;/div&gt;&lt;div style="padding-left: 60px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;var MyApp;&lt;/span&gt;&lt;/div&gt;&lt;div style="padding-left: 60px;"&gt;And, call a business service where MyApp is initialized. This is just to keep the application object, it works just fine within the application itself.&lt;/div&gt;&lt;div style="padding-left: 60px;"&gt;[Application: Siebel Life Sciences, Method: Application_Start]&lt;/div&gt;&lt;div style="padding-left: 60px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;function Application_Start (CommandLine)&lt;/span&gt;&lt;/div&gt;&lt;div style="padding-left: 60px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div style="padding-left: 60px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;&amp;nbsp;var bsStarter = TheApplication().GetService("COG Test Proto");&lt;/span&gt;&lt;/div&gt;&lt;div style="padding-left: 60px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;&amp;nbsp;bsStarter.Init();&lt;/span&gt;&lt;/div&gt;&lt;div style="padding-left: 60px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div style="padding-left: 90px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Write the custom business service 'COG Test Proto'&lt;/li&gt;
&lt;/ul&gt;&lt;div style="padding-left: 60px;"&gt;[Service: COG Test Proto, Method:&amp;nbsp;Init]&lt;/div&gt;&lt;div style="padding-left: 60px;"&gt;&amp;nbsp;&lt;span style="font-family: 'courier new', courier;"&gt;function Init ()&lt;/span&gt;&lt;/div&gt;&lt;div style="padding-left: 60px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;&amp;nbsp;{&lt;/span&gt;&lt;/div&gt;&lt;div style="padding-left: 60px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;TheApplication().MyApp = new MyAppFun;&lt;/span&gt;&lt;/div&gt;&lt;div style="padding-left: 60px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;MyAppFun.prototype.LookupDesc = LookupDescFun;&lt;/span&gt;&lt;/div&gt;&lt;div style="padding-left: 60px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;div style="padding-left: 60px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="padding-left: 60px;"&gt;[Service: COG Test Proto, Method: MyAppFun]&lt;/div&gt;&lt;div style="padding-left: 60px;"&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: 'courier new', courier;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; function MyAppFun()&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&amp;nbsp;// this is a dummy, but funny function.&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="white-space: pre;"&gt;             &amp;nbsp;&lt;/span&gt;&lt;span style="white-space: pre;"&gt; &lt;/span&gt;[Service: COG Test Proto, Method: MyAppFun]&lt;br /&gt;
&lt;div style="padding-left: 60px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;function LookupDescFun (Type, Value)&lt;/span&gt;&lt;/div&gt;&lt;div style="padding-left: 60px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;&amp;nbsp;{&lt;/span&gt;&lt;/div&gt;&lt;div style="padding-left: 60px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;&amp;nbsp;try {&lt;/span&gt;&lt;/div&gt;&lt;div style="padding-left: 60px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;var sDesc = "";&lt;/span&gt;&lt;/div&gt;&lt;div style="padding-left: 60px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;var boLOV = TheApplication().GetBusObject("List Of Values");&lt;/span&gt;&lt;/div&gt;&lt;div style="padding-left: 60px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;var bcLOV = boLOV.GetBusComp("List Of Values");&lt;/span&gt;&lt;/div&gt;&lt;div style="padding-left: 60px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;with (bcLOV) {&lt;/span&gt;&lt;/div&gt;&lt;div style="padding-left: 60px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; ClearToQuery();&lt;/span&gt;&lt;/div&gt;&lt;div style="padding-left: 60px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; SetViewMode(AllView);&lt;/span&gt;&lt;/div&gt;&lt;div style="padding-left: 60px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; ActivateField("Description");&lt;/span&gt;&lt;/div&gt;&lt;div style="padding-left: 60px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; SetSearchExpr("[Type]='" + Type + "' AND [Value] = '" + Value + "'");&lt;/span&gt;&lt;/div&gt;&lt;div style="padding-left: 60px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; ExecuteQuery(ForwardOnly);&lt;/span&gt;&lt;/div&gt;&lt;div style="padding-left: 60px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; if (FirstRecord()) sDesc = GetFieldValue("Description");&lt;/span&gt;&lt;/div&gt;&lt;div style="padding-left: 60px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;} //with&lt;/span&gt;&lt;/div&gt;&lt;div style="padding-left: 60px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;return(sDesc);&lt;/span&gt;&lt;/div&gt;&lt;div style="padding-left: 60px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;div style="padding-left: 60px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;&amp;nbsp;catch(e) {&lt;/span&gt;&lt;/div&gt;&lt;div style="padding-left: 60px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;throw(e);&lt;/span&gt;&lt;/div&gt;&lt;div style="padding-left: 60px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;div style="padding-left: 60px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;&amp;nbsp;finally {&lt;/span&gt;&lt;/div&gt;&lt;div style="padding-left: 60px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;bcLOV = null;&lt;/span&gt;&lt;/div&gt;&lt;div style="padding-left: 60px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp;boLOV = null;&lt;/span&gt;&lt;/div&gt;&lt;div style="padding-left: 60px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;div style="padding-left: 60px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;That's about it, now MyApp is ready to have some fun. Again, a quick service to test how things work.&lt;br /&gt;
&lt;br /&gt;
&lt;div style="padding-left: 30px;"&gt;[Service: COG Test Proto Call, Method: Service_PreInvokeMethod]&lt;/div&gt;&lt;div style="padding-left: 30px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;&amp;nbsp;function Service_PreInvokeMethod (MethodName, Inputs, Outputs)&lt;/span&gt;&lt;/div&gt;&lt;div style="padding-left: 30px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;&amp;nbsp;{&lt;/span&gt;&lt;/div&gt;&lt;div style="padding-left: 30px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Outputs.SetProperty("out", TheApplication().MyApp.LookupDesc("blah", "blah"));&lt;/span&gt;&lt;/div&gt;&lt;div style="padding-left: 30px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
A bit of theory on how it works:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;MyApp is defined as a variable in Application, the same is initialized in a business service. It does not matter what the function [MyAppFun] contains, we will not be using that anyway&lt;/li&gt;
&lt;li&gt;The prototype LookupDesc is defined as an extension of MyAppFun. Any object based on MyAppFun will have access to the LookupDesc functionality&lt;/li&gt;
&lt;li&gt;We invoke LookupDesc as an extension of the variable in the application object. There are other blogs out there who just use TheApplication = MyApp, but that practice is not encouraged as I understand&lt;/li&gt;
&lt;li&gt;When TheApplication().MyApp.LookupDesc is invoked, Siebel will look for the LookupDesc function for MyApp object. Since the functionality does not exist OOB, the prototype is consulted and in turn LookupDescFun function is executed.&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
If you are thinking this is an overkill, you may be right if this is all you want to do. Keep in mind that this coding practice will be more scalable, and ensures reusability.&lt;/div&gt;</content><link href="http://crmcog.blogspot.com/2011/02/siebel-prototype-in-escript-part-3.html#comment-form" rel="replies" title="1 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/3073439443133933912" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/3073439443133933912" rel="self" type="application/atom+xml"/><link href="http://crmcog.blogspot.com/2011/02/siebel-prototype-in-escript-part-3.html" rel="alternate" title="Siebel: Prototype in eScript - Part 3" type="text/html"/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3508230947956282102.post-3913286690193453594</id><published>2011-02-02T09:31:00.003+05:30</published><updated>2011-02-02T09:38:56.777+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="escript"/><category scheme="http://www.blogger.com/atom/ns#" term="siebel-tech"/><title type="text">Siebel: Prototype in eScript - Part 2</title><content type="html">The &lt;a href="http://crmcog.blogspot.com/2011/01/siebel-prototype-in-escript.html"&gt;last example&lt;/a&gt; in prototypes dealt with extending a OOB data type, but that extension was done within the business service itself. Although the prototype can be defined only once and used multiple times, it is not really demonstrated well since the entire thing is handled within the same code. Here, let me take an opportunity to show how the prototype definition itself can be handled elsewhere.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Problem&lt;/span&gt;&lt;br /&gt;Check whether the given string is a valid email address&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Solution&lt;/span&gt;&lt;br /&gt;Define the prototype to extend the OOB string object, and use it as many times as needed. To achieve this we define the prototype in the Application object.&lt;br /&gt;&lt;p&gt;Go to "Server Scripts" of 'Siebel Life Sciences' or similar, and define prototype. &lt;/p&gt;&lt;p&gt;(declarations)&lt;/p&gt;&lt;span&gt;&lt;blockquote&gt;&lt;span&gt;String.prototype.IsEmail = CheckValidEmail;&lt;/span&gt; &lt;/span&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;span&gt;&lt;/span&gt;Add a function 'CheckValidEmail' to the same application object. &lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;function CheckValidEmail() &lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;var rEmailPat =  /^\w+[\w-\.]*\@\w+((-\w+)(\w*))\.[a-z]{2,3}$/;&lt;/p&gt;&lt;p&gt;return rEmailPat.test(this); &lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;That's about it! Any string can now be tested for a valid email. We will quickly build a test function to demonstrate how this is used:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Service:&lt;/strong&gt; COG Test Email&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Method:&lt;/strong&gt; Service_PreInvokeMethod&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;function Service_PreInvokeMethod (MethodName, Inputs, Outputs)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt; var sEmail = Inputs.GetProperty("Email");&lt;/p&gt;&lt;p&gt; Outputs.SetProperty("Valid", sEmail.IsEmail());&lt;/p&gt;&lt;p&gt; return (CancelOperation);&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;When you run this in the simulator, this should either return a 'true' or 'false' value depending on whether the supplied string is a valid email address. Now, a bit about how it works. &lt;/p&gt;&lt;ol&gt;&lt;li&gt;First we define the prototype for the data type string with the statement String.prototype.IsEmail = CheckValidEmail'. This statement is executed when the application starts up.&lt;/li&gt;&lt;li&gt;The above prototype points to a custom function 'CheckValidEmail'. This function uses a simple regular expression to test the validity of the entered string. It returns a 'true' when the string has the specified regex pattern, false otherwise&lt;/li&gt;&lt;li&gt;None of the above has any effect until we actually invoke the 'IsEmail' function. When this function is used against the string object, Siebel checks the prototype since no such function exists OOB&lt;/li&gt;&lt;li&gt;Return value from the function denotes whether the string 'sEmail' is a valid email address&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Watch this space for one more example!&lt;/p&gt;</content><link href="http://crmcog.blogspot.com/2011/02/siebel-prototype-in-escript-part-2.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/3913286690193453594" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/3913286690193453594" rel="self" type="application/atom+xml"/><link href="http://crmcog.blogspot.com/2011/02/siebel-prototype-in-escript-part-2.html" rel="alternate" title="Siebel: Prototype in eScript - Part 2" type="text/html"/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3508230947956282102.post-2022312942160614800</id><published>2011-01-31T14:25:00.002+05:30</published><updated>2011-01-31T14:32:00.144+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="escript"/><category scheme="http://www.blogger.com/atom/ns#" term="siebel"/><category scheme="http://www.blogger.com/atom/ns#" term="siebel-tech"/><title type="text">Siebel: Script Libraries</title><content type="html">Siebel 8 (or ST engine to be more specific) has a elegant way of calling business service methods. Script libraries provide the ability to call functions on a business service directly, no more is the need for building property sets and setting the parameters!&lt;br /&gt;&lt;br /&gt;If you have not already used script libraries, do take a look. The reduced coding implies lesser mistakes, debugging time and easier maintenance! The simple demo below illustrates the usage.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Step 1:&lt;/span&gt;&lt;br /&gt;Create the target business service 'COG Test Script Lib'. A custom function 'Echo' is defined here.&lt;br /&gt;&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Service_PreInvokeMethod:&lt;/strong&gt;  &lt;/p&gt;&lt;p&gt;function Service_PreInvokeMethod (MethodName, Inputs, Outputs)  &lt;/p&gt;&lt;p&gt;{  &lt;/p&gt;&lt;p&gt;   return (CancelOperation);  &lt;/p&gt;&lt;p&gt;} &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Echo:&lt;/strong&gt;&lt;br /&gt;function Echo (MyString) &lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;   return "Echoed: " + MyString; &lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Step 2:&lt;/span&gt;&lt;br /&gt;Create the caller service 'COG Test Script Lib Call'. There is only one method here - 'Service_PreInvokeMethod', and the following code has to be input:&lt;br /&gt;&lt;blockquote&gt;&lt;p&gt;function Service_PreInvokeMethod (MethodName, Inputs, Outputs) { &lt;/p&gt;&lt;p&gt; var bsTest = TheApplication().GetService("COG Test Script Lib"); &lt;/p&gt;&lt;p&gt; Outputs.SetProperty("Output", bsTest.Echo("abc")); &lt;/p&gt;&lt;p&gt; bsTest = null; &lt;/p&gt;&lt;p&gt; return (CancelOperation); &lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Compare this to the approach in earlier versions. In most probability you will be coding something like:&lt;br /&gt;&lt;blockquote&gt;&lt;p&gt;function Service_PreInvokeMethod (MethodName, Inputs, Outputs) &lt;/p&gt;&lt;p&gt;{ &lt;/p&gt;&lt;p&gt; var bsTest = TheApplication().GetService("COG Test Script Lib"); &lt;/p&gt;&lt;p&gt; var psIn = TheApplication().NewPropertySet(); &lt;/p&gt;&lt;p&gt; var psOut = TheApplication().NewPropertySet(); &lt;/p&gt;&lt;p&gt; psIn.SetProperty("MyString", "abc"); &lt;/p&gt;&lt;p&gt; bsTest.InvokeMethod(psIn, psOut); &lt;/p&gt;&lt;p&gt; Outputs.SetProperty("Output", psOut.GetProperty("ReturnString")); &lt;/p&gt;&lt;p&gt; psOut = null;&lt;/p&gt;&lt;p&gt; psIn = null; &lt;/p&gt;&lt;p&gt; bsTest = null;&lt;/p&gt;&lt;p&gt; return (CancelOperation); &lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;And, don't forget to add a line or two in the target service 'COG Test Script Lib' to set required properties in the output propertyset. Now, a simple 'bsTest.Echo("abc")' does the job. Isn't life simpler?</content><link href="http://crmcog.blogspot.com/2011/01/siebel-script-libraries.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/2022312942160614800" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/2022312942160614800" rel="self" type="application/atom+xml"/><link href="http://crmcog.blogspot.com/2011/01/siebel-script-libraries.html" rel="alternate" title="Siebel: Script Libraries" type="text/html"/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3508230947956282102.post-9211478280465176714</id><published>2011-01-24T14:24:00.003+05:30</published><updated>2011-01-24T14:38:08.765+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="escript"/><category scheme="http://www.blogger.com/atom/ns#" term="siebel"/><category scheme="http://www.blogger.com/atom/ns#" term="siebel-tech"/><title type="text">Siebel: Prototype in eScript</title><content type="html">I had mentioned about using prototypes in one of the &lt;a class="" href="http://crmcog.blogspot.com/2010/12/siebel-user-defined-objects.html" target="_blank" mce_serialized="15mrjb71f" mce_href="https://ch1blogs.cognizant.com/blogs/187523/2010/12/30/siebel-user-defined-objects/"&gt;previous posts&lt;/a&gt;, here's a drilldown into how things work.&lt;br /&gt;Tucked away in a remote corner in the eScript reference of the Siebel Bookshelf is a single paragraph referring to prototypes. Common to javascript developers, prototype is not something that we bother about too often. Prototypes provide a highly reusable way of extending out of the box objects, with an optimal memory usage as a bonus.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;How do we use Prototypes? &lt;/span&gt;&lt;br /&gt;The best way to understand will be through an example. Let us consider a problem where we need to add x days to the given date and get the next working day (!= Saturday or Sunday).&lt;br /&gt;We go about this problem by extending the Date object to support a new functionality - add x days and retrieve the next working day. For simplicity sake we keep the definition of prototype and the actual call together, however they may be located in different objects as well.&lt;br /&gt;To demo the prototype define custom business service 'COG Get Working Day' in Siebel Tools or Client. Paste the following code in relevant sections:&lt;br /&gt;&lt;strong&gt;(declarations)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;blockquote&gt;Date.prototype.AddDaysToGetWrkDay = AddDaysToGetWrkDay;&lt;/blockquote&gt;&lt;strong&gt;&lt;br /&gt;AddDaysToGetWrkDay&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;p&gt;function AddDaysToGetWrkDay(iDays, Outputs)&lt;/p&gt;&lt;p&gt;{ &lt;/p&gt;&lt;p&gt;var iDateNew; var iOneDay = 24 * 60 * 60 * 1000; // day in milliseconds -&lt;br /&gt;(hrs/day * min * sec * ms)&lt;br /&gt;this.setMilliseconds(iDays * iOneDay);&lt;br /&gt;if&lt;br /&gt;(this.getDay() == 0 this.getDay() == 6) { // if sunday or saturday&lt;/p&gt;&lt;p&gt;this.AddDaysToGetWrkDay(1); // add one more day and check whether that falls&lt;br /&gt;on working day &lt;/p&gt;&lt;p&gt;} &lt;/p&gt;&lt;p&gt;return this;&lt;/p&gt;&lt;p&gt;} &lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;/span&gt; &lt;/p&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;strong&gt;Service_PreInvokeMethod&lt;/strong&gt;&lt;br /&gt;&lt;blockquote&gt;function Service_PreInvokeMethod (MethodName, Inputs, Outputs)&lt;br /&gt;{&lt;br /&gt;try {&lt;br /&gt;var dSomeDate = new Date("1/28/2011");&lt;br /&gt;dSomeDate.AddDaysToGetWrkDay(1);&lt;br /&gt;Outputs.SetProperty("New Date", dSomeDate);&lt;br /&gt;return (CancelOperation);&lt;br /&gt;}&lt;br /&gt;catch(e){&lt;br /&gt;throw(e);&lt;br /&gt;}&lt;br /&gt;finally {&lt;br /&gt;dSomeDate = null;&lt;br /&gt;}&lt;br /&gt;}&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;When executed through simulator (or a call from placed from another service), the service returns the next working day - in the above example 31-Jan-2011. Read on to find out how.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Code Explanation&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;'Date.prototype.AddDaysToGetWrkDay = AddDaysToGetWrkDay' is the statement that tells the execution engine that there is a new prototype for Date object, and the extended functionality is provided by the function (or object) called 'AddDaysToGetWrkDay'. This is not synonymous with calling a function since there is no actual execution at this point. It is equivalent to a declaration. &lt;/li&gt;&lt;li&gt;Next, define the function 'AddDaysToGetWrkDay'. This will act on the provided date object, which is referenced using 'this'. All it does is to add the given number of days to the date, check whether the new date falls on a Saturday or Sunday, continue adding more days if that is the case, and return the final date. Recursion is used to keep on adding days until it is not required. &lt;/li&gt;&lt;li&gt;'Service_PreInvokeMethod' just calls the extended function 'AddDaysToGetWrkDay' against the date object. When the actual call is made, the scripting engine looks at the Date object itself to check whether such a method is present, and then consults the prototype. Since such a prototype exists and points to a function, the function is executed to return the result &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Note that the prototype itself may be defined only once, and the functionality is available thereon. Though this example is simple at its best, it does demonstrate how prototypes can be used to extend the objects. &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:130%;"&gt;Conclusion&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Keep in mind the following: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Prototypes share the same memory space. Multiple invocations do not mean multiple copies &lt;/li&gt;&lt;li&gt;Prototypes can also be added later. Dynamic invocation can mean that you don't need to do everything in one place and at once &lt;/li&gt;&lt;li&gt;A prototype can also be extended further. For example, I can very well define another which says 'AddDaysToGetWrkDay.prototype.ExcludeDay' to selectively exclude certain days. For example, myDate.AddDaysToGetWrkDay(21).ExcludeDay("Tuesday") can return the working day 21 days from the given date, but which is not a Tuesday &lt;/li&gt;&lt;li&gt;From the above point you can observe that the methods can be executed in a 'chained' manner, which gives us a scalable solution that is easy to maintain (remember my OO reference in an earlier post?) &lt;/li&gt;&lt;li&gt;Use prototypes for reusable functions, that is when they yield better results &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;So, how do you want to use prototypes in your application?&lt;/p&gt;</content><link href="http://crmcog.blogspot.com/2011/01/siebel-prototype-in-escript.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/9211478280465176714" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/9211478280465176714" rel="self" type="application/atom+xml"/><link href="http://crmcog.blogspot.com/2011/01/siebel-prototype-in-escript.html" rel="alternate" title="Siebel: Prototype in eScript" type="text/html"/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3508230947956282102.post-2700143875807308426</id><published>2011-01-17T15:10:00.003+05:30</published><updated>2011-01-17T15:16:32.580+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="escript"/><category scheme="http://www.blogger.com/atom/ns#" term="siebel"/><category scheme="http://www.blogger.com/atom/ns#" term="siebel-tech"/><title type="text">Siebel: Custom Functions for TheApplication</title><content type="html">If you want to reuse code in Siebel, one of the common practices is to put it away in the business service and invoke those methods. This method, though is invaluable for complex operations, will become a painful process for simple things. When I say painful, it applies in some measure for both developers and the execution engine, reasons outlined below:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Additional business service objects have to be created during execution, this may put some overhead in terms of performance (business service caching kept aside for now)&lt;/li&gt;&lt;li&gt;Invoking most of the business services out there involves creation of property sets and calling them in a "proper" way. With the increased lines of code comes the increased complexity&lt;/li&gt;&lt;li&gt;Developers have to "know" about the business service. This is a big problem in the longer term since code again gets littered everywhere inspite of the same functionality in a service&lt;br /&gt;There is a way to solve some of the above issues for simple reusable code (at least partially) - custom methods on TheApplication object. This uses a simple fact - all functions written in the application object will be available in any entity and method. Let us illustrate this with an example.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt; I need to get the description of a specified LOV. Though developers swear by LookupValue (and other Lookup) functions, there is little one can do about the 30 (or 50) char limit imposed by the data model. It is common to use Description (or some such field) for this purpose, but the code reuse is limited.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt; Write a LookupDesc function in the application object. Just edit the 'Siebel Life Sciences' (or any application) that is being used by your object manager. Create a new function called 'LookupDesc' and paste this code:&lt;/p&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;function LookupDesc(Type, Value)&lt;br /&gt;{&lt;br /&gt;try {&lt;br /&gt;var sDesc = "";&lt;br /&gt;var boLOV = TheApplication().GetBusObject("List Of Values");&lt;br /&gt;var bcLOV = boLOV.GetBusComp("List Of Values");&lt;br /&gt;with (bcLOV) {&lt;br /&gt;ClearToQuery();&lt;br /&gt;SetViewMode(AllView);&lt;br /&gt;ActivateField("Description");&lt;br /&gt;SetSearchExpr("[Type]='" + Type + "' AND [Value] = '" + Value + "'");&lt;br /&gt;ExecuteQuery(ForwardOnly);&lt;br /&gt;if (FirstRecord()) sDesc = GetFieldValue("Description");&lt;br /&gt;} //with&lt;br /&gt;return(sDesc);&lt;br /&gt;}&lt;br /&gt;catch(e) {&lt;br /&gt;throw(e);&lt;br /&gt;}&lt;br /&gt;finally {&lt;br /&gt;bcLOV = null;&lt;br /&gt;boLOV = null;&lt;br /&gt;}&lt;br /&gt;}&lt;/span&gt;&lt;/blockquote&gt;&lt;p&gt;Now, invoking the above function is by using a single line in applet, bc or a business service -&lt;/p&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;TheApplication().LookupDesc("MY_TYPE", "My Value")&lt;/span&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;This is also available in ScriptAssist against TheApplication, to make others aware of this function ofcourse!&lt;br /&gt;A note of caution though - don't overdo this. I would recommend keeping the code here simple and tight, and to those functions where lot of reuse is foreseen.&lt;/p&gt;</content><link href="http://crmcog.blogspot.com/2011/01/siebel-custom-functions-for.html#comment-form" rel="replies" title="1 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/2700143875807308426" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/2700143875807308426" rel="self" type="application/atom+xml"/><link href="http://crmcog.blogspot.com/2011/01/siebel-custom-functions-for.html" rel="alternate" title="Siebel: Custom Functions for TheApplication" type="text/html"/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3508230947956282102.post-2458452169898569971</id><published>2010-12-30T19:22:00.004+05:30</published><updated>2011-01-17T15:26:47.181+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="escript"/><category scheme="http://www.blogger.com/atom/ns#" term="siebel"/><category scheme="http://www.blogger.com/atom/ns#" term="siebel-tech"/><title type="text">Siebel: User Defined Objects</title><content type="html">&lt;p&gt;Ever missed all the OOP goodness in Siebel? Although not used frequently, user defined objects provide you with some degree of control with hiding complexities in scripting. No, this will not help you attain OO nirvana - but you can start doing things with the custom objects and prototyping (another post for another day) to:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Hide complexity&lt;/li&gt;&lt;li&gt;Provide scalability&lt;/li&gt;&lt;li&gt;Save memory while doing the above &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Here’s a simple example that demonstrates use of user-defined objects. To test, you simply copy the code in a new client business service and you are all set.&lt;br /&gt;First the Service_PreInvoke method:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;function Service_PreInvokeMethod (MethodName, Inputs, Outputs)&lt;br /&gt;{&lt;br /&gt;var qryBC;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;qryBC = new GetRecord("Contact", "Contact", "[Id] = '0-1'", "First Name", "Last Name");&lt;br /&gt;Outputs.SetProperty("First Name", qryBC.Values[3]);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;Outputs.SetProperty("Last Name", qryBC.Values[4]);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;return (CancelOperation);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;qryBC = null;&lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Next comes the constructor:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;function GetRecord ()&lt;br /&gt;{&lt;br /&gt;try {&lt;br /&gt;   var arrValue = new Array();&lt;br /&gt;   var iCount;   &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;   if (arguments.length &lt; 4) TheApplication().RaiseErrorText("I need minimum four arguments - BO name, BC&lt;br /&gt;name, SearchExpr and at least one field name.");   &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;   var bo = TheApplication().GetBusObject(arguments[0]);&lt;br /&gt;   var bc = bo.GetBusComp(arguments[1]);&lt;br /&gt;   with (bc){     &lt;br /&gt;      ClearToQuery();&lt;br /&gt;      SetViewMode(AllView);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;      SetSearchExpr(arguments[2]);&lt;br /&gt;      for (iCount = 3; iCount &lt; arguments.length; iCount++){&lt;br /&gt;         ActivateField(arguments[iCount]);&lt;br /&gt;      }&lt;br /&gt;      ExecuteQuery(ForwardOnly);&lt;br /&gt;   }   &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;   if (bc.FirstRecord()) {&lt;br /&gt;      for (iCount = 3; iCount &lt; arguments.length; iCount++){&lt;br /&gt;         arrValue[iCount] = bc.GetFieldValue(arguments[iCount]);     &lt;br /&gt;      } &lt;br /&gt;   }&lt;br /&gt;   this.Values = arrValue;&lt;br /&gt;} // try&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;catch(e){&lt;br /&gt;   throw(e);&lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;finally{&lt;br /&gt;   arrValue = null;&lt;br /&gt;   bc = null;&lt;br /&gt;   bo = null;&lt;br /&gt;}&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Now, the explanation:&lt;br /&gt;&lt;strong&gt;Purpose:&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;Provide ability to query any given BO / BC and retrieve the specified field values&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;How did we do that:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;First, we create an object called “qryBC”, which becomes instance of a class “GetRecord” when the constructor “GetRecord()” is executed. Since this is the very first exposure to the class/object concept, we are letting the constructor do all the work rather than splitting it up. At this time we also pass the arguments to the object, whereby the constructor will query and return you the results. For simplicity in further processing, we return an array with the query results. Note the use of ‘this’ in the constructor and the reference to the set values when retrieving results in PreInvoke method.&lt;/p&gt;&lt;p&gt;Never understood why OO beats procedural programming you say? You need to depend your friend &lt;a href="http://www.google.com/search?hl=en&amp;amp;source=hp&amp;amp;q=object+oriented+programming+vs+procedural+programming&amp;amp;aq=0&amp;amp;aqi=g10&amp;amp;aql=f&amp;amp;oq=object+oriented+programming+vs&amp;amp;gs_rfai="&gt;Google&lt;/a&gt; to find out what you missed.(cross posted elsewhere)&lt;/p&gt;</content><link href="http://crmcog.blogspot.com/2010/12/siebel-user-defined-objects.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/2458452169898569971" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/2458452169898569971" rel="self" type="application/atom+xml"/><link href="http://crmcog.blogspot.com/2010/12/siebel-user-defined-objects.html" rel="alternate" title="Siebel: User Defined Objects" type="text/html"/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3508230947956282102.post-2349288589995770584</id><published>2010-12-28T18:51:00.001+05:30</published><updated>2010-12-28T18:53:15.674+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="crm"/><category scheme="http://www.blogger.com/atom/ns#" term="humour"/><title type="text">CRM 2011!</title><content type="html">It is that time of the year folks - time when you, I and every IT guy worth his salt tends to get clobbered with analyst talk. This is all about the past year - how they prophesized just right, and how the world is converting to paradise or is getting destroyed in the nuclear winter next year. Since I too am finding myself putting together hard-to-comprehend words one too many times, I thought this is something ought to be addressed pronto (before you sink too deep in the holiday mood that is). Since CRM is what I am doing all the time (it is actually Siebel application development, but it feels liberating to be more generic), this is a short list of what I think should happen to CRM in 2011.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Fusion should come out of its wraps&lt;br /&gt;Inspite of Elison's jab at the implementable state of Oracle Fusion apps, I quite look forward to it. In the process, I also look forward to throwing out all the experience of developing lousy scripts using eScript/Siebel VB, half-baked COM interfacing programs, workflows with a clunky interface and all the configuration fun that can be had in any version of Siebel apps post v7. I will miss dismissing customer requests with a hard-hitting statement - "the functionality is tagged to SRF, and cannot be changed now". 2011 is a good year to brave up to J2EE, ODI, WebCenter, WebLogic and other hotchpotch. This is number one solely because I am associated with Siebel for too long a time.&lt;br /&gt;&lt;/li&gt;&lt;li&gt; SaaS triumps in Large Enterprises&lt;br /&gt;Yes, I know this has been said since the inception of SFDC and the glorious just-dream-forces unleashed upon us. But it is not hard to listen when businesses (not IT) is shouting at you about why they should be spending so much on CapEx and ongoing maintenance including upgrades. So there will be a slew of studies on SaaS take-over, hybrid architectures and how many millions one saved while firing the software and the dream-teams which were keeping them afloat. Well, this cannot happen in next year alone but will enable me to brag about how it came true to a certain extent at the end of 2011.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Mobile to the Rescue!&lt;br /&gt;Mobile phones with their ubiquity and affordability, should wield greater power over deciding the CRM strategy. How many of us wants to navigate the shiny website of Airtel when the transactions can be done through mcheck? CRM will get more focussed in the mobile space, true for developed and developing countries alike. App development, here I come!&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Social CRM will bring down companies to their knees&lt;br /&gt;Well, I sort of made it up - companies don't have knees. Service companies especially will struggle to keep an eye on what is going on, and would have to resort to several IT adventures before they can get things right. A piece of copied advice - it is not about IT guys (a.k.a 'dont blame me'), set your focus on what you want to do when customers are talking all good or bad about you.&lt;br /&gt;&lt;/li&gt;&lt;li&gt; Paul Greenberg should be crowned the undisputed thought-leader of CRM&lt;br /&gt;I really like his way of writing - the book and the blog, even with my zero knowledge of baseball. Though I feel he vastly over-rates the power of getting Social, being a undisputed leader will push to the fore-front his genial thoughts on maintaining good customer relationship. &lt;/li&gt;&lt;/ol&gt;</content><link href="http://crmcog.blogspot.com/2010/12/crm-2011.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/2349288589995770584" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/2349288589995770584" rel="self" type="application/atom+xml"/><link href="http://crmcog.blogspot.com/2010/12/crm-2011.html" rel="alternate" title="CRM 2011!" type="text/html"/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3508230947956282102.post-4392272315761139308</id><published>2010-12-27T14:43:00.007+05:30</published><updated>2010-12-27T15:00:24.294+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="integration"/><category scheme="http://www.blogger.com/atom/ns#" term="siebel-tech"/><title type="text">Siebel: Importing data from files</title><content type="html">I am back after a not-so-brief hiatus, and am back hopefully for good :). Here I am with yet another utility - this time something that will help you to import data from files into Siebel, with zero coding required from your end. ‘COG File Import Service’ as it is known, will hopefully simplify your life a bit.&lt;br /&gt;&lt;br /&gt;Contrary to popular (and let me add, buggy) excel macros / VB COM programs that are available to load data to Siebel, this is a business service that can be imported to Tools / Client. But at the same time it does not offer as much flexibility, given below are a few things that make this tool stand apart.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Why another tool?&lt;br /&gt;&lt;/span&gt;File import is nothing new to Siebel developers. But why use another tool when there are dime-a-dozen you say? Thus goes the story:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The first thing that hits you - most of the tools to load Siebel data have inconsistent interfaces, and may require some amount of ‘getting-used-to’&lt;/li&gt;&lt;li&gt;External objects or platforms are required to actually see what is going on, and hopefully to change the behavior. For example, you need Excel or Visual Basic software, or have a dependency on Windows platform to execute the code. And all that can be done, provided you understand what has been written there&lt;/li&gt;&lt;li&gt;Customers might have their own restrictions in connecting to production systems using third party software and utilities&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:130%;"&gt;The Mechanism&lt;/span&gt;&lt;/p&gt;&lt;br&gt;&lt;p&gt;COG Import Service is just a business service that can be applied to Siebel v7.5+, but has only been tested with 7.7 and 8.1. The service works with CSV/delimited files and has two distinct ways to handle them:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Simple Update - This is just a wrapper to the OOB CSV reader service, with a couple of enhancements thrown in&lt;/li&gt;&lt;li&gt;Update - A more sophisticated updater, which can do a few more things than what CSV reader can do&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;The steps involved in both methods are simple:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Read file (all at once)&lt;/li&gt;&lt;li&gt;Map fields to provided content&lt;/li&gt;&lt;li&gt;Use a data map, if specified&lt;/li&gt;&lt;li&gt;Update&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Where they differ is in the way they process files. &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;br&gt;&lt;p&gt;&lt;span style="font-size:130%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;span style="font-size:130%;"&gt;When to use which method?&lt;/span&gt;&lt;/p&gt;&lt;br&gt;&lt;p&gt;.. Simple Update&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Uses the 'CSV Reader Business Service', and hence needs an integration object (IO) to be available for the input data&lt;/li&gt;&lt;li&gt;When the processing is simple and there is no need for processing more than one component/entity (in other words, entity and its children) at one time&lt;/li&gt;&lt;li&gt;Processing should be fast&lt;/li&gt;&lt;li&gt;Any errors should roll-back all transactions&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;.. Update&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Can be used with or without involving IO&lt;/li&gt;&lt;li&gt;Delimited with be comma or something else&lt;/li&gt;&lt;li&gt;Process entity and one child with one operation&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;br&gt;&lt;p&gt;&lt;span style="font-size:130%;"&gt;How to Use?&lt;/span&gt;&lt;/p&gt;&lt;br&gt;&lt;p&gt;Import the attached XML into Siebel Tools and compile to SRF, or imported into the Client (Site Map &gt; Business Service Administration). Parameters to the service specify the parameters that are needed for a successful run. The file formats/structure has been documented in the service itself.&lt;/p&gt;&lt;br&gt;&lt;p&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;License&lt;/span&gt;&lt;/p&gt;&lt;br&gt;&lt;p&gt;None, you can use it or throw it away. Use it at your own risk, unintentional bugs are all but risks of the trade.&lt;/p&gt;&lt;p&gt;You can watch this space (at your own risk, of course) for new versions - improvements or bug fixes.&lt;/p&gt;</content><link href="http://crmcog.blogspot.com/2010/12/siebel-importing-data-from-files.html#comment-form" rel="replies" title="2 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/4392272315761139308" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/4392272315761139308" rel="self" type="application/atom+xml"/><link href="http://crmcog.blogspot.com/2010/12/siebel-importing-data-from-files.html" rel="alternate" title="Siebel: Importing data from files" type="text/html"/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3508230947956282102.post-8074727834486300927</id><published>2010-09-26T22:09:00.001+05:30</published><updated>2010-09-26T22:09:52.356+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="generic"/><category scheme="http://www.blogger.com/atom/ns#" term="siebel"/><title type="text">Fusion - at last</title><content type="html">&lt;p&gt;Well, the moment we have been waiting for is here - Oracle Fusion CRM finally finds the light of the day (so as to speak) in the recent Oracle Open World. This is a new technology framework folks, put on your best armour and start preparing for all new things coming your way. You can start with http://www.oracle.com/fusion! No, no downloads yet - you should satisfy yourself with the latest sales pitch. Alternately, you can take your frustration to the Siebel 8.3 Statement of Direction (available on support.oracle.com).&lt;/p&gt;</content><link href="http://crmcog.blogspot.com/2010/09/fusion-at-last.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/8074727834486300927" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/8074727834486300927" rel="self" type="application/atom+xml"/><link href="http://crmcog.blogspot.com/2010/09/fusion-at-last.html" rel="alternate" title="Fusion - at last" type="text/html"/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3508230947956282102.post-4307635981121365872</id><published>2010-03-21T22:07:00.005+05:30</published><updated>2010-03-21T22:59:37.641+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="siebel-tech"/><title type="text">Siebel: Querying for Distinct Records</title><content type="html">Many a time during Siebel configuration, one is left wondering "so near yet so far" - to SQL that is. A recent scenario had this problem - send alerts to the activity's account's team members when it is past the due date. Sending more than one email for one or more pending activity is&lt;br /&gt;not acceptable. One of the common things that we do when confronted with this problem is to just write a workflow or a piece of code somewhere that can:&lt;div&gt;&lt;ol&gt;  &lt;li&gt;Query for all activities past the due date&lt;/li&gt;&lt;br /&gt; &lt;li&gt;For each activity, get the account and query for the&lt;br /&gt;account's position team&lt;/li&gt;&lt;br /&gt; &lt;li&gt;For each member of the team, get the corresponding primary&lt;br /&gt;employee&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Send notification/alerts and flag him to be ignored in&lt;br /&gt;future&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Looking at this problem from a different angle, the solution&lt;br /&gt;is somewhat more simple - get unique "account team member" - "activity"&lt;br /&gt;combination that will be the potential notification candidate. Siebel&lt;br /&gt;provides a "Distinct" property on business components that helps us to&lt;br /&gt;achieve just this. Note that this property enforces a "DISTINCT" clause&lt;br /&gt;on all fields present in the BC, which may force us to create a clone&lt;br /&gt;when needed. Let us re-look at the solution now:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;  &lt;li&gt;Create a BC based on S_EVT_ACT and with the following&lt;br /&gt;fields:&lt;/li&gt;&lt;ul&gt;    &lt;li&gt;Due Date (DUE)&lt;/li&gt;    &lt;li&gt;Status (EVT_STAT_CD)&lt;/li&gt;    &lt;li&gt;Account Id (OU_ID)&lt;/li&gt;    &lt;li&gt;Account Primary Position Id (S_ACCNT_POSTN.POSITION_ID)&lt;/li&gt;&lt;ul&gt;      &lt;li&gt;Join: S_EVT_ACT.OU_ID = S_ACCNT_POSTN.OU_EXT_ID)&lt;/li&gt;&lt;/ul&gt;    &lt;li&gt;Account Primary Employee Email (S_CONTACT.EMAIL_ADDR)&lt;/li&gt;&lt;ul&gt;      &lt;li&gt;Join: S_ACCNT_POSTN.POSITION_ID = S_POSTN.PAR_ROW_ID&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;      &lt;li&gt;Join: S_POSTN.PR_EMP_ID = S_CONTACT.PAR_ROW_ID&lt;/li&gt;&lt;/ul&gt;  &lt;/ul&gt;&lt;br /&gt; &lt;li&gt;Enable "Distinct" flag on this BC&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Create a simple workflow based on a business object which&lt;br /&gt;has the above BC as primary and which leverages the ""Outbound&lt;br /&gt;Communications Manager" service&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Create a "Repeating Component Request" with the required&lt;br /&gt;search criteria - "[Due] = Today() AND [Status] = 'Open'"&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;Well, how is that? Of course both have the same number of steps and the second one actually looks more pronounced. But if you have done a fair bit of coding and solutions to problems such as these you know what to choose.&lt;/div&gt;</content><link href="http://crmcog.blogspot.com/2010/03/siebel-querying-for-distinct-records.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/4307635981121365872" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/4307635981121365872" rel="self" type="application/atom+xml"/><link href="http://crmcog.blogspot.com/2010/03/siebel-querying-for-distinct-records.html" rel="alternate" title="Siebel: Querying for Distinct Records" type="text/html"/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3508230947956282102.post-5088409165989586340</id><published>2010-03-06T14:20:00.006+05:30</published><updated>2010-03-21T22:03:24.334+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="siebel-tech"/><title type="text">Siebel: Batch Script to Compile and Replace SRF</title><content type="html">Well, I have been absent - you can't really blame me since I had nothing to say. But I am back and hope that matters at least a bit.&lt;br /&gt;&lt;br /&gt;My recent work involved some digging around to compile SRF frequently and was surprised that there was hardly any ready-made way to do that. This is the state even though Siebel has been providing 'command line' syntax to do a number of things using Tools. So the following batch script was born for Microsoft Windows OS. It is not really that difficult to achieve it for other operating systems if you apply your mind a bit. I can no way call this script as my own, it is just putting together of many pieces. A brief explanation follows for the uninitiated.&lt;br /&gt;&lt;br /&gt;The complete script can be found at the end of this post. To make it run just open notepad &gt; copy the entire script and save the file as "CompUp.bat". If you just double click the file, there is no log created. It will be mighty helpful for the script to create appropriate logs - this will do it:&lt;br /&gt;"d:\sba81\Compile\CompUp.bat 1&gt;&gt;d:\sb\Compile\CompUp.log 2&gt;&gt;&amp;amp;1"&lt;br /&gt;&lt;br /&gt;Let us look at individual sections of the script:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;"&gt;Initiation&lt;/span&gt;&lt;br /&gt;Set a few variables which can change across environments.&lt;br /&gt;&lt;blockquote&gt;@set SBL_ROOT=d:\sba81&lt;br /&gt;@set SBL_TOOLS_ROOT=d:\sba81\tools&lt;br /&gt;@set SRF_BACKUP=d:\sba81\Compile\SRFArchive&lt;br /&gt;@set SRF_FOLDER=%SBL_ROOT%\siebsrvr\objects\enu&lt;br /&gt;@set BSCRIPT_FOLDER=%SBL_ROOT%\siebsrvr\webmaster\enu&lt;br /&gt;&lt;br /&gt;@set OLD_SRF=siebel_sia.srf&lt;br /&gt;@set NEW_SRF=siebel_sia-%TODAY:~10,4%%TODAY:~4,2%%TODAY:~7,2%%NOW:~0,2%.srf&lt;br /&gt;@set CFG=%SBL_ROOT%\siebsrvr\bin\enu\epharma.cfg&lt;br /&gt;&lt;br /&gt;@set SIEBEL_SERVER="my_Siebsrvr"&lt;br /&gt;@set WEB_SERVER="my_Webserver"&lt;/blockquote&gt;Most of it is standard stuff, you might observe that the NEW_SRF is named such that repeated compiles on a single day will not cause any harm - assuming each compile takes at least an hour to complete. Pick any CFG of your choice. Siebel server, web server and gateway parameters are copied from the service names. To view service names go to Windows Start Menu &gt; Run &gt; Type 'services.msc' &gt; Hit OK. In services windows go to 'Properties' of the appropriate service and locate the name - these do not have spaces.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;"&gt;Compile&lt;/span&gt;&lt;br /&gt;Next comes the actual compile - use Siebel Tools command line options to initiate compile. When the batch file is being executed, you may actually see Tools open up, compile SRF and close.&lt;br /&gt;&lt;blockquote&gt;@ECHO %DATE% %TIME%: Compile SRF with %SBL_TOOLS_ROOT%\bin\enu\tools.cfg&lt;br /&gt;@%SBL_TOOLS_ROOT%\bin\siebdev.exe /c %SBL_TOOLS_ROOT%\bin\enu\tools.cfg /d ServerDataSrc /u &lt;user&gt; /p &lt;password&gt; /bc "Siebel Repository" %SRF_BACKUP%\%NEW_SRF%&lt;br /&gt;@IF %ERRORLEVEL% NEQ 0 GOTO ERR_HANDLER&lt;/password&gt;&lt;/user&gt;&lt;/blockquote&gt;&lt;br /&gt;One obvious point here is that you need Tools to be installed on the server. If you are using a box that cannot have Tools (or using other operating systems), you may need to write additional statements to telnet (or something similar) to the Tools box, compile SRF and transfer the same to Siebel server machine. If everything runs fine you will have the SRF compiled, hurray! On the other hand, if there is an error the batch execution just stops without executing further statements. These are scattered throughout the script to direct batch execution in case of errors.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;"&gt;Replace SRF&lt;/span&gt;&lt;br /&gt;Now, stop the server to enable us to replace SRF.&lt;br /&gt;&lt;blockquote&gt;net stop %SIEBEL_SERVER%&lt;br /&gt;@sleep 120&lt;br /&gt;&lt;/blockquote&gt;The sleep is required to wait for the server to actually stop. During execution you may note that 'net stop' command tells us that the service could not be stopped. What really happens is that it waits for too small a time for server to come down. 'sleep' can hold the further execution till defined time (120 seconds) to enable the siebel server to completely shutdown. Next step: replace srf.&lt;br /&gt;&lt;blockquote&gt;move /y %SRF_FOLDER%\%OLD_SRF% %SRF_BACKUP%\%NEW_SRF%_old&lt;br /&gt;move /y %SRF_BACKUP%\%NEW_SRF% %SRF_FOLDER%\%OLD_SRF%&lt;/blockquote&gt;Copy the newly compiled SRF to Siebel server, while rename the old SRF to denote the SRF it was replaced with. Next generate browser script:&lt;br /&gt;&lt;blockquote&gt;%SBL_ROOT%\siebsrvr\bin\genbscript %CFG% %BSCRIPT_FOLDER%&lt;/blockquote&gt;and start Siebel server:&lt;br /&gt;&lt;blockquote&gt;net start %SIEBEL_SERVER%&lt;/blockquote&gt;Just in case you were wondering, we don't need to wait for the Siebel server to actually startup. Restart Web Server service to put the new browser script in action.&lt;br /&gt;&lt;blockquote&gt;@REM net stop %WEB_SERVER%&lt;br /&gt;@REM net start %WEB_SERVER%&lt;/blockquote&gt;As an alternative you can always follow the SWE command route to refresh browser scripts. Well, that was easy wasn't it?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;"&gt;Complete Script&lt;/span&gt;&lt;br /&gt;You can download the batch file &lt;a href="http://www.esnips.com/doc/ff2ff788-ba95-4e53-98c9-5b1010452adf/compup"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;blockquote&gt;@REM Compile and Upload Utility - Batch file to compile SRF and 'activate' it on Siebel server&lt;br /&gt;@REM This is the Windows version! Use command "d:\sba81\Compile\CompUp.bat 1&gt;&gt;d:\sb\Compile\CompUp.log 2&gt;&gt;&amp;amp;1" to redirect o/p &amp;amp; error to log&lt;br /&gt;@REM&lt;br /&gt;&lt;br /&gt;@set COMPUP_LOG=d:\sba81\Compile\CompUp.log&lt;br /&gt;&lt;br /&gt;@ECHO ====================================================================================================================&lt;br /&gt;@ECHO %DATE% %TIME%: CompUp starting up..&lt;br /&gt;@ECHO %DATE% %TIME%: Set variables&lt;br /&gt;&lt;br /&gt;@set TODAY=%Date: =0%&lt;br /&gt;@set NOW=%Time: =0%&lt;br /&gt;@set SBL_ROOT=d:\sba81&lt;br /&gt;@set SBL_TOOLS_ROOT=d:\sba81\tools&lt;br /&gt;@set SRF_BACKUP=d:\sba81\Compile\SRFArchive&lt;br /&gt;@set SRF_FOLDER=%SBL_ROOT%\siebsrvr\objects\enu&lt;br /&gt;@set BSCRIPT_FOLDER=%SBL_ROOT%\siebsrvr\webmaster\enu&lt;br /&gt;&lt;br /&gt;@set OLD_SRF=siebel_sia.srf&lt;br /&gt;@set NEW_SRF=siebel_sia-%TODAY:~10,4%%TODAY:~4,2%%TODAY:~7,2%%NOW:~0,2%.srf&lt;br /&gt;@set CFG=%SBL_ROOT%\siebsrvr\bin\enu\epharma.cfg&lt;br /&gt;&lt;br /&gt;@set SIEBEL_SERVER="my_Siebsrvr"&lt;br /&gt;@set WEB_SERVER="my_Webserver"&lt;br /&gt;&lt;br /&gt;@ECHO %DATE% %TIME%: Compile SRF with %SBL_TOOLS_ROOT%\bin\enu\tools.cfg&lt;br /&gt;@%SBL_TOOLS_ROOT%\bin\siebdev.exe /c %SBL_TOOLS_ROOT%\bin\enu\tools.cfg /d ServerDataSrc /u &lt;user&gt; /p &lt;password&gt; /bc "Siebel Repository" %SRF_BACKUP%\%NEW_SRF%&lt;br /&gt;@IF %ERRORLEVEL% NEQ 0 GOTO ERR_HANDLER&lt;br /&gt;&lt;br /&gt;@ECHO %DATE% %TIME%: Stop Siebel server %SIEBEL_SERVER%..&lt;br /&gt;net stop %SIEBEL_SERVER%&lt;br /&gt;@sleep 120&lt;br /&gt;@IF %ERRORLEVEL% NEQ 0 GOTO ERR_HANDLER&lt;br /&gt;&lt;br /&gt;@ECHO %DATE% %TIME%: Copy SRF&lt;br /&gt;move /y %SRF_FOLDER%\%OLD_SRF% %SRF_BACKUP%\%NEW_SRF%_old&lt;br /&gt;@IF %ERRORLEVEL% NEQ 0 GOTO ERR_HANDLER&lt;br /&gt;move /y %SRF_BACKUP%\%NEW_SRF% %SRF_FOLDER%\%OLD_SRF%&lt;br /&gt;@IF %ERRORLEVEL% NEQ 0 GOTO ERR_HANDLER&lt;br /&gt;&lt;br /&gt;@ECHO %DATE% %TIME%: Generate browser script&lt;br /&gt;%SBL_ROOT%\siebsrvr\bin\genbscript %CFG% %BSCRIPT_FOLDER%&lt;br /&gt;&lt;br /&gt;@ECHO %DATE% %TIME%: Start Siebel server %SIEBEL_SERVER%&lt;br /&gt;net start %SIEBEL_SERVER%&lt;br /&gt;@IF %ERRORLEVEL% NEQ 0 GOTO ERR_HANDLER&lt;br /&gt;&lt;br /&gt;@REM ECHO %DATE% %TIME%: Restart Webserver %WEB_SERVER%&lt;br /&gt;@REM net stop %WEB_SERVER%&lt;br /&gt;@IF %ERRORLEVEL% NEQ 0 GOTO ERR_HANDLER&lt;br /&gt;@REM net start %WEB_SERVER%&lt;br /&gt;@IF %ERRORLEVEL% NEQ 0 GOTO ERR_HANDLER&lt;br /&gt;&lt;br /&gt;@GOTO End&lt;br /&gt;&lt;br /&gt;:ERR_HANDLER&lt;br /&gt;@ECHO Job failed! Error Code: %ERRORLEVEL%. Refer log file for further details.&lt;br /&gt;&lt;br /&gt;:End&lt;br /&gt;@ECHO %DATE% %TIME%: CompUp end!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/password&gt;&lt;/user&gt;&lt;/blockquote&gt;</content><link href="http://crmcog.blogspot.com/2010/03/siebel-batch-script-to-compile-and.html#comment-form" rel="replies" title="4 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/5088409165989586340" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/5088409165989586340" rel="self" type="application/atom+xml"/><link href="http://crmcog.blogspot.com/2010/03/siebel-batch-script-to-compile-and.html" rel="alternate" title="Siebel: Batch Script to Compile and Replace SRF" type="text/html"/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3508230947956282102.post-3350557260102926757</id><published>2009-07-11T20:57:00.001+05:30</published><updated>2009-07-11T20:59:40.545+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="social-crm"/><title type="text">Defining Social CRM</title><content type="html">&lt;p&gt;With the advent of the next edition of CRM @ Speed of Light near due and keeping in mind that the new edition is going to have a LOT of Social CRM, we have a solid definition of Social CRM from Paul Greenberg.&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;SCRM is a philosophy &amp;amp; a business strategy, supported by a technology platform, business rules, workflow, processes &amp;amp; social characteristics, designed to engage the customer in a collaborative conversation in order to provide mutually beneficial value in a trusted &amp;amp; transparent business environment. It’s the company’s response to the customer’s ownership of the conversation.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;There is also a condensed discussion of what Social CRM is about and is definitely worth a look at. What interests me at this point are these quotes (quotes by Mr. Greenberg, comments are mine):&lt;/p&gt; &lt;ul&gt;&lt;li&gt;“Social CRM is not a replacement for CRM”: In my view SCRM would never replace conventional CRM. Of course it will add a better communication channel between the organization and customers. This facilitates a more effective listening to the customers , providing a better service proactively and maybe sell/up-sell/cross-sell products/services&lt;/li&gt;&lt;li&gt;“The customer controls the business ecosystem and the conversation, but not the business”: The organization itself carries on with its established way of doing business, what SCRM provides is an add-in (a powerful one at that) to effectively align business processes to customer needs and determine how to effectively manage business by mapping customer’s expectations with the organization’s goals&lt;/li&gt;&lt;li&gt;“We’ve moved from the transaction to the interaction with customers”: The customers do not talk and get recorded as a single “activity”. We need to capture the length &amp;amp; breadth of how the customer views the organization, what he is saying about the service/products and determine how we can turn him into a believer&lt;/li&gt;&lt;li&gt;“When you look at the SCRM applications out there - there are no actual SCRM suites, no matter what the claims of any company on either the CRM or social tools side”: One of the basic ideas to being customer friendly is to engage the customer on his turf. CRM suites will capture this information from multiple sources, help analyze and actionize the identified items. But I don’t believe this will discourage organizations from using the Social CRM tag. As of today any CRM suite which can provide a decent integration with Social media out there may classify itself as enabling Social CRM. But I would expect the product vendors to delve deeper into the interfacing capabilities to retrieve, understand and act on the “word on street”. &lt;/li&gt;&lt;/ul&gt; Read more at &lt;a href="http://blogs.zdnet.com/crm/?p=829"&gt;ZDNet Blogs&lt;/a&gt;</content><link href="http://crmcog.blogspot.com/2009/07/defining-social-crm.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/3350557260102926757" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/3350557260102926757" rel="self" type="application/atom+xml"/><link href="http://crmcog.blogspot.com/2009/07/defining-social-crm.html" rel="alternate" title="Defining Social CRM" type="text/html"/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3508230947956282102.post-1518789180673925197</id><published>2009-06-16T07:42:00.004+05:30</published><updated>2009-06-16T07:50:19.231+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="siebel-tech"/><category scheme="http://www.blogger.com/atom/ns#" term="social-media"/><title type="text">Siebel: Integrating Twitter</title><content type="html">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;span style="font-family:sans-serif;"&gt;If you have not yet seen the &lt;/span&gt;demo of Twitter integration with Siebel on &lt;a href="http://blogs.oracle.com/dipock/2009/04/add_twitter_search_to_siebel_i.html" target="_blank"&gt;Dipock's blog&lt;/a&gt;, it is probably a good time to see it. Available there is a demo video that lists out three basic steps to integrate Twitter search in Siebel. For those of you who have a slower internet connection, here are the steps:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Create a calculated field that uses a iFrame to retrieve Twitter search results based on Account name, URL will be something like "http://search.twitter.com/search?q=siebel crm"&lt;/li&gt;&lt;li&gt;Expose the field on a separate applet and display the results in a view&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Simple enough to allow the user to search for the account and what not, but how will we make this "actionable"? There comes the use of Siebel's powerful Virtual Business Components (VBC) functionality. Twitter exposes APIs that can fetch search results in atom format. A simple transformation followed by conversion to property set and voila, we have results in a format fit enough to be displayed in any view that you like. The steps you ask?&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Create VBC and applet based on VBC&lt;/li&gt;&lt;li&gt;Write supporting script/business service to make sense of the search results, to retrieve Twitter search results using API at http://search.twitter.com/search.atom&lt;/li&gt;&lt;li&gt;Transform and map the values to VBC fields&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Not exactly as simple as the previous idea, but the biggest advantage is that you can use this data for subsequent actions - may it be creating a follow-up activity for the Tweet, creating a Service Request to address the complaint raised or just to track the conversation thread for the particular user/tweet.&lt;br /&gt;&lt;br /&gt;Although these steps are listed with Twitter in focus, the same will be applicable for any Social media which expose APIs in atom/xml format. The process itself is not entirely different from your regular interface to an enterprise app, but yes, the treatment of how exactly you leverage the Social media effectively certainly is.&lt;br /&gt;&lt;/div&gt;</content><link href="http://crmcog.blogspot.com/2009/06/siebel-integrating-twitter.html#comment-form" rel="replies" title="1 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/1518789180673925197" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/1518789180673925197" rel="self" type="application/atom+xml"/><link href="http://crmcog.blogspot.com/2009/06/siebel-integrating-twitter.html" rel="alternate" title="Siebel: Integrating Twitter" type="text/html"/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3508230947956282102.post-5521635470707127944</id><published>2009-06-08T07:49:00.003+05:30</published><updated>2009-06-08T07:54:04.659+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="know-how"/><title type="text">CRM @ The Speed of Light - 4th Edition Excerpts</title><content type="html">CRM @ The Speed of Light has been a successful, popular book for all things CRM. If you have not read that, consider doing it now. Or better still, wait for the next edition. Paul Greenberg, author &amp;amp; CRM Guru says it is rewritten from scratch. "Raw" excerpts for a couple of chapters on his &lt;a href="http://blogs.zdnet.com/crm/?p=755"&gt;blog&lt;/a&gt;.</content><link href="http://crmcog.blogspot.com/2009/06/crm-speed-of-light-4th-edition-excerpts.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/5521635470707127944" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/3508230947956282102/posts/default/5521635470707127944" rel="self" type="application/atom+xml"/><link href="http://crmcog.blogspot.com/2009/06/crm-speed-of-light-4th-edition-excerpts.html" rel="alternate" title="CRM @ The Speed of Light - 4th Edition Excerpts" type="text/html"/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>0</thr:total></entry></feed>