<?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 : snapshot</title><link>http://customerfx.com/pages/customization/archive/tags/snapshot/default.aspx</link><description>Tags: snapshot</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP2 (Build: 20611.960)</generator><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></channel></rss>