<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Siebel Unleashed</title>
	<atom:link href="http://siebelunleashed.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://siebelunleashed.com</link>
	<description>Making Siebel Simple</description>
	<lastBuildDate>Sat, 28 Aug 2010 19:37:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Scripting VS Workflows</title>
		<link>http://siebelunleashed.com/scripting-vs-workflows/</link>
		<comments>http://siebelunleashed.com/scripting-vs-workflows/#comments</comments>
		<pubDate>Wed, 25 Aug 2010 15:12:46 +0000</pubDate>
		<dc:creator>neel</dc:creator>
				<category><![CDATA[Case Study]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[Scriptless Siebel]]></category>
		<category><![CDATA[Workflows]]></category>

		<guid isPermaLink="false">http://siebelunleashed.com/?p=1102</guid>
		<description><![CDATA[Before I start with the post I want to say. I know Scripting is not good for upgrades, performance and I try to avoid it as much as I can. But a recent requirement that I worked upon has got me thinking and I don’t seem to have an answer. The Requirement: Create a button [...]]]></description>
			<content:encoded><![CDATA[<p>Before I start with the post I want to say. <em>I know Scripting is not good for upgrades, performance and I try to avoid it as much as I can.</em> But a recent requirement that I worked upon has got me thinking and I don’t seem to have an answer.</p>
<p><strong>The Requirement:</strong></p>
<p>Create a button on a List Applet. On Click of that button the Status of SR should get changed to ‘Close SR’.<span id="more-1102"></span></p>
<p><strong>Solution:</strong></p>
<p>As we all know there are several ways to this requirement. If button was not involved then a Simple <a href="http://siebelunleashed.com/on-field-update-set-user-property-drawback/">On Field Update Set n user property</a> would have sufficed. In this case we need to invoke a custom method that should set the field value. That leaves us with two approaches</p>
<p><strong>Approach 1:</strong></p>
<p>Create a <a href="http://siebelunleashed.com/named-method-on-update-field-user-property-in-action/">Named Method n user property</a>. Invoke a workflow and set the status to ‘Close SR’. The workflow and user property will look something like this.</p>
<div>
<p><code></p>
<blockquote><p>Named Method 10 :<br />
"CloseSR", "INVOKESVC", "Service Request", "Workflow Process Manager", "RunProcess", "'ProcessName'", "Close Service Request", "'RowId'", "[Id]"</p></blockquote>
<p></code></p>
<div><code> </code></div>
<div><code> </code></div>
<p><code><a href="http://siebelunleashed.com/wp-content/uploads/2010/08/CloseSRWorkflow.png"><img style="display: inline; border-width: 0px;" title="CloseSRWorkflow" src="http://siebelunleashed.com/wp-content/uploads/2010/08/CloseSRWorkflow_thumb.png" border="0" alt="CloseSRWorkflow" width="507" height="95" /></a></code></p>
<p><code> </code>This approach gives us a <a href="http://siebelunleashed.com/category/scriptless-siebel/">Scriptless Solution.</a></p>
<p><strong>Approach 2:</strong></p>
<p>In the Service Request BC BusComp_PreInvokeMethod do the following</p>
<blockquote><p><code>if(MethodName == “CloseSR”)<br />
{<br />
this.SetFieldValue("Status","Close SR");<br />
this.SetFieldValue("Desired Status","Closed");<br />
return (CancelOperation);<br />
break;<br />
}</code></p></blockquote>
<p>I know <strong>scripting is bad and scripting on Objects is even worse</strong> but we can clearly see that <strong>Approach 1</strong> involves calling a <strong>business service (Workflow Process Manager)</strong> to invoke workflow and Approach 2 is just doing a SetFieldValue.  I think the effort in Approach 1 is higher as well as the overhead involved to complete the task. So, what should we do in this case.</p>
<p>I understand the point that <em><a href="http://siebel-essentials.blogspot.com/2008/08/close-to-standard.html">it starts like this and over a period of time it becomes a mess</a></em> but if I start following the Approach 1 for all the similar requirement I believe the situation will get worse.  I am not really sure what is the best thing to do here so I am putting this here in the open for everybody to give there opinion and find the best possible answer.</p>
<p><strong>I am listening………</strong></p>
<p><strong><span style="color: #ff0000;">[Update]</span></strong></p>
<p><span style="color: #800000;">Suggestion by </span><strong><span style="color: #800000;">Sudha</span></strong><span style="color: #800000;"> worked great. I was able to achieve the solution by creating two Named Method n user properties to set the values for two fields.</span></p>
<p><span style="color: #800000;">Thanks Sudha and everyone for discussing and hopefully this will help others to avoid scripting in similar situations.</span></p>
</div>
<div id="wherego_related"><h3>Visitors to this post, also read:</h3><ul><li><a href="http://siebelunleashed.com/drilldown-through-menu-item/" rel="bookmark" class="wherego_title">Drilldown through menu item</a></li><li><a href="http://siebelunleashed.com/use-of-apply-activate-siebe-tools/" rel="bookmark" class="wherego_title">Apply and Activate button in Siebel Tools</a></li><li><a href="http://siebelunleashed.com/getting-property-echo-method/" rel="bookmark" class="wherego_title">Getting a property &#8211; Echo method</a></li><li><a href="http://siebelunleashed.com/setting-property-echo-method-explanation/" rel="bookmark" class="wherego_title">Setting property &#8211; Echo method &#8211; explanation</a></li><li><a href="http://siebelunleashed.com/query-and-querybidirectional/" rel="bookmark" class="wherego_title">Query and QueryBiDirectional</a></li><li>Powered by <a href="http://ajaydsouza.com/wordpress/plugins/where-did-they-go-from-here/">Where did they go from here?</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://siebelunleashed.com/scripting-vs-workflows/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Siebel Deployment -Release management.</title>
		<link>http://siebelunleashed.com/siebel-deployment-release-management-through-scripts/</link>
		<comments>http://siebelunleashed.com/siebel-deployment-release-management-through-scripts/#comments</comments>
		<pubDate>Tue, 10 Aug 2010 11:03:19 +0000</pubDate>
		<dc:creator>neel</dc:creator>
				<category><![CDATA[Back to Basics]]></category>
		<category><![CDATA[Siebel Administration]]></category>
		<category><![CDATA[Siebel Admin]]></category>

		<guid isPermaLink="false">http://siebelunleashed.com/?p=1099</guid>
		<description><![CDATA[Today Ram Mohan reader of Siebel Unleashed is sharing with us an article describing basics activities performed for Siebel Deployment during a release.  A good articles for Siebel newbie&#8217;s especially who have just started as Siebel Administrator. Please do provide your feedback. Introduction  Siebel Deployment or Releases are done to prorogate the developed changes from [...]]]></description>
			<content:encoded><![CDATA[<p><strong><span style="color: #c0c0c0;">Today <span style="color: #000000;">Ram Mohan</span> reader of Siebel Unleashed is sharing with us an article describing basics activities performed for Siebel Deployment during a release.  A good articles for Siebel newbie&#8217;s especially who have just started as Siebel Administrator. Please do provide your feedback.</span></strong></p>
<hr /><strong>Introduction</strong><strong> </strong></p>
<p>Siebel Deployment or Releases are done to<strong> prorogate the developed changes from one environment to another environment</strong> like Dev to test, test to UAT, UAT to prod. Migrating repositories between databases is a common requirement when going live to a new development, testing, or production environment.</p>
<p><span id="more-1099"></span></p>
<p>Whenever there is release or migration between environments the following Type of data needs to be moved.</p>
<ol>
<li>SRF</li>
<li>Siebel Repository</li>
<li>Master Data</li>
</ol>
<p><span style="color: #c0c0c0;"><strong>Note: We take the example of moving the changes from DEV to testing Environment. So Development is the Source Environment and Test is the Target Environment.</strong></span></p>
<p><strong>Siebel Repository Migration from Source to Target:</strong></p>
<p><strong>Siebel Repository Migration</strong> is required whenever <strong>there is change in workflows or database layer objects</strong> (<span style="color: #c0c0c0;"><strong>Table, columns or indexes etc…)</strong></span> Siebel Repository. Sometimes we will move only the SRF without Siebel Repository for small bug fix releases. It is Best practice to move the Siebel repository for all the Migrations or Builds from one Environment to another environment regardless of the type of release<span style="color: #c0c0c0;"><strong>(may be bug fix or big Release</strong></span>).</p>
<p>There are two ways of doing the Repository migration</p>
<ol>
<li>Though the Database configuration Wizard provided by the Siebel which provides user interface</li>
<li>Though the Scripts – Directly using the scripts which are intern created and executed by the Siebel Database Configuration Wizard.</li>
</ol>
<p>Even if you do the Repository migration though the Database configuration wizard it will create same scripts and execute in the back ground.</p>
<h5><span style="color: #0000a0;">Please refer the Going live with the <strong>Siebel Business Application PDF</strong> from Siebel bookshelf for doing the repository migration through Siebel Database Configuration Wizard.</span></h5>
<p><strong>Steps for Repository migration through scripts (Windows Environment):</strong></p>
<ol>
<li>Export the Repository from Source Environment(DEV):
<ul>
<li>Login to one of the Application server in the Source Environment (Dev)</li>
<li>Open the Command prompt and Execute the Following Command with the Parameters of the Environment.<br />
$SIEBEL_HOME\siebsrvr\bin\repimexp.exe /a E /G ALL /u SADMIN /p password /c devsiebent_DSN /d siebel /r ‘Siebel Repository&#8217; /f D:\export.dat /l D:\export.log</li>
<li>Where $SIEBEL_HOME\siebsrvr\bin\repimexp.exe<strong> </strong>is the Location of the<strong> repimexp.exe, </strong>which is Executable file to Export Siebel repository. Same Executable will be used for the Repository Export and Import but with Different Action (/a) option.</li>
<li>After successful run of the above script Export Dump file (export.dat) and Log file will be created in the specified directories in the script.</li>
</ul>
</li>
<li>Move the export file to the Application server in Target environment.</li>
<li>Stop the Siebel Application servers in target environment</li>
<li>Import the Repository in the Destination Environment using the below Command
<ul>
<li>$SIEBEL_HOME\siebsrvr\bin\repimexp /a I /G ALL /u SADMIN /p ******* /c devsiebent_DSN /d siebel /r <strong>NewSiebelRepository</strong> /f D:/export.dat /l D:\import.log</li>
</ul>
</li>
<li>Log-in to tools in the target environment and rename the Old repository appropriately and rename the newly imported repository <span style="color: #c0c0c0;">(</span><strong><span style="color: #c0c0c0;">NewSiebelRepository)</span> </strong>to ‘Siebel Repository’.</li>
<li>Run the DDL SYNC if there is any Table Level Changes in the New Siebel Repository using below Scripts.
<ul>
<li>Create the Schema file from the Repository using below command:<br />
$SIEBEL_HOME\siebsrvr\bin<strong>\</strong>ddldict /u sadmin /p SADMIN_PASSWORD /c devsiebent_DSN /d Siebel /f &#8216;D:\schema.ddl&#8217; /e y /a y /l &#8216;/D:\dictionayschema.log&#8217; /n &#8216;Siebel Repository&#8217; /T DCIR</li>
<li>Apply the Schema changes to database from schema file:<br />
$SIEBEL_HOME\siebsrvr\bin<strong>\</strong>ddlimp /u siebel /p SIEBEL_PASSWORD /c devsiebent_DSN /g SSE_ROLE /f &#8216;D:\schema.ddl&#8217; /e n /B TS_PRDSBL_DATA /X TS_PRDSBL_IDX /R Y /W Y /s N /l &#8216;/D:\Applyschema.log&#8217;</li>
</ul>
</li>
<li>Move the SRF to the Target Environment servers</li>
<li>Run the <strong>genbscript</strong> to generate browser script using following command and move it to Web server’s Public Folder
<ul>
<li>$SIEBEL_HOME\siebsrvr\bin\genbscript $SIEBEL_HOME\siebsrvr\bin\enu\publicsector.cfg TARGET_LOCATION_PATH ENU</li>
<li>You need to run this command once for each language your Application supports</li>
</ul>
</li>
<li>Start the Application servers</li>
</ol>
<p> </p>
<p><strong>Master Data Migration:</strong></p>
<p>To move Master data such as List of Values, responsibilities, Views, PDQs etc we can use one of the below given approaches</p>
<ol>
<li><a href="http://siebelunleashed.com/application-deployment-manager-adm-introduction/" target="_blank">ADM (Application Deployment Manager)</a>: Please Refer the Siebel Application Deployment manager Guide for migrations using ADM.</li>
<li><a href="http://siebelunleashed.com/siebel-enterprise-integration-manager-eim-an-overview/" target="_blank">EIM (Enterprise Integration Manager):</a> can also be used to achieve the same.</li>
</ol>
<p> <strong>SRF Movement from Source (DEV) to Target (Test) Environment:</strong></p>
<p>SRF can be moved in following ways from source to target.</p>
<ol>
<li>Compile SRF in Source Environment (DEV) and move it to target Environment. This approach is followed Do this whenever there in no repository movement (in minor bug fixes release).</li>
<li>Move the Siebel Repository to the Target Environment (Test) and Compile SRF in target environment. This is followed normal releases.</li>
</ol>
<p>Using the <strong>Command Line Scripts</strong> is very easy if you understand importance and Parameters of Each Command.  Below is the explanation of some of the switches used in different commands in this article:</p>
<p><strong>/a</strong>: Represents the Action to be taken, <strong>E for Export</strong> the Siebel Repository. <strong>I for import</strong> the Siebel repository.<br />
<strong>/G:</strong> Rrepresents the languages to be exported or imported. <strong>Option AL</strong>L will export or Import all the languages in the Repository or DAT file<br />
<strong>/C:</strong> Represents the<strong> Server Data source</strong> name to connect to Database<strong>.</strong> Check the Application cfg file or ODBC configuration Tool for the exact server Data source name<br />
<strong>/d: </strong>Represents the table owner name, normally it is SIEBEL<br />
<strong>/r:</strong> Represents the <strong>Repository name</strong> to be Exported .Most of the Environments it will be ‘Siebel Repository’. Since a Siebel Environment can have multiple Repositories but only one with the Name ‘Siebel Repository’ <strong><span style="color: #c0c0c0;">(repository name to be used by Application is specified in the Application cfgs)</span></strong>.<br />
<strong>/f:</strong> Represents Export file name and Location, it will be in .dat format.<br />
<strong>/l: </strong>Specifies is the Location of the Log File.</p>
<p>The above commands Paths and Directory structure will change between Windows and UNIX environments. You have to 4 Commands to do the entire Repository migration task. Prepare the above commands and save them as Batch scripts in Windows and Shell scripts in UNIX for future release. You can do simple modifications to these scripts for every release and execute them.</p>
<p>Please let me know if any clarifications, modifications and OS specific Commands required.</p>
<div id="wherego_related"><h3>Visitors to this post, also read:</h3><ul><li><a href="http://siebelunleashed.com/extracting-sftp-siebel-attachment/" rel="bookmark" class="wherego_title">Extracting and SFTP Siebel attachment</a></li><li><a href="http://siebelunleashed.com/resetting-all-log-levels/" rel="bookmark" class="wherego_title">Resetting All Log Levels</a></li><li><a href="http://siebelunleashed.com/application-deployment-manager-adm-introduction/" rel="bookmark" class="wherego_title">Application Deployment Manager (ADM)–Introduction</a></li><li><a href="http://siebelunleashed.com/zero-downtime-siebel-srf-migration/" rel="bookmark" class="wherego_title">Zero downtime Siebel SRF Migration</a></li><li><a href="http://siebelunleashed.com/file-system-clean-up/" rel="bookmark" class="wherego_title">Siebel File System Clean Up</a></li><li>Powered by <a href="http://ajaydsouza.com/wordpress/plugins/where-did-they-go-from-here/">Where did they go from here?</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://siebelunleashed.com/siebel-deployment-release-management-through-scripts/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Extracting and SFTP Siebel attachment</title>
		<link>http://siebelunleashed.com/extracting-sftp-siebel-attachment/</link>
		<comments>http://siebelunleashed.com/extracting-sftp-siebel-attachment/#comments</comments>
		<pubDate>Wed, 28 Jul 2010 11:34:32 +0000</pubDate>
		<dc:creator>neel</dc:creator>
				<category><![CDATA[Case Study]]></category>
		<category><![CDATA[EAI]]></category>
		<category><![CDATA[integration]]></category>
		<category><![CDATA[workflow]]></category>

		<guid isPermaLink="false">http://siebelunleashed.com/?p=1097</guid>
		<description><![CDATA[Recently I worked on a simple yet different type of integration. The requirement statement of integration was pretty simple.  Requirement:  When a Service Request is closed then attachments of that SR should be extracted and sent to a different application though SFTP.  The interesting part in this requirement was SFTP part as I had never done that [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I worked on a simple yet different type of integration. The requirement statement of integration was pretty simple. </p>
<p><strong>Requirement:</strong> </p>
<p>When a Service Request is closed then attachments of that SR should be extracted and sent to a different application though SFTP. </p>
<p>The interesting part in this requirement was SFTP part as I had never done that before. </p>
<p><strong>Approach:</strong> </p>
<p>The approach for this requirement was pretty simple: </p>
<ol>
<li>Setup a Policy which will trigger a workflow when SR is closed <span style="color: #888888;"><strong>(Policy because we wanted it to be asynchronous)</strong></span></li>
<li>The workflow will query for attachment records and run a loop around them</li>
<li>A business service will be called  in this loop which will
<ol>
<li>Query for attachment record in eScript</li>
<li>Execute GetFile method to obtain path of uncompressed file</li>
<li>Use <strong>Clib.System</strong> command execute a shell script on UNIX <span style="color: #888888;"><strong>(passing path as argument)</strong></span></li>
<li>Shell script will issue SFTP command to actually put files on different application server</li>
</ol>
</li>
</ol>
<p><strong>Challenges:</strong> </p>
<p>The biggest problem that I faced in this was making SFTP work. </p>
<p><strong>FTP protocol</strong> allows you to hardcode username and passwords in shell scripts like this: </p>
<blockquote><p><code>ftp -n ftpsite &lt;&lt; !<br />
quote USER username<br />
quote PASS password<br />
binary<br />
put $1<br />
quit </code></p></blockquote>
<p>But <strong>SFTP was built to overcome this limitation</strong> and doesn&#8217;t allow password to supplied as an argument due to security reasons <strong>(S stands for Secure)</strong>. So, you have following option to make <strong>SFTP work.</strong> </p>
<ol>
<li><strong>SSH Keys:</strong>The most common method <strong><span style="color: #888888;">(which we also used)</span></strong> is to use ssh keys.  The system that wants to connect <strong><span style="color: #808080;">(in this case it was Siebel)</span></strong> will generate <strong>a Public key and a Private Key. </strong>Public Key resides on the target server and Private Key resides on the server where the session is initiated <span style="color: #808080;"><strong>(Siebel). </strong></span><span style="color: #000000;">This approach allows you to connect to target server without actually using the password.</span> </li>
<li><a href="http://programming.ccp14.ac.uk/expect/" target="_blank"><strong>Expect Library:</strong> </a> <br />
The Second approach is to use Expect Library. It allows you to automate certain tasks but script is tedious to write and often error prone. </li>
<li><a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html" target="_blank"><strong>PSFTP tool</strong></a>: <br />
You can also use PSFTP tool which allows you supply password as an argument and takes care of rest of things. </li>
</ol>
<p>The Second and third approach are plagued with same problem as FTP, your password is exposed to everybody who has access to shell script. This is not desirable in secure environments.</p>
<div id="wherego_related"><h3>Visitors to this post, also read:</h3><ul><li><a href="http://siebelunleashed.com/query-and-querybidirectional/" rel="bookmark" class="wherego_title">Query and QueryBiDirectional</a></li><li><a href="http://siebelunleashed.com/line-break-calculated-field-solution/" rel="bookmark" class="wherego_title">Line Break in Calculated Field-Solution</a></li><li><a href="http://siebelunleashed.com/siebel-crm-how-to-configure-a-join/" rel="bookmark" class="wherego_title">Siebel CRM How to &#8211; Configure a Join.</a></li><li><a href="http://siebelunleashed.com/siebel-enterprise-integration-manager-eim-an-overview/" rel="bookmark" class="wherego_title">Siebel Enterprise Integration Manager (EIM) &#8211; An Overview.</a></li><li><a href="http://siebelunleashed.com/task-based-ui-siebel78-starting-wizard/" rel="bookmark" class="wherego_title">Task based UI@Siebel 7.8-Starting the Wizard</a></li><li>Powered by <a href="http://ajaydsouza.com/wordpress/plugins/where-did-they-go-from-here/">Where did they go from here?</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://siebelunleashed.com/extracting-sftp-siebel-attachment/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Is scripting evil?</title>
		<link>http://siebelunleashed.com/is-scripting-evil/</link>
		<comments>http://siebelunleashed.com/is-scripting-evil/#comments</comments>
		<pubDate>Sun, 18 Jul 2010 15:26:53 +0000</pubDate>
		<dc:creator>neel</dc:creator>
				<category><![CDATA[Functional Siebel]]></category>
		<category><![CDATA[eScript]]></category>
		<category><![CDATA[Scripting]]></category>

		<guid isPermaLink="false">http://siebelunleashed.com/?p=1095</guid>
		<description><![CDATA[The term Scripting has always had a negative vibe around it in Siebel. It is avoided like plague and advised to be only used as  last resort. Yet there has  not a single project I seen in my 5 years of experience in Siebel that doesn’t use scripting. I am not an advocate of scripting.  [...]]]></description>
			<content:encoded><![CDATA[<p>The term Scripting has always had a negative vibe around it in <strong>Siebel</strong>. It is avoided like plague and advised to be only used as  last resort. Yet there has  not a single project I seen in my 5 years of experience in Siebel that doesn’t use scripting. I am not an advocate of scripting.  I understand the reasons of not using scripting and also the problems one can face when trying to use scripting. Some of the main reasons or pitfalls of scripting (that I have come to know) are as following:</p>
<p><strong>1. Performance:</strong><br />
Siebel eScript is an interpreted language which means it is read and executed by eScript engine line by line at runtime which affects performance of a Siebel application. Also the functions and script has to be loaded in memory which means a badly written script can easily cause memory leaks and application crash.</p>
<p><strong>2. Upgrade:</strong><br />
This is one the biggest reasons of avoiding scripts. As you never know when a function will be made obsolete by Siebel an you need to replace it with new function. Also, Siebel doesn’t take care of scripting and you need to do manual effort to port your scripts to upgraded version</p>
<p><strong>3. Manageability:</strong><br />
Writing scripts here and there and all over application makes application difficult to manage which means you never know when a small change done on one object might introduce a error in other object application. Also script written by one developer needs to be understood first before making changes in it making it is a time consuming and error prone process.</p>
<p>Now, what are reasons that force us to <strong>still resort to scripting despite the pitfalls and problems discussed above</strong>. I think below are the prime reasons for that but feel free to add to it in case if you feel something is missing:</p>
<p><strong>1. Lack of declarative solution:</strong><br />
More often than not complex business requirements force us to use scripting as there are no declarative solution available to complete them</p>
<p><strong>2. Tight Deadlines:</strong><br />
Although writing scripting is a time consuming task but still it is easier to complete complex requirement using scripting than configuration and workflows.</p>
<p><strong>3. Lack of knowledge:</strong><br />
To complete a complex requirement through declarative solution requires thorough knowledge of Siebel data model (database and tables) which  comes after years of experience where as scripting requires you to have knowledge of BO layer which makes easy to implement requirements using scripting.</p>
<p>This lands us in a <strong>Catch 22 situation</strong>. On one hand we fill the mind of developer to focus on declarative solutions and avoid scripting at all cost and on other hand more often than not he ends up writing scripts to achieve complex requirements. The biggest pitfall of such a paradox is: <strong>“Developer just uses eScript and doesn’t try to understand it, which results in inefficient and messy solutions.”</strong></p>
<p>I am not supporting eScript but I am just trying to say that we end up using eScript sooner or later, so why not understand it better in order to use it in most efficient way when the time comes. So, I ask this question again</p>
<p><strong>Is Scripting is really EVIL?</strong></p>
<p><strong>My answer to this question is NO</strong>. Atom bomb destroyed  Nagasaki and Hiroshima and also movies like Armageddon has shown that Atom Bomb  might be only thing that might save our earth in case if an asteroid decides us  to pay a visit <img src='http://siebelunleashed.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . So, it really depends on how you use a particular thing. Even  a <strong>solution achieved</strong> through <strong>configuration can be as  devastating</strong> as a solution achieved through scripting if not done  properly. I have actually seen some solutions function better when done through  scripting as compared to configuration. I have seen developers creating tables  and BC’s so that they can avoid writing a 10 lines of code and use data map instead.</p>
<p>Now, the question is do we need to have such an <strong>extreme view for  scripting</strong> and also <strong>when to use scripting and when to avoid  scripting</strong>??</p>
<p>According to me <strong>scripting on BC’s and Applet’s events</strong> should  be avoided <span style="color: #808080;"><strong>(almost like plague)</strong> <span style="color: #000000;">but when it comes to finding solution of complex business  requirements then you should keep you mind open and evaluate both scripting as  well as declarative solution. </span></span>Even <a href="http://siebel-essentials.blogspot.com" target="_blank">Alex</a> doesn’t consider a well  written business service as scripting. <strong>So, what do you  think???</strong></p>
<div id="wherego_related"><h3>Visitors to this post, also read:</h3><ul><li><a href="http://siebelunleashed.com/extracting-sftp-siebel-attachment/" rel="bookmark" class="wherego_title">Extracting and SFTP Siebel attachment</a></li><li><a href="http://siebelunleashed.com/its-raining-frameworks/" rel="bookmark" class="wherego_title">It&#8217;s raining frameworks</a></li><li><a href="http://siebelunleashed.com/scripting-vs-workflows/" rel="bookmark" class="wherego_title">Scripting VS Workflows</a></li><li><a href="http://siebelunleashed.com/siebel-crm-back-to-basics-siebel-architechture/" rel="bookmark" class="wherego_title">Siebel CRM &#8211; Back to Basics (Siebel Architechture).</a></li><li><a href="http://siebelunleashed.com/what-are-products-and-assets/" rel="bookmark" class="wherego_title">What are Products and Assets?</a></li><li>Powered by <a href="http://ajaydsouza.com/wordpress/plugins/where-did-they-go-from-here/">Where did they go from here?</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://siebelunleashed.com/is-scripting-evil/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Calculated field and Picklist</title>
		<link>http://siebelunleashed.com/calculated-field-and-picklist/</link>
		<comments>http://siebelunleashed.com/calculated-field-and-picklist/#comments</comments>
		<pubDate>Wed, 07 Jul 2010 11:03:55 +0000</pubDate>
		<dc:creator>neel</dc:creator>
				<category><![CDATA[Case Study]]></category>
		<category><![CDATA[Configuration]]></category>

		<guid isPermaLink="false">http://siebelunleashed.com/?p=1093</guid>
		<description><![CDATA[Today Pankaj Juneja a reader of unleashed is sharing a case study where a Picklist on a calculated field helped him solve a problem. Many of us know that a calculated field can be made editable by putting a pick list and a pick map to it. I always use to think that what’s the [...]]]></description>
			<content:encoded><![CDATA[<p>Today <strong>Pankaj Juneja</strong> a reader of unleashed is sharing a case study where a Picklist on a calculated field helped him solve a problem.</p>
<hr />Many of us know that a calculated field can be made editable by putting a pick list and a pick map to it. I always use to think that what’s the use of Calculated Field by making it editable by showing a pick list when a user really can’t do anything much with it.</p>
<p><span id="more-1093"></span></p>
<p>Recently I came across a problem in which I used it to save myself from a tricky situation. I was using <strong>S_ORG_EXT_ XM</strong> table to build a new entity which is having <strong>1: M relationship with Account</strong>. We used most of the ATTRIB columns rather extending table. There was one field where we used <strong>LOVs to display Data to user</strong>. As per client coding standards, we were supposed to <strong>store LIC value</strong> <strong>in tables</strong> and <strong>show display values</strong> since the Application was supposed to go <strong>Multilingual in coming years</strong>. Since I was not aware of this standard and I placed an LOV on field based on ATTRIB and <strong>stored display value in column.</strong></p>
<p>I was using the below config , which is straightforward :</p>
<p><a href="http://siebelunleashed.com/wp-content/uploads/2010/07/clip_image002.jpg"><img style="display: inline; border-width: 0px;" title="clip_image002" src="http://siebelunleashed.com/wp-content/uploads/2010/07/clip_image002_thumb.jpg" border="0" alt="clip_image002" width="446" height="85" /></a></p>
<p>Picklist config –</p>
<p><a href="http://siebelunleashed.com/wp-content/uploads/2010/07/clip_image004.jpg"><img style="display: inline; border-width: 0px;" title="clip_image004" src="http://siebelunleashed.com/wp-content/uploads/2010/07/clip_image004_thumb.jpg" border="0" alt="clip_image004" width="446" height="71" /></a></p>
<p>When we realized this problem, I was suggested to make it <strong>Multilingual</strong> by giving <strong>Translation Table Name</strong> at <strong>column level</strong> but I realized that <strong>since it’s a reusable table (S_ORG_EXT_XM)</strong>. Tomorrow someone else can use it for some other entity and if I give Translation table, then that column will be useless for that developer since it won’t accept values other than those LOVs. More over its <strong>OOB table</strong> so doesn’t wanted to touch it as it might hamper Application upgrade.</p>
<p>I just quickly analyzed that now calculated field can be used here. Here is how it worked for me.</p>
<p>Remove pick list from existing field, place it on calculated field.</p>
<p><a href="http://siebelunleashed.com/wp-content/uploads/2010/07/clip_image006.jpg"><img style="display: inline; border-width: 0px;" title="clip_image006" src="http://siebelunleashed.com/wp-content/uploads/2010/07/clip_image006_thumb.jpg" border="0" alt="clip_image006" width="244" height="77" /></a></p>
<p>A <strong>Calculated Field</strong> Looking up LIC and having Pick list with 2 Pick Maps.</p>
<p>Now expose the above Calculated Field in Applet rather Actual Field. This will always show Display Value to User and behind the scenes store LIC in table via Pick map. Even Query, Sorting worked fine.</p>
<div id="wherego_related"><h3>Visitors to this post, also read:</h3><ul><li><a href="http://siebelunleashed.com/line-break-calculated-field-solution/" rel="bookmark" class="wherego_title">Line Break in Calculated Field-Solution</a></li><li><a href="http://siebelunleashed.com/query-and-querybidirectional/" rel="bookmark" class="wherego_title">Query and QueryBiDirectional</a></li><li><a href="http://siebelunleashed.com/assign-owner-performance-issue/" rel="bookmark" class="wherego_title">Assigning SR owner causes Performance issue</a></li><li><a href="http://siebelunleashed.com/line-break-in-a-calculated-field/" rel="bookmark" class="wherego_title">Line Break in a Calculated field</a></li><li><a href="http://siebelunleashed.com/framework-addweekdays/" rel="bookmark" class="wherego_title">Framework &#8211; addWeekDays</a></li><li>Powered by <a href="http://ajaydsouza.com/wordpress/plugins/where-did-they-go-from-here/">Where did they go from here?</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://siebelunleashed.com/calculated-field-and-picklist/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 0.618 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2010-09-03 07:48:20 -->
