<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://customerfx.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Jason Buss&amp;#39; Blog : Basics, Customizations, SalesLogix LAN Client</title><link>http://customerfx.com/pages/customization/archive/tags/Basics/Customizations/SalesLogix+LAN+Client/default.aspx</link><description>Tags: Basics, Customizations, SalesLogix LAN Client</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP2 (Build: 20611.960)</generator><item><title>Using Picklist data revisited</title><link>http://customerfx.com/pages/customization/2009/08/12/Using-Picklist-data-revisited.aspx</link><pubDate>Wed, 12 Aug 2009 11:00:00 GMT</pubDate><guid isPermaLink="false">e15581aa-2787-4c59-a940-524c09f5d256:40754</guid><dc:creator>Jason Buss</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://customerfx.com/pages/customization/rsscomments.aspx?PostID=40754</wfw:commentRss><comments>http://customerfx.com/pages/customization/2009/08/12/Using-Picklist-data-revisited.aspx#comments</comments><description>&lt;p&gt;Back in January, I posted about the SalesLogix picklist data structure, and outlined how to use the data found in the picklist table to populate other controls such as comboboxes and listboxes.&amp;nbsp; You can find that article &lt;a href="http://customerfx.com/pages/customization/2009/01/06/Understanding-SalesLogix-Picklists-data-structure.aspx" title="Understanding SalesLogix Picklists data structure" target="_blank"&gt;here&lt;/a&gt;.)&amp;nbsp; If you are performing customizations to version 7.2 or later of SalesLogx, this processes can be greatly simplified by using Application.Picklist instead of directly querying the database.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;By using Application.Picklist, you no longer need to understand how SalesLogix stores picklist data.&amp;nbsp; This also serves to clean up your code, since you don&amp;#39;t have to look at the picklist table.&lt;/p&gt;&lt;p&gt;As an example, here is code populating a ListBox control with the values from the &amp;quot;Contact Type&amp;quot; picklist. &lt;br /&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Dim x &lt;br /&gt;&lt;/p&gt;&lt;p&gt;Set objList = Application.PickLists.Item(&amp;quot;Contact Type&amp;quot;)&lt;br /&gt;    ListBox1.Items.Clear&lt;br /&gt;    For x = 0 To objList.Count - 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;        ListBox1.Items.Add(objList.Item(x))&lt;br /&gt;    Next&lt;br /&gt;    Set objList = Nothing&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;That&amp;#39;s all there is to it.&amp;nbsp; Much simpler than looking at the picklist data directly via a query.&amp;nbsp; Remember though, Application.picklists is ONLY available on implementations of SalesLogix version 7.2 or greater.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Thanks for reading!&amp;nbsp;&lt;img src="http://customerfx.com/emoticons/emotion-1.gif" alt="Smile" /&gt; &lt;br /&gt;&lt;/p&gt;&lt;img src="http://customerfx.com/aggbug.aspx?PostID=40754" width="1" height="1"&gt;</description><category domain="http://customerfx.com/pages/customization/archive/tags/SalesLogix+LAN+Client/default.aspx">SalesLogix LAN Client</category><category domain="http://customerfx.com/pages/customization/archive/tags/Controls/default.aspx">Controls</category><category domain="http://customerfx.com/pages/customization/archive/tags/Customizations/default.aspx">Customizations</category><category domain="http://customerfx.com/pages/customization/archive/tags/Development/default.aspx">Development</category><category domain="http://customerfx.com/pages/customization/archive/tags/Basics/default.aspx">Basics</category><category domain="http://customerfx.com/pages/customization/archive/tags/How-To/default.aspx">How-To</category><category domain="http://customerfx.com/pages/customization/archive/tags/vbscript/default.aspx">vbscript</category><category domain="http://customerfx.com/pages/customization/archive/tags/Picklists/default.aspx">Picklists</category></item><item><title>Using SQL views to incorporate external data into SalesLogix customizations</title><link>http://customerfx.com/pages/customization/2009/08/05/using-sql-views-to-incorporate-external-data-into-the-saleslogix-database.aspx</link><pubDate>Wed, 05 Aug 2009 11:17:00 GMT</pubDate><guid isPermaLink="false">e15581aa-2787-4c59-a940-524c09f5d256:40734</guid><dc:creator>Jason Buss</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://customerfx.com/pages/customization/rsscomments.aspx?PostID=40734</wfw:commentRss><comments>http://customerfx.com/pages/customization/2009/08/05/using-sql-views-to-incorporate-external-data-into-the-saleslogix-database.aspx#comments</comments><description>&lt;p&gt;Did you know that you can include SQL views in SalesLogix?&amp;nbsp; This can be a very handy method to include data that is not normally part of SalesLogix. It is important to note, that these changes are not sync-aware.&amp;nbsp; However if you are running SalesLogix LAN in a network only environment, this can be a helpful way to include data from external sources.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;First of all, we need a view.&amp;nbsp; This could be anything, as long as the view is created in your SalesLogix database and is owned by the SYSDBA user.&amp;nbsp; For this example, I&amp;#39;ll add a simple view of accounts/primary contacts from another SLX database in Query analyzer:&lt;br /&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;create view vAccountViewTest as &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; a.accountid, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; a.account, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; c.lastname, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; c.firstname from&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SalesLogix2.sysdba.account a &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; inner join &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SalesLogix2.sysdba.contact c&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; on a.accountid = c.accountid &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; where c.isprimary = &amp;#39;T&amp;#39; &lt;/blockquote&gt;&lt;p&gt;&amp;nbsp;Once this view is created, it will show up in the database manager:&lt;/p&gt;&lt;p&gt;&lt;a href="http://customerfx.com/blogs/customization/DBManagerCustomView.JPG"&gt;&lt;img src="http://customerfx.com/blogs/customization/DBManagerCustomView.JPG" border="0" width="570" height="341" alt="" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;If you get the properties of that view, you simply need to &amp;quot;Enable&amp;quot; the view for use in SalesLogix:&lt;/p&gt;&lt;p&gt;&lt;a href="http://customerfx.com/blogs/customization/CustomViewTableProps.JPG"&gt;&lt;img src="http://customerfx.com/blogs/customization/CustomViewTableProps.JPG" border="0" width="269" height="279" alt="" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Now that the view has been enabled, you can use it in SalesLogix, just as you would use any other table in the system, for example, in a datagrid:&lt;/p&gt;&lt;p&gt;&lt;a href="http://customerfx.com/blogs/customization/CustomViewInGrid.JPG"&gt;&lt;img src="http://customerfx.com/blogs/customization/CustomViewInGrid.JPG" border="0" width="530" height="419" alt="" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;That&amp;#39;s basically it!&amp;nbsp;&amp;nbsp; I hope you found this post helpful. &lt;img src="http://customerfx.com/emoticons/emotion-1.gif" alt="Smile" /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://customerfx.com/aggbug.aspx?PostID=40734" width="1" height="1"&gt;</description><category domain="http://customerfx.com/pages/customization/archive/tags/SalesLogix+LAN+Client/default.aspx">SalesLogix LAN Client</category><category domain="http://customerfx.com/pages/customization/archive/tags/Customizations/default.aspx">Customizations</category><category domain="http://customerfx.com/pages/customization/archive/tags/SalesLogix/default.aspx">SalesLogix</category><category domain="http://customerfx.com/pages/customization/archive/tags/Development/default.aspx">Development</category><category domain="http://customerfx.com/pages/customization/archive/tags/Basics/default.aspx">Basics</category><category domain="http://customerfx.com/pages/customization/archive/tags/datagrid/default.aspx">datagrid</category><category domain="http://customerfx.com/pages/customization/archive/tags/How-To/default.aspx">How-To</category><category domain="http://customerfx.com/pages/customization/archive/tags/SQL/default.aspx">SQL</category></item><item><title>Using the Forms collection in the SalesLogix LAN client</title><link>http://customerfx.com/pages/customization/2009/06/24/using-the-forms-collection-in-the-saleslogix-lan-client.aspx</link><pubDate>Wed, 24 Jun 2009 17:56:00 GMT</pubDate><guid isPermaLink="false">e15581aa-2787-4c59-a940-524c09f5d256:40626</guid><dc:creator>Jason Buss</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://customerfx.com/pages/customization/rsscomments.aspx?PostID=40626</wfw:commentRss><comments>http://customerfx.com/pages/customization/2009/06/24/using-the-forms-collection-in-the-saleslogix-lan-client.aspx#comments</comments><description>&lt;p&gt;From time to time, you may find that you want to reference a control or script on a form other than the one you are currently on.&amp;nbsp; This can be done easily using the Forms collection in SalesLogix.&amp;nbsp; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;The first thing we need to do is to loop through all open forms, checking for the desired form.&amp;nbsp; For this example, we&amp;#39;ll look for the Contact Detail form.&amp;nbsp; (Note:&amp;nbsp; we&amp;#39;re looking for the value contained within the &amp;quot;Name&amp;quot; property of the form we are looking for.):&lt;br /&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim frm&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim x&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; For x = 0 to Application.Forms.Count - 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If Application.Forms(x).Name = &amp;quot;frmContactDetail&amp;quot; Then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set frm = Application.Forms(x)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Exit For&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Next &lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Once this code runs, we should have an object (frm) containing a reference to that form.&amp;nbsp; If the form is not found, the code will return null, which we should look for before trying to manipulate anything&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If Not frm Is Nothing Then&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If &lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Any references should be done within that IF statement.&amp;nbsp; To access properties, you just need to include the form object (frm.&lt;i&gt;{control}.{property}&lt;/i&gt;).&amp;nbsp; For scripts, you&amp;#39;ll need to access the forms Scripts collection (frm.scripts.&lt;i&gt;{sub or function name}&lt;/i&gt;)&lt;/p&gt;&lt;p&gt;That&amp;#39;s all there is to it.&amp;nbsp; All in all, pretty easy, right? &lt;br /&gt;&lt;/p&gt;&lt;p&gt;Keep in mind,&amp;nbsp; this does require that the form you want to reference actually be open. &amp;nbsp; If you want access to information to information on an uninitiated form, you&amp;#39;ll need to access the appropriate tables directly.&lt;/p&gt;&lt;p&gt;Hope you find this post helpful.&amp;nbsp; Thanks again for reading&amp;nbsp;&lt;img src="http://customerfx.com/emoticons/emotion-1.gif" alt="Smile" /&gt; &lt;br /&gt;&lt;/p&gt;&lt;img src="http://customerfx.com/aggbug.aspx?PostID=40626" width="1" height="1"&gt;</description><category domain="http://customerfx.com/pages/customization/archive/tags/SalesLogix+LAN+Client/default.aspx">SalesLogix LAN Client</category><category domain="http://customerfx.com/pages/customization/archive/tags/Customizations/default.aspx">Customizations</category><category domain="http://customerfx.com/pages/customization/archive/tags/SalesLogix/default.aspx">SalesLogix</category><category domain="http://customerfx.com/pages/customization/archive/tags/Development/default.aspx">Development</category><category domain="http://customerfx.com/pages/customization/archive/tags/Basics/default.aspx">Basics</category><category domain="http://customerfx.com/pages/customization/archive/tags/How-To/default.aspx">How-To</category><category domain="http://customerfx.com/pages/customization/archive/tags/vbscript/default.aspx">vbscript</category><category domain="http://customerfx.com/pages/customization/archive/tags/scripting/default.aspx">scripting</category><category domain="http://customerfx.com/pages/customization/archive/tags/Forms/default.aspx">Forms</category><category domain="http://customerfx.com/pages/customization/archive/tags/Forms+Collection/default.aspx">Forms Collection</category></item><item><title>User feedback using the Animate Control</title><link>http://customerfx.com/pages/customization/2009/05/13/user-feedback-using-the-animate-control.aspx</link><pubDate>Wed, 13 May 2009 09:52:00 GMT</pubDate><guid isPermaLink="false">e15581aa-2787-4c59-a940-524c09f5d256:40523</guid><dc:creator>Jason Buss</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://customerfx.com/pages/customization/rsscomments.aspx?PostID=40523</wfw:commentRss><comments>http://customerfx.com/pages/customization/2009/05/13/user-feedback-using-the-animate-control.aspx#comments</comments><description>&lt;p&gt;In my last blog post, I described how to use the Progress Bar control to provide feedback to a user when running time intensive processes.&amp;nbsp; In addition to the Progress Bar control, the Animate control can also be used.&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;u&gt;&lt;b&gt;Animate Control&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;The Animate control is very simple to use.&amp;nbsp; A number of&amp;nbsp;animations are inlcuded to cover standard operations such as moving or coping and deleteing items, and some other additional animations.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://customerfx.com/blogs/customization/AnimateMove.JPG"&gt;&lt;img style="WIDTH:379px;HEIGHT:196px;" height="167" src="http://customerfx.com/blogs/customization/AnimateMove.JPG" width="336" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;After adding the control to the form,&amp;nbsp;choose one of the standard animations from the &amp;quot;CommonAVI&amp;quot; property of the form.&amp;nbsp; I also set the visble property, and the Active property to false at design-time, so that I can turn both properties on in code to make visible and start the animation.&lt;/p&gt;
&lt;p&gt;I&amp;#39;ve used my code example from last week, and included a call to a control named &amp;quot;Animate1&amp;quot; on the form.&lt;br /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;font size="1"&gt;Sub UpdateAccounts&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;font size="1"&gt;Dim rs&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font size="1"&gt;Set rs = CreateObject(&amp;quot;ADODB.Recordset&amp;quot;)&lt;/font&gt;&lt;br /&gt;&lt;font size="1"&gt;With rs, pos&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pos = 0&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set .ActiveConnection = Application.GetNewConnection&lt;/font&gt;&lt;br /&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .CursorLocation = adUseClient&lt;/font&gt;&lt;br /&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .CursorType = adOpenStatic&lt;/font&gt;&lt;br /&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .LockType = adLockOptimistic&lt;/font&gt;&lt;br /&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Open &amp;quot;select * from Account where status &amp;lt;&amp;gt; &amp;#39;Open&amp;#39;&amp;quot;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ProgressBar1.Max = .RecordCount&lt;/font&gt;&lt;br /&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ProgressBar1.Position = pos&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .MoveFirst&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Animate1.Visible =&amp;nbsp;True&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Animate1.Position =&amp;nbsp;True&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; While Not (.Bof or .Eof)&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Fields(&amp;quot;modifyuser&amp;quot;).Value = Application.BasicFunctions.CurrentUserID&lt;/font&gt;&lt;br /&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Fields(&amp;quot;modifydate&amp;quot;).Value = Now&lt;/font&gt;&lt;br /&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Fields(&amp;quot;status&amp;quot;).Value = &amp;quot;Open&amp;quot;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Update&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pos = pos + 1&lt;/font&gt;&lt;br /&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ProgressBar1.Position = pos&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .MoveNext&lt;/font&gt;&lt;br /&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Wend&lt;/font&gt;&lt;br /&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Close&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Animate1.Visible =&amp;nbsp;False&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Animate1.Active =&amp;nbsp;False&lt;/font&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;font size="1"&gt;End With&lt;/font&gt;&lt;br /&gt;&lt;font size="1"&gt;Set rs = Nothing&lt;/font&gt;&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;font size="1"&gt;End Sub&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;In addition to the&amp;nbsp;available preset animations, you can also use the&amp;nbsp;Animate control to disaply an AVI file instead.&amp;nbsp; To do this, you&amp;#39;ll want to&amp;nbsp;set the &amp;quot;CommonAVI&amp;quot; to aviNone, and then enter the path and file name for the AVI file you would like to display.&amp;nbsp; The Animate and Visible properties will function the same regardless of the animation source.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://customerfx.com/blogs/customization/AnimateCustom.JPG"&gt;&lt;img height="265" src="http://customerfx.com/blogs/customization/AnimateCustom.JPG" width="254" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;(the clock.avi under c:\windows is a simple avi displaying a running count from 1 to 10.&lt;/p&gt;
&lt;p&gt;That&amp;#39;s all there is to it.&amp;nbsp;The Animate control is a very simple way to spruse up your views when performing time-consuming updates.&amp;nbsp; Thanks for reading!&amp;nbsp;&lt;img src="http://customerfx.com/emoticons/emotion-1.gif" alt="Smile" /&gt;&lt;br /&gt;&lt;/p&gt;&lt;img src="http://customerfx.com/aggbug.aspx?PostID=40523" width="1" height="1"&gt;</description><category domain="http://customerfx.com/pages/customization/archive/tags/SalesLogix+LAN+Client/default.aspx">SalesLogix LAN Client</category><category domain="http://customerfx.com/pages/customization/archive/tags/Controls/default.aspx">Controls</category><category domain="http://customerfx.com/pages/customization/archive/tags/Customizations/default.aspx">Customizations</category><category domain="http://customerfx.com/pages/customization/archive/tags/SalesLogix/default.aspx">SalesLogix</category><category domain="http://customerfx.com/pages/customization/archive/tags/Development/default.aspx">Development</category><category domain="http://customerfx.com/pages/customization/archive/tags/Basics/default.aspx">Basics</category><category domain="http://customerfx.com/pages/customization/archive/tags/How-To/default.aspx">How-To</category></item><item><title>Providing interface feedback - Progress Bars</title><link>http://customerfx.com/pages/customization/2009/05/07/providing-interface-feedback-progress-bar.aspx</link><pubDate>Thu, 07 May 2009 11:14:00 GMT</pubDate><guid isPermaLink="false">e15581aa-2787-4c59-a940-524c09f5d256:40507</guid><dc:creator>Jason Buss</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://customerfx.com/pages/customization/rsscomments.aspx?PostID=40507</wfw:commentRss><comments>http://customerfx.com/pages/customization/2009/05/07/providing-interface-feedback-progress-bar.aspx#comments</comments><description>&lt;p&gt;When performing lengthy updates in the SalesLogix client, it&amp;#39;s a good idea to provide the user with some degree of feedback so that it doesn&amp;#39;t appear as though SalesLogix has locked up.&amp;nbsp; The Progress Bar control, can be used for this purpose:&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;u&gt;&lt;b&gt;Progress Bar&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;&lt;p&gt;The main properties in this control you will want to set are the &amp;quot;Max&amp;quot; and &amp;quot;Position&amp;quot; properties.&amp;nbsp; &amp;quot;Max&amp;quot; defines the upper limit of the bars position.&amp;nbsp; &amp;quot;Position&amp;quot; defines the current position of the bar.&amp;nbsp; Basically, we just need to set &amp;quot;Max&amp;quot; to the count of records modified, and then need to increment the &amp;quot;Position&amp;quot; value by one for each record we update.&lt;/p&gt;&lt;p&gt;In this simple example, I&amp;#39;m simply running through the Account table, and setting the status value from each record to &amp;quot;Open&amp;quot; when it doesn&amp;#39;t already have that status.&lt;br /&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;font size="1"&gt;Sub UpdateAccounts&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;font size="1"&gt;Dim rs&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font size="1"&gt;Set rs = CreateObject(&amp;quot;ADODB.Recordset&amp;quot;)&lt;/font&gt;&lt;br /&gt;&lt;font size="1"&gt;With rs, pos&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pos = 0&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set .ActiveConnection = Application.GetNewConnection&lt;/font&gt;&lt;br /&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .CursorLocation = adUseClient&lt;/font&gt;&lt;br /&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .CursorType = adOpenStatic&lt;/font&gt;&lt;br /&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .LockType = adLockOptimistic&lt;/font&gt;&lt;br /&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Open &amp;quot;select * from Account where status &amp;lt;&amp;gt; &amp;#39;Open&amp;#39;&amp;quot;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font size="1"&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ProgressBar1.Max = .RecordCount&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font size="1"&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ProgressBar1.Position = pos&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .MoveFirst&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; While Not (.Bof or .Eof)&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Fields(&amp;quot;modifyuser&amp;quot;).Value = Application.BasicFunctions.CurrentUserID&lt;/font&gt;&lt;br /&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Fields(&amp;quot;modifydate&amp;quot;).Value = Now&lt;/font&gt;&lt;br /&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Fields(&amp;quot;status&amp;quot;).Value = &amp;quot;Open&amp;quot;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Update&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pos = pos + 1&lt;/font&gt;&lt;br /&gt;&lt;font size="1"&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ProgressBar1.Position = pos&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .MoveNext&lt;/font&gt;&lt;br /&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Wend&lt;/font&gt;&lt;br /&gt;&lt;font size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Close&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font size="1"&gt;End With&lt;/font&gt;&lt;br /&gt;&lt;font size="1"&gt;Set rs = Nothing&lt;/font&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;font size="1"&gt;End Sub&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;That&amp;#39;s all there is to it. Users will now be able to visually follow the progress of the update.&amp;nbsp; I hope you found this code sample helpful! &lt;img src="http://customerfx.com/emoticons/emotion-1.gif" alt="Smile" /&gt;&lt;br /&gt;&lt;/p&gt;&lt;img src="http://customerfx.com/aggbug.aspx?PostID=40507" width="1" height="1"&gt;</description><category domain="http://customerfx.com/pages/customization/archive/tags/SalesLogix+LAN+Client/default.aspx">SalesLogix LAN Client</category><category domain="http://customerfx.com/pages/customization/archive/tags/Controls/default.aspx">Controls</category><category domain="http://customerfx.com/pages/customization/archive/tags/Customizations/default.aspx">Customizations</category><category domain="http://customerfx.com/pages/customization/archive/tags/SalesLogix/default.aspx">SalesLogix</category><category domain="http://customerfx.com/pages/customization/archive/tags/Development/default.aspx">Development</category><category domain="http://customerfx.com/pages/customization/archive/tags/Basics/default.aspx">Basics</category><category domain="http://customerfx.com/pages/customization/archive/tags/How-To/default.aspx">How-To</category><category domain="http://customerfx.com/pages/customization/archive/tags/vbscript/default.aspx">vbscript</category><category domain="http://customerfx.com/pages/customization/archive/tags/ADO/default.aspx">ADO</category><category domain="http://customerfx.com/pages/customization/archive/tags/Progress+Bar/default.aspx">Progress Bar</category></item><item><title>Adding items to the Opportunity Snapshot (LAN)</title><link>http://customerfx.com/pages/customization/2009/04/29/deconstructing-the-opportunity-snapshot.aspx</link><pubDate>Wed, 29 Apr 2009 12:51:00 GMT</pubDate><guid isPermaLink="false">e15581aa-2787-4c59-a940-524c09f5d256:40490</guid><dc:creator>Jason Buss</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://customerfx.com/pages/customization/rsscomments.aspx?PostID=40490</wfw:commentRss><comments>http://customerfx.com/pages/customization/2009/04/29/deconstructing-the-opportunity-snapshot.aspx#comments</comments><description>&lt;p&gt;The opportunity snapshot on the Opportunity Detail view is a handy place to display summary information, but customizing it can be a bit confusing.&amp;nbsp; The Snapshot is simply a browser control, displaying HTML which is being generated by a method on the Opportunity detail screen.&amp;nbsp; You can see the HTML code in that method (LoadSnapShot), but it is so broken up and pieced back togther to add variable data, that it can be a little tough to navigate.&amp;nbsp; Hopefully this basic rundown helps explain how the snapshot is put together, and how simple it can be to add new information.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;First, let&amp;#39;s take a look at the conditions involved in generating the snapshot (Opportunity Detail view, LoadSnapshot method).&amp;nbsp; Primarily, the Opportunity status is checked&amp;nbsp; to determine which version of the snapshot is to be displayed.&amp;nbsp; I&amp;#39;ve cleared out the html in this code, so we can see how things are setup based on status.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-weight:bold;"&gt;The first thing checked is to see if the current status is either Open or Inactive (I&amp;#39;ve cleared out localization code as well to make this more readable):&lt;/span&gt; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-style:italic;"&gt;If strStatus = &amp;quot;Open&amp;quot; Or pklStatus.Text = &amp;quot;Inactive&amp;quot; Then&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-style:italic;"&gt;&lt;/span&gt;&lt;span style="font-weight:bold;"&gt;In this area, they set up the header information for the HTML&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If Not blnMCEnabled Then&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Here they display pricing information, depending if Multi Currency is enabled or not.&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Else&lt;/span&gt;&lt;br style="font-style:italic;" /&gt;&lt;span style="font-style:italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-weight:bold;"&gt;Finally, they show summary information for the opportunity which is not reliant on currency.&amp;nbsp; This is usually fields like Days Open, Current Stage, etc...&amp;nbsp; This is repeated for both Closed statuses as well as a catch all for any other status value.&lt;/span&gt;&lt;br style="font-weight:bold;" /&gt;&lt;br style="font-style:italic;" /&gt;&lt;span style="font-style:italic;"&gt;ElseIf strStatus = &amp;quot;Closed - Won&amp;quot; Then&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#39;Header Info&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If Not blnMCEnabled Then&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#39;MultiCurrentcy enabled&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Else&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#39;MultiCurrentcy disabled&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;#39;Summary Information&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;ElseIf strStatus = &amp;quot;Closed - Lost&amp;quot; Then&lt;/span&gt;&lt;br style="font-style:italic;" /&gt;&lt;span style="font-style:italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If Not blnMCEnabled Then&lt;/span&gt;&lt;br style="font-style:italic;" /&gt;&lt;span style="font-style:italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Else&lt;/span&gt;&lt;br style="font-style:italic;" /&gt;&lt;span style="font-style:italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;/span&gt;&lt;br style="font-style:italic;" /&gt;&lt;span style="font-style:italic;"&gt;Else &amp;#39;The code below is a &amp;quot;default&amp;quot; if the user addes a picklist value that doesn&amp;#39;t equal the above conditions out of box.&lt;/span&gt;&lt;br style="font-style:italic;" /&gt;&lt;span style="font-style:italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If Not blnMCEnabled Then&lt;/span&gt;&lt;br style="font-style:italic;" /&gt;&lt;span style="font-style:italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Else&lt;/span&gt;&lt;br style="font-style:italic;" /&gt;&lt;span style="font-style:italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;/span&gt;&lt;br style="font-style:italic;" /&gt;&lt;span style="font-style:italic;"&gt;End If&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;That&amp;#39;s all there is to the code in terms of WHERE you want to edit, but there is a lot of broken up HTML to navigate at that point; However, If you search for label values in the Snapshot code, and do a little copying/pasting, it&amp;#39;s not do difficult to add some additional information to this area.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;I&amp;#39;m going to add a &amp;quot;Total Margin&amp;quot; field in the Value section of the snapshot.&amp;nbsp; Total Margin will be defined as (TotalSales - TotalFixedCost) / TotalSales.&amp;nbsp; We&amp;#39;ll want to calculate margin based off of both SalesPotential for Open Opportunities, and ActualAmount for Closed Opportunities.&lt;/p&gt;&lt;p&gt;First of all, we need to get the total cost value.&amp;nbsp; I&amp;#39;m going to add this code near the top of the LoadSnapShot method on Opportunity Detail.&amp;nbsp; This will give me a variable name dTotalCost containing the total cost value for all products on the current opportunity:&lt;br /&gt;&lt;/p&gt;
&lt;p style="font-style:italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim dTotalCost&lt;/p&gt;
&lt;p style="font-style:italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set objCostRS = objSLXDB.GetNewRecordSet&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; strSql = &amp;quot;select sum(p.fixedcost) as totalcost from opportunity_product o inner join product p on o.productid = p.productid&amp;quot; &amp;amp; _&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;Where o.opportunityid = &amp;#39;&amp;quot; &amp;amp; strCrntOppID &amp;amp; &amp;quot;&amp;#39;&amp;quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; objCostRS.Open strSql, objSLXDB.Connection&lt;/p&gt;
&lt;p style="font-style:italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If&amp;nbsp; objCostRS.RecordCount &amp;lt;&amp;gt; 0 Then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dTotalCost = objCostRS.Fields(&amp;quot;totalcost&amp;quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dTotalCost = 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;/p&gt;
&lt;p style="font-style:italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; objCostRS.Close&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set objCostRS = Nothing&lt;/p&gt;&lt;p&gt;Now&lt;span style="font-style:italic;"&gt; &lt;/span&gt;that we have cost, we have to calculate the margin.&amp;nbsp; I do this in two places actually.&amp;nbsp; First right outside the first If statement that checks the opp status, and I also set it inside the If statement if status is &amp;quot;Open&amp;quot;.&amp;nbsp; I do this because margin will be based off of the Actual Close Amount if the Opp has any closed status, and off of Sales Potential if the status is Open or Inactive.&lt;/p&gt;&lt;p&gt;(My added code is in bold, you will probably find this right around line 370 on the Opp detail form code) &lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If IsNull(objRS.Fields(&amp;quot;WSALE&amp;quot;).Value) Then&amp;nbsp; &amp;#39;DNL&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lngWeighted = 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lngWeighted = objRS.Fields(&amp;quot;WSALE&amp;quot;).Value&amp;nbsp; &amp;#39;DNL&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-weight:bold;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If cDbl(intActualAmount) = 0 Then&lt;/span&gt;&lt;br style="font-weight:bold;" /&gt;&lt;span style="font-weight:bold;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dMargin = 0&lt;/span&gt;&lt;br style="font-weight:bold;" /&gt;&lt;span style="font-weight:bold;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Else&lt;/span&gt;&lt;br style="font-weight:bold;" /&gt;&lt;span style="font-weight:bold;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dMargin = (cDbl(intActualAmount) - cDbl(dTotalCost)) / cDbl(intActualAmount)&lt;/span&gt;&lt;br style="font-weight:bold;" /&gt;&lt;span style="font-weight:bold;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Application.BasicFunctions.GlobalInfoSet &amp;quot;CurrentStatus&amp;quot;, strStatus&amp;nbsp; &amp;#39;DNL&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If Application.Translator.Localize(strStatus) = Application.Translator.Localize(&amp;quot;Open&amp;quot;) Or Application.Translator.Localize(pklStatus.Text) = Application.Translator.Localize(&amp;quot;Inactive&amp;quot;) Then&amp;nbsp; &amp;#39;DNL&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If lngSalesPotential = 0 Then&lt;/span&gt;&lt;br style="font-weight:bold;" /&gt;&lt;span style="font-weight:bold;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dMargin = 0&lt;/span&gt;&lt;br style="font-weight:bold;" /&gt;&lt;span style="font-weight:bold;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Else&lt;/span&gt;&lt;br style="font-weight:bold;" /&gt;&lt;span style="font-weight:bold;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dMargin = (cDbl(lngSalesPotential) - cDbl(dTotalCost)) / cDbl(lngSalesPotential)&lt;/span&gt;&lt;br style="font-weight:bold;" /&gt;&lt;span style="font-weight:bold;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;/span&gt; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;Now that we&amp;#39;ve calculated the Margin value, we need to insert it into the snapshot.&amp;nbsp; Because of how the snapshot is being built, we&amp;#39;ll need to add it in eight different places, twice for each Opportunity Status (Open or Inactive, Closed Won, Closed Lost, other).&amp;nbsp; If you know that multicurrency functionality is not an important aspect of your database, you can add it only once for each status).&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vHTML = vHTML + &amp;quot;&amp;lt;td class=indent&amp;gt;&amp;quot; &amp;amp; Application.Translator.Localize(&amp;quot;Sales Potential = &amp;quot;) &amp;amp; FormatCurrency(lngSalesPotential, 2)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vHTML = vHTML + &amp;quot;&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vHTML = vHTML + &amp;quot;&amp;lt;td class=indent&amp;gt;&amp;quot; &amp;amp; Application.Translator.Localize(&amp;quot;Weighted = &amp;quot;) &amp;amp; FormatCurrency(lngWeighted, 2) &amp;#39;Calculated Field&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vHTML = vHTML + &amp;quot;&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&amp;quot; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;You can justcopy the last two lines here, and change the copied line to use our new margin values to add it to the snapshot.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vHTML = vHTML + &amp;quot;&amp;lt;td class=indent&amp;gt;&amp;quot; &amp;amp; Application.Translator.Localize(&amp;quot;Margin = &amp;quot;) &amp;amp; FormatCurrency(dMargin, 2) &amp;#39;Calculated Field&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vHTML = vHTML + &amp;quot;&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&amp;quot; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;You&amp;#39;ll then want to go through the code and add this new line in each of the MultiCurrency sections for each status.&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Adding a single new value is simple enough, but if you try to get more complicated with it, keep a close eye on &amp;lt;td&amp;gt; and &amp;lt;tr&amp;gt; tags before and after any code you enter to avoid breaking the Snapshot all together.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;I hope this post is helpful in explaining the basics of how the snapshot is put together, and encourages people to experiment with modifications to this area.&amp;nbsp; Thanks for reading! &amp;nbsp;&lt;img src="http://customerfx.com/emoticons/emotion-1.gif" alt="Smile" /&gt; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://customerfx.com/aggbug.aspx?PostID=40490" width="1" height="1"&gt;</description><category domain="http://customerfx.com/pages/customization/archive/tags/SalesLogix+LAN+Client/default.aspx">SalesLogix LAN Client</category><category domain="http://customerfx.com/pages/customization/archive/tags/Customizations/default.aspx">Customizations</category><category domain="http://customerfx.com/pages/customization/archive/tags/SalesLogix/default.aspx">SalesLogix</category><category domain="http://customerfx.com/pages/customization/archive/tags/Development/default.aspx">Development</category><category domain="http://customerfx.com/pages/customization/archive/tags/Basics/default.aspx">Basics</category><category domain="http://customerfx.com/pages/customization/archive/tags/How-To/default.aspx">How-To</category><category domain="http://customerfx.com/pages/customization/archive/tags/vbscript/default.aspx">vbscript</category><category domain="http://customerfx.com/pages/customization/archive/tags/scripting/default.aspx">scripting</category><category domain="http://customerfx.com/pages/customization/archive/tags/snapshot/default.aspx">snapshot</category></item><item><title>Building new Main Views in SalesLogix LAN - Part 1</title><link>http://customerfx.com/pages/customization/2009/04/01/building-new-main-views-in-saleslogix-lan-part-1.aspx</link><pubDate>Wed, 01 Apr 2009 11:51:00 GMT</pubDate><guid isPermaLink="false">e15581aa-2787-4c59-a940-524c09f5d256:40373</guid><dc:creator>Jason Buss</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://customerfx.com/pages/customization/rsscomments.aspx?PostID=40373</wfw:commentRss><comments>http://customerfx.com/pages/customization/2009/04/01/building-new-main-views-in-saleslogix-lan-part-1.aspx#comments</comments><description>&lt;p&gt;For my next few blog posts, I&amp;#39;ll go through the steps required to create a new main area in SalesLogix.&lt;/p&gt;&lt;p&gt;We&amp;#39;ll be creating a new area in SalesLogix that I&amp;#39;ll call SLXProjects.&amp;nbsp; When we&amp;#39;re finished, we&amp;#39;ll have a fully functional project management system.&amp;nbsp; I&amp;#39;ll be going through this just a few steps at a time, to make this as understandable as possible...&amp;nbsp; If you have any questions on any of these posts, please feel free to add comments to the post.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;First, we need to create the main data structure.&amp;nbsp; I&amp;#39;ve created a table named &amp;#39;SLXProjects&amp;#39;, containing fields for Name, Project, Leader, IsActive and AccountID.&lt;/p&gt;&lt;p&gt;&lt;a href="http://customerfx.com/blogs/customization/SLXProjectsTable.JPG"&gt;&lt;img src="http://customerfx.com/blogs/customization/SLXProjectsTable.JPG" border="0" width="652" height="285" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Next, I&amp;#39;ll create the detail view for this area, containing the fields I added in the new SLXProjects table (We&amp;#39;ll clean up this view later).&amp;nbsp; This view should be saved under the System Family.&lt;/p&gt;&lt;p&gt;&lt;a href="http://customerfx.com/blogs/customization/SLXProjectsDetail.JPG"&gt;&lt;img src="http://customerfx.com/blogs/customization/SLXProjectsDetail.JPG" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Next, we need to create a new Main View.&amp;nbsp; This view will act as the container for the detail view for this area, as well as any tabs that we will create.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;a href="http://customerfx.com/blogs/customization/SLXProjectsMainView.JPG"&gt;&lt;img src="http://customerfx.com/blogs/customization/SLXProjectsMainView.JPG" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;On the main view, select the details section, and set the &amp;quot;View Name&amp;quot; property to the the detail view we created.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;a href="http://customerfx.com/blogs/customization/SLXProjectsMainViewProperties.JPG"&gt;&lt;img src="http://customerfx.com/blogs/customization/SLXProjectsMainViewProperties.JPG" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;So, at this point, we have created our new table, main view and detail view.&amp;nbsp; In the next article, we&amp;#39;ll go through creating the Toolbar and Menu plugins and creating tabs for our new area, as well as finishing setting up the detail view.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;Thanks for reading, and Stay tuned! &amp;nbsp;&lt;img src="http://customerfx.com/emoticons/emotion-1.gif" alt="Smile" /&gt; &lt;br /&gt;&lt;/p&gt;&lt;img src="http://customerfx.com/aggbug.aspx?PostID=40373" width="1" height="1"&gt;</description><category domain="http://customerfx.com/pages/customization/archive/tags/SalesLogix+LAN+Client/default.aspx">SalesLogix LAN Client</category><category domain="http://customerfx.com/pages/customization/archive/tags/Controls/default.aspx">Controls</category><category domain="http://customerfx.com/pages/customization/archive/tags/Customizations/default.aspx">Customizations</category><category domain="http://customerfx.com/pages/customization/archive/tags/SalesLogix/default.aspx">SalesLogix</category><category domain="http://customerfx.com/pages/customization/archive/tags/Development/default.aspx">Development</category><category domain="http://customerfx.com/pages/customization/archive/tags/mainview+objects/default.aspx">mainview objects</category><category domain="http://customerfx.com/pages/customization/archive/tags/Basics/default.aspx">Basics</category><category domain="http://customerfx.com/pages/customization/archive/tags/How-To/default.aspx">How-To</category></item><item><title>Form types in the SalesLogix LAN Client</title><link>http://customerfx.com/pages/customization/2009/03/25/Form-types-in-the-SalesLogix-LAN-Client.aspx</link><pubDate>Wed, 25 Mar 2009 10:40:00 GMT</pubDate><guid isPermaLink="false">e15581aa-2787-4c59-a940-524c09f5d256:40341</guid><dc:creator>Jason Buss</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://customerfx.com/pages/customization/rsscomments.aspx?PostID=40341</wfw:commentRss><comments>http://customerfx.com/pages/customization/2009/03/25/Form-types-in-the-SalesLogix-LAN-Client.aspx#comments</comments><description>&lt;p&gt;I wanted to take this blog post to briefly outline the different types of Forms available to you in the SalesLogix LAN client, mostly for anyone who is new to creating views and customizing SalesLogix.&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;Essentially, there are three types of Forms: MainView forms, Data Forms and Manage Forms.&amp;nbsp; (I suppose you could include Legacy Views as well, but if you are still using legacy forms, it may be time to reconsider your customizations!)&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;u&gt;&lt;b&gt;MainViews&lt;/b&gt;&lt;/u&gt; &lt;/p&gt;
&lt;p&gt;MainViews are forms which define the &amp;quot;Main&amp;quot; areas of SalesLogix, such as Account, Contact, Tickets etc..&amp;nbsp; &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://customerfx.com/blogs/customization/MainViewForm.JPG"&gt;&lt;img src="http://customerfx.com/blogs/customization/MainViewForm.JPG" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The form contains sections for&amp;nbsp; the various sections visible in SalesLogix (Details, Middle, Tabs and Groups), which are set up to display other Views build for that table in SalesLogix.&amp;nbsp; I&amp;#39;ll get into the details of creating a MainView in a future posting.&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;b&gt;Data Forms&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;Simply put, a Data Form is a form based off of a particular table in SalesLogix.&amp;nbsp; Most often, these views are used to create tab views in SalesLogix.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;When creating a new data form, you are presented with the Select Main Table dialog, which allows you to choose which table the form is based on.&amp;nbsp; Fields from whichever table is selected (including joins) will be available when setting the Text property of any control you may add to the form.&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://customerfx.com/blogs/customization/SelectMainTable.JPG"&gt;&lt;img src="http://customerfx.com/blogs/customization/SelectMainTable.JPG" border="0" alt="" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;When creating a form, there are options to create an Account, Contact, Opportunity, etc. forms, but essentially these are data forms as well.&amp;nbsp; SalesLogix simply provides a set of common view types.&amp;nbsp; There is no difference between creating an Account Form, or a Data Form and selecting &amp;quot;Account&amp;quot; in the Select Main Table dialog. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://customerfx.com/blogs/customization/DataViewAccount.JPG"&gt;&lt;img src="http://customerfx.com/blogs/customization/DataViewAccount.JPG" border="0" alt="" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;b&gt;Manage Forms&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;A manage form is basically a form which is not related to a specific table in the database.&amp;nbsp; Almost any control on this type of form must be populated via code in some way (&lt;a href="http://customerfx.com/pages/customization/2009/02/11/saleslogix-basics-4-ado-recordsets-in-saleslogix-lan.aspx" title="/pages/customization/2009/02/11/saleslogix-basics-4-ado-recordsets-in-saleslogix-lan.aspx" target="_blank"&gt;ADO is a great option, here&amp;#39;s somthing to get you started&lt;/a&gt; &lt;img src="http://customerfx.com/emoticons/emotion-1.gif" alt="Smile" /&gt;).&amp;nbsp; The SQL property of Datagrid controls can be set on Manage forms to display information from tables, however you would have to set the bindid and refresh the grid to show desired information. Typically, I use manage forms called from either a toolbar button or menu item to set custom system-specific data in SalesLogix.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;I&amp;#39;ll get into details of creating each of these types of forms in my next blog post.&amp;nbsp; For now, I hope this gives you an idea of what is available in the LAN client and I also hope that you will take some time to experiment with what is available.&amp;nbsp; Thanks for reading! &amp;nbsp;&lt;img src="http://customerfx.com/emoticons/emotion-1.gif" alt="Smile" /&gt; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;img src="http://customerfx.com/aggbug.aspx?PostID=40341" width="1" height="1"&gt;</description><category domain="http://customerfx.com/pages/customization/archive/tags/SalesLogix+LAN+Client/default.aspx">SalesLogix LAN Client</category><category domain="http://customerfx.com/pages/customization/archive/tags/Customizations/default.aspx">Customizations</category><category domain="http://customerfx.com/pages/customization/archive/tags/SalesLogix/default.aspx">SalesLogix</category><category domain="http://customerfx.com/pages/customization/archive/tags/Development/default.aspx">Development</category><category domain="http://customerfx.com/pages/customization/archive/tags/Basics/default.aspx">Basics</category></item><item><title>SalesLogix Basics 5 - SplitterPanel Control</title><link>http://customerfx.com/pages/customization/2009/02/25/saleslogix-basics-5-splitterpanel-control.aspx</link><pubDate>Wed, 25 Feb 2009 11:21:00 GMT</pubDate><guid isPermaLink="false">e15581aa-2787-4c59-a940-524c09f5d256:40215</guid><dc:creator>Jason Buss</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://customerfx.com/pages/customization/rsscomments.aspx?PostID=40215</wfw:commentRss><comments>http://customerfx.com/pages/customization/2009/02/25/saleslogix-basics-5-splitterpanel-control.aspx#comments</comments><description>&lt;p&gt;The SplitterPanel control in SalesLogix gives you the ability to partition a view into sections, and gives you the ability to resize the panels at run-time by dragging the splitter line on the control.&lt;/p&gt;&lt;p&gt;For this example, I&amp;#39;ve created a simple contacts view at the account level which contains a grid on the left, with a number of controls on the right specific to the selected contact in the grid.&amp;nbsp; This is very similar to the standard history view where history details
are displayed on the right for each selected history item&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;a href="http://customerfx.com/blogs/customization/CustomContactsView.JPG"&gt;&lt;img src="http://customerfx.com/blogs/customization/CustomContactsView.JPG" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;The control is fairly easy to use, and I won&amp;#39;t go thorugh all the properties here, but there are two things that you need to know in order to use the control effectively.&amp;nbsp; First of all, you cannot copy and paste controls onto the right side of the SplitterPanel.&amp;nbsp; To get controls on the right side of the control, you need to add them directly from the toolbox.&amp;nbsp; Any control that you try to copy and paste will end up on the left side of the panel instead. &lt;/p&gt;&lt;p&gt;Second, the controls &amp;quot;Size&amp;quot; property controls the default size of the left side of the panel.&amp;nbsp; The right side fills the remainder of the space available. &lt;/p&gt;&lt;p&gt;To build the view in this sample I added a datagrid with a contact fields, and added some random contact fields on the right side of the splitter to be populated each time a row is selected.&amp;nbsp; Nothing special about the grid setup.&amp;nbsp; It&amp;#39;s just bound to the contact table via AccountID.&amp;nbsp; The other fields are not bound, but will be populated programatically on the OnRowSelect event of the grid. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;The code to populate the fields goes like this:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="1"&gt;&amp;#39;Including Script - System:SLX Database Support&lt;br /&gt;option explicit&lt;br /&gt;&lt;br /&gt;Sub DataGrid1RowSelect(Sender)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim sContactID&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sContactID = DataGrid1.GetCurrentField(&amp;quot;contactid&amp;quot;)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; txtAssistant.Text = GetField(&amp;quot;Assistant&amp;quot;, &amp;quot;Contact&amp;quot;, &amp;quot;contactid = &amp;#39;&amp;quot; &amp;amp; sContactID &amp;amp; &amp;quot;&amp;#39;&amp;quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; txtBirthday.Text = GetField(&amp;quot;Birthday&amp;quot;, &amp;quot;Contact&amp;quot;, &amp;quot;contactid = &amp;#39;&amp;quot; &amp;amp; sContactID &amp;amp; &amp;quot;&amp;#39;&amp;quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; txtSpouse.Text = GetField(&amp;quot;Spouse&amp;quot;, &amp;quot;Contact&amp;quot;, &amp;quot;contactid = &amp;#39;&amp;quot; &amp;amp; sContactID &amp;amp; &amp;quot;&amp;#39;&amp;quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; txtSpouseBirthday.Text = GetField(&amp;quot;SpouseBirthday&amp;quot;, &amp;quot;Contact&amp;quot;, &amp;quot;contactid = &amp;#39;&amp;quot; &amp;amp; sContactID &amp;amp; &amp;quot;&amp;#39;&amp;quot;)&lt;br /&gt;End Sub &lt;/font&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;a href="http://customerfx.com/blogs/customization/CustomContactsViewData.JPG"&gt;&lt;img src="http://customerfx.com/blogs/customization/CustomContactsViewData.JPG" border="0" alt="" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;That&amp;#39;s all there is to it.&amp;nbsp; I hope you find this example helpful!&amp;nbsp; Thanks for reading! &lt;img src="http://customerfx.com/emoticons/emotion-1.gif" alt="Smile" /&gt;&lt;br /&gt;&lt;/p&gt;&lt;img src="http://customerfx.com/aggbug.aspx?PostID=40215" width="1" height="1"&gt;</description><category domain="http://customerfx.com/pages/customization/archive/tags/SalesLogix+LAN+Client/default.aspx">SalesLogix LAN Client</category><category domain="http://customerfx.com/pages/customization/archive/tags/Customizations/default.aspx">Customizations</category><category domain="http://customerfx.com/pages/customization/archive/tags/Development/default.aspx">Development</category><category domain="http://customerfx.com/pages/customization/archive/tags/Basics/default.aspx">Basics</category><category domain="http://customerfx.com/pages/customization/archive/tags/How-To/default.aspx">How-To</category><category domain="http://customerfx.com/pages/customization/archive/tags/vbscript/default.aspx">vbscript</category><category domain="http://customerfx.com/pages/customization/archive/tags/scripting/default.aspx">scripting</category><category domain="http://customerfx.com/pages/customization/archive/tags/SplitterPanel/default.aspx">SplitterPanel</category></item><item><title>SalesLogix Basics 4 - ADO Recordsets in SalesLogix LAN</title><link>http://customerfx.com/pages/customization/2009/02/11/saleslogix-basics-4-ado-recordsets-in-saleslogix-lan.aspx</link><pubDate>Wed, 11 Feb 2009 13:25:00 GMT</pubDate><guid isPermaLink="false">e15581aa-2787-4c59-a940-524c09f5d256:40172</guid><dc:creator>Jason Buss</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://customerfx.com/pages/customization/rsscomments.aspx?PostID=40172</wfw:commentRss><comments>http://customerfx.com/pages/customization/2009/02/11/saleslogix-basics-4-ado-recordsets-in-saleslogix-lan.aspx#comments</comments><description>&lt;p&gt;By using ADO, you have a powerful resource for reading and storing data in SalesLogix.&amp;nbsp; In this basics article, I&amp;#39;ll outline the main components involved in constructing and using an ADO recordset in general, and specifically with SalesLogix .&amp;nbsp; If you&amp;#39;ve never worked with ADO before, this simple example will give you what you need to incorporate ADO into your own customizations.&lt;br /&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;font size="2"&gt;&lt;u&gt;&lt;b&gt;Example:&lt;/b&gt;&lt;/u&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p style="margin-left:40px;" class="MsoNormal"&gt;&lt;font size="1"&gt;Set rs = CreateObject(&amp;quot;ADODB.Recordset&amp;quot;)&lt;br /&gt;With rs&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set .ActiveConnection = Application.GetNewConnection&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .CursorLocation = adUseClient&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .CursorType = adOpenStatic&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .LockType = adLockOptimistic&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Open &amp;quot;select * from c_test where c_testid = &amp;#39;&amp;quot; &amp;amp; labelID.Caption &amp;amp; &amp;quot;&amp;#39;&amp;quot;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If .RecordCount = 0 Then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .AddNew&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Fields(&amp;quot;c_testid&amp;quot;).Value = Application.BasicFunctions.GetIDFor(&amp;quot;c_test&amp;quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Fields(&amp;quot;accountid&amp;quot;).Value = CurrentID&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Fields(&amp;quot;createuser&amp;quot;).Value = Application.BasicFunctions.CurrentUserID&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Fields(&amp;quot;createdate&amp;quot;).Value = Now&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Fields(&amp;quot;modifyuser&amp;quot;).Value = Application.BasicFunctions.CurrentUserID&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Fields(&amp;quot;modifydate&amp;quot;).Value = Now&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Fields(&amp;quot;field1&amp;quot;).Value = edit1.Text&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Fields(&amp;quot;field2&amp;quot;).Value = edit2.Text&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Update&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Close&lt;br /&gt;End With&lt;br /&gt;Set rs = Nothing&lt;/font&gt;&lt;/p&gt;
&lt;p style="margin-left:40px;" class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;b&gt;Connection

&lt;/b&gt;
&lt;p&gt;The basic
steps for using an ADO Recordset are:&lt;/p&gt;


&lt;ol start="1"&gt;
&lt;li&gt;Create and ADO connection to the database&lt;/li&gt;
&lt;li&gt;Open the database connection&lt;/li&gt;
&lt;li&gt;Create an ADO recordset&lt;/li&gt;
&lt;li&gt;Set connection options for the
     recordset.&lt;/li&gt;
&lt;li&gt;Open the recordset&lt;/li&gt;
&lt;li&gt;Extract/Modify the data you
     need from the recordset&lt;/li&gt;
&lt;li&gt;Update the recordset (if
     modified)&lt;/li&gt;
&lt;li&gt;Close the recordset&lt;/li&gt;
&lt;li&gt;Close the connection.&lt;/li&gt;
&lt;/ol&gt;


&amp;nbsp;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;*These
first two steps are handled by SalesLogix so we don’t need to worry about them
within the SLX Environment.&lt;span&gt;&amp;nbsp; &lt;/span&gt;I’m
including them here just to list all the steps in working with a ADO Recordset&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Create an ADO connection to the database &lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;i&gt;&lt;span style="font-size:10pt;font-family:Arial;color:black;"&gt;set conn=Server.CreateObject(&amp;quot;ADODB.Connection&amp;quot;)&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;i&gt;&lt;span style="font-size:10pt;font-family:Arial;color:black;"&gt;conn.Provider=&amp;quot;Microsoft.Jet.OLEDB.4.0&amp;quot;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;In this
code, we have created a connection object and are using the JET OLEDB provider
to connect to an Access database&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;i&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Open the database connection&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;i&gt;&lt;span style="font-size:10pt;font-family:Arial;color:black;"&gt;conn.Open
&amp;quot;c:/webdata/northwind.mdb&amp;quot;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;This code
uses the connection object to open the access database, “Northwind”.&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Create an ADO recordset&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;i&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Set objRS =
CreateObject(“ADODB.Recordset”)&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;i&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Set objRS.ActiveConnection =
Applcation.GetNewConnection&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Here we
have created the basic ADO
recordset object, and set it to use a connection from the SLX connection pool.&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Set connection options for the
recordset&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Cursors are
used to control a few different things, namely record navigation, visibility of
changes in the database, and updatability of data.&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;u&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Cursor
Location:&lt;/span&gt;&lt;/u&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;The cursor
location can be set to use either the Server or Client cursor service.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Basically, this controls weather or not
processing is done on the server or on the individual client machine.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Server-side cursors are used by default.&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Enumerated
values:&lt;/span&gt;&lt;/p&gt;

&lt;ul style="margin-top:0in;"&gt;
&lt;li class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;adUseServer (default)&lt;/span&gt;&lt;/li&gt;
&lt;li class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;adUseClient &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;u&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Cursor
Type:&lt;/span&gt;&lt;/u&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;The cursor
type controls how you can cycle through the records returned in the recordset
as well as visibility of any changes you make.&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Enumerated
values:&lt;/span&gt;&lt;/p&gt;

&lt;ul style="margin-top:0in;"&gt;
&lt;li class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;adOpenForwardOnly (Default)&lt;/span&gt;&lt;/li&gt;
&lt;ul style="margin-top:0in;"&gt;
&lt;li class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Uses a forward-only
      cursor.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Identical to a static
      cursor, except you can only scroll forward through records.&lt;span&gt;&amp;nbsp; &lt;/span&gt;This can improve performance when you
      need to make only one pass through a recordset.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;adOpenKeySet&lt;/span&gt;&lt;/li&gt;
&lt;ul style="margin-top:0in;"&gt;
&lt;li class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;like a dynamic cursor, except
      that you can’t see records that other users add, although records that
      other users delete are inaccessible from your Recordset.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Data changes from other users are
      visible.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;adOpenDynamic&lt;/span&gt;&lt;/li&gt;
&lt;ul style="margin-top:0in;"&gt;
&lt;li class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Additions, changes and
      deletions by other users are visible, and all types of movement through
      the Recordset are allowed.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;adOpenStatic&lt;/span&gt;&lt;/li&gt;
&lt;ul style="margin-top:0in;"&gt;
&lt;li class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Additions, Edits and Deletes
      from other users are not visible.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;u&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Lock
Type:&lt;/span&gt;&lt;/u&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;The lock
type specifies the type of locking when editing values in the recordset.&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Enumerated
Values:&lt;/span&gt;&lt;/p&gt;

&lt;ul style="margin-top:0in;"&gt;
&lt;li class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;adLockReadOnly&lt;/span&gt;&lt;/li&gt;
&lt;ul style="margin-top:0in;"&gt;
&lt;li class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Recordset is read-only&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;adLockPessimistic&lt;/span&gt;&lt;/li&gt;
&lt;ul style="margin-top:0in;"&gt;
&lt;li class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;The provider locks records
      immediately after editing.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;adLockOptimistic&lt;/span&gt;&lt;/li&gt;
&lt;ul style="margin-top:0in;"&gt;
&lt;li class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Records are locked only when
      Update is called&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;adLockBatchOptimistic&lt;/span&gt;&lt;/li&gt;
&lt;ul style="margin-top:0in;"&gt;
&lt;li class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Records are locked when
      updated is called.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Required for
      batch updates.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;i&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;objRS.CursorLocation = adUseClient&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;i&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;objRS.CursorType = adOpenStatic&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;i&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;objRS.LockType = adLockOptimistic&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;i&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Open the recordset&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Here we are
opening the recordset, using the SQL query provided.&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;i&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;objRS.Open “Select * from TestTable
where 0=1”&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Extract/Modify data from the
recordset&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Values are
returned using (in this case set to a variable &lt;i&gt;strValue&lt;/i&gt;):&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;i&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;strValue = objRS.Fields(“FieldName”).Value&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Values can
also be set by using:&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;i&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;objRS.Fields(“FieldName”).Value =
“New Value”&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Update the recordset&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;i&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;objRS.Update or objRS.UpdateBatch&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;The update
command applies changes made to the recordset.&lt;span&gt;&amp;nbsp;
&lt;/span&gt;Until this is called, the changes are not permanent.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Closing the recordset before calling update
would cause the changes to be lost.&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Close the recordset&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;i&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;objRS.Close&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;i&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Set objRS.Nothing&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;i&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;This
statement closes the recordset when you are done.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Setting the object = “Nothing”, aka “Destroying”
the object, frees up the resources used by the recordset object.&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Close the connection&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;This step
is not needed when using recordsets in SalesLogix.&lt;span&gt;&amp;nbsp; &lt;/span&gt;The connections would be closed when closing
the database.&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;u&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Batch Updates Example:&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;font size="2" face="arial,helvetica,sans-serif"&gt;By using the locktype of adLockBatchOptimistic and UpdateBatch, you can loop through a number of updates, and commit them all at once.&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;&lt;font size="1"&gt;Set rs = CreateObject(&amp;quot;ADODB.Recordset&amp;quot;)&lt;br /&gt;&lt;br /&gt;With rs&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set .ActiveConnection = Application.GetNewConnection&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .CursorLocation = adUseClient&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .CursorType = adOpenStatic&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .LockType = adLockBatchOptimistic&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Open &amp;quot;select * from c_test where Value = &amp;#39;&amp;quot; &amp;amp; labelID.Caption &amp;amp; &amp;quot;&amp;#39;&amp;quot;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; While not (.Bof or .Eof)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Fields(&amp;quot;modifyuser&amp;quot;).Value = Application.BasicFunctions.CurrentUserID&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Fields(&amp;quot;modifydate&amp;quot;).Value = Now&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Fields(&amp;quot;field1&amp;quot;).Value = edit1.Text&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Fields(&amp;quot;field2&amp;quot;).Value = edit2.Text&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .MoveNext&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Wend&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .UpdateBatch&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Close&lt;br /&gt;&lt;br /&gt;End With&lt;br /&gt;&lt;br /&gt;Set rs = Nothing&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;p class="MsoNormal"&gt;I hope you find this example helpful.&amp;nbsp; Thanks for reading!&amp;nbsp;&amp;nbsp;&lt;img src="http://customerfx.com/emoticons/emotion-1.gif" alt="Smile" /&gt; &lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://customerfx.com/aggbug.aspx?PostID=40172" width="1" height="1"&gt;</description><category domain="http://customerfx.com/pages/customization/archive/tags/SalesLogix+LAN+Client/default.aspx">SalesLogix LAN Client</category><category domain="http://customerfx.com/pages/customization/archive/tags/Customizations/default.aspx">Customizations</category><category domain="http://customerfx.com/pages/customization/archive/tags/SalesLogix/default.aspx">SalesLogix</category><category domain="http://customerfx.com/pages/customization/archive/tags/Development/default.aspx">Development</category><category domain="http://customerfx.com/pages/customization/archive/tags/Basics/default.aspx">Basics</category><category domain="http://customerfx.com/pages/customization/archive/tags/vbscript/default.aspx">vbscript</category><category domain="http://customerfx.com/pages/customization/archive/tags/ADO/default.aspx">ADO</category><category domain="http://customerfx.com/pages/customization/archive/tags/scripting/default.aspx">scripting</category></item><item><title>SalesLogix Basics 3 - Radio Buttons VS Radio Group controls</title><link>http://customerfx.com/pages/customization/2009/01/08/saleslogix-basics-3-radio-buttons-vs-radio-group-controls.aspx</link><pubDate>Thu, 08 Jan 2009 11:20:00 GMT</pubDate><guid isPermaLink="false">e15581aa-2787-4c59-a940-524c09f5d256:39831</guid><dc:creator>Jason Buss</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://customerfx.com/pages/customization/rsscomments.aspx?PostID=39831</wfw:commentRss><comments>http://customerfx.com/pages/customization/2009/01/08/saleslogix-basics-3-radio-buttons-vs-radio-group-controls.aspx#comments</comments><description>&lt;p&gt;For this basics article, I just wanted to outline the differences between the Radio Button and Radio Group controls, and when you would want to use one vs. the other.&lt;/p&gt;&lt;p&gt;Both controls provide a similar sort of interface to end users, allowing them to select one out of many available options.&amp;nbsp; Differences in how the information is saved, however, could determine which method is used.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Using a radiogroup control, you would only need a single field in the database to hold the resulting value.&amp;nbsp; In addition, the value stored is the actual string displayed in the group itself.&amp;nbsp; In this example, I create a field called &amp;quot;GroupOptions&amp;quot;.&amp;nbsp; When this record is saved, the value of &amp;quot;Test1&amp;quot; is stored in the database.&lt;/p&gt;&lt;p&gt;&lt;a href="http://customerfx.com/blogs/customization/RadioGroup2.jpg"&gt;&lt;img src="http://customerfx.com/blogs/customization/RadioGroup2.jpg" border="0" alt="" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;To set up the radiogroup control, you just need to add each option to the &amp;quot;Items&amp;quot; property of the control.&amp;nbsp; If you set the &amp;quot;Columns&amp;quot; property of the control, then the options will be split evenly between however many columns are defined.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;With radio buttons, you would need a field for each option.&amp;nbsp; A value of either &amp;quot;T&amp;quot; or &amp;quot;F&amp;quot; is stored for the option selected.&amp;nbsp; For this example, I&amp;#39;ve created 4 fields; &amp;quot;GroupOption1&amp;quot;, &amp;quot;GroupOption2&amp;quot;, &amp;quot;GroupOption3&amp;quot; and &amp;quot;GroupOption4&amp;quot;.&amp;nbsp; When this record is saved, a value of &amp;quot;T&amp;quot; would be stored in the &amp;quot;GroupOption1&amp;quot; field, while &amp;quot;F&amp;quot; is stored in the &amp;quot;GroupOption2&amp;quot; - &amp;quot;GroupOption3&amp;quot; fields.&lt;/p&gt;&lt;p&gt;&lt;a href="http://customerfx.com/blogs/customization/RadioButton.jpg"&gt;&lt;img src="http://customerfx.com/blogs/customization/RadioButton.jpg" border="0" alt="" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Radio buttons only allow one selection within whatever control container the radiobuttons are contained.&amp;nbsp; In order to group these specific options together, I&amp;#39;ve used a panel control as a control container.&amp;nbsp; Do do this, you just need to drop the panel control on the form, then drop the RadioButton controls on that Panel control.&amp;nbsp; Each radiobutton is a seperate control.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;So those are the main differences between those controls.&amp;nbsp; To summarize:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Radiogroup:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Only one control needs to be defined&lt;/li&gt;&lt;li&gt;Only one field needs to be added to the database&lt;/li&gt;&lt;li&gt;Literal value is stored in the database&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;RadioButtons&lt;/p&gt;&lt;ul&gt;&lt;li&gt;A field for each option must be added to the database&lt;/li&gt;&lt;li&gt;You must add a control for each field&lt;/li&gt;&lt;li&gt;If you want to set up multiple option groupings on a form, and additional control container must be used (such as a panel control)&lt;/li&gt;&lt;li&gt;&amp;quot;T&amp;quot; or &amp;quot;F&amp;quot; is stored in the database for the option selected. &lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Thanks for reading! &amp;nbsp;&lt;img src="http://customerfx.com/emoticons/emotion-1.gif" alt="Smile" /&gt; &lt;br /&gt;&lt;/p&gt;&lt;img src="http://customerfx.com/aggbug.aspx?PostID=39831" width="1" height="1"&gt;</description><category domain="http://customerfx.com/pages/customization/archive/tags/SalesLogix+LAN+Client/default.aspx">SalesLogix LAN Client</category><category domain="http://customerfx.com/pages/customization/archive/tags/Controls/default.aspx">Controls</category><category domain="http://customerfx.com/pages/customization/archive/tags/Customizations/default.aspx">Customizations</category><category domain="http://customerfx.com/pages/customization/archive/tags/SalesLogix/default.aspx">SalesLogix</category><category domain="http://customerfx.com/pages/customization/archive/tags/Development/default.aspx">Development</category><category domain="http://customerfx.com/pages/customization/archive/tags/Basics/default.aspx">Basics</category><category domain="http://customerfx.com/pages/customization/archive/tags/How-To/default.aspx">How-To</category></item><item><title>SalesLogix Basics 2 - Basic Scripting/Control Events</title><link>http://customerfx.com/pages/customization/2008/12/29/basics-2-basic-scripting-control-events.aspx</link><pubDate>Mon, 29 Dec 2008 15:44:00 GMT</pubDate><guid isPermaLink="false">e15581aa-2787-4c59-a940-524c09f5d256:39805</guid><dc:creator>Jason Buss</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://customerfx.com/pages/customization/rsscomments.aspx?PostID=39805</wfw:commentRss><comments>http://customerfx.com/pages/customization/2008/12/29/basics-2-basic-scripting-control-events.aspx#comments</comments><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;It&amp;#39;s simple enough in the SalesLogix LAN client to slap a bunch of
bound controls on a form, but if you want to perform any sort of action
on that data, chances are you are going to be writing code on various
events available to you.&lt;br /&gt;&lt;br /&gt;As a simple example, I&amp;#39;ll build a
simple account level form, using code to return a count of contact
records associated to that account&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;a href="http://customerfx.com/blogs/customization/TestForm2.JPG"&gt;&lt;img src="http://customerfx.com/blogs/customization/TestForm2.JPG" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;An
event in simply a user or system initiated action.&amp;nbsp; The form itself has
a number of events.&amp;nbsp; In this example, I&amp;#39;m using the form&amp;#39;s WhenChange
event to display the current last modified date for the account, and to
set the default text on the button.&amp;nbsp; The WhenChange event fires every
time a form is associated with a new ID record, such as moving in
between account records.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;font size="1"&gt;&amp;#39;Including Script - System:SLX Database Support&lt;br /&gt;option explicit&lt;br /&gt;&lt;br /&gt;Dim AccountID&lt;br /&gt;&lt;br /&gt;Sub AXFormChange(Sender)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SetControlDefaults&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;Sub SetControlDefaults&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; AccountID = txtCurrentID.Text&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dteLastModifiedDT.Text = GetField(&amp;quot;MODIFYDATE&amp;quot;, &amp;quot;ACCOUNT&amp;quot;, &amp;quot;ACCOUNTID = &amp;#39;&amp;quot; &amp;amp; AccountID &amp;amp; &amp;quot;&amp;#39;&amp;quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; txtCount.Text = &amp;quot;Calculate&amp;quot;&lt;br /&gt;End Sub&lt;br /&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="2"&gt;On the &lt;i&gt;WhenClick&lt;/i&gt;
event of the button, I call a function using the SLX Database Support
script&amp;#39;s GetField function to return a count of the contacts for the
current account, and set the Button&amp;#39;s Caption property to display that
value.&lt;/font&gt; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;font size="1"&gt;Sub cmdGetCountClick(Sender)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sender.Caption = GetCount(AccountID)&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;Function GetCount(sAccountID)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; GetCount = GetField(&amp;quot;count(*)&amp;quot;, &amp;quot;contact&amp;quot;, &amp;quot;accountid = &amp;#39;&amp;quot; &amp;amp; AccountID &amp;amp; &amp;quot;&amp;#39;&amp;quot;)&lt;br /&gt;End Function&lt;/font&gt;&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Obviously,
this is a pretty simple example and there are many more things you can
do via code in SalesLogix.&amp;nbsp; There are many good VBScript language
references available online, and it wouldn&amp;#39;t hurt to find a good ADO
reference as well.&amp;nbsp; I&amp;#39;ll be providing other simple code snippets in
future articles, so please keep reading!&amp;nbsp; &lt;img src="http://customerfx.com/emoticons/emotion-1.gif" alt="Smile" /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;img src="http://customerfx.com/aggbug.aspx?PostID=39805" width="1" height="1"&gt;</description><category domain="http://customerfx.com/pages/customization/archive/tags/SalesLogix+LAN+Client/default.aspx">SalesLogix LAN Client</category><category domain="http://customerfx.com/pages/customization/archive/tags/Customizations/default.aspx">Customizations</category><category domain="http://customerfx.com/pages/customization/archive/tags/SalesLogix/default.aspx">SalesLogix</category><category domain="http://customerfx.com/pages/customization/archive/tags/Development/default.aspx">Development</category><category domain="http://customerfx.com/pages/customization/archive/tags/Basics/default.aspx">Basics</category><category domain="http://customerfx.com/pages/customization/archive/tags/How-To/default.aspx">How-To</category></item></channel></rss>