<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://dotnetdeveloper.co.uk/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>Search results matching tag 'MS CRM 3.0'</title><link>http://dotnetdeveloper.co.uk/search/SearchResults.aspx?o=DateDescending&amp;tag=MS+CRM+3.0&amp;orTags=0</link><description>Search results matching tag 'MS CRM 3.0'</description><dc:language>en-US</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><item><title>Adding case resolution types to case resolution form</title><link>http://dotnetdeveloper.co.uk/blogs/mscrm/archive/2009/05/08/adding-to-case-resolution-type-to-case-resolution.aspx</link><pubDate>Fri, 08 May 2009 09:03:00 GMT</pubDate><guid isPermaLink="false">86eca113-8d7a-4e3e-acb1-20f766f1d10b:84</guid><dc:creator>Steve</dc:creator><description>&lt;p&gt;&amp;nbsp;not having done this before on our installation this took me a few minutes to figure out.&lt;/p&gt;
&lt;p&gt;obviously as its a drop down field its a picklist which needs editing but it&amp;#39;s not in the Case/Incident resolution entity.&lt;/p&gt;
&lt;p&gt;The picklist can actually be found within the Case entity.&lt;/p&gt;
&lt;p&gt;If you select the Status Code entity and change the state dropdown from the right of the screen from Active to Resolved you will see the text list will change to show the Case Resolution picklist.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description></item><item><title>Workflows and Working Days</title><link>http://dotnetdeveloper.co.uk/blogs/mscrm/archive/2009/04/29/workflows-and-working-days.aspx</link><pubDate>Wed, 29 Apr 2009 14:48:00 GMT</pubDate><guid isPermaLink="false">86eca113-8d7a-4e3e-acb1-20f766f1d10b:79</guid><dc:creator>Steve</dc:creator><description>&lt;p&gt;Hi on a few posts on the MS CRM dynamics forum&amp;nbsp;I commented on a solution for working out due dates taking into account weekends and holidays etc.&lt;/p&gt;
&lt;p&gt;This is the solution&amp;nbsp;I came up with which has been working for the last x months without any issues (as far as i&amp;#39;m aware). This is based on the task entity creation event and basically picks up the Creation Date and the Due date and calculates the difference between them and then changes the due date (assuming a user inputs the number of days till the task should be completed which will generate a due date automatically - could be tweaked&amp;nbsp;I know) to be a working date taking into account any company / official holidays (if rules have been entered into the Business Closures entity Settings &amp;gt; Business Closures). The code should be transferable between many implementations but is used very specifically at the moment as above.&lt;/p&gt;
&lt;p&gt;As far as&amp;nbsp;I am aware it has been tested quite&amp;nbsp;thouroughly with exception to the Business Closures which our company don&amp;#39;t use at the moment.&lt;/p&gt;
&lt;p&gt;These belong in my case within a workflow assembly (maybe called WorkflowAssembly.DLL like mine) and are used within the workflow manager.&lt;/p&gt;
&lt;p&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;///&amp;nbsp; Change Due Date used by workflow required by task.&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;/// &amp;lt;param name=&amp;quot;caller&amp;quot;&amp;gt;string&amp;lt;/param&amp;gt;&lt;br /&gt;/// &amp;lt;param name=&amp;quot;creationDate&amp;quot;&amp;gt;DateTime&amp;lt;/param&amp;gt;&lt;br /&gt;/// &amp;lt;param name=&amp;quot;dueDate&amp;quot;&amp;gt;DateTime&amp;lt;/param&amp;gt;&lt;br /&gt;&amp;nbsp;/// &amp;lt;returns&amp;gt;DateTime&amp;lt;/returns&amp;gt;&lt;br /&gt;public DateTime ChangeDueDate(string caller, DateTime creationDate, DateTime dueDate)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; XmlDocument xDoc = new XmlDocument();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xDoc.LoadXml(caller);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; XmlNodeList nodes = xDoc.SelectNodes(&amp;quot;caller/userid&amp;quot;);&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (nodes.Count &amp;gt; 0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // setup service&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; using (CrmService service = CrmSdkProxy.InstantiateService(new Guid(nodes[0].InnerXml.ToString())))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&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; // get difference between duedate and creation date&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; TimeSpan ts = dueDate - creationDate;&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; return ReturnWorkingDate(creationDate, ts.Days, service);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // if theres any problems return standard due date.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return dueDate;&lt;br /&gt;}&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// Accepts a date,number of days to skip and a crmservice instance&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;/// &amp;lt;param name=&amp;quot;date&amp;quot;&amp;gt;DateTime&amp;lt;/param&amp;gt;&lt;br /&gt;/// &amp;lt;param name=&amp;quot;numberOfWorkingDays&amp;quot;&amp;gt;Integer&amp;lt;/param&amp;gt;&lt;br /&gt;/// &amp;lt;param name=&amp;quot;service&amp;quot;&amp;gt;CRMService&amp;lt;/param&amp;gt;&lt;br /&gt;/// &amp;lt;returns&amp;gt;DateTime&amp;lt;/returns&amp;gt;&lt;br /&gt;public DateTime ReturnWorkingDate(DateTime date, int numberOfWorkingDays, CrmService service)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (numberOfWorkingDays &amp;gt; 0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; date = date.AddDays(1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // if today is not a day included in the business closure calendar or else move on a day&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (IsBusinessWorkingDay(date, service))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&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 today is not saturday or sunday else move on a day&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 (!IsWeekend(date))&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; {&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; // this is a working day&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; numberOfWorkingDays--;&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; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // returns the date advanced by x number of working days&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return date;&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;private static bool IsBusinessWorkingDay(DateTime dueDate, CrmService service)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // setup working variables&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; bool workingDay = true;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string guidString = string.Empty;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // create fetchxml&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; StringBuilder fetchXML = new StringBuilder();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fetchXML.Append(&amp;quot;&amp;lt;fetch mapping=&amp;#39;logical&amp;#39;&amp;gt;&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fetchXML.Append(&amp;quot;&amp;lt;entity name=&amp;#39;calendar&amp;#39;&amp;gt;&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fetchXML.Append(&amp;quot;&amp;lt;attribute name=&amp;#39;calendarid&amp;#39;/&amp;gt;&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fetchXML.Append(&amp;quot;&amp;lt;filter type=&amp;#39;and&amp;#39;&amp;gt;&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fetchXML.Append(&amp;quot;&amp;nbsp;&amp;lt;condition attribute=&amp;#39;isshared&amp;#39; operator=&amp;#39;eq&amp;#39; value=&amp;#39;1&amp;#39;/&amp;gt;&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fetchXML.Append(&amp;quot;&amp;lt;/filter&amp;gt;&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fetchXML.Append(&amp;quot;&amp;lt;filter type=&amp;#39;and&amp;#39;&amp;gt;&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fetchXML.Append(&amp;quot;&amp;nbsp;&amp;lt;condition attribute=&amp;#39;name&amp;#39; operator=&amp;#39;eq&amp;#39; value=&amp;#39;Business Closure Calendar&amp;#39;/&amp;gt;&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fetchXML.Append(&amp;quot;&amp;lt;/filter&amp;gt;&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fetchXML.Append(&amp;quot;&amp;lt;/entity&amp;gt;&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fetchXML.Append(&amp;quot;&amp;lt;/fetch&amp;gt;&amp;quot;);&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // perform fetch&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string returnXML = service.Fetch(fetchXML.ToString());&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // setup xml document for return xml&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; XmlDocument xDoc = new XmlDocument();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; xDoc.LoadXml(returnXML);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; XmlNodeList nodes = xDoc.SelectNodes(&amp;quot;resultset/result/calendarid&amp;quot;);&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // if theres a calendar returned from the fetch then handle it&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (nodes.Count &amp;gt; 0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // get Business closures calendar Guid&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; guidString = nodes[0].InnerXml.ToString();&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // create calendar Guid&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Guid calGuid = new Guid(guidString);&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // return all calendar columns for this calendar (just need calendarrules)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; calendar cal = (calendar)service.Retrieve(EntityName.calendar.ToString(), calGuid, new AllColumns());&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // for each rule within the calendarrules collection&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (calendarrule cl in cal.calendarrules)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&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; // Convert start and end date to DateTime&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; DateTime holStartDate = Convert.ToDateTime(cl.effectiveintervalstart.Value.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; DateTime holEndDate = Convert.ToDateTime(cl.effectiveintervalend.Value.ToString());&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; // check if the date passed in is within the startdate / enddate of holidays via rules&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 (DateTime.Compare(dueDate, holStartDate) &amp;gt; 0 &amp;amp;&amp;amp; DateTime.Compare(dueDate, holEndDate) &amp;lt; 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; {&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; workingDay = false;&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; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return workingDay;&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;private static bool IsBusinessWorkingDay(DateTime dueDate, CrmService service)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // setup working variables&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; bool workingDay = true;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string guidString = string.Empty;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // create fetchxml&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; StringBuilder fetchXML = new StringBuilder();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fetchXML.Append(&amp;quot;&amp;lt;fetch mapping=&amp;#39;logical&amp;#39;&amp;gt;&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fetchXML.Append(&amp;quot;&amp;lt;entity name=&amp;#39;calendar&amp;#39;&amp;gt;&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fetchXML.Append(&amp;quot;&amp;lt;attribute name=&amp;#39;calendarid&amp;#39;/&amp;gt;&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fetchXML.Append(&amp;quot;&amp;lt;filter type=&amp;#39;and&amp;#39;&amp;gt;&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fetchXML.Append(&amp;quot;&amp;nbsp;&amp;lt;condition attribute=&amp;#39;isshared&amp;#39; operator=&amp;#39;eq&amp;#39; value=&amp;#39;1&amp;#39;/&amp;gt;&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fetchXML.Append(&amp;quot;&amp;lt;/filter&amp;gt;&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fetchXML.Append(&amp;quot;&amp;lt;filter type=&amp;#39;and&amp;#39;&amp;gt;&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fetchXML.Append(&amp;quot;&amp;nbsp;&amp;lt;condition attribute=&amp;#39;name&amp;#39; operator=&amp;#39;eq&amp;#39; value=&amp;#39;Business Closure Calendar&amp;#39;/&amp;gt;&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fetchXML.Append(&amp;quot;&amp;lt;/filter&amp;gt;&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fetchXML.Append(&amp;quot;&amp;lt;/entity&amp;gt;&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fetchXML.Append(&amp;quot;&amp;lt;/fetch&amp;gt;&amp;quot;);&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // perform fetch&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string returnXML = service.Fetch(fetchXML.ToString());&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // setup xml document for return xml&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; XmlDocument xDoc = new XmlDocument();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; xDoc.LoadXml(returnXML);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; XmlNodeList nodes = xDoc.SelectNodes(&amp;quot;resultset/result/calendarid&amp;quot;);&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // if theres a calendar returned from the fetch then handle it&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (nodes.Count &amp;gt; 0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // get Business closures calendar Guid&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; guidString = nodes[0].InnerXml.ToString();&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // create calendar Guid&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Guid calGuid = new Guid(guidString);&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // return all calendar columns for this calendar (just need calendarrules)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; calendar cal = (calendar)service.Retrieve(EntityName.calendar.ToString(), calGuid, new AllColumns());&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // for each rule within the calendarrules collection&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (calendarrule cl in cal.calendarrules)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&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; // Convert start and end date to DateTime&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; DateTime holStartDate = Convert.ToDateTime(cl.effectiveintervalstart.Value.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; DateTime holEndDate = Convert.ToDateTime(cl.effectiveintervalend.Value.ToString());&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; // check if the date passed in is within the startdate / enddate of holidays via rules&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 (DateTime.Compare(dueDate, holStartDate) &amp;gt; 0 &amp;amp;&amp;amp; DateTime.Compare(dueDate, holEndDate) &amp;lt; 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; {&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; workingDay = false;&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; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return workingDay;&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;now that the above code has been compiled into a your workflow assembly to utilise the assembly you also need to add the function to the workflow config file which is located at C:\Program Files\Microsoft CRM\Server\bin\assembly&lt;/p&gt;
&lt;p&gt;&amp;lt;method name=&amp;quot;Change Due Date&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;assembly=&amp;quot;WorkflowAssembly.dll&amp;quot; typename=&amp;quot;WorkflowAssembly.DateTimeFunctions&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;methodname=&amp;quot;ChangeDueDate&amp;quot; timeout=&amp;quot;7200&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;group=&amp;quot;Date and time functions&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;parameter name=&amp;quot;Caller&amp;quot; datatype=&amp;quot;caller&amp;quot;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;parameter name=&amp;quot;Creation Date&amp;quot; datatype=&amp;quot;datetime&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;parameter name=&amp;quot;DueDate&amp;quot; datatype=&amp;quot;datetime&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;result datatype=&amp;quot;datetime&amp;quot;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/method&amp;gt;&lt;/p&gt;
&lt;p&gt;Open up the file and and paste the above into it. Basically its just a function definition which shows which class/methods within the dll are used and what parameters are expected.&lt;/p&gt;
&lt;p&gt;Once you&amp;#39;ve copied over the&amp;nbsp;DLL&amp;nbsp;to C:\Program Files\Microsoft CRM\Server\bin\assembly and edited the workflow.config file within the same location reset IIS and the MSCRM Workflow Service.&lt;/p&gt;
&lt;p&gt;Now if all is going well when you go into Workflow Manager and select the workflow you wish to use this functionality in. ( I used this in a task workflow which when the task was created automatically would change the due date to a working day x days in the future). &lt;/p&gt;
&lt;p&gt;Goto insert action --&amp;gt; Call Assembly --&amp;gt; Date Time Functions --&amp;gt; Change Due Date and select the function&lt;/p&gt;
&lt;p&gt;&lt;img height="449" alt="Figure 1" src="http://dotnetdeveloper.co.uk/photos/mscrm/images/80/original.aspx" width="532" border="0" /&gt;&lt;/p&gt;
&lt;p&gt;Figure 1&lt;/p&gt;
&lt;p&gt;Click on the newly created function within the workspace and a new screen will popup (as per Figure 2). Double click the parameter called Creation Date and populate (as shown in figure 3), repeat for due date.&lt;/p&gt;
&lt;p&gt;&lt;img height="222" alt="Figure 2" src="http://dotnetdeveloper.co.uk/photos/mscrm/images/81/original.aspx" width="417" border="0" /&gt;&lt;/p&gt;
&lt;p&gt;Figure 2&lt;/p&gt;&lt;img height="286" alt="Figure 2" src="http://dotnetdeveloper.co.uk/photos/mscrm/images/82/original.aspx" width="467" border="0" /&gt; 
&lt;p&gt;Figure 3&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Well its my longest post yet and may well not be very clear (rushed it out in work) so if you have any questions or need anything clarifying give me a shout. Hopefully it will help somebody.&lt;/p&gt;</description></item><item><title>80040204 - Failed to start process</title><link>http://dotnetdeveloper.co.uk/blogs/mscrm/archive/2008/09/15/80040204-failed-to-start-process.aspx</link><pubDate>Mon, 15 Sep 2008 14:46:00 GMT</pubDate><guid isPermaLink="false">86eca113-8d7a-4e3e-acb1-20f766f1d10b:57</guid><dc:creator>Steve</dc:creator><description>&lt;p&gt;Whilst looking into issues with some workflows not working and not even appearing within the workflow monitor,&amp;nbsp;I spotted this error within the event viewer on the&amp;nbsp;server.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;Failed to start process &amp;#39;blah blah process&amp;#39; for object (119,{xxxxxxxx-xxxx-xxxx-xxxxxxxx}),Caller is &amp;#39;blah blah&amp;#39;. Error code 80040204.&lt;/p&gt;
&lt;p&gt;Essentially we had been playing with our security permissions the previous week and had removed the account from SQLAccessGroup if you re-add&amp;nbsp;it and then restart the workflow service you should now find the workflows re-appear.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;just to add the 2 groups you need your account to be in is PrivUserGroup and SQLAccessGroup.&lt;/p&gt;</description></item><item><title>MSCRM Workflow Assembly Error 80070005 Acess Denied </title><link>http://dotnetdeveloper.co.uk/blogs/mscrm/archive/2008/06/23/mscrm-workflow-assembly-error-80070005-acess-denied.aspx</link><pubDate>Mon, 23 Jun 2008 09:02:00 GMT</pubDate><guid isPermaLink="false">86eca113-8d7a-4e3e-acb1-20f766f1d10b:51</guid><dc:creator>Steve</dc:creator><description>&lt;p&gt;I&amp;#39;ve recently come across this error message (8005005) whilst copying some new workflows to my Test Server.&lt;/p&gt;
&lt;p&gt;This was shown in the Workflow Monitor when&amp;nbsp;I tried to run any workflows which relied on a response from any custom workflow assembly file methods.&lt;/p&gt;
&lt;p&gt;After checking that the CRM workflow service had the correct file permissions (I was using network service). I then added the same permissions to the to the workflow assembly. then I &lt;strong&gt;restarted the workflow service&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;This problem then cleared up&lt;/p&gt;</description></item></channel></rss>