<?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 : How-To, SalesLogix, SalesLogix Web</title><link>http://customerfx.com/pages/customization/archive/tags/How-To/SalesLogix/SalesLogix+Web/default.aspx</link><description>Tags: How-To, SalesLogix, SalesLogix Web</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP2 (Build: 20611.960)</generator><item><title>Launching Schedule Activity functionality in the SLX Web client</title><link>http://customerfx.com/pages/customization/2011/10/27/Launching-Schedule-Activity-functionality-in-the-SLX-Web-client.aspx</link><pubDate>Thu, 27 Oct 2011 12:31:00 GMT</pubDate><guid isPermaLink="false">e15581aa-2787-4c59-a940-524c09f5d256:45269</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=45269</wfw:commentRss><comments>http://customerfx.com/pages/customization/2011/10/27/Launching-Schedule-Activity-functionality-in-the-SLX-Web-client.aspx#comments</comments><description>&lt;p&gt;On a recent project, I worked on emulating functionality similar to what is found in the LAN client where a user is presented a dialog asking them to choose between different activity types then launching into the Schedule Activity functionality.&amp;nbsp; I found this was fairly easy to duplicate in the web client, and in this post, I&amp;#39;ll quickly go through the steps for creating that type of functionality.&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;First of all, we need to create a quick from which will give users a choice of what type of activity to create.&amp;nbsp; Since this form contains no bound controls, it doesn&amp;#39;t matter where we save it.&amp;nbsp; For the sake of consistency, I&amp;#39;d recommend saving it under SalesLogix Activity Support.&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;Under SalesLogix Activity Support in the Project Explorer, expand the Activity node, right-click the Forms folder and select &amp;quot;Add Form&amp;quot;.&amp;nbsp; &lt;/p&gt;

&lt;p&gt;The important elements of this view are the radio group control and the button.&amp;nbsp; The radio group will provide users the choice of what type of activity to create, and the button will handle launching the appropriate schedule activity dialog based on the option selected.&lt;/p&gt;&lt;p&gt;Once you have the blank form, add a radio group and control&amp;nbsp; In the radio group control, I have added choices for Phone Calls, Meetings and ToDos.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://customerfx.com/blogs/customization/SLXWeb%20Activity%20Quickform.JPG"&gt;&lt;img src="http://customerfx.com/blogs/customization/SLXWeb%20Activity%20Quickform.JPG" border="0" alt="" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;On the button I added to the form, I added a C# Snippet Action item to the click event of the button and added the following code: &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;table style="table-layout:fixed;width:600px;" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre&gt; LinkHandler Link &lt;span style="color:Navy;"&gt;=&lt;/span&gt; &lt;span style="color:Blue;"&gt;new&lt;/span&gt; LinkHandler(Page);
&lt;span style="color:Blue;"&gt;if&lt;/span&gt; (rgActivityType.SelectedIndex == 0)
{
    Link.SchedulePhoneCall();
}
&lt;span style="color:Blue;"&gt;else&lt;/span&gt; &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (rgActivityType.SelectedIndex == 1)
{
    Link.ScheduleMeeting();
}
&lt;span style="color:Blue;"&gt;else&lt;/span&gt; &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (rgActivityType.SelectedIndex == 2)
{
    Link.ScheduleToDo();
}
&lt;span style="color:Blue;"&gt;else&lt;/span&gt;
{
    throw &lt;span style="color:Blue;"&gt;new&lt;/span&gt; Sage.Platform.Application.ValidationException(&lt;span style="color:#008080;"&gt;&amp;quot;You must select a activity type to continue&amp;quot;&lt;/span&gt;);
}&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;Creating a LinkHandler object gives you access to the various Schedule Activity forms.&amp;nbsp; An IF...Else statement calls the right schedule form based on what was selected.&amp;nbsp; I also added a Validation Exception in case no activity type was selected before clicking the Next button.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;Once you have saved the new quick form, it is ready to go.&amp;nbsp; To use this form, you will need to add it to the available smartparts for whatever portal page you plan on calling the interface from.&amp;nbsp; To add the form, expand the Portal Manager-Sage SalesLogix-Pages nodes, and double click on whichever page you want to use.&lt;/p&gt;&lt;p&gt;When the page has opened, select the SmartParts tab and add the new form.&amp;nbsp; You will need to set the Target Workspace value to &amp;quot;DialogWorkspace&amp;quot;. &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://customerfx.com/blogs/customization/SLXWebPortalPage.JPG"&gt;&lt;img src="http://customerfx.com/blogs/customization/SLXWebPortalPage.JPG" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;Now that the QuickForm has been added, you will need to add code to launch the form.&amp;nbsp; This could be from a button on a detail view, or wherever you can add a C# Snippit action.&lt;br /&gt;&lt;p&gt;I&amp;#39;m simply using the Dialog service to call the new QuickForm.&amp;nbsp; The SetSpecs function I&amp;#39;m using allows you to set the dimensions of the form you launch.&amp;nbsp; You may have to experiment with the settings to make things the appropriate size. &lt;br /&gt;&lt;/p&gt;
&lt;table style="table-layout:fixed;width:600px;" cellpadding="0" cellspacing="0"&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt; {
    &lt;span style="color:Green;"&gt;//create dialog for activity type to launch...
&lt;/span&gt;    &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (DialogService !&lt;span style="color:Navy;"&gt;=&lt;/span&gt; &lt;span style="color:Blue;"&gt;null&lt;/span&gt;)
    {
        DialogService.SetSpecs(110, 318, &lt;span style="color:#008080;"&gt;&amp;quot;ScheduleActivity&amp;quot;&lt;/span&gt;, &lt;span style="color:#008080;"&gt;&amp;quot;Schedule Followup Activity&amp;quot;&lt;/span&gt;);
        DialogService.ShowDialog();
    }
}&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp; &lt;br /&gt;That&amp;#39;s about all there is to it!&amp;nbsp; I hope you find this example useful.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Thanks for reading!&lt;/p&gt;&lt;p&gt;&amp;nbsp;Jason &lt;br /&gt;&lt;/p&gt;&lt;img src="http://customerfx.com/aggbug.aspx?PostID=45269" width="1" height="1"&gt;</description><category domain="http://customerfx.com/pages/customization/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://customerfx.com/pages/customization/archive/tags/Development/default.aspx">Development</category><category domain="http://customerfx.com/pages/customization/archive/tags/DialogWorkspace/default.aspx">DialogWorkspace</category><category domain="http://customerfx.com/pages/customization/archive/tags/Forms/default.aspx">Forms</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/SalesLogix/default.aspx">SalesLogix</category><category domain="http://customerfx.com/pages/customization/archive/tags/SalesLogix+Web/default.aspx">SalesLogix Web</category></item><item><title>Modifying the 'Copy to E-mail' link in the SalesLogix Web client Opportunity snapshot </title><link>http://customerfx.com/pages/customization/2010/06/08/modifying-the-copy-to-e-mail-link-in-the-slx-web-client-opportunity-snapshot.aspx</link><pubDate>Tue, 08 Jun 2010 12:50:00 GMT</pubDate><guid isPermaLink="false">e15581aa-2787-4c59-a940-524c09f5d256:43464</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=43464</wfw:commentRss><comments>http://customerfx.com/pages/customization/2010/06/08/modifying-the-copy-to-e-mail-link-in-the-slx-web-client-opportunity-snapshot.aspx#comments</comments><description>&lt;p&gt;If you&amp;#39;ve ever wanted to modify the email generated from the Opportunity Snapshot in the web client, you&amp;#39;ll find that it is incredibly simple to add new fields to the body of the email.&amp;nbsp; To do so, you will need to modify the OpportunitySnapShot.ascx.cs smart part, found under Portal Manager-&amp;gt;Sage SalesLogix-&amp;gt;SupportFiles-&amp;gt;SmartParts-&amp;gt;Opportunity.&lt;/p&gt;
&lt;p&gt;In this file, you will find a function named &amp;#39;FormatEmailBody&amp;#39;.&amp;nbsp; This function builds a string (emailBody) from available properties in the Opportunity Entity.&amp;nbsp; As long as any new fields you have added to the opportunity table has been added to the entity properties, it is a simple matter to include those fields in the email body.&lt;/p&gt;
&lt;p&gt;Current fields defined in the email are done so with the following code (Example shows description field):&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;emailBody += String.Format(&amp;quot;{0} {1} %0A&amp;quot;, GetLocalResourceObject(&amp;quot;lblEmailOppDesc.Caption&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;&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; CheckForNullValue(opportunity.Description));&lt;/p&gt;
&lt;p&gt;To add a new field (c_orderno), we&amp;#39;re going to copy this line, replace the GetLocalResourceObject call with the field label we&amp;#39;d like to use, and reference the new field from the opportunity entity in the CheckForNullValue function in this line.&lt;/p&gt;
&lt;p&gt;emailBody += String.Format(&amp;quot;{0} {1} %0A&amp;quot;, &amp;quot;Order No:&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;&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; CheckForNullValue(opportunity.CORDERNO));&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;The code is formatted in such a way that it should be pretty simple to figure out where in the email body you are putting the new field.&lt;/p&gt;
&lt;p&gt;If you want to add a date field, the format is slightly different, if you want to use the UTCDateTimeToLocalTime function inline:&lt;/p&gt;
&lt;p&gt;emailBody += String.Format(&amp;quot;{0} {1} %0A&amp;quot;, &amp;quot;Modified:&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;&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; opportunity.CMODIFIED.HasValue&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;&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;&amp;nbsp;&amp;nbsp; ? timeZone.UTCDateTimeToLocalTime((DateTime) opportunity.CMODIFIED).ToString(&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; datePattern)&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;&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;&amp;nbsp;&amp;nbsp; : String.Empty); &lt;/p&gt;
&lt;table style="TABLE-LAYOUT:fixed;" cellspacing="0" cellpadding="0"&gt;

&lt;tr&gt;
&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;As you can see, it&amp;#39;s a pretty simple process to add new fields to the Email body in the email produced by the Opportunity snapshot.&lt;/p&gt;
&lt;p&gt;Hope you find this helpful.&amp;nbsp; Thanks for reading! &lt;br /&gt;&lt;/p&gt;&lt;img src="http://customerfx.com/aggbug.aspx?PostID=43464" width="1" height="1"&gt;</description><category domain="http://customerfx.com/pages/customization/archive/tags/Customizations/default.aspx">Customizations</category><category domain="http://customerfx.com/pages/customization/archive/tags/Email/default.aspx">Email</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/SalesLogix/default.aspx">SalesLogix</category><category domain="http://customerfx.com/pages/customization/archive/tags/SalesLogix+Web/default.aspx">SalesLogix Web</category><category domain="http://customerfx.com/pages/customization/archive/tags/Smartparts/default.aspx">Smartparts</category></item><item><title>Adding "Save" functionality to the SalesLogix 7.5 Web Client Edit Address view</title><link>http://customerfx.com/pages/customization/2009/01/14/adding-quot-save-quot-functionality-to-the-7-5-web-client-edit-address-view.aspx</link><pubDate>Wed, 14 Jan 2009 19:10:00 GMT</pubDate><guid isPermaLink="false">e15581aa-2787-4c59-a940-524c09f5d256:39849</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=39849</wfw:commentRss><comments>http://customerfx.com/pages/customization/2009/01/14/adding-quot-save-quot-functionality-to-the-7-5-web-client-edit-address-view.aspx#comments</comments><description>&lt;p&gt;During a recent SalesLogix customization, we realized that editing an account address does not cause the unsaved data prompt to be displayed.&amp;nbsp; If someone were to modify an account address and neglected to save, changes would be lost without the user being the wiser.&amp;nbsp; Initially, we just added a Save business rule to the OnChangeAction of the Address control, but this wouldn&amp;#39;t account for any related contact records that would also need to have their addresses updated.&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;Since the edit address functionality contains both on &amp;quot;OK&amp;quot; and &amp;quot;Cancel&amp;quot; button, we reasoned that it would make sense to have OK comit the change to the database, bypassing the unsaved data prompt all together.&amp;nbsp; To do this, I basically duplicated the functionailty present on the &amp;quot;Save&amp;quot; button on Account Detail onto the OnChangeAction event of the Address control visible on the AccountDetails form.&amp;nbsp; This forces a user to explicitly comit or discard any account address changes, as well as allowing functionality to update related contacts.&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;The type of Action Item we need to add is a Validation Business Rule.&amp;nbsp; The Validation Business Rule will evaluate any contacts for the account, checking to see if any of those contacts are configured with the same address as the account.&amp;nbsp; If so, the user needs to be presented with a prompt asking if related contacts&amp;#39; addresses should be updated as well.&amp;nbsp; This is done using the UpdateAccountOptions smartpart.&amp;nbsp;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;When you edit the OnChangeAction of the address control on the form, you are presented with the Action item designer:&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://customerfx.com/blogs/customization/ActionItem1.JPG"&gt;&lt;img height="427" src="http://customerfx.com/blogs/customization/ActionItem1.JPG" width="502" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;After selecting ValidationBusinessRule in the list, you need to configure the OnFail and OnSuccess events of that action item.&amp;nbsp; The OnFail event fires if there are no related contacts with the same address. Simply set the EntityType to Account, and the select the Save business rule.&amp;nbsp; The modified Address record is saved for the Account record.&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;The OnSuccess event contains parameters for the user prompt displayed if updatable contacts are found.&amp;nbsp; If so, the user is asked if they want to update contacts as well.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;The For the OnSuccess event,&amp;nbsp; Set the EntityType to Account, and add a new Dialog action:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://customerfx.com/blogs/customization/ActionItem2.JPG"&gt;&lt;img height="425" src="http://customerfx.com/blogs/customization/ActionItem2.JPG" width="500" border="0" alt="" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;EntityType should again be account.&amp;nbsp; UpdateAccountOptions may not be available on the dropdown list of SmartParts, but typing in the value &amp;quot;UpdateAccountOptions&amp;quot; will work as well.&amp;nbsp; Click OK to close the Dialog Action, which will fill in the smartpart value for the Validation Business Rule.&lt;/p&gt;
&lt;p&gt;You can tweak the height and width properties in the Validation Business Rule to adjust the size of the prompt.&amp;nbsp; Finally, the ValidationMethod should be set to &amp;quot;HasPropagationChanges&amp;quot;.&lt;/p&gt;
&lt;p&gt;That&amp;#39;s all there is to it!&amp;nbsp; Re-build the SalesLogix web platform and re--deploy, and you should never have to worry about losing account address changes again.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Thanks! &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=39849" width="1" height="1"&gt;</description><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/How-To/default.aspx">How-To</category><category domain="http://customerfx.com/pages/customization/archive/tags/SalesLogix/default.aspx">SalesLogix</category><category domain="http://customerfx.com/pages/customization/archive/tags/SalesLogix+Web/default.aspx">SalesLogix Web</category></item></channel></rss>