<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-780680930800461091</id><updated>2011-11-14T11:30:40.849+01:00</updated><category term='debug'/><category term='url'/><category term='attachment'/><category term='exam'/><category term='snippet'/><category term='dynamic entity'/><category term='javascript'/><category term='relationship'/><category term='workflow'/><category term='creating'/><category term='note'/><category term='callout'/><category term='status'/><category term='duration'/><category term='custom attributes'/><category term='instructions'/><category term='settings'/><category term='state'/><category term='white paper'/><category term='mime type'/><category term='lookup view'/><category term='mail merge'/><category term='limitation'/><category term='annotation'/><category term='copy'/><category term='sql'/><category term='sdk'/><category term='upload'/><category term='web service'/><category term='search'/><category term='script'/><category term='picklist'/><category term='forms'/><category term='cusumization'/><category term='datetime'/><category term='notification'/><category term='error'/><category term='custom entity'/><category term='metadata'/><title type='text'>Afna CRM</title><subtitle type='html'>MS CRM blog for developers</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://a-crm.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://a-crm.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Dejan Dular</name><uri>http://www.blogger.com/profile/00222488358810521805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh5.google.com/dejan.dular/RVhJF39ZABI/AAAAAAAAAHQ/jYuz5pHLch8/s288/potatpljanjeavartar.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>47</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-780680930800461091.post-753111299119558250</id><published>2010-02-15T21:10:00.001+01:00</published><updated>2010-02-15T21:10:10.263+01:00</updated><title type='text'>Sitemap error because of missing LCID</title><content type='html'>&lt;p&gt;I accidentally discovered the following “feature”: All LCID Titles in SubArea must have matching LCID in Group Titles.&lt;/p&gt;  &lt;p&gt;Add a group in sitemap, like this:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;lt;Group Id=&amp;quot;Demo&amp;quot;&amp;gt;     &lt;br /&gt;&amp;#160; &amp;lt;Titles&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Title LCID=&amp;quot;1033&amp;quot; Title=&amp;quot;Demo&amp;quot;/&amp;gt;      &lt;br /&gt;&amp;#160; &amp;lt;/Titles&amp;gt;      &lt;br /&gt;&amp;#160; &amp;lt;SubArea Id=&amp;quot;DemoPage&amp;quot; Icon=&amp;quot;iconUrl&amp;quot; Url=&amp;quot;&lt;/font&gt;&lt;font face="Courier New"&gt;someUrl&amp;quot;&lt;/font&gt;&lt;font face="Courier New"&gt;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Titles&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Title LCID=&amp;quot;1033&amp;quot; Title=&amp;quot;Demo Page&amp;quot;/&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Title LCID=&amp;quot;1060&amp;quot; Title=&amp;quot;Demo Stran&amp;quot;/&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/Titles&amp;gt;      &lt;br /&gt;&amp;#160; &amp;lt;/SubArea&amp;gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;lt;/Group&amp;gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;The sitemap will upload normally and pass all validation, but after switching to language 1060, the error will be shown. The cause is missing LCID 1060 in Group Titles.&lt;/p&gt;  &lt;p&gt;The correct XML for this example is:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;lt;Group Id=&amp;quot;Demo&amp;quot;&amp;gt;     &lt;br /&gt;&amp;#160; &amp;lt;Titles&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Title LCID=&amp;quot;1033&amp;quot; Title=&amp;quot;Demo&amp;quot;/&amp;gt;      &lt;br /&gt;&lt;font color="#ff0000"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Title LCID=&amp;quot;1060&amp;quot; Title=&amp;quot;Demo&amp;quot;/&amp;gt;&lt;/font&gt;      &lt;br /&gt;&amp;#160; &amp;lt;/Titles&amp;gt;      &lt;br /&gt;&amp;#160; &amp;lt;SubArea Id=&amp;quot;DemoPage&amp;quot; Icon=&amp;quot;iconUrl&amp;quot; Url=&amp;quot;someUrl&amp;quot;&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Titles&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Title LCID=&amp;quot;1033&amp;quot; Title=&amp;quot;Demo Page&amp;quot;/&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Title LCID=&amp;quot;1060&amp;quot; Title=&amp;quot;Demo Stran&amp;quot;/&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/Titles&amp;gt;      &lt;br /&gt;&amp;#160; &amp;lt;/SubArea&amp;gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;lt;/Group&amp;gt;&lt;/font&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/780680930800461091-753111299119558250?l=a-crm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-crm.blogspot.com/feeds/753111299119558250/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=780680930800461091&amp;postID=753111299119558250' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/753111299119558250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/753111299119558250'/><link rel='alternate' type='text/html' href='http://a-crm.blogspot.com/2010/02/sitemap-error-because-of-missing-lcid.html' title='Sitemap error because of missing LCID'/><author><name>Dejan Dular</name><uri>http://www.blogger.com/profile/00222488358810521805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh5.google.com/dejan.dular/RVhJF39ZABI/AAAAAAAAAHQ/jYuz5pHLch8/s288/potatpljanjeavartar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-780680930800461091.post-8265499438794099872</id><published>2010-02-05T10:49:00.001+01:00</published><updated>2010-02-05T10:50:38.031+01:00</updated><title type='text'>Problem fixed: Installing Rollup 8 for Data Migration Manager</title><content type='html'>&lt;p&gt;I installed a fresh instance of Microsoft Dynamics CRM Data Migration Manager. Then I wanted to apply Rollup 8 to it.&lt;/p&gt;  &lt;p&gt;Error: DMClient KB971782 is not found&lt;/p&gt;  &lt;p&gt;Resolution: First install&amp;#160; Rollup 7 update for DM Client (&lt;a title="http://www.microsoft.com/downloads/details.aspx?FamilyID=A4893988-7804-4E23-AB58-740441CC696E&amp;amp;displaylang=en" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=A4893988-7804-4E23-AB58-740441CC696E&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=A4893988-7804-4E23-AB58-740441CC696E&amp;amp;displaylang=en&lt;/a&gt;) and then you are able to install Rollup 8.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/780680930800461091-8265499438794099872?l=a-crm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-crm.blogspot.com/feeds/8265499438794099872/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=780680930800461091&amp;postID=8265499438794099872' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/8265499438794099872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/8265499438794099872'/><link rel='alternate' type='text/html' href='http://a-crm.blogspot.com/2010/02/problem-fixed-installing-rollup-8-for.html' title='Problem fixed: Installing Rollup 8 for Data Migration Manager'/><author><name>Dejan Dular</name><uri>http://www.blogger.com/profile/00222488358810521805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh5.google.com/dejan.dular/RVhJF39ZABI/AAAAAAAAAHQ/jYuz5pHLch8/s288/potatpljanjeavartar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-780680930800461091.post-1655617832790237713</id><published>2009-10-23T11:09:00.001+01:00</published><updated>2009-10-23T11:09:16.871+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='settings'/><category scheme='http://www.blogger.com/atom/ns#' term='error'/><category scheme='http://www.blogger.com/atom/ns#' term='web service'/><title type='text'>Error: The specified type was not recognized: name='usersettings'</title><content type='html'>&lt;p&gt;&lt;strong&gt;Simple task:&lt;/strong&gt; Try to retrieve user settings of a CRM user.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Simple solution:     &lt;br /&gt;&lt;/strong&gt;RetrieveUserSettingsSystemUserRequest request = new RetrieveUserSettingsSystemUserRequest();    &lt;br /&gt;request.EntityId = systemUserId;    &lt;br /&gt;request.ColumnSet = new AllColumns();&lt;/p&gt;  &lt;p&gt;RetrieveUserSettingsSystemUserResponse response= (RetrieveUserSettingsSystemUserResponse)crmService.Execute(request);&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;NOT!&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The specified type was not recognized: name='usersettings', namespace='http://schemas.microsoft.com/crm/2007/WebServices', at &amp;lt;BusinessEntity xmlns='http://schemas.microsoft.com/crm/2006/WebServices'&amp;gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;/h3&gt;  &lt;h4&gt;Real solution:&lt;/h4&gt;  &lt;p&gt;Add the following line: request.ReturnDynamicEntities = true;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/780680930800461091-1655617832790237713?l=a-crm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-crm.blogspot.com/feeds/1655617832790237713/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=780680930800461091&amp;postID=1655617832790237713' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/1655617832790237713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/1655617832790237713'/><link rel='alternate' type='text/html' href='http://a-crm.blogspot.com/2009/10/error-specified-type-was-not-recognized.html' title='Error: The specified type was not recognized: name=&amp;#39;usersettings&amp;#39;'/><author><name>Dejan Dular</name><uri>http://www.blogger.com/profile/00222488358810521805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh5.google.com/dejan.dular/RVhJF39ZABI/AAAAAAAAAHQ/jYuz5pHLch8/s288/potatpljanjeavartar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-780680930800461091.post-7915950776278722123</id><published>2009-09-09T07:27:00.001+01:00</published><updated>2009-09-09T07:27:04.961+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='exam'/><title type='text'>Microsoft CRM 4.0 – Applications certification and SQL 2008</title><content type='html'>&lt;p&gt;On Microsoft learning page (&lt;a href="http://www.microsoft.com/learning/en/us/certification/dynamics-crm-professional.aspx#tab2"&gt;http://www.microsoft.com/learning/en/us/certification/dynamics-crm-professional.aspx#tab2&lt;/a&gt;) it is said that exam 70-431 - Microsoft SQL Server 2005 – Implementation and Maintenance is elective for Microsoft Certified Business Management Solutions Professional – Applications for Microsoft Dynamics CRM 4.0 certification.&lt;/p&gt;  &lt;p&gt;There is nothing said about SQL 2008 exams on this page.&lt;/p&gt;  &lt;p&gt;So I sent an email to Microsoft and here is their response:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;Dear Dejan,     &lt;br /&gt;Thank you for your email.      &lt;br /&gt;We are glad to inform you that the Exam 70-432: TS: Microsoft SQL Server 2008, Implementation and Maintenance can be counted as an elective for Microsoft Certified Business Management Solutions Professional – Applications for Microsoft Dynamics CRM 4.0 certification.      &lt;br /&gt;As that new exam has been released recently, it has not been added to the certification path yet.      &lt;br /&gt;Please note that the update of the Certification Tree has been planned for the end of September 2009.      &lt;br /&gt;Then, the exam 70-431 will be visible in the certification path for      &lt;br /&gt;Applications for Microsoft Dynamics CRM4.0 certification on the      &lt;br /&gt;Microsoft Learning website, as that certification will be uploaded to the Transcripts of all customers who have completed the certification requirements by passing exam 70-432.      &lt;br /&gt;We hope that provided information is of assistance.      &lt;br /&gt;If you have any further questions please get in touch with us and we will be happy to assist you in any way we can.&lt;/font&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/780680930800461091-7915950776278722123?l=a-crm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-crm.blogspot.com/feeds/7915950776278722123/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=780680930800461091&amp;postID=7915950776278722123' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/7915950776278722123'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/7915950776278722123'/><link rel='alternate' type='text/html' href='http://a-crm.blogspot.com/2009/09/microsoft-crm-40-applications.html' title='Microsoft CRM 4.0 – Applications certification and SQL 2008'/><author><name>Dejan Dular</name><uri>http://www.blogger.com/profile/00222488358810521805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh5.google.com/dejan.dular/RVhJF39ZABI/AAAAAAAAAHQ/jYuz5pHLch8/s288/potatpljanjeavartar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-780680930800461091.post-3681346035765640729</id><published>2009-09-07T09:33:00.002+01:00</published><updated>2009-09-07T12:22:07.488+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='custom entity'/><category scheme='http://www.blogger.com/atom/ns#' term='url'/><title type='text'>Link to custom entity – use of etn instead of etc argument</title><content type='html'>&lt;p&gt;If you want to create a direct link to an out-of-a-box entity it is a very simple task: Right-click on one instance (let’s say account) and select “Copy Shortcut”.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_QITJ50wfKVM/SqTFULVEHSI/AAAAAAAABM8/ymy3KO7Y3u8/s1600-h/image%5B2%5D.png"&gt;&lt;img style="border: 0px none ; display: inline;" title="image" alt="image" src="http://lh6.ggpht.com/_QITJ50wfKVM/SqTFUR7s1lI/AAAAAAAABNA/0DxZfjVb7J8/image_thumb.png?imgmax=800" border="0" height="149" width="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Then just just change the GUID in the URL to open desired account. For the Account this URL looks like this: &lt;span style="font-family:Courier;"&gt;http://SERVER:PORT/OrganizationName/sfa/accts/edit.aspx?id=&lt;strong&gt;{GUID}&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;  &lt;h4&gt;Custom entities&lt;/h4&gt;  &lt;p&gt;All custom entities have the same URL structure: &lt;span style="font-family:Courier;"&gt;http://SERVER:PORT/OrganizationName/userdefined/edit.aspx?id=&lt;strong&gt;{GUID}&lt;/strong&gt;&amp;amp;etc=&lt;strong&gt;EntityTypeCode&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;Notice the entity type code? This code is created when creating the entity. But for some reason &lt;strong&gt;Entity Type Code can be&lt;/strong&gt; (in most cases) &lt;strong&gt;different on every CRM instance&lt;/strong&gt;. This means that if you are creating a plugin that needs to create a link to the entity, you will have to query metadata to get the code or enter that code in configuration part.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;But there is a better way: &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Instead of “etc” argument you can use “&lt;strong&gt;etn”&lt;/strong&gt; (Entity Name) in the query string. Then use the logical name of the entity. Logical name is the same on all instances.&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family:Courier;"&gt;http://SERVER:PORT/OrganizationName/userdefined/edit.aspx?id=&lt;strong&gt;{GUID}&lt;/strong&gt;&amp;amp;etn=&lt;strong&gt;EntityName&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family:Courier;"&gt;http://testsrv:5555/Contoso/userdefined/edit.aspx?id=&lt;strong&gt;{08B91EBF-525A-DE11-94A6-002354F5ABA2}&lt;/strong&gt;&amp;amp;etn=&lt;strong&gt;new_testentity&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/780680930800461091-3681346035765640729?l=a-crm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-crm.blogspot.com/feeds/3681346035765640729/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=780680930800461091&amp;postID=3681346035765640729' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/3681346035765640729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/3681346035765640729'/><link rel='alternate' type='text/html' href='http://a-crm.blogspot.com/2009/09/link-to-custom-entity-use-of-etn.html' title='Link to custom entity – use of etn instead of etc argument'/><author><name>Dejan Dular</name><uri>http://www.blogger.com/profile/00222488358810521805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh5.google.com/dejan.dular/RVhJF39ZABI/AAAAAAAAAHQ/jYuz5pHLch8/s288/potatpljanjeavartar.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_QITJ50wfKVM/SqTFUR7s1lI/AAAAAAAABNA/0DxZfjVb7J8/s72-c/image_thumb.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-780680930800461091.post-4907845490797214453</id><published>2009-08-28T13:33:00.003+01:00</published><updated>2009-08-28T13:36:13.126+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><category scheme='http://www.blogger.com/atom/ns#' term='sdk'/><category scheme='http://www.blogger.com/atom/ns#' term='metadata'/><category scheme='http://www.blogger.com/atom/ns#' term='web service'/><title type='text'>Get a list of searchable attributes from database</title><content type='html'>&lt;p&gt;(The final solution is at the bottom)&lt;/p&gt;  &lt;p&gt;Today my colleague wanted to check which attributes were marked as searchable in a specific entity.&lt;/p&gt;  &lt;p&gt;One way to do this is to open each attribute in MSCRM and check if it is marked as searchable. A long way if you have an entity with 220 attributes.&lt;/p&gt;  &lt;p&gt;So I went to the database and checked the &lt;strong&gt;MetadataSchema.Attribute&lt;/strong&gt; table. There is a column named &lt;strong&gt;DisplayMask&lt;/strong&gt;. SDK says that display masks are following (ValidForAdvancedFind = Searchable):&lt;/p&gt;  &lt;table border="1" cellpadding="5" frame="box" rules="rows"&gt;&lt;tbody&gt;     &lt;tr valign="top"&gt;       &lt;td class="blue" width="136"&gt;&lt;b&gt;Name&lt;/b&gt;&lt;/td&gt;        &lt;td class="blue" width="43"&gt;&lt;b&gt;Value&lt;/b&gt;&lt;/td&gt;        &lt;td class="blue" width="60%"&gt;&lt;b&gt;Description&lt;/b&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr valign="top"&gt;       &lt;td class="dt" width="136"&gt;&lt;b&gt;None&lt;/b&gt;&lt;/td&gt;        &lt;td width="43"&gt;1&lt;/td&gt;        &lt;td width="60%"&gt;Specifies no restrictions.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr valign="top"&gt;       &lt;td class="dt" width="136"&gt;&lt;b&gt;ObjectTypeCode&lt;/b&gt;&lt;/td&gt;        &lt;td width="43"&gt;4&lt;/td&gt;        &lt;td width="60%"&gt;Specifies that the attribute is an entity type code. The name of the entity is displayed.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr valign="top"&gt;       &lt;td class="dt" width="136"&gt;&lt;b&gt;PrimaryName&lt;/b&gt;&lt;/td&gt;        &lt;td width="43"&gt;2&lt;/td&gt;        &lt;td width="60%"&gt;Specifies to display the attribute as the primary name.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr valign="top"&gt;       &lt;td class="dt" width="136"&gt;&lt;b&gt;RequiredForForm&lt;/b&gt;&lt;/td&gt;        &lt;td width="43"&gt;0x40&lt;/td&gt;        &lt;td width="60%"&gt;Specifies that the attribute must be shown on a form.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr valign="top"&gt;       &lt;td class="dt" width="136"&gt;&lt;b&gt;RequiredForGrid&lt;/b&gt;&lt;/td&gt;        &lt;td width="43"&gt;0x80&lt;/td&gt;        &lt;td width="60%"&gt;Specifies that the attribute can be shown in a grid view.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr valign="top"&gt;       &lt;td class="dt" width="136"&gt;&lt;b&gt;ValidForAdvancedFind&lt;/b&gt;&lt;/td&gt;        &lt;td width="43"&gt;8&lt;/td&gt;        &lt;td width="60%"&gt;Specifies that the attribute can be shown on the Advanced Find form. This attribute is shown as Searchable in the UI.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr valign="top"&gt;       &lt;td class="dt" width="136"&gt;&lt;b&gt;ValidForForm&lt;/b&gt;&lt;/td&gt;        &lt;td width="43"&gt;0x10&lt;/td&gt;        &lt;td width="60%"&gt;Specifies that the attribute can be shown on a form.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr valign="top"&gt;       &lt;td class="dt" width="136"&gt;&lt;b&gt;ValidForGrid&lt;/b&gt;&lt;/td&gt;        &lt;td width="43"&gt;0x20&lt;/td&gt;        &lt;td width="60%"&gt;Specifies that the attribute can be shown in a grid view.&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;But the value in the database is 469762048 (this attribute is searchable)! &lt;strong&gt;Bitwise comparison fails&lt;/strong&gt;: 469762048 &amp;amp; 8 = 0 WTF!!!&lt;/p&gt;  &lt;p&gt;After some googling and 30 minutes of using reflector if found that the former values are meant to be used only when working with metadata web service, like in this example: &lt;a title="http://msdn.microsoft.com/en-us/library/cc151072.aspx" href="http://msdn.microsoft.com/en-us/library/cc151072.aspx"&gt;http://msdn.microsoft.com/en-us/library/cc151072.aspx&lt;/a&gt;&lt;/p&gt;  &lt;h4&gt; &lt;/h4&gt;  &lt;h4&gt;Thank you Reflector!&lt;/h4&gt;  &lt;p&gt;Microsoft.Crm.Platform.Sdk.dll (found it in GAC) contains &lt;strong&gt;DisplayMasks&lt;/strong&gt; enumeration in &lt;strong&gt;Microsoft.Crm.Metadata&lt;/strong&gt; namespace.&lt;/p&gt;  &lt;p&gt;This is what the reflector says:&lt;/p&gt;  &lt;pre&gt;&lt;span style="color: rgb(16, 0, 160);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(16, 0, 160);"&gt;enum&lt;/span&gt; &lt;b&gt;DisplayMasks&lt;/b&gt;&lt;br /&gt;{&lt;br /&gt;  &lt;b&gt;ActivityPointerRegardingName&lt;/b&gt; = &lt;span style="color: rgb(128, 0, 0);"&gt;0x80&lt;/span&gt;,&lt;br /&gt;  &lt;b&gt;ActivityRegardingName&lt;/b&gt; = &lt;span style="color: rgb(128, 0, 0);"&gt;1&lt;/span&gt;,&lt;br /&gt;  &lt;b&gt;BitMask&lt;/b&gt; = &lt;span style="color: rgb(128, 0, 0);"&gt;0x1000&lt;/span&gt;,&lt;br /&gt;  &lt;b&gt;DynamicFormatCode&lt;/b&gt; = &lt;span style="color: rgb(128, 0, 0);"&gt;0x4000&lt;/span&gt;,&lt;br /&gt;  &lt;b&gt;None&lt;/b&gt; = &lt;span style="color: rgb(128, 0, 0);"&gt;0&lt;/span&gt;,&lt;br /&gt;  &lt;b&gt;ObjectTypeCode&lt;/b&gt; = &lt;span style="color: rgb(128, 0, 0);"&gt;0x400&lt;/span&gt;,&lt;br /&gt;  &lt;b&gt;PrimaryName&lt;/b&gt; = &lt;span style="color: rgb(128, 0, 0);"&gt;0x100&lt;/span&gt;,&lt;br /&gt;  &lt;b&gt;QueueItemPriority&lt;/b&gt; = &lt;span style="color: rgb(128, 0, 0);"&gt;0x10&lt;/span&gt;,&lt;br /&gt;  &lt;b&gt;QueueItemSender&lt;/b&gt; = &lt;span style="color: rgb(128, 0, 0);"&gt;0x20&lt;/span&gt;,&lt;br /&gt;  &lt;b&gt;QueueItemState&lt;/b&gt; = &lt;span style="color: rgb(128, 0, 0);"&gt;4&lt;/span&gt;,&lt;br /&gt;  &lt;b&gt;QueueItemStatus&lt;/b&gt; = &lt;span style="color: rgb(128, 0, 0);"&gt;8&lt;/span&gt;,&lt;br /&gt;  &lt;b&gt;QueueItemTitle&lt;/b&gt; = &lt;span style="color: rgb(128, 0, 0);"&gt;2&lt;/span&gt;,&lt;br /&gt;  &lt;b&gt;QueueItemToRecipients&lt;/b&gt; = &lt;span style="color: rgb(128, 0, 0);"&gt;0x40&lt;/span&gt;,&lt;br /&gt;  &lt;b&gt;RequiredForForm&lt;/b&gt; = &lt;span style="color: rgb(128, 0, 0);"&gt;0x20000000&lt;/span&gt;,&lt;br /&gt;  &lt;b&gt;RequiredForGrid&lt;/b&gt; = &lt;span style="color: rgb(128, 0, 0);"&gt;0x40000000&lt;/span&gt;,&lt;br /&gt;  &lt;b&gt;ResourcePointerName&lt;/b&gt; = &lt;span style="color: rgb(128, 0, 0);"&gt;0x200&lt;/span&gt;,&lt;br /&gt;  &lt;b&gt;ReturnedTypeCode&lt;/b&gt; = &lt;span style="color: rgb(128, 0, 0);"&gt;0x800&lt;/span&gt;,&lt;br /&gt;  &lt;b&gt;StateCode&lt;/b&gt; = &lt;span style="color: rgb(128, 0, 0);"&gt;0x2000&lt;/span&gt;,&lt;br /&gt;  &lt;b&gt;ValidForAdvancedFind&lt;/b&gt; = &lt;span style="color: rgb(128, 0, 0);"&gt;0x4000000&lt;/span&gt;,&lt;br /&gt;  &lt;b&gt;ValidForForm&lt;/b&gt; = &lt;span style="color: rgb(128, 0, 0);"&gt;0x8000000&lt;/span&gt;,&lt;br /&gt;  &lt;b&gt;ValidForGrid&lt;/b&gt; = &lt;span style="color: rgb(128, 0, 0);"&gt;0x10000000&lt;/span&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This means that the ValidForAdvancedFind has value of 0x4000000! I tested it with the previous example and it works! Hooray!&lt;/p&gt;&lt;br /&gt;&lt;h4&gt;Solution&lt;/h4&gt;&lt;p&gt;So the final answer to the problem of this post is:&lt;/p&gt;&lt;p style="font-weight: bold;"&gt;select * from MetadataSchema.Attribute&lt;br /&gt;where DisplayMask &amp;amp; 0x4000000 &amp;gt; 0 and EntityId = @entityId&lt;/p&gt;&lt;p&gt;Of course you can use all other values as well.&lt;/p&gt;&lt;p&gt;What I haven’t tested yet is whether you can change this mask value directly in the database - definitely not supported by Microsoft :)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/780680930800461091-4907845490797214453?l=a-crm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-crm.blogspot.com/feeds/4907845490797214453/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=780680930800461091&amp;postID=4907845490797214453' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/4907845490797214453'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/4907845490797214453'/><link rel='alternate' type='text/html' href='http://a-crm.blogspot.com/2009/08/get-list-of-searchable-attributes-from.html' title='Get a list of searchable attributes from database'/><author><name>Dejan Dular</name><uri>http://www.blogger.com/profile/00222488358810521805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh5.google.com/dejan.dular/RVhJF39ZABI/AAAAAAAAAHQ/jYuz5pHLch8/s288/potatpljanjeavartar.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-780680930800461091.post-6788058412503346924</id><published>2009-07-16T13:26:00.001+01:00</published><updated>2009-07-16T13:26:10.012+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='notification'/><category scheme='http://www.blogger.com/atom/ns#' term='forms'/><title type='text'>Show custom notifications on Microsoft Dynamics CRM - upgrade</title><content type='html'>&lt;p&gt;&lt;a href="http://marcoamoedo.com/"&gt;Marco Amoedo&lt;/a&gt; created cool javascript function that displays custom warning messages in Microsoft Dynamics CRM 4.0. &lt;a title="http://marcoamoedo.com/blog/show-custom-warning-messages-on-microsoft-dynamics-crm/" href="http://marcoamoedo.com/blog/show-custom-warning-messages-on-microsoft-dynamics-crm/"&gt;http://marcoamoedo.com/blog/show-custom-warning-messages-on-microsoft-dynamics-crm/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I liked the idea so much, that I took the script and &lt;strike&gt;upgraded&lt;/strike&gt; pimped it.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;What it does?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The function simply adds a notification on top of the form, like in the picture below.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_QITJ50wfKVM/Sl8cWLz0bbI/AAAAAAAABLY/b149JreArsY/s1600-h/image%5B2%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_QITJ50wfKVM/Sl8cWWzJ1SI/AAAAAAAABLc/GPmVlAPvpNE/image_thumb.png?imgmax=800" width="244" height="154" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;You can add multiple notifications with different icons.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_QITJ50wfKVM/Sl8cWxe-NwI/AAAAAAAABLg/m2jaiyctqeo/s1600-h/image8.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_QITJ50wfKVM/Sl8cXYK5LzI/AAAAAAAABLk/uAKQFpmWi38/image_thumb2.png?imgmax=800" width="244" height="189" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Update or delete previously added notifications or add new ones. This image shows (after Name onChange event) changed error text, updated third notification to info style and a new warning. Compare it with previous picture.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_QITJ50wfKVM/Sl8cXymOq4I/AAAAAAAABLo/L-Ooyi1yiG0/s1600-h/image11.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_QITJ50wfKVM/Sl8cYFh6AuI/AAAAAAAABLs/_pHHpSYwZdk/image_thumb3.png?imgmax=800" width="244" height="204" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;How to use it?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Step 1: Insert this code into form OnLoad event.&lt;/p&gt;  &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #008000"&gt;/*============== addNotification function =============&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #008000"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #008000"&gt;Adds a message on the top of the entity form using&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #008000"&gt;the same visual style as Microsoft CRM.&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #008000"&gt;If function is called more than once,&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #008000"&gt;the messages are added at the bottom of the list&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #008000"&gt;If the message with same ID already exists,&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #008000"&gt;then the message is updated and not added to a list.&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #008000"&gt;It also supports deleting of previously added notifications.&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #008000"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #008000"&gt;Put this function in the OnLoad event,&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #008000"&gt;so you can use it in all form and field events.&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #008000"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #008000"&gt;Parameters:&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #008000"&gt;message - message to be shown to the user&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #008000"&gt;messageType - Type of the message: 1 - critical, 2 - info, 3 - warning&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #008000"&gt;notificationId - ID of the notification (needed for updating purposes)&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #008000"&gt;    &lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #008000"&gt;Created by:&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #008000"&gt;Marco Amoedo (http://marcoamoedo.com) - the idea and initial function&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #008000"&gt;Dejan Dular (http://a-crm.blogspot.com) - upgraded functionality (different icons, updating and deleting notifications)&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #008000"&gt;    &lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #008000"&gt;=======================================================*/&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&amp;#160;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;addNotification = &lt;span style="color: #0000ff"&gt;function&lt;/span&gt;(message, messageType, notificationId)&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;{&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; notificationsArea = document.getElementById(&lt;span style="color: #006080"&gt;'Notifications'&lt;/span&gt;);&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    &lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (notificationsArea == &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    {&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #008000"&gt;//Don't display message when deleting a notification.&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (messageType != 4)&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        {&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;            &lt;span style="color: #008000"&gt;//Sorry. Notifications are not possible on this form.&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;            &lt;span style="color: #008000"&gt;//Display a message box instead of notification.&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;            alert(message);&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        }&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt;;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    }&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    &lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; notificationDIV = document.getElementById(&lt;span style="color: #006080"&gt;'NotificationDiv_'&lt;/span&gt; + notificationId);&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    &lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #008000"&gt;//Delete the notification&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (messageType == 4)&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    {&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (notificationDIV != &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        {&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;            &lt;span style="color: #008000"&gt;//Remove the notification&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;            notificationsArea.removeChild(notificationDIV);&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        }&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;return&lt;/span&gt;;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    }&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    &lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #008000"&gt;//Get the notification image. The default is info image.&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; notificationImage;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;switch&lt;/span&gt; (messageType)&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    {&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; 1:&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;            notificationImage = &lt;span style="color: #006080"&gt;'/_imgs/error/notif_icn_crit16.png'&lt;/span&gt;;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;            &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; 2:&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;            notificationImage = &lt;span style="color: #006080"&gt;'/_imgs/error/notif_icn_info16.png'&lt;/span&gt;;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;            &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;    &lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; 3:&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;            notificationImage = &lt;span style="color: #006080"&gt;'/_imgs/error/notif_icn_warn16.png'&lt;/span&gt;;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;            &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;    &lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;default&lt;/span&gt;:&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;            notificationImage = &lt;span style="color: #006080"&gt;'/_imgs/error/notif_icn_info16.png'&lt;/span&gt;;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    }&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&amp;#160;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #008000"&gt;//Create notification&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; notificationTable = &lt;span style="color: #006080"&gt;'&amp;lt;TABLE cellSpacing=&amp;quot;0&amp;quot; cellPadding=&amp;quot;0&amp;quot;&amp;gt;&amp;lt;TBODY&amp;gt;&amp;lt;TR&amp;gt;&amp;lt;TD vAlign=&amp;quot;top&amp;quot;&amp;gt;&amp;lt;IMG class=&amp;quot;ms-crm-Lookup-Item&amp;quot; alt=&amp;quot;&amp;quot; src=&amp;quot;'&lt;/span&gt; + notificationImage + &lt;span style="color: #006080"&gt;'&amp;quot; /&amp;gt;&amp;lt;/TD&amp;gt;&amp;lt;TD&amp;gt;&amp;lt;SPAN&amp;gt;'&lt;/span&gt; + message +&lt;span style="color: #006080"&gt;'&amp;lt;/SPAN&amp;gt;&amp;lt;/TD&amp;gt;&amp;lt;/TR&amp;gt;&amp;lt;/TBODY&amp;gt;&amp;lt;/TABLE&amp;gt;'&lt;/span&gt;;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    &lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #008000"&gt;//Check if the notification with same ID already exists&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (notificationDIV == &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    {    &lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #008000"&gt;//Create a new notification&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; notificationHTML = &lt;span style="color: #006080"&gt;'&amp;lt;DIV class=&amp;quot;Notification&amp;quot; ID=&amp;quot;NotificationDiv_'&lt;/span&gt; + notificationId + &lt;span style="color: #006080"&gt;'&amp;quot;&amp;gt;'&lt;/span&gt; + notificationTable + &lt;span style="color: #006080"&gt;'&amp;lt;/DIV&amp;gt;'&lt;/span&gt;;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        notificationsArea.innerHTML += notificationHTML;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        notificationsArea.style.display = &lt;span style="color: #006080"&gt;'block'&lt;/span&gt;;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    }&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    {&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #008000"&gt;//Update the notification.&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        notificationDIV.innerHTML = notificationTable;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    }&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #008000"&gt;/*============= END addNotification function ===========*/&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Step 2: Run the following function when there is a need for a notification.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div id="codeSnippetWrapper"&gt;&lt;br /&gt;  &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;addNotification(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; message, &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; messageType, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; notificationId)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;&lt;u&gt;message&lt;/u&gt; – Notification message displayed&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;&lt;u&gt;messageType&lt;/u&gt; – Type of the notification (the icon) (1 – critical, 2 – info, 3 – warning, 4 – delete the notification)&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;&lt;u&gt;notificationId&lt;/u&gt; – Any string that identifies specific notification. If a function is called later with existing notificationId, the notification will be updated. Otherwise a new notification is added at the bottom of the list. If you want to delete a specific notification, just set messageType = 4 and use correct notificationId.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Thanks again to Marco Amoedo. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Originally published by &lt;a href="http://a-crm.blogspot.com"&gt;Dejan Dular&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/780680930800461091-6788058412503346924?l=a-crm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-crm.blogspot.com/feeds/6788058412503346924/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=780680930800461091&amp;postID=6788058412503346924' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/6788058412503346924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/6788058412503346924'/><link rel='alternate' type='text/html' href='http://a-crm.blogspot.com/2009/07/show-custom-notifications-on-microsoft.html' title='Show custom notifications on Microsoft Dynamics CRM - upgrade'/><author><name>Dejan Dular</name><uri>http://www.blogger.com/profile/00222488358810521805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh5.google.com/dejan.dular/RVhJF39ZABI/AAAAAAAAAHQ/jYuz5pHLch8/s288/potatpljanjeavartar.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_QITJ50wfKVM/Sl8cWWzJ1SI/AAAAAAAABLc/GPmVlAPvpNE/s72-c/image_thumb.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-780680930800461091.post-3538858381706224434</id><published>2009-03-27T08:46:00.001+01:00</published><updated>2009-07-15T14:55:54.799+01:00</updated><title type='text'>Reindex whole database</title><content type='html'>EXEC sp_MSforeachtable @command1="print '?' DBCC DBREINDEX ('?', ' ', 80)"&lt;br /&gt;GO&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/780680930800461091-3538858381706224434?l=a-crm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-crm.blogspot.com/feeds/3538858381706224434/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=780680930800461091&amp;postID=3538858381706224434' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/3538858381706224434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/3538858381706224434'/><link rel='alternate' type='text/html' href='http://a-crm.blogspot.com/2009/03/reindex-whole-database.html' title='Reindex whole database'/><author><name>Dejan Dular</name><uri>http://www.blogger.com/profile/00222488358810521805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh5.google.com/dejan.dular/RVhJF39ZABI/AAAAAAAAAHQ/jYuz5pHLch8/s288/potatpljanjeavartar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-780680930800461091.post-3513863759115374163</id><published>2008-07-02T09:02:00.002+01:00</published><updated>2008-07-02T09:09:13.147+01:00</updated><title type='text'>Button that starts a workflow</title><content type='html'>My client wanted to have a button that starts a specific workflow on the form. So after analyzing some javascript I ended with this code:&lt;br /&gt;&lt;br /&gt;var a = new Array(crmFormSubmit.crmFormSubmitId.value);&lt;br /&gt;var sIds = crmFormSubmit.crmFormSubmitId.value+";";&lt;br /&gt;var sEntityTypeCode = "10004"; //Replace this with your entity type code&lt;br /&gt;var sWorkflowId = "{BE7E47C0-2452-4F44-8CCA-425B83A7A8FB}"; //Replace this with your actual workflow ID&lt;br /&gt;var iWindowPosX = 500; //Modal dialog position X&lt;br /&gt;var iWindowPosY = 200; //Modal dialog position Y&lt;br /&gt;&lt;br /&gt;var oResult = openStdDlg(prependOrgName("/_grid/cmds/dlg_runworkflow.aspx")+"?iObjType=" + CrmEncodeDecode.CrmUrlEncode(sEntityTypeCode) + "&amp;iTotal=" +&lt;br /&gt;CrmEncodeDecode.CrmUrlEncode(a.length) + "&amp;wfId=" + CrmEncodeDecode.CrmUrlEncode(sWorkflowId)+ "&amp;sIds=" + CrmEncodeDecode.CrmUrlEncode(sIds) , a, iWindowPosX, iWindowPosY);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Of course this is not supported by Microsoft. You use it at your own risk.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/780680930800461091-3513863759115374163?l=a-crm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-crm.blogspot.com/feeds/3513863759115374163/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=780680930800461091&amp;postID=3513863759115374163' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/3513863759115374163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/3513863759115374163'/><link rel='alternate' type='text/html' href='http://a-crm.blogspot.com/2008/07/button-that-starts-workflow.html' title='Button that starts a workflow'/><author><name>Dejan Dular</name><uri>http://www.blogger.com/profile/00222488358810521805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh5.google.com/dejan.dular/RVhJF39ZABI/AAAAAAAAAHQ/jYuz5pHLch8/s288/potatpljanjeavartar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-780680930800461091.post-670608881661226119</id><published>2008-06-09T12:50:00.002+01:00</published><updated>2008-06-09T13:09:43.411+01:00</updated><title type='text'>Generic SQL error</title><content type='html'>WOW! I'm sooooo happy when I receive such deterministic errors.&lt;br /&gt;&lt;br /&gt;After saving an account, this message popped up. And you guessed it - it appeared just SOMETIMES!&lt;br /&gt;&lt;br /&gt;After a little of SQL profiling i found the reason:&lt;br /&gt;I extended the account's address1_line1 field from 50 to 100 characters. After saving the account, CRM automatically creates/updates also the customeraddress entity.&lt;br /&gt;&lt;br /&gt;Solution:&lt;br /&gt;Extend the customeraddress entity, extend attribute line1, match the length to length of the account address line.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/780680930800461091-670608881661226119?l=a-crm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-crm.blogspot.com/feeds/670608881661226119/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=780680930800461091&amp;postID=670608881661226119' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/670608881661226119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/670608881661226119'/><link rel='alternate' type='text/html' href='http://a-crm.blogspot.com/2008/06/generic-sql-error.html' title='Generic SQL error'/><author><name>Dejan Dular</name><uri>http://www.blogger.com/profile/00222488358810521805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh5.google.com/dejan.dular/RVhJF39ZABI/AAAAAAAAAHQ/jYuz5pHLch8/s288/potatpljanjeavartar.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-780680930800461091.post-195906188820857267</id><published>2008-05-30T07:17:00.003+01:00</published><updated>2008-05-30T07:57:23.170+01:00</updated><title type='text'>Cool SQL query that deletes the duplicates</title><content type='html'>Found this on &lt;a href="http://www.sqlservercentral.com/"&gt;Sql Server Central&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" &gt;&lt;span style="font-family: courier new;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new;"&gt;CREATE TABLE #new(ID INT NULL, KeyValue VARCHAR(2))&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;INSERT INTO #new(ID, KeyValue) VALUES (1,'aa')&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;INSERT INTO #new(ID, KeyValue) VALUES (2,'bb')&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;INSERT INTO #new(ID, KeyValue) VALUES (1,'aa')&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;INSERT INTO #new(ID, KeyValue) VALUES (1,'aa')&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new;"&gt;SELECT * FROM #new;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now let's delete the duplicates. The semicolon at the beginning is recommended if you are not using it after every SQL sentence. This tells the parser to begin with new statement. Without it you will probably get a syntax error.&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;;WITH Numbered AS (SELECT RowNo=ROW_NUMBER() OVER (PARTITION BY ID ORDER BY ID), ID, KeyValue FROM #new) DELETE FROM Numbered where RowNo&gt;1;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;span style="font-family: courier new;"&gt;SELECT * FROM #new;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Cleanup...&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;span style="font-family: courier new;"&gt;DROP TABLE #new;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/780680930800461091-195906188820857267?l=a-crm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-crm.blogspot.com/feeds/195906188820857267/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=780680930800461091&amp;postID=195906188820857267' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/195906188820857267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/195906188820857267'/><link rel='alternate' type='text/html' href='http://a-crm.blogspot.com/2008/05/cool-sql-query-that-deletes-duplicates.html' title='Cool SQL query that deletes the duplicates'/><author><name>Dejan Dular</name><uri>http://www.blogger.com/profile/00222488358810521805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh5.google.com/dejan.dular/RVhJF39ZABI/AAAAAAAAAHQ/jYuz5pHLch8/s288/potatpljanjeavartar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-780680930800461091.post-6416601578059493168</id><published>2008-03-03T10:12:00.002+01:00</published><updated>2008-03-03T10:17:09.932+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='snippet'/><category scheme='http://www.blogger.com/atom/ns#' term='workflow'/><title type='text'>Snippet for CRM workflow activity parameter</title><content type='html'>If you are writing custom workflow activities for workflows in CRM 4.0 you will find this snippet handy.&lt;br /&gt;&lt;br /&gt;Copy the code below into a new file and name it CRMParameter.snippet. Save the file into Visual Studio 2005\Code Snippets\Visual C#\My Code Snippets folder. It works in VS2008 too.&lt;br /&gt;The shortcut for the snippet is cwp.&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="html"&gt;xml&lt;/span&gt; &lt;span class="attr"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;="1.0"&lt;/span&gt; &lt;span class="attr"&gt;encoding&lt;/span&gt;&lt;span class="kwrd"&gt;="utf-8"&lt;/span&gt;?&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;CodeSnippets&lt;/span&gt; &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;CodeSnippet&lt;/span&gt; &lt;span class="attr"&gt;Format&lt;/span&gt;&lt;span class="kwrd"&gt;="1.0.0"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Header&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;CRM workflow property snippet&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Shortcut&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;cwp&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Shortcut&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Description&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Code snippet for crm property &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Description&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Author&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Dejan Dular&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Author&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;SnippetTypes&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;       &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;SnippetType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Expansion&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;SnippetType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;SnippetTypes&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Header&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Snippet&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Declarations&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;       &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Literal&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;         &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;PropertyInputOutputType&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;         &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ToolTip&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Input/output property&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ToolTip&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;         &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Default&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;CrmInput&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Default&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;       &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Literal&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;       &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Literal&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;         &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;PropertyDisplayName&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;         &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ToolTip&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Property display name&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ToolTip&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;         &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Default&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Display Name&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Default&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;       &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Literal&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;       &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Literal&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;         &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;PropertyName&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;         &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ToolTip&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Property Name&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ToolTip&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;         &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Default&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;name&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Default&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;       &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Literal&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;       &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Literal&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;         &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Type&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;         &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ToolTip&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Property Type&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ToolTip&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;         &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Default&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;string&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Default&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;       &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Literal&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;       &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Literal&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;         &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Class&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;         &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ToolTip&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Class&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ToolTip&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;         &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Default&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;ClassName&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Default&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;       &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Literal&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Declarations&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Code&lt;/span&gt; &lt;span class="attr"&gt;Language&lt;/span&gt;&lt;span class="kwrd"&gt;="csharp"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;!&lt;/span&gt;[CDATA[#region $PropertyDisplayName$&lt;br /&gt;[$PropertyInputOutputType$("$PropertyDisplayName$")]&lt;br /&gt;public $Type$ $PropertyName$&lt;br /&gt;{&lt;br /&gt;   get { return ($Type$)base.GetValue($PropertyName$Property); }&lt;br /&gt;   set { base.SetValue($PropertyName$Property, value); }&lt;br /&gt;}&lt;br /&gt;public static DependencyProperty $PropertyName$Property = DependencyProperty.Register("$PropertyName$", typeof($Type$), typeof($Class$));&lt;br /&gt;#endregion&lt;br /&gt;$end$]]&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Code&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Snippet&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;CodeSnippet&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;CodeSnippets&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;style type="text/css"&gt;&lt;br /&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt; font-size: small;&lt;br /&gt; color: black;&lt;br /&gt; font-family: consolas, "Courier New", courier, monospace;&lt;br /&gt; background-color: #ffffff;&lt;br /&gt; /**/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt; background-color: #f4f4f4;&lt;br /&gt; width: 100%;&lt;br /&gt; margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/780680930800461091-6416601578059493168?l=a-crm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-crm.blogspot.com/feeds/6416601578059493168/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=780680930800461091&amp;postID=6416601578059493168' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/6416601578059493168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/6416601578059493168'/><link rel='alternate' type='text/html' href='http://a-crm.blogspot.com/2008/03/snippet-for-crm-workflow-activity.html' title='Snippet for CRM workflow activity parameter'/><author><name>Dejan Dular</name><uri>http://www.blogger.com/profile/00222488358810521805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh5.google.com/dejan.dular/RVhJF39ZABI/AAAAAAAAAHQ/jYuz5pHLch8/s288/potatpljanjeavartar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-780680930800461091.post-2541670442878924129</id><published>2008-02-28T09:51:00.007+01:00</published><updated>2008-03-28T20:18:56.120+01:00</updated><title type='text'>Error at decimal field display format (4.0)</title><content type='html'>When upgrading a German version of CRM 3.0 to version 4.0, a strange thing happened. All decimal, float or money fields behaved very strange.&lt;br /&gt;&lt;br /&gt;Example: User enters a value 2. After clicking save button, the number changes to 200.00 and then immediately to 20.000.00.&lt;br /&gt;&lt;br /&gt;Then I noticed that a decimal separator and a thousands separator were the same. Therefore I checked organization settings where everything looked fine.&lt;br /&gt;&lt;br /&gt;The problem lied in user settings where both separators were set to dot (.)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;SOLUTION:&lt;/strong&gt;&lt;br /&gt;Change must be made for each user. Set the decimal separator to comma (,).&lt;br /&gt;Update the CRM database to affect all users: &lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;UPDATE UserSettingsBase SET DecimalSymbol = &lt;span style="font-family:courier new;"&gt;','&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/780680930800461091-2541670442878924129?l=a-crm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-crm.blogspot.com/feeds/2541670442878924129/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=780680930800461091&amp;postID=2541670442878924129' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/2541670442878924129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/2541670442878924129'/><link rel='alternate' type='text/html' href='http://a-crm.blogspot.com/2008/02/error-at-decimal-field-display-format.html' title='Error at decimal field display format (4.0)'/><author><name>Dejan Dular</name><uri>http://www.blogger.com/profile/00222488358810521805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh5.google.com/dejan.dular/RVhJF39ZABI/AAAAAAAAAHQ/jYuz5pHLch8/s288/potatpljanjeavartar.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-780680930800461091.post-1949141808173926457</id><published>2008-01-02T12:47:00.000+01:00</published><updated>2008-01-03T11:44:36.147+01:00</updated><title type='text'>.NET Compiler bug? (Update)</title><content type='html'>I have a typed DataTable (called FactTable)  that gets data from a table in SQL server where a Date field can be null.&lt;br /&gt;&lt;br /&gt;So I have created a System.Nullable&lt;datetime&gt; variable in my code:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(102, 204, 204);"&gt;Datetime?&lt;/span&gt; emailDate;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;And a &lt;span style="font-weight: bold;"&gt;typed&lt;/span&gt; DataRow from my DataTable:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(102, 204, 204);"&gt;MyDataSet.FactRow&lt;/span&gt; factRow = factTable.Rows[0];&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Why does this NOT WORK:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;emailDate = factRow.IsEmailDateNull() ? &lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;null&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; : factRow.EmailDate;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;But this works:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;if&lt;/span&gt; (factRow.IsEmailDateNull())&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    emailDate = &lt;span style="color: rgb(51, 102, 255);"&gt;null&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:courier new;" &gt;else&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    emailDate = factRow.EmailDate;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Compiler error is: &lt;span style="font-weight: bold;"&gt;Type of conditional expression cannot be determined because there is no implicit conversion between '&lt;null&gt;' and 'System.DateTime'&lt;br /&gt;&lt;br /&gt;&lt;/null&gt;&lt;/span&gt;Remember: My variable is nullable!!!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Update:&lt;/span&gt;&lt;br /&gt;David defined this problem as a feature. But aren't both examples the same? Isn't this just a compile thing to convert from the first example to the second one?&lt;br /&gt;I think it has to do something with nullable types, because with string or byte[] it works like a charm:&lt;br /&gt;&lt;/datetime&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;string&lt;/span&gt; title = factRow.IsTitleNull() ? &lt;span style="color: rgb(51, 102, 255);"&gt;null&lt;/span&gt; : factRow.Title;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;byte[]&lt;/span&gt; picture = factRow.IsPictureNull() ? &lt;span style="color: rgb(51, 102, 255);"&gt;null&lt;/span&gt; : factRow.Picutre;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/780680930800461091-1949141808173926457?l=a-crm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-crm.blogspot.com/feeds/1949141808173926457/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=780680930800461091&amp;postID=1949141808173926457' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/1949141808173926457'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/1949141808173926457'/><link rel='alternate' type='text/html' href='http://a-crm.blogspot.com/2008/01/net-compiler-bug.html' title='.NET Compiler bug? (Update)'/><author><name>Dejan Dular</name><uri>http://www.blogger.com/profile/00222488358810521805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh5.google.com/dejan.dular/RVhJF39ZABI/AAAAAAAAAHQ/jYuz5pHLch8/s288/potatpljanjeavartar.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-780680930800461091.post-6273002367316562723</id><published>2007-12-14T12:39:00.002+01:00</published><updated>2009-10-06T08:39:09.762+01:00</updated><title type='text'>Integration of Google maps / Live maps into CRM 3.0, 4.0</title><content type='html'>&lt;p&gt;I usually don't write about third party solutions, but this one is getting its place in my blog.&lt;/p&gt;  &lt;p&gt;A fellow CRM blogger Wolter Kreun from the Netherlands is developing a &lt;strong&gt;freeware&lt;/strong&gt; plugin (Can it be true? A free and very useful plugin for CRM!!!) that fully integrates Google Maps into Microsoft CRM. Soon it will support MS Live maps.&lt;/p&gt;  &lt;p&gt;Haven't tried it, but as far as I have seen on the &lt;a href="http://mscrmgooglemaps.blogspot.com/2007/12/movies.html"&gt;videos&lt;/a&gt; it ROCKS!&lt;/p&gt;&lt;p&gt;EDIT (05. oct. 2009): I just have been informed that the link provided below does not work anymore. But you can use similar integration with  virtual earth at: &lt;a href="http://www.crmwatcher.com/2006/11/virtual-earth-3d-maps-integration-in.html"&gt;http://www.crmwatcher.com/2006/11/virtual-earth-3d-maps-integration-in.html&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p style="color: rgb(204, 204, 204);"&gt;So chop chop guys and click on this link: &lt;a href="http://mscrmgooglemaps.blogspot.com/"&gt;http://mscrmgooglemaps.blogspot.com/&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/780680930800461091-6273002367316562723?l=a-crm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-crm.blogspot.com/feeds/6273002367316562723/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=780680930800461091&amp;postID=6273002367316562723' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/6273002367316562723'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/6273002367316562723'/><link rel='alternate' type='text/html' href='http://a-crm.blogspot.com/2007/12/integration-of-google-maps-live-maps.html' title='Integration of Google maps / Live maps into CRM 3.0, 4.0'/><author><name>Dejan Dular</name><uri>http://www.blogger.com/profile/00222488358810521805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh5.google.com/dejan.dular/RVhJF39ZABI/AAAAAAAAAHQ/jYuz5pHLch8/s288/potatpljanjeavartar.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-780680930800461091.post-4667179959738944453</id><published>2007-11-28T06:53:00.000+01:00</published><updated>2007-11-28T06:57:39.139+01:00</updated><title type='text'>Computer playing random music</title><content type='html'>Another post that has absolutely nothing to do with CRM. I just gotta share this.&lt;br /&gt;&lt;br /&gt;On channel 9 I found this link to the Microsoft's KB article:&lt;br /&gt;&lt;a href="http://support.microsoft.com/default.aspx?scid=kb;en-us;261186"&gt;http://support.microsoft.com/default.aspx?scid=kb;en-us;261186&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I'm really thinking of installing Windows 95 and crashing the CUP fan. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/780680930800461091-4667179959738944453?l=a-crm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-crm.blogspot.com/feeds/4667179959738944453/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=780680930800461091&amp;postID=4667179959738944453' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/4667179959738944453'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/4667179959738944453'/><link rel='alternate' type='text/html' href='http://a-crm.blogspot.com/2007/11/computer-playing-random-music.html' title='Computer playing random music'/><author><name>Dejan Dular</name><uri>http://www.blogger.com/profile/00222488358810521805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh5.google.com/dejan.dular/RVhJF39ZABI/AAAAAAAAAHQ/jYuz5pHLch8/s288/potatpljanjeavartar.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-780680930800461091.post-8622061830209389983</id><published>2007-11-22T07:51:00.001+01:00</published><updated>2007-11-22T07:51:28.265+01:00</updated><title type='text'>BigInteger</title><content type='html'>&lt;p&gt;I just have to share this. There is a new type of number in .NET Framework 3.5 called BigInteger [System.Numeric.BigInteger]. What is so cool here? Now you don't have to write special code to work with really really really big numbers. This type is infinite, as big as you want (until you run out of memory). &lt;/p&gt;  &lt;p&gt;Read more &lt;a href="http://blogs.msdn.com/bclteam/archive/2007/01/16/introducing-system-numeric-biginteger-inbar-gazit.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/780680930800461091-8622061830209389983?l=a-crm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-crm.blogspot.com/feeds/8622061830209389983/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=780680930800461091&amp;postID=8622061830209389983' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/8622061830209389983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/8622061830209389983'/><link rel='alternate' type='text/html' href='http://a-crm.blogspot.com/2007/11/biginteger.html' title='BigInteger'/><author><name>Dejan Dular</name><uri>http://www.blogger.com/profile/00222488358810521805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh5.google.com/dejan.dular/RVhJF39ZABI/AAAAAAAAAHQ/jYuz5pHLch8/s288/potatpljanjeavartar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-780680930800461091.post-5956609259746116760</id><published>2007-11-15T10:17:00.001+01:00</published><updated>2007-11-15T10:17:05.534+01:00</updated><title type='text'>Workflow Changes in CRM 4.0</title><content type='html'>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Today I'm going to compare CRM 3.0 and CRM 4.0 workflows:&lt;/p&gt;  &lt;p&gt;The web interface is much better designed than the previous one. As I wrote in my previous post, you have more space for description and you can add notes and attach files to the workflows. Moreover you can add a comment to every step of the workflow. &lt;/p&gt;  &lt;p&gt;I will say it again. Major improvement was on the workflows in this version. Good job CRM team.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Major change has been made is at the basic workflow properties. No more sales process. Now workflow equals sales process. You can select multiple triggering events for a single workflow. These events are:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Create&lt;/li&gt;    &lt;li&gt;Status change&lt;/li&gt;    &lt;li&gt;Assign&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Attribute change&lt;/strong&gt; (update)&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Delete&lt;/strong&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Also you can set if this workflow can be run on demand (manually) and / or as a child workflow. For the update, you must choose which attributes trigger the workflow.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.google.com/dejan.dular/RzwOXHzXuOI/AAAAAAAAAfg/0BDvvnjrfs0/image%5B26%5D"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="165" alt="image" src="http://lh4.google.com/dejan.dular/RzwOYHzXuPI/AAAAAAAAAfo/3OeTqq_UqNE/image_thumb%5B8%5D" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Actions are now called &lt;strong&gt;steps&lt;/strong&gt;. So let's take a look at the actions ... uh err ... steps.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;strike&gt;&lt;/strike&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;&lt;strike&gt;Create Activity&lt;/strike&gt;&lt;/strong&gt; =&amp;gt; &lt;strong&gt;Create Record - &lt;/strong&gt;Not only activities. You can create any entity you want. Set their properties in a form.      &lt;br /&gt;&lt;a href="http://lh4.google.com/dejan.dular/RzwOZHzXuQI/AAAAAAAAAfw/yudNhtrL5Yg/image%5B8%5D"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="244" alt="image" src="http://lh3.google.com/dejan.dular/RzwOZ3zXuRI/AAAAAAAAAf4/KA4YXCqVYX8/image_thumb%5B2%5D" width="171" border="0" /&gt;&lt;/a&gt;&amp;#160; &lt;a href="http://lh4.google.com/dejan.dular/RzwObHzXuSI/AAAAAAAAAgA/EFf7TCSfHYM/image%5B2%5D"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="153" alt="image" src="http://lh3.google.com/dejan.dular/RzwOb3zXuTI/AAAAAAAAAgI/HGRgzDTJG28/image_thumb" width="244" border="0" /&gt;&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Send E-mail &lt;/strong&gt;- This action stays. Again more flexible, again a form for new email opens. Templates stay - of course.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;&lt;strike&gt;Create Note&lt;/strike&gt; &lt;/strong&gt;=&amp;gt; &lt;strong&gt;Create Record&lt;/strong&gt; - Note is actually an entity.      &lt;br /&gt;&lt;a href="http://lh3.google.com/dejan.dular/RzwOc3zXuUI/AAAAAAAAAgQ/8nVmWfwOCDA/image%5B11%5D"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="225" alt="image" src="http://lh6.google.com/dejan.dular/RzwOdnzXuVI/AAAAAAAAAgY/ePitjwFBAGc/image_thumb%5B3%5D" width="244" border="0" /&gt;&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Update &lt;strike&gt;entity&lt;/strike&gt; record&lt;/strong&gt; - Of course, this action stays. In version 3.0 you could update only one attribute, in version 4.0 a form opens and you update any attribute you want.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Change status&lt;/strong&gt; - Not only you can change status to a fixed value, now you can set it to a status of a related entity and even to a status of a previously created task.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Assign &lt;strike&gt;entity&lt;/strike&gt; record &lt;/strong&gt;- Again a major improvement here. Not just to the Manager, User or Queue. You can use any dynamic value of related entities. &lt;strong&gt;And there's more&lt;/strong&gt;: You can assign related records as well. This means that you can reassign previously created task to a different user or a queue.&lt;a href="http://lh5.google.com/dejan.dular/RzwOeXzXuWI/AAAAAAAAAgg/RCHs4SPyQ_g/image%5B14%5D"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="65" alt="image" src="http://lh3.google.com/dejan.dular/RzwOe3zXuXI/AAAAAAAAAgo/Zjx7BcRpGiI/image_thumb%5B4%5D" width="244" border="0" /&gt;&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;&lt;strike&gt;Post URL&lt;/strike&gt;&lt;/strong&gt; - This action was deprecated in version 3.0. There are several reasons I won't talk about them here. No more Post URL for you guys.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;&lt;strike&gt;Run Subprocess&lt;/strike&gt;&lt;/strong&gt; =&amp;gt; &lt;strong&gt;Start Child Workflow&lt;/strong&gt; - Still here of course, but with improvements. You can start a workflow on any related entities.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Stop Workflow&lt;/strong&gt; - Previously you could define what to do with sub-workflows, but in this version you can just stop it and set the status of the workflow to Completed or Canceled. This is kinda logical, since you are starting subworkflows asynchronously and for other entities.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;&lt;strike&gt;Call assembly&lt;/strike&gt;&lt;/strong&gt; - What happened to this guy? It is not in the list anymore... Can anyone help me with this? Can you call an external assembly from the workflow?&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Some changes have been made on conditions as well:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Check condition&lt;/strong&gt; - This has been divided into three sub-elements: Check condition (if), Conditional branch (else if) and Default action (else). You can add as many else-ifs as you want. And of course you can check the values from related entities as well.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Wait for timer&lt;/strong&gt; - This has been mover to general wait conditions group.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Wait condition &lt;/strong&gt;- As before you can wait for changes in an entity or created activities. Now you can also check related entities. What is more. You can create more wait conditions, that are similar to the if - else if conditions. This is condition is called &lt;strong&gt;Parallel Wait Branch&lt;/strong&gt;. Now you can wait for different conditions to appear and then execute the first one that is met. The others are ignored.       &lt;br /&gt;&lt;strong&gt;Timers&lt;/strong&gt; - Create a wait condition and select Workflow - Timeout. You can use dynamic values as well.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Stages&lt;/strong&gt; - There is no more difference between Sales process and Workflow rules. You can insert stages into normal workflows as well, although they are not displayed in the entity's status bar.&lt;/p&gt;  &lt;p&gt;In Sales processes you can actually look at the workflows that are running on a specific entity and see where they are or what they are waiting for. Notice the green circle.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://lh4.google.com/dejan.dular/RzwOgHzXuYI/AAAAAAAAAgw/VEdiIyUXJt8/image%5B17%5D"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="149" alt="image" src="http://lh3.google.com/dejan.dular/RzwOg3zXuZI/AAAAAAAAAg4/qFn-yPNukfY/image_thumb%5B5%5D" width="244" border="0" /&gt;&lt;/a&gt; &lt;a href="http://lh3.google.com/dejan.dular/RzwOi3zXuaI/AAAAAAAAAhA/rmAmjO_14x4/image%5B20%5D"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="188" alt="image" src="http://lh3.google.com/dejan.dular/RzwOj3zXubI/AAAAAAAAAhI/KbHKW-6i4_4/image_thumb%5B6%5D" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;The same workflow status is available of you open a workflow from the list of workflows in the Settings area and open the workflow list. Every workflow has a list of all instances that were started. Just open an instance and see the status.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;This post has been written solely on my own discovery of CRM 4.0 CTP3. I'm just writing what I discovered. Maybe I missed something. Maybe it is important. Please correct me if I'm wrong.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/780680930800461091-5956609259746116760?l=a-crm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-crm.blogspot.com/feeds/5956609259746116760/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=780680930800461091&amp;postID=5956609259746116760' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/5956609259746116760'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/5956609259746116760'/><link rel='alternate' type='text/html' href='http://a-crm.blogspot.com/2007/11/workflow-changes-in-crm-40.html' title='Workflow Changes in CRM 4.0'/><author><name>Dejan Dular</name><uri>http://www.blogger.com/profile/00222488358810521805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh5.google.com/dejan.dular/RVhJF39ZABI/AAAAAAAAAHQ/jYuz5pHLch8/s288/potatpljanjeavartar.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-780680930800461091.post-6911255847338411330</id><published>2007-11-13T13:25:00.001+01:00</published><updated>2007-11-13T13:25:42.272+01:00</updated><title type='text'>Super duper CRM 4.0 workflows</title><content type='html'>&lt;p&gt;I must say I'm pleased. A lot has been done on the workflows since version 3.&lt;/p&gt;  &lt;p&gt;First of all workflows are now administered in a &lt;strong&gt;web client&lt;/strong&gt;. This had to be done because of CRM Live. But I must say that workflow management is much easier and better.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;File attachments&lt;/strong&gt; - now you can attach a file to the workflow. I like it! Now I can attach a Visio diagram to the workflow, maybe some other documentation. There is a lot more space for description. And yes. There are notes too.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Availability&lt;/strong&gt; - You can set the workflow to be run on demand, as well as a sub-workflow.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Triggering events&lt;/strong&gt; - Now workflows support also Delete and Update events. On the Update event you can choose the actual fields that trigger the workflow.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Wait for ... otherwise wait for&lt;/strong&gt; - Did you ever want to branch the workflow based on a condition. Now you can use so called &amp;quot;Paralel Wait Branch&amp;quot; and choose different wait conditions and run the first rule that matches.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;List of workflows&lt;/strong&gt; - Open one workflow and see status of all workflows (of this type) that were started.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;More on workflows later. Now I have to go home.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/780680930800461091-6911255847338411330?l=a-crm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-crm.blogspot.com/feeds/6911255847338411330/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=780680930800461091&amp;postID=6911255847338411330' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/6911255847338411330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/6911255847338411330'/><link rel='alternate' type='text/html' href='http://a-crm.blogspot.com/2007/11/super-duper-crm-40-workflows.html' title='Super duper CRM 4.0 workflows'/><author><name>Dejan Dular</name><uri>http://www.blogger.com/profile/00222488358810521805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh5.google.com/dejan.dular/RVhJF39ZABI/AAAAAAAAAHQ/jYuz5pHLch8/s288/potatpljanjeavartar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-780680930800461091.post-7884313886066632019</id><published>2007-11-08T11:31:00.001+01:00</published><updated>2007-11-08T11:31:46.932+01:00</updated><title type='text'>CRM 4.0 - 4 hours after first 5 minutes</title><content type='html'>&lt;p&gt;To be clear first: I still think that version 4 is a good improvement and it really is what version 3 ought to be.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;This is a list of impressions after 4 hours of playing with new features:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Many-to-many relationships&lt;/strong&gt;: Yeah! Finally! Yeah! No more &amp;quot;custom connecting relationships&amp;quot;. Relationship editor now divides the relationships in 3 groups: 1-to-many, many-to-1 and many-to-many. Great for entities with a lot of relationships. What is missing are attributes on relations. And &lt;u&gt;I couldn't find a way to start a workflow after assigning a many-to-many relationships&lt;/u&gt;. Is it really not possible or did I just miss it? I heard that version 5 will dealt with it.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;System-to-system relationships:&lt;/strong&gt; Yeah again! And not only that! You can have more relationships with the same entity.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Self-referential relationship:&lt;/strong&gt; Yeah again! You can relate entity to itself.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Multi tenant support: &lt;/strong&gt;From developers point view I thought it was different. I thought that you could manage two sites at once, but as it seems that multi tenant is almost no different than installing another version of CRM. Sites have different metadata, data, ... I admit that it is practical if you want to host CRM for others, but in my case it is almost the same as before. Oh. Another thing that is better: You can have only one login for multiple organizations. Good post about this if from &lt;a href="http://crm.davidyack.com/journal/2007/10/12/thinking-multi-tenant-with-crm-4-titan.html"&gt;Mr Dave&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Reporting architecture&lt;/strong&gt;: Because CRM went from intranet to Internet, there is no direct access to the SQL Report server. This eases up the configuration of the servers because of the impersonation things. Now the CRM server requests the report from the SRS directly with CRMAppPool credentials (e.g. NetworkService) The SQL Report server has add-in called CRM data connector which supports use of filtered views. Then the intermediate report is sent to the CRM server, that displays the report to the user. Now it is a CRM server, who actually allows viewing the report to the user. In version 3 this was a SRS thing. A good post about this is &lt;a href="http://blogs.msdn.com/ukcrm/archive/2007/10/11/microsoft-dynamics-crm-4-0-tidbits-reporting-architecture.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Advanced find&lt;/strong&gt;: You can actually display columns from related entities! Now you can, let's say, see a phone number of the primary contact in the account list. Way to go!&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Mail merge&lt;/strong&gt;: Finally you don't need outlook to perform a mail merge.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Duplicate checking:&lt;/strong&gt; I'll say better than nothing, but it could be better :)&amp;#160; You can define fields that are checked if there is a duplicate. You can say how many first or last letters define a duplicate and that's it. MS could actually implement some additional methods. &lt;a href="http://en.wikipedia.org/wiki/Soundex"&gt;Soundex&lt;/a&gt; is actually implemented in SQL server (but it is not very good). In my applications I use the following methods: &lt;a href="http://en.wikipedia.org/wiki/Double_Metaphone"&gt;Double metaphone&lt;/a&gt; (sounds-like algorithm better that Soundex) and &lt;a href="http://en.wikipedia.org/wiki/Levenshtein_distance"&gt;Levenstein distance&lt;/a&gt; (detects typos). Yes. I know that you could implement it by yourself, but hey! Why not get it out of the box? First you could run a double metaphone check and then do a Levenstein difference on the results.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Import data wizard:&lt;/strong&gt; Now supports most record types. Good thing is that it automatically maps picklist values with display values. No need to know the actual values of the picklist options. You can reuse mappings - a good thing if you have a constant import process in your company. Duplicate detection works when you are importing things. And you get an email when the job ends.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Typing in lookup field&lt;/strong&gt;: Now this is a neat feature. Now you can type in a value in a lookup field. After losing focus, the value is checked and if the value is OK, it becomes underlined, otherwise it turns to RED. Great functionality.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/780680930800461091-7884313886066632019?l=a-crm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-crm.blogspot.com/feeds/7884313886066632019/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=780680930800461091&amp;postID=7884313886066632019' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/7884313886066632019'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/7884313886066632019'/><link rel='alternate' type='text/html' href='http://a-crm.blogspot.com/2007/11/crm-40-4-hours-after-first-5-minutes.html' title='CRM 4.0 - 4 hours after first 5 minutes'/><author><name>Dejan Dular</name><uri>http://www.blogger.com/profile/00222488358810521805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh5.google.com/dejan.dular/RVhJF39ZABI/AAAAAAAAAHQ/jYuz5pHLch8/s288/potatpljanjeavartar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-780680930800461091.post-1904901061223110430</id><published>2007-11-07T11:26:00.001+01:00</published><updated>2007-11-08T10:13:37.132+01:00</updated><title type='text'>CRM 4.0 - first 5 minutes</title><content type='html'>&lt;p&gt;I finally had time to take a look at it. The CTP version. Virtual PC image is almost 8GB big and needs slightly more than 1GB of RAM.&lt;/p&gt;  &lt;p&gt;Just a quick look for 5 minutes - I'm satisfied.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Workflows&lt;/strong&gt; are now designed in web client, they support update (you can choose columns) and delete actions.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Duplicate detection &lt;/strong&gt;- not perfect, but still better than nothing.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;User interface&lt;/strong&gt; - better looking, but still some icons missing&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Multiple languages&lt;/strong&gt; - Cool feature for exporting and importing the published field names, attribute values, ... for translation purposes&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Web services&lt;/strong&gt; - Now you can download WSDL from web client. I'm not sure if this is really useful feature. Or is it?&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Will write more later.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-weight: bold;"&gt;Update: &lt;/span&gt;David stressed a good point about downloading WSDL in comments: CRM Live&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/780680930800461091-1904901061223110430?l=a-crm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-crm.blogspot.com/feeds/1904901061223110430/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=780680930800461091&amp;postID=1904901061223110430' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/1904901061223110430'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/1904901061223110430'/><link rel='alternate' type='text/html' href='http://a-crm.blogspot.com/2007/11/crm-40-first-5-minutes.html' title='CRM 4.0 - first 5 minutes'/><author><name>Dejan Dular</name><uri>http://www.blogger.com/profile/00222488358810521805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh5.google.com/dejan.dular/RVhJF39ZABI/AAAAAAAAAHQ/jYuz5pHLch8/s288/potatpljanjeavartar.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-780680930800461091.post-610900346786706906</id><published>2007-07-30T10:10:00.001+01:00</published><updated>2007-07-30T10:10:01.594+01:00</updated><title type='text'>Black Google saves energy?</title><content type='html'>&lt;p&gt;Are web pages with black backgrounds really better for the environment?&lt;/p&gt; &lt;p&gt;&lt;a title="http://www.treehugger.com/files/2007/05/black_google_sa.php" href="http://www.treehugger.com/files/2007/05/black_google_sa.php"&gt;http://www.treehugger.com/files/2007/05/black_google_sa.php&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/780680930800461091-610900346786706906?l=a-crm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-crm.blogspot.com/feeds/610900346786706906/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=780680930800461091&amp;postID=610900346786706906' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/610900346786706906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/610900346786706906'/><link rel='alternate' type='text/html' href='http://a-crm.blogspot.com/2007/07/black-google-saves-energy.html' title='Black Google saves energy?'/><author><name>Dejan Dular</name><uri>http://www.blogger.com/profile/00222488358810521805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh5.google.com/dejan.dular/RVhJF39ZABI/AAAAAAAAAHQ/jYuz5pHLch8/s288/potatpljanjeavartar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-780680930800461091.post-3610962470175189405</id><published>2007-06-29T14:44:00.001+01:00</published><updated>2007-06-29T14:47:33.485+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='forms'/><category scheme='http://www.blogger.com/atom/ns#' term='cusumization'/><category scheme='http://www.blogger.com/atom/ns#' term='script'/><title type='text'>Adding a reference to external .js file in your form</title><content type='html'>&lt;p&gt;This code creates a new script element and inserts it into the head of the HTML document that defines the form:&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;st = document.createElement("&amp;lt;script src='&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;http://&amp;lt;server&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&amp;gt;/&amp;lt;site&amp;gt;/&amp;lt;filename&amp;gt;.js' language='JavaScript'&amp;gt;");&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;h = document.getElementsByTagName('head');&lt;br /&gt;h[0].insertAdjacentElement('beforeEnd',st);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Using this method to reference an external script in a production environment is unsupported because it introduces several areas for concern:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Transportability&lt;/li&gt;&lt;li&gt;External Site&lt;/li&gt;&lt;li&gt;Doesn't work offline&lt;/li&gt;&lt;li&gt;Future Upgrade issues&lt;/li&gt;&lt;li&gt;Possible Timing issues&lt;/li&gt;&lt;li&gt;Poor programming practice&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/780680930800461091-3610962470175189405?l=a-crm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-crm.blogspot.com/feeds/3610962470175189405/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=780680930800461091&amp;postID=3610962470175189405' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/3610962470175189405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/3610962470175189405'/><link rel='alternate' type='text/html' href='http://a-crm.blogspot.com/2007/06/adding-reference-to-external-js-file-in.html' title='Adding a reference to external .js file in your form'/><author><name>Dejan Dular</name><uri>http://www.blogger.com/profile/00222488358810521805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh5.google.com/dejan.dular/RVhJF39ZABI/AAAAAAAAAHQ/jYuz5pHLch8/s288/potatpljanjeavartar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-780680930800461091.post-1455605411182956213</id><published>2007-06-27T14:33:00.001+01:00</published><updated>2007-06-27T14:55:55.465+01:00</updated><title type='text'>How to set user's home page?</title><content type='html'>&lt;p&gt;I got a request that all users of CRM must have their first page set to announcements.&lt;/p&gt;&lt;p&gt;Of course I could write a mail to all users requesting them to change their page in settings page to announcements, but this is a no no way.&lt;/p&gt;&lt;p&gt;So I searched the SQL database and found a user settings table in _MSCRM database. Just set the HomepageSubarea of the table UserSettingsBase to the value 'nav_news'.&lt;/p&gt;&lt;p&gt;So if you want to set announcements as a home page for all users just run the query:&lt;/p&gt;&lt;span style="font-family:Courier New;"&gt;&lt;p&gt;UPDATE [UserSettingsBase] SET [HomepageSubarea] = 'nav_news', [HomepageArea] = 'Home'&lt;/p&gt;&lt;p&gt;&lt;/span&gt;Although it works in my installation, this is not a supported change, so you are doing it &lt;strong&gt;at your own risk&lt;/strong&gt;. Do backup the database before messing with it. Just in case.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/780680930800461091-1455605411182956213?l=a-crm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-crm.blogspot.com/feeds/1455605411182956213/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=780680930800461091&amp;postID=1455605411182956213' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/1455605411182956213'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/1455605411182956213'/><link rel='alternate' type='text/html' href='http://a-crm.blogspot.com/2007/06/how-to-set-user-home-page.html' title='How to set user&amp;#39;s home page?'/><author><name>Dejan Dular</name><uri>http://www.blogger.com/profile/00222488358810521805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh5.google.com/dejan.dular/RVhJF39ZABI/AAAAAAAAAHQ/jYuz5pHLch8/s288/potatpljanjeavartar.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-780680930800461091.post-7405563352895208732</id><published>2007-06-27T10:08:00.001+01:00</published><updated>2007-06-27T10:08:48.900+01:00</updated><title type='text'>Renaming a (Customizable) Entity</title><content type='html'>&lt;p&gt;Just changing the entity display name is not enough. There are more places where the name must be changed to fulfill customer's experience.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Areas that Need to be Changed:&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Entity Name&lt;/li&gt; &lt;li&gt;Entity Form Labels&lt;/li&gt; &lt;li&gt;Entity View Names&lt;/li&gt; &lt;li&gt;Entity Attribute Display Names&lt;/li&gt; &lt;li&gt;System Messages&lt;/li&gt; &lt;li&gt;On-line Help Content&lt;/li&gt; &lt;li&gt;Reports&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Some Areas Cannot be Changed&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Platform error messages and messages that are displayed in Trace or the Event Log. These messages cannot be edited.&lt;/li&gt; &lt;li&gt;Strings added to the ISV configuration file.&lt;/li&gt; &lt;li&gt;User Manager component of the Microsoft CRM Deployment&lt;br&gt;Manager tool. These strings cannot be edited.&lt;/li&gt; &lt;li&gt;Environment Diagnostics Wizard. These strings cannot be edited.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Basically changing the entity's name is a seven step process:&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Step 1: Change Entity Name.&lt;br&gt;&lt;/strong&gt;In the Entity Definition section, change the Name and Plural Name&lt;br&gt;to the new name.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Step 2: Edit Entity Forms and Views to Display the New Entity&lt;/strong&gt;&lt;strong&gt;&lt;br&gt;Names.&lt;br&gt;&lt;/strong&gt;Change Form Labels and&amp;nbsp;View Names.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Step 3: Change Attribute Display Names for the Entity that is&lt;br&gt;Renamed.&lt;br&gt;&lt;/strong&gt;Use Customize Entities tool to change attribute display names associated with renamed entity. This will update any other parts of the application that uses these attributes, such as View headings.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Step 4: Customize Messages and Strings Associated with&lt;br&gt;Entity that is Renamed.&lt;br&gt;&lt;/strong&gt;Use the Customize Entities tool to customize messages and strings associated with the renamed entity.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Step 5: Publish Changes.&lt;br&gt;&lt;/strong&gt;The Name of the entity in the Navigation Pane may not respond to the changes. The information in the SiteMap is cached on the browser. Users may need to press F5 to see the changes.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Step 6: Edit affected help Content to Display the New Entity&lt;br&gt;Name.&lt;br&gt;&lt;/strong&gt;Manually edit entity names in help content and re-deploy the help content. &lt;p&gt;&lt;strong&gt;Step 7: Modify Affected Reports to Display the New Entity&lt;br&gt;Name.&lt;br&gt;&lt;/strong&gt;Manually modify entity names in reports and re-deploy the modified reports.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/780680930800461091-7405563352895208732?l=a-crm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-crm.blogspot.com/feeds/7405563352895208732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=780680930800461091&amp;postID=7405563352895208732' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/7405563352895208732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/7405563352895208732'/><link rel='alternate' type='text/html' href='http://a-crm.blogspot.com/2007/06/renaming-customizable-entity.html' title='Renaming a (Customizable) Entity'/><author><name>Dejan Dular</name><uri>http://www.blogger.com/profile/00222488358810521805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh5.google.com/dejan.dular/RVhJF39ZABI/AAAAAAAAAHQ/jYuz5pHLch8/s288/potatpljanjeavartar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-780680930800461091.post-5275392934642382162</id><published>2007-06-26T15:15:00.000+01:00</published><updated>2007-06-26T15:20:19.419+01:00</updated><title type='text'>Yay! I passed the exam!</title><content type='html'>Today I sucessfully passed the Microsoft exam called CRM 3.0 Applications.&lt;br /&gt;&lt;br /&gt;The exam number is: CRM-30-423&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/780680930800461091-5275392934642382162?l=a-crm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-crm.blogspot.com/feeds/5275392934642382162/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=780680930800461091&amp;postID=5275392934642382162' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/5275392934642382162'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/5275392934642382162'/><link rel='alternate' type='text/html' href='http://a-crm.blogspot.com/2007/06/yay-i-passed-exam.html' title='Yay! I passed the exam!'/><author><name>Dejan Dular</name><uri>http://www.blogger.com/profile/00222488358810521805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh5.google.com/dejan.dular/RVhJF39ZABI/AAAAAAAAAHQ/jYuz5pHLch8/s288/potatpljanjeavartar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-780680930800461091.post-605968184895847721</id><published>2007-06-04T15:06:00.001+01:00</published><updated>2007-06-04T15:08:09.096+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='callout'/><category scheme='http://www.blogger.com/atom/ns#' term='debug'/><title type='text'>How to debug callouts?</title><content type='html'>&lt;p&gt;First, here are two points, that I would like to express:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;I want to debug callouts directly and not with log files.&lt;/li&gt;&lt;li&gt;.NET 2.0 rulez&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;What now? Callouts use .NET 1.1 and just forget about remote debugging or something like that.&lt;/p&gt;&lt;p&gt;Why not create callouts that use some web service? If you have it installed on the same machine, then you can easily use impersonation etc.&lt;/p&gt;&lt;p&gt;So here's how I do it: I develop a web service that uses CRM web services, test it with normal win32 application and then just insert those 2 lines of code in callouts that call my web service. Use of dynamic entities is very very strongly recommended. You can serialize and deserialize them easily and if the structure of CRM entity model changes, you don't have to worry. Even callouts can have &lt;a href="http://a-crm.blogspot.com/2007/03/callout-setting-files.html"&gt;config files&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Web service is running in .NET 2.0 environment and I can debug it freely!&lt;/p&gt;&lt;p&gt;This is how I do it. What about you?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/780680930800461091-605968184895847721?l=a-crm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-crm.blogspot.com/feeds/605968184895847721/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=780680930800461091&amp;postID=605968184895847721' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/605968184895847721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/605968184895847721'/><link rel='alternate' type='text/html' href='http://a-crm.blogspot.com/2007/06/how-to-debug-callouts.html' title='How to debug callouts?'/><author><name>Dejan Dular</name><uri>http://www.blogger.com/profile/00222488358810521805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh5.google.com/dejan.dular/RVhJF39ZABI/AAAAAAAAAHQ/jYuz5pHLch8/s288/potatpljanjeavartar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-780680930800461091.post-6455960896619669587</id><published>2007-05-18T09:48:00.001+01:00</published><updated>2007-05-18T09:48:16.079+01:00</updated><title type='text'>How to set or change the owner of the dynamic entity</title><content type='html'>&lt;p&gt;First things first: The user has to have the rights to change the owner of the entity. I had some problems with the code from SDK. You can find it on two places, but only one works.&lt;/p&gt; &lt;p&gt;If you want to &lt;strong&gt;create an entity with the other owner&lt;/strong&gt; first create the owner:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(43,145,175)"&gt;Owner&lt;/span&gt; owner &lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;Owner&lt;/span&gt;();&lt;br /&gt;owner&lt;span style="color: rgb(0,0,255)"&gt;.&lt;/span&gt;type &lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;EntityName&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;.&lt;/span&gt;systemuser&lt;span style="color: rgb(0,0,255)"&gt;.&lt;/span&gt;ToString();&lt;br /&gt;owner&lt;span style="color: rgb(0,0,255)"&gt;.&lt;/span&gt;Value &lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt; newEntityOwnerId;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Then add the owner to the dynamic entity properties&amp;nbsp;array together with other properties and execute the request:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0,128,0)"&gt;//Create dynamic entity&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(43,145,175)"&gt;DynamicEntity&lt;/span&gt; entity &lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;DynamicEntity&lt;/span&gt;();&lt;br /&gt;entity&lt;span style="color: rgb(0,0,255)"&gt;.&lt;/span&gt;Name &lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt; entityName;&lt;br /&gt;entity&lt;span style="color: rgb(0,0,255)"&gt;.&lt;/span&gt;Properties &lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt; properties;&lt;/pre&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0,128,0)"&gt;//Create request&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(43,145,175)"&gt;TargetCreateDynamic&lt;/span&gt; myTarget &lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;TargetCreateDynamic&lt;/span&gt;();&lt;br /&gt;myTarget&lt;span style="color: rgb(0,0,255)"&gt;.&lt;/span&gt;Entity &lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt; entity;&lt;br /&gt;&lt;span style="color: rgb(43,145,175)"&gt;CreateRequest&lt;/span&gt; create &lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;CreateRequest&lt;/span&gt;();&lt;br /&gt;create&lt;span style="color: rgb(0,0,255)"&gt;.&lt;/span&gt;Target &lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt; myTarget;&lt;/pre&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0,128,0)"&gt;//Execute the request&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(43,145,175)"&gt;CreateResponse&lt;/span&gt; response &lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt; (&lt;span style="color: rgb(43,145,175)"&gt;CreateResponse&lt;/span&gt;)_crmService&lt;span style="color: rgb(0,0,255)"&gt;.&lt;/span&gt;Execute(create);&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;In the response object you have the ID of the newly created entity.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;If you just want to &lt;strong&gt;assign (change) the owner&lt;/strong&gt; of the use this code:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0,128,0)"&gt;// Create the SecurityPrincipal object.&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(43,145,175)"&gt;SecurityPrincipal&lt;/span&gt; assignee &lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;SecurityPrincipal&lt;/span&gt;();&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0,128,0)"&gt;// Set the properties of the SecurityPrincipal object.'&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0,128,0)"&gt;// PrincipalId is a GUID that identifies the user or team &lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0,128,0)"&gt;// that will own this record.&lt;br /&gt;&lt;/span&gt;assignee&lt;span style="color: rgb(0,0,255)"&gt;.&lt;/span&gt;PrincipalId &lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt; userId;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0,128,0)"&gt;// Create the target object for the request.&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(43,145,175)"&gt;TargetOwnedDynamic&lt;/span&gt; target &lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;TargetOwnedDynamic&lt;/span&gt;();&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0,128,0)"&gt;// Set the properties of the target object'.&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0,128,0)"&gt;// EntityId is a GUID that identifies the dynamic entity&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0,128,0)"&gt;// Entity name is the name of the dynamic entity&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0,128,0)"&gt;// that is being assigned to the user.&lt;br /&gt;&lt;/span&gt;target&lt;span style="color: rgb(0,0,255)"&gt;.&lt;/span&gt;EntityId &lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt; dynamicEntityId;&lt;br /&gt;target&lt;span style="color: rgb(0,0,255)"&gt;.&lt;/span&gt;EntityName &lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt; dynamicEntityName;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0,128,0)"&gt;// Create the request object.&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(43,145,175)"&gt;AssignRequest&lt;/span&gt; assign &lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;AssignRequest&lt;/span&gt;();&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0,128,0)"&gt;// Set the properties of the request object.'&lt;br /&gt;&lt;/span&gt;assign&lt;span style="color: rgb(0,0,255)"&gt;.&lt;/span&gt;Assignee &lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt; assignee;&lt;br /&gt;assign&lt;span style="color: rgb(0,0,255)"&gt;.&lt;/span&gt;Target &lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt; target;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0,128,0)"&gt;// Execute the request.&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(43,145,175)"&gt;AssignResponse&lt;/span&gt; assignResponse &lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt; (&lt;span style="color: rgb(43,145,175)"&gt;AssignResponse&lt;/span&gt;)_crmService.Execute(assign);&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/780680930800461091-6455960896619669587?l=a-crm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-crm.blogspot.com/feeds/6455960896619669587/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=780680930800461091&amp;postID=6455960896619669587' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/6455960896619669587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/6455960896619669587'/><link rel='alternate' type='text/html' href='http://a-crm.blogspot.com/2007/05/how-to-set-or-change-owner-of-dynamic.html' title='How to set or change the owner of the dynamic entity'/><author><name>Dejan Dular</name><uri>http://www.blogger.com/profile/00222488358810521805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh5.google.com/dejan.dular/RVhJF39ZABI/AAAAAAAAAHQ/jYuz5pHLch8/s288/potatpljanjeavartar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-780680930800461091.post-6971261253935264987</id><published>2007-03-19T16:29:00.001+01:00</published><updated>2007-03-19T16:30:00.018+01:00</updated><title type='text'>Dates in CRM Queries</title><content type='html'>&lt;p&gt;It's pretty simple to build query expressions&amp;nbsp;from CRM web service. Until you get to dates. You have lots of different&amp;nbsp;ConditionOperator types&amp;nbsp;like On, OnOrAfter, OnOrBefore, ThisWeek, Last7Days etc. But what about the values?&lt;/p&gt; &lt;p&gt;The problem is that you can't add a DateTime object to the values array of the ConditionExpression. If you do you'll most likely get the super duper error "Server was unable to process request". And what is more! The exception data reveals us the intriguing reason: "Invalid argument." DOH!&lt;/p&gt; &lt;p&gt;You have to pass the DateTime as string and parse it with "s" parameter. This is language-neutral and the CRM Server should be able to parse it regardless of the regional settings.&lt;/p&gt; &lt;h2&gt;&lt;font size="2"&gt;Solution:&lt;/font&gt;&lt;/h2&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(43,145,175)"&gt;ConditionExpression&lt;/span&gt; condition &lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;ConditionExpression&lt;/span&gt;();&lt;br /&gt;condition&lt;span style="color: rgb(0,0,255)"&gt;.&lt;/span&gt;AttributeName &lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt; &lt;span style="color: rgb(163,21,21)"&gt;"new_duedate"&lt;/span&gt;;&lt;br /&gt;condition&lt;span style="color: rgb(0,0,255)"&gt;.&lt;/span&gt;Operator &lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;ConditionOperator&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;.&lt;/span&gt;OnOrAfter;&lt;br /&gt;condition&lt;span style="color: rgb(0,0,255)"&gt;.&lt;/span&gt;Values &lt;span style="color: rgb(0,0,255)"&gt;=&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt;[] { &lt;span style="color: rgb(43,145,175)"&gt;DateTime&lt;/span&gt;&lt;span style="color: rgb(0,0,255)"&gt;.&lt;/span&gt;Now&lt;span style="color: rgb(0,0,255)"&gt;.&lt;/span&gt;ToString(&lt;span style="color: rgb(163,21,21)"&gt;"s"&lt;/span&gt;) };&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;AND YES! IT IS FINALLY SNOWING OUTSIDE!!!!!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/780680930800461091-6971261253935264987?l=a-crm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-crm.blogspot.com/feeds/6971261253935264987/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=780680930800461091&amp;postID=6971261253935264987' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/6971261253935264987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/6971261253935264987'/><link rel='alternate' type='text/html' href='http://a-crm.blogspot.com/2007/03/dates-in-crm-queries.html' title='Dates in CRM Queries'/><author><name>Dejan Dular</name><uri>http://www.blogger.com/profile/00222488358810521805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh5.google.com/dejan.dular/RVhJF39ZABI/AAAAAAAAAHQ/jYuz5pHLch8/s288/potatpljanjeavartar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-780680930800461091.post-7350161295936794017</id><published>2007-03-13T16:00:00.001+01:00</published><updated>2007-03-13T16:01:00.786+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='copy'/><category scheme='http://www.blogger.com/atom/ns#' term='note'/><category scheme='http://www.blogger.com/atom/ns#' term='attachment'/><category scheme='http://www.blogger.com/atom/ns#' term='annotation'/><title type='text'>How to copy an annotation</title><content type='html'>&lt;p&gt;To copy notes wit or without attachments I have prepared this snippet.&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="COLOR: rgb(0,128,0)"&gt;//Copy attributes&lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR: rgb(43,145,175)"&gt;annotation&lt;/span&gt; newAnnotation &lt;span style="COLOR: rgb(0,0,255)"&gt;=&lt;/span&gt; &lt;span style="COLOR: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="COLOR: rgb(43,145,175)"&gt;annotation&lt;/span&gt;();&lt;br /&gt;newAnnotation&lt;span style="COLOR: rgb(0,0,255)"&gt;.&lt;/span&gt;langid &lt;span style="COLOR: rgb(0,0,255)"&gt;=&lt;/span&gt; sourceAnnotation&lt;span style="COLOR: rgb(0,0,255)"&gt;.&lt;/span&gt;langid;&lt;br /&gt;newAnnotation&lt;span style="COLOR: rgb(0,0,255)"&gt;.&lt;/span&gt;notetext &lt;span style="COLOR: rgb(0,0,255)"&gt;=&lt;/span&gt; sourceAnnotation&lt;span style="COLOR: rgb(0,0,255)"&gt;.&lt;/span&gt;notetext;&lt;br /&gt;newAnnotation&lt;span style="COLOR: rgb(0,0,255)"&gt;.&lt;/span&gt;subject &lt;span style="COLOR: rgb(0,0,255)"&gt;=&lt;/span&gt; sourceAnnotation&lt;span style="COLOR: rgb(0,0,255)"&gt;.&lt;/span&gt;subject;&lt;br /&gt;newAnnotation&lt;span style="COLOR: rgb(0,0,255)"&gt;.&lt;/span&gt;objecttypecode &lt;span style="COLOR: rgb(0,0,255)"&gt;=&lt;/span&gt; &lt;span style="COLOR: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="COLOR: rgb(43,145,175)"&gt;EntityNameReference&lt;/span&gt;();&lt;br /&gt;newAnnotation&lt;span style="COLOR: rgb(0,0,255)"&gt;.&lt;/span&gt;objecttypecode&lt;span style="COLOR: rgb(0,0,255)"&gt;.&lt;/span&gt;Value &lt;span style="COLOR: rgb(0,0,255)"&gt;=&lt;/span&gt; destinationEntityName;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="COLOR: rgb(0,128,0)"&gt;//Set the destination entity ID&lt;/span&gt;&lt;br /&gt;newAnnotation&lt;span style="COLOR: rgb(0,0,255)"&gt;.&lt;/span&gt;objectid &lt;span style="COLOR: rgb(0,0,255)"&gt;=&lt;/span&gt; &lt;span style="COLOR: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="COLOR: rgb(43,145,175)"&gt;Lookup&lt;/span&gt;();&lt;br /&gt;newAnnotation&lt;span style="COLOR: rgb(0,0,255)"&gt;.&lt;/span&gt;objectid&lt;span style="COLOR: rgb(0,0,255)"&gt;.&lt;/span&gt;type &lt;span style="COLOR: rgb(0,0,255)"&gt;=&lt;/span&gt; destinationEntityName;&lt;br /&gt;newAnnotation&lt;span style="COLOR: rgb(0,0,255)"&gt;.&lt;/span&gt;objectid&lt;span style="COLOR: rgb(0,0,255)"&gt;.&lt;/span&gt;Value &lt;span style="COLOR: rgb(0,0,255)"&gt;=&lt;/span&gt; destinationEntityId;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="COLOR: rgb(0,128,0)"&gt;//Create annotation&lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR: rgb(43,145,175)"&gt;Guid&lt;/span&gt; newAnnotationId &lt;span style="COLOR: rgb(0,0,255)"&gt;=&lt;/span&gt; _crmService&lt;span style="COLOR: rgb(0,0,255)"&gt;.&lt;/span&gt;Create(newAnnotation);&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,255)"&gt;if&lt;/span&gt; (sourceAnnotation&lt;span style="COLOR: rgb(0,0,255)"&gt;.&lt;/span&gt;isdocument&lt;span style="COLOR: rgb(0,0,255)"&gt;.&lt;/span&gt;Value)&lt;br /&gt;{&lt;br /&gt;    &lt;span style="COLOR: rgb(0,0,255)"&gt;byte&lt;/span&gt;[] data &lt;span style="COLOR: rgb(0,0,255)"&gt;=&lt;/span&gt; GetAnnotationAttachment(sourceAnnotation&lt;span style="COLOR: rgb(0,0,255)"&gt;.&lt;/span&gt;annotationid&lt;span style="COLOR: rgb(0,0,255)"&gt;.&lt;/span&gt;Value);&lt;br /&gt;    &lt;span style="COLOR: rgb(0,0,255)"&gt;string&lt;/span&gt; base64data &lt;span style="COLOR: rgb(0,0,255)"&gt;=&lt;/span&gt; System&lt;span style="COLOR: rgb(0,0,255)"&gt;.&lt;/span&gt;&lt;span style="COLOR: rgb(43,145,175)"&gt;Convert&lt;/span&gt;&lt;span style="COLOR: rgb(0,0,255)"&gt;.&lt;/span&gt;ToBase64String(data);&lt;br /&gt;    AddAttachment(newAnnotationId, base64data, sourceAnnotation&lt;span style="COLOR: rgb(0,0,255)"&gt;.&lt;/span&gt;mimetype, sourceAnnotation&lt;span style="COLOR: rgb(0,0,255)"&gt;.&lt;/span&gt;filename);&lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;The code for GetAnnotationAttachment is &lt;a href="http://a-crm.blogspot.com/2007/03/how-to-get-downlaoad-attachment.html"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;The code for AddAttachment is &lt;a href="http://a-crm.blogspot.com/2007/03/how-to-add-attachment.html"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/780680930800461091-7350161295936794017?l=a-crm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-crm.blogspot.com/feeds/7350161295936794017/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=780680930800461091&amp;postID=7350161295936794017' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/7350161295936794017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/7350161295936794017'/><link rel='alternate' type='text/html' href='http://a-crm.blogspot.com/2007/03/how-to-copy-annotation.html' title='How to copy an annotation'/><author><name>Dejan Dular</name><uri>http://www.blogger.com/profile/00222488358810521805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh5.google.com/dejan.dular/RVhJF39ZABI/AAAAAAAAAHQ/jYuz5pHLch8/s288/potatpljanjeavartar.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-780680930800461091.post-927735249971538896</id><published>2007-03-13T15:58:00.001+01:00</published><updated>2007-03-13T15:58:47.752+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='attachment'/><category scheme='http://www.blogger.com/atom/ns#' term='upload'/><title type='text'>How to add an attachment</title><content type='html'>&lt;p&gt;To upload an attachment I have prepared the following function:&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="COLOR: rgb(0,0,255)"&gt;private&lt;/span&gt; &lt;span style="COLOR: rgb(0,0,255)"&gt;void&lt;/span&gt; AddAttachment(&lt;span style="COLOR: rgb(43,145,175)"&gt;Guid&lt;/span&gt; parentAnntotationId, &lt;span style="COLOR: rgb(0,0,255)"&gt;string&lt;/span&gt; attachmentBase64Data, &lt;span style="COLOR: rgb(0,0,255)"&gt;string&lt;/span&gt; mimeType, &lt;span style="COLOR: rgb(0,0,255)"&gt;string&lt;/span&gt; attachmentFileName)&lt;br /&gt;{&lt;br /&gt;    &lt;span style="COLOR: rgb(43,145,175)"&gt;UploadFromBase64DataAnnotationRequest&lt;/span&gt; upload &lt;span style="COLOR: rgb(0,0,255)"&gt;=&lt;/span&gt; &lt;span style="COLOR: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="COLOR: rgb(43,145,175)"&gt;UploadFromBase64DataAnnotationRequest&lt;/span&gt;();&lt;br /&gt;    upload&lt;span style="COLOR: rgb(0,0,255)"&gt;.&lt;/span&gt;AnnotationId &lt;span style="COLOR: rgb(0,0,255)"&gt;=&lt;/span&gt; parentAnntotationId;&lt;br /&gt;    upload&lt;span style="COLOR: rgb(0,0,255)"&gt;.&lt;/span&gt;FileName &lt;span style="COLOR: rgb(0,0,255)"&gt;=&lt;/span&gt; attachmentFileName;&lt;br /&gt;    upload&lt;span style="COLOR: rgb(0,0,255)"&gt;.&lt;/span&gt;MimeType &lt;span style="COLOR: rgb(0,0,255)"&gt;=&lt;/span&gt; mimeType;&lt;br /&gt;    upload&lt;span style="COLOR: rgb(0,0,255)"&gt;.&lt;/span&gt;Base64Data &lt;span style="COLOR: rgb(0,0,255)"&gt;=&lt;/span&gt; attachmentBase64Data;&lt;br /&gt;&lt;br /&gt;    _crmService&lt;span style="COLOR: rgb(0,0,255)"&gt;.&lt;/span&gt;Execute(upload);&lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;How to get mime type? &lt;a href="http://a-crm.blogspot.com/2007/03/finding-file-mime-type-mimetype.html"&gt;Previous post&lt;/a&gt;&lt;/p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/780680930800461091-927735249971538896?l=a-crm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-crm.blogspot.com/feeds/927735249971538896/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=780680930800461091&amp;postID=927735249971538896' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/927735249971538896'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/927735249971538896'/><link rel='alternate' type='text/html' href='http://a-crm.blogspot.com/2007/03/how-to-add-attachment.html' title='How to add an attachment'/><author><name>Dejan Dular</name><uri>http://www.blogger.com/profile/00222488358810521805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh5.google.com/dejan.dular/RVhJF39ZABI/AAAAAAAAAHQ/jYuz5pHLch8/s288/potatpljanjeavartar.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-780680930800461091.post-7016604690026012347</id><published>2007-03-13T15:54:00.001+01:00</published><updated>2007-03-13T15:56:52.386+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mime type'/><category scheme='http://www.blogger.com/atom/ns#' term='attachment'/><title type='text'>Finding the file's mime type (MimeType)</title><content type='html'>&lt;p&gt;I was looking for this for some time now. Simple, but beautiful solution:&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="COLOR: rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="COLOR: rgb(0,0,255)"&gt;string&lt;/span&gt; GetMimeType(&lt;span style="COLOR: rgb(0,0,255)"&gt;byte&lt;/span&gt;[] fileBytes)&lt;br /&gt;{&lt;br /&gt;    &lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="COLOR: rgb(0,0,255)"&gt;try&lt;br /&gt;&lt;/span&gt;    {&lt;br /&gt;        &lt;span style="COLOR: rgb(43,145,175)"&gt;ContentInfo&lt;/span&gt; info &lt;span style="COLOR: rgb(0,0,255)"&gt;=&lt;/span&gt; &lt;span style="COLOR: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="COLOR: rgb(43,145,175)"&gt;ContentInfo&lt;/span&gt;(fileBytes);&lt;br /&gt;        &lt;span style="COLOR: rgb(0,0,255)"&gt;return&lt;/span&gt; info&lt;span style="COLOR: rgb(0,0,255)"&gt;.&lt;/span&gt;ContentType&lt;span style="COLOR: rgb(0,0,255)"&gt;.&lt;/span&gt;Value;&lt;br /&gt;    }&lt;br /&gt;    &lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="COLOR: rgb(0,0,255)"&gt;catch&lt;br /&gt;&lt;/span&gt;    {&lt;br /&gt;        &lt;span style="COLOR: rgb(0,0,255)"&gt;return&lt;/span&gt; &lt;span style="COLOR: rgb(163,21,21)"&gt;"application/octet-stream"&lt;/span&gt;;&lt;br /&gt;    }&lt;br /&gt; }&lt;/span&gt;&lt;/p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/780680930800461091-7016604690026012347?l=a-crm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-crm.blogspot.com/feeds/7016604690026012347/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=780680930800461091&amp;postID=7016604690026012347' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/7016604690026012347'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/7016604690026012347'/><link rel='alternate' type='text/html' href='http://a-crm.blogspot.com/2007/03/finding-file-mime-type-mimetype.html' title='Finding the file&amp;#39;s mime type (MimeType)'/><author><name>Dejan Dular</name><uri>http://www.blogger.com/profile/00222488358810521805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh5.google.com/dejan.dular/RVhJF39ZABI/AAAAAAAAAHQ/jYuz5pHLch8/s288/potatpljanjeavartar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-780680930800461091.post-9083444670718993362</id><published>2007-03-13T15:36:00.001+01:00</published><updated>2007-03-13T15:39:45.607+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='attachment'/><title type='text'>How to get (download) an attachment</title><content type='html'>&lt;p&gt;If you want to get an attachment from a note, then you have to get it using HTTP call. The following function returns an array of bytes that can be saved into a stream or you can convert it to Base64String (&lt;span style="font-family:courier new;font-size:85%;"&gt;System&lt;span style="COLOR: rgb(0,0,255)"&gt;.&lt;/span&gt;&lt;span style="COLOR: rgb(43,145,175)"&gt;Convert&lt;/span&gt;&lt;span style="COLOR: rgb(0,0,255)"&gt;.&lt;/span&gt;ToBase64String(myBytes)&lt;/span&gt;) if you want to save it again in CRM.&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="COLOR: rgb(0,0,255)"&gt;private&lt;/span&gt; &lt;span style="COLOR: rgb(0,0,255)"&gt;byte&lt;/span&gt;[] GetAnnotationAttachment(&lt;span style="COLOR: rgb(43,145,175)"&gt;Guid&lt;/span&gt; annotationId)&lt;br /&gt;{&lt;br /&gt;&lt;span style="COLOR: rgb(43,145,175)"&gt;Guid&lt;/span&gt; attachid &lt;span style="COLOR: rgb(0,0,255)"&gt;=&lt;/span&gt; annotationId;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,255)"&gt;int&lt;/span&gt; objecttypecode &lt;span style="COLOR: rgb(0,0,255)"&gt;=&lt;/span&gt; 5; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="COLOR: rgb(0,128,0)"&gt;//Annotation attachment OTC&lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR: rgb(0,0,255)"&gt;string&lt;/span&gt; url &lt;span style="COLOR: rgb(0,0,255)"&gt;=&lt;/span&gt; _serverUrl &lt;span style="COLOR: rgb(0,0,255)"&gt;+&lt;/span&gt; &lt;span style="COLOR: rgb(163,21,21)"&gt;"Activities/Attachment/download.aspx?AttachmentType="&lt;/span&gt; &lt;span style="COLOR: rgb(0,0,255)"&gt;+&lt;/span&gt; objecttypecode&lt;span style="COLOR: rgb(0,0,255)"&gt;.&lt;/span&gt;ToString() &lt;span style="COLOR: rgb(0,0,255)"&gt;+&lt;/span&gt; &lt;span style="COLOR: rgb(163,21,21)"&gt;"&amp;AttachmentId="&lt;/span&gt; &lt;span style="COLOR: rgb(0,0,255)"&gt;+&lt;/span&gt; attachid&lt;span style="COLOR: rgb(0,0,255)"&gt;.&lt;/span&gt;ToString();&lt;br /&gt;System&lt;span style="COLOR: rgb(0,0,255)"&gt;.&lt;/span&gt;Net&lt;span style="COLOR: rgb(0,0,255)"&gt;.&lt;/span&gt;&lt;span style="COLOR: rgb(43,145,175)"&gt;WebClient&lt;/span&gt; myWebClient &lt;span style="COLOR: rgb(0,0,255)"&gt;=&lt;/span&gt; &lt;span style="COLOR: rgb(0,0,255)"&gt;new&lt;/span&gt; System&lt;span style="COLOR: rgb(0,0,255)"&gt;.&lt;/span&gt;Net&lt;span style="COLOR: rgb(0,0,255)"&gt;.&lt;/span&gt;&lt;span style="COLOR: rgb(43,145,175)"&gt;WebClient&lt;/span&gt;();&lt;br /&gt;myWebClient&lt;span style="COLOR: rgb(0,0,255)"&gt;.&lt;/span&gt;Credentials &lt;span style="COLOR: rgb(0,0,255)"&gt;=&lt;/span&gt; System&lt;span style="COLOR: rgb(0,0,255)"&gt;.&lt;/span&gt;Net&lt;span style="COLOR: rgb(0,0,255)"&gt;.&lt;/span&gt;&lt;span style="COLOR: rgb(43,145,175)"&gt;CredentialCache&lt;/span&gt;&lt;span style="COLOR: rgb(0,0,255)"&gt;.&lt;/span&gt;DefaultNetworkCredentials;&lt;br /&gt;&lt;span style="COLOR: rgb(0,0,255)"&gt;return&lt;/span&gt; myWebClient&lt;span style="COLOR: rgb(0,0,255)"&gt;.&lt;/span&gt;DownloadData(url);&lt;br /&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/780680930800461091-9083444670718993362?l=a-crm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-crm.blogspot.com/feeds/9083444670718993362/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=780680930800461091&amp;postID=9083444670718993362' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/9083444670718993362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/9083444670718993362'/><link rel='alternate' type='text/html' href='http://a-crm.blogspot.com/2007/03/how-to-get-downlaoad-attachment.html' title='How to get (download) an attachment'/><author><name>Dejan Dular</name><uri>http://www.blogger.com/profile/00222488358810521805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh5.google.com/dejan.dular/RVhJF39ZABI/AAAAAAAAAHQ/jYuz5pHLch8/s288/potatpljanjeavartar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-780680930800461091.post-4634868732501376061</id><published>2007-03-12T16:18:00.001+01:00</published><updated>2007-03-12T16:25:23.893+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='callout'/><category scheme='http://www.blogger.com/atom/ns#' term='sdk'/><category scheme='http://www.blogger.com/atom/ns#' term='error'/><category scheme='http://www.blogger.com/atom/ns#' term='web service'/><title type='text'>HTTP status 401: Unauthorized error</title><content type='html'>&lt;p&gt;I wrote some callouts that use CRM web service for reading some additional data.&lt;/p&gt;&lt;p&gt;Man I was furious! On the test system it worked, on the production I got the 401 unauthorized error.&lt;/p&gt;&lt;p&gt;I Goggled a bit and then I tried the simplest solution:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Comment out the code: crmWebService.PreAuthenticate = true;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;And it worked!&lt;/p&gt;&lt;p&gt;Guess what? This code was copied from Microsoft CRM 3.0 SDK.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/780680930800461091-4634868732501376061?l=a-crm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-crm.blogspot.com/feeds/4634868732501376061/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=780680930800461091&amp;postID=4634868732501376061' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/4634868732501376061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/4634868732501376061'/><link rel='alternate' type='text/html' href='http://a-crm.blogspot.com/2007/03/http-status-401-unauthorized-error.html' title='HTTP status 401: Unauthorized error'/><author><name>Dejan Dular</name><uri>http://www.blogger.com/profile/00222488358810521805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh5.google.com/dejan.dular/RVhJF39ZABI/AAAAAAAAAHQ/jYuz5pHLch8/s288/potatpljanjeavartar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-780680930800461091.post-4608076818494100326</id><published>2007-03-12T09:59:00.001+01:00</published><updated>2007-03-12T10:04:14.935+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='callout'/><category scheme='http://www.blogger.com/atom/ns#' term='settings'/><title type='text'>Callout setting files</title><content type='html'>&lt;p&gt;I created a callout, but I wanted to have an additional XML settings file that can be changed on live system without restarting all necessary services.&lt;/p&gt;&lt;p&gt;You have two options:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;You can hardcode the full path to the file (bad solution) &lt;li&gt;You can read the file from the "running folder"&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;The default running folder is:&lt;br /&gt;&lt;strong&gt;%windows install folder%/system32/inetsrv&lt;/strong&gt;.&lt;/p&gt;&lt;p&gt;So put your XML file in this folder and read it from the callout using:&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="color:#408080;"&gt;XmlDocument&lt;/span&gt; settings = new &lt;span style="color:#408080;"&gt;XmlDocument&lt;/span&gt;();&lt;br /&gt;settings.Load(&lt;span style="color:#ff0000;"&gt;Path.GetFullPath("CalloutSettings.xml")&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:ved;"&gt;That's it folks!&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/780680930800461091-4608076818494100326?l=a-crm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-crm.blogspot.com/feeds/4608076818494100326/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=780680930800461091&amp;postID=4608076818494100326' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/4608076818494100326'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/4608076818494100326'/><link rel='alternate' type='text/html' href='http://a-crm.blogspot.com/2007/03/callout-setting-files.html' title='Callout setting files'/><author><name>Dejan Dular</name><uri>http://www.blogger.com/profile/00222488358810521805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh5.google.com/dejan.dular/RVhJF39ZABI/AAAAAAAAAHQ/jYuz5pHLch8/s288/potatpljanjeavartar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-780680930800461091.post-1903866399935632322</id><published>2007-01-11T21:04:00.000+01:00</published><updated>2007-01-11T21:08:44.874+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='instructions'/><category scheme='http://www.blogger.com/atom/ns#' term='white paper'/><title type='text'>Optimizing the Performance of Microsoft Dynamics CRM 3.0 White Paper</title><content type='html'>Yesterday Microsoft published  a &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=6B32E0B3-5520-48A7-B3CD-D8477D084821&amp;displaylang=en"&gt;white paper&lt;/a&gt; that describes how to optimize the performance of your CRM 3.0 system.&lt;br /&gt;&lt;br /&gt;&lt;span&gt;This white paper discusses how to optimize the performance of your Microsoft Dynamics CRM 3.0 system. You’ll learn how re-indexing, de-fragmenting, and regularly maintaining your databases can increase the speed with which Microsoft Dynamics CRM accesses your data. The white paper includes more advanced techniques as well, such as improving report performance, configuring Microsoft SQL Server, and optimizing Microsoft Internet Information Services and the .NET Framework. You’ll find complete SQL scripts that you can copy and use immediately. Finally, you’ll find links to additional information and resources, such as performance enhancements, security updates, Knowledge Base articles, and related Microsoft Dynamics CRM documentation.&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/780680930800461091-1903866399935632322?l=a-crm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-crm.blogspot.com/feeds/1903866399935632322/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=780680930800461091&amp;postID=1903866399935632322' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/1903866399935632322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/1903866399935632322'/><link rel='alternate' type='text/html' href='http://a-crm.blogspot.com/2007/01/optimizing-performance-of-microsoft.html' title='Optimizing the Performance of Microsoft Dynamics CRM 3.0 White Paper'/><author><name>Dejan Dular</name><uri>http://www.blogger.com/profile/00222488358810521805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh5.google.com/dejan.dular/RVhJF39ZABI/AAAAAAAAAHQ/jYuz5pHLch8/s288/potatpljanjeavartar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-780680930800461091.post-4551224412436000134</id><published>2007-01-09T21:32:00.000+01:00</published><updated>2007-01-09T21:40:14.390+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web service'/><title type='text'>Best Practices for Better Performance from Your Custom Code</title><content type='html'>I found this article in the official Microsoft  Dynamics CRM  Team Blog:&lt;br /&gt;&lt;br /&gt;It points out some things you should keep in mind when creating a custom code.&lt;span style="text-decoration: underline;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://blogs.msdn.com/crm/archive/2007/01/09/best-practices-for-better-performance-from-your-custom-code.aspx"&gt;http://blogs.msdn.com/crm/archive/2007/01/09/best-practices-for-better-performance-from-your-custom-code.aspx&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/780680930800461091-4551224412436000134?l=a-crm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-crm.blogspot.com/feeds/4551224412436000134/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=780680930800461091&amp;postID=4551224412436000134' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/4551224412436000134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/4551224412436000134'/><link rel='alternate' type='text/html' href='http://a-crm.blogspot.com/2007/01/best-practices-for-better-performance.html' title='Best Practices for Better Performance from Your Custom Code'/><author><name>Dejan Dular</name><uri>http://www.blogger.com/profile/00222488358810521805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh5.google.com/dejan.dular/RVhJF39ZABI/AAAAAAAAAHQ/jYuz5pHLch8/s288/potatpljanjeavartar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-780680930800461091.post-5071836696394309161</id><published>2006-12-20T16:06:00.000+01:00</published><updated>2006-12-20T17:36:55.140+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dynamic entity'/><category scheme='http://www.blogger.com/atom/ns#' term='state'/><category scheme='http://www.blogger.com/atom/ns#' term='status'/><title type='text'>How to change status of the dynamic entity?</title><content type='html'>This feature is not well documented, so I decided to describe it here:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 153, 0);font-family:courier new;" &gt;//Create a request object&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;SetStateDynamicEntityRequest&lt;/span&gt; stateRequest = &lt;span style="color: rgb(51, 51, 255);"&gt;new&lt;/span&gt; &lt;span style="color: rgb(51, 153, 153);"&gt;SetStateDynamicEntityRequest&lt;/span&gt;();&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 153, 0);font-family:courier new;" &gt;//Use string and not integer value for state. (For Lead use "Qualified" and not 2)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;state&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;Request&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;.State = newState;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;state&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;Request&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;.Status = newStatus;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);font-family:courier new;" &gt;//Create an instance of the entity&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;Moniker&lt;/span&gt; m = &lt;span style="color: rgb(51, 51, 255);"&gt;new&lt;/span&gt; &lt;span style="color: rgb(51, 153, 153);"&gt;Moniker&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;m.Id = entityId;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;m.Name = myDynamicEntity.Name;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);font-family:courier new;" &gt;//Set the state. Well... set the entity.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;state&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;Request&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;.Entity = m;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);font-family:courier new;" &gt;//Send the request&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;SetStateDynamicEntityResponse &lt;/span&gt;res = (&lt;span style="color: rgb(51, 153, 153);"&gt;SetStateDynamicEntityResponse&lt;/span&gt;)_crmService.Execute(state&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;Request&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Pretty simple, huh?&lt;br /&gt;&lt;br /&gt;For a complete list of state and status values take a look in the SDK. You should find an enumeration for every built-in entity state together with allowed status reasons.&lt;br /&gt;The name should be &lt;entity&gt;State Enumeration (LeadState Enumeration). Custom entities state is "Active" or "Inactive".&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Of course you can use strong typed entities: (but I prefer dynamic ones)&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;span style="color: rgb(51, 153, 153);"&gt;lead&lt;/span&gt; myLead = &lt;span style="color: rgb(51, 51, 255);"&gt;new&lt;/span&gt; &lt;span style="color: rgb(51, 153, 153);"&gt;lead&lt;/span&gt;();&lt;br /&gt;&lt;span style="color: rgb(51, 153, 153);"&gt;Status&lt;/span&gt; statusCode = &lt;span style="color: rgb(51, 51, 255);"&gt;new&lt;/span&gt; &lt;span style="color: rgb(51, 153, 153);"&gt;Status&lt;/span&gt;();&lt;br /&gt;statusCode.Value = 3;&lt;br /&gt;myLead.statecode = &lt;span style="color: rgb(51, 153, 153);"&gt;LeadState&lt;/span&gt;.Qualified;&lt;br /&gt;myLead.statuscode = statusCode;&lt;/span&gt;&lt;/entity&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/780680930800461091-5071836696394309161?l=a-crm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-crm.blogspot.com/feeds/5071836696394309161/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=780680930800461091&amp;postID=5071836696394309161' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/5071836696394309161'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/5071836696394309161'/><link rel='alternate' type='text/html' href='http://a-crm.blogspot.com/2006/12/how-to-change-status-of-dynamic-entity.html' title='How to change status of the dynamic entity?'/><author><name>Dejan Dular</name><uri>http://www.blogger.com/profile/00222488358810521805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh5.google.com/dejan.dular/RVhJF39ZABI/AAAAAAAAAHQ/jYuz5pHLch8/s288/potatpljanjeavartar.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-780680930800461091.post-2134473655678605849</id><published>2006-12-07T11:18:00.000+01:00</published><updated>2006-12-07T11:22:08.134+01:00</updated><title type='text'>CRM on PlayStation Portable</title><content type='html'>Now you can tell your boss that you use your PSP for work and not for fun.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_QITJ50wfKVM/RXfq1BBJ3pI/AAAAAAAAAAM/AdXDMfwQ_tc/s1600-h/image001.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_QITJ50wfKVM/RXfq1BBJ3pI/AAAAAAAAAAM/AdXDMfwQ_tc/s400/image001.png" alt="" id="BLOGGER_PHOTO_ID_5005727707372838546" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/780680930800461091-2134473655678605849?l=a-crm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-crm.blogspot.com/feeds/2134473655678605849/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=780680930800461091&amp;postID=2134473655678605849' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/2134473655678605849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/2134473655678605849'/><link rel='alternate' type='text/html' href='http://a-crm.blogspot.com/2006/12/crm-on-playstation-portable.html' title='CRM on PlayStation Portable'/><author><name>Dejan Dular</name><uri>http://www.blogger.com/profile/00222488358810521805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh5.google.com/dejan.dular/RVhJF39ZABI/AAAAAAAAAHQ/jYuz5pHLch8/s288/potatpljanjeavartar.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_QITJ50wfKVM/RXfq1BBJ3pI/AAAAAAAAAAM/AdXDMfwQ_tc/s72-c/image001.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-780680930800461091.post-7264113992567424490</id><published>2006-11-24T09:09:00.000+01:00</published><updated>2006-11-24T09:17:24.140+01:00</updated><title type='text'>Free XML tools you need</title><content type='html'>&lt;span style="font-weight: bold;"&gt;XML Notepad 2007&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Three days ago Microsoft released a new version of XML Notepad. They fixed the bug in Vista installation and added some new features. Tree View is synchronized with Node Text View for quick editing of node names and values, drag/drop support for easy manipulation of the tree, instant XML schema validation and more.&lt;br /&gt;&lt;br /&gt;Get it here:&lt;br /&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=72d6aa49-787d-4118-ba5f-4f30fe913628&amp;DisplayLang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=72d6aa49-787d-4118-ba5f-4f30fe913628&amp;amp;DisplayLang=en&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;XPath Builder&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Another great free app is the XPath Builder. It allows you to quickly create XPaths, and display results. Intellisense supported!!!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.bubasoft.net/xpathbuilder/Xpathbuilder2.aspx"&gt;http://www.bubasoft.net/xpathbuilder/Xpathbuilder2.aspx&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/780680930800461091-7264113992567424490?l=a-crm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-crm.blogspot.com/feeds/7264113992567424490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=780680930800461091&amp;postID=7264113992567424490' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/7264113992567424490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/7264113992567424490'/><link rel='alternate' type='text/html' href='http://a-crm.blogspot.com/2006/11/free-xml-tools-you-need.html' title='Free XML tools you need'/><author><name>Dejan Dular</name><uri>http://www.blogger.com/profile/00222488358810521805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh5.google.com/dejan.dular/RVhJF39ZABI/AAAAAAAAAHQ/jYuz5pHLch8/s288/potatpljanjeavartar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-780680930800461091.post-7243111013276201899</id><published>2006-11-21T09:17:00.000+01:00</published><updated>2006-11-21T23:26:40.266+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='forms'/><category scheme='http://www.blogger.com/atom/ns#' term='relationship'/><title type='text'>Creating many to many relationships</title><content type='html'>OK. Don't be too excited. As I said in previous posts,  custom many-to-many relationships are not possible, but there is a way to create "quasi" m:n relationships.&lt;br /&gt;&lt;br /&gt;My idea was to create a many-to-many relationship in a way it is done in a standard SQL server. If you want to connect two entities with this type of relationship, you have to create a &lt;span style="font-style: italic;"&gt;connecting&lt;/span&gt; entity.&lt;br /&gt;Actually this is not so bad at all. The connecting entity can provide us with additional info about the relation.&lt;br /&gt;The form will have two additional tabs with IFRAME objects, where the related object forms will be displayed. You can see the results in these two pictures&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger2/1315/95297965185603/1600/771373/9a.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/x/blogger2/1315/95297965185603/320/61010/9a.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger2/1315/95297965185603/1600/388190/8a.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/x/blogger2/1315/95297965185603/320/707130/8a.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;I want to create a solution that is supported by CRM SDK, so it can be upgraded to next versions of Microsoft CRM.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;PLOT&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;We have two entities, a Contact and a custom entity Car. The Car entity represents a company car that we rent to our customers. We want to create a many-to-many relationship (a contract) between Car and Contact entities. In the relationship we want to store some additional info, let's say the contract number.&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;SOLUTION&lt;br /&gt;&lt;br /&gt;Entities&lt;br /&gt;&lt;/span&gt;At first we have to create a connecting relationship. I will name it "Contact car". The primary attribute is the contract number.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger2/1315/95297965185603/1600/558149/Drawing1.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/x/blogger2/1315/95297965185603/400/371549/Drawing1.png" alt="" border="0" /&gt;&lt;/a&gt;The Car entity's primary attribute is the license plate number, the Contact's primary attribute is full name, so we won't have a problem identifying the objects in the views.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Relationships&lt;br /&gt;&lt;/span&gt;Create two many-to-one relationships in the "Contact car" entity. I decided to create a parental relationship with Contact and "Referential, restrict delete" with Car. Restrict delete is important, otherwise you can lose data when deleting a car. Well... You can decide your own logic here.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Forms&lt;/span&gt;&lt;br /&gt;First add both lookup fields to the form (Car and Contact). Then add two tabs to the Contact car form named Car and Contact. Add an IFRAME in each tab. Name them IFRAME_Car and IFRAME_Contact. Set the URL to &lt;span style="font-style: italic;"&gt;about:blank&lt;/span&gt;.&lt;br /&gt;Now let's go to scripts:&lt;br /&gt;You'll need Car entity type code, which you can find in http://serverName/sdk/list.aspx&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Form&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt; onLoad&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;On each load of the page, a related entity must be displayed in the IFRAME:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;var contactLookupItem = new Array;&lt;br /&gt;contactLookupItem = crmForm.all.new_contactid.DataValue;&lt;br /&gt;&lt;br /&gt;if (contactLookupItem &amp;&amp;amp; contactLookupItem[0] != null)&lt;br /&gt;{&lt;br /&gt;var sCustUrl = "http://&lt;span style="color: rgb(255, 0, 0);"&gt;ServerName&lt;/span&gt;/sfa/conts/edit.aspx?ID=" + contactLookupItem[0].id;&lt;br /&gt;document.all.IFRAME_Contact.src = sCustUrl;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;var carLookupItem = new Array;&lt;br /&gt;carLookupItem = crmForm.all.new_carid.DataValue;&lt;br /&gt;&lt;br /&gt;if (carLookupItem &amp;&amp;amp; carLookupItem[0] != null)&lt;br /&gt;{&lt;br /&gt;var sCarUrl = "http://&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;ServerName&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;/userdefined/edit.aspx?id=" + carLookupItem[0].id + "&amp;etc=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;CarEntityTypeCode&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;";&lt;br /&gt;alert("REdirecting..." + sCarUrl);&lt;br /&gt;document.all.IFRAME_Car.src = sCarUrl;&lt;br /&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;We have to change the forms if lookup fields change:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Car lookup field &lt;/span&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;onChange&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;var oField = event.srcElement;&lt;br /&gt;&lt;br /&gt;var carLookupItem = new Array;&lt;br /&gt;carLookupItem = oField.DataValue;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;if (carLookupItem &amp;&amp;amp; carLookupItem[0] != null)&lt;br /&gt;{&lt;br /&gt;var sCarUrl = "http://&lt;span style="color: rgb(255, 0, 0);"&gt;ServerName&lt;/span&gt;/userdefined/edit.aspx?id=" + carLookupItem[0].id + "&amp;etc=&lt;span style="color: rgb(255, 0, 0);"&gt;EntityTypeCode&lt;/span&gt;";&lt;br /&gt;document.all.IFRAME_Car.src = sCarUrl;&lt;br /&gt;}&lt;/span&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;Contact lookup field &lt;/span&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;onChange&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;var oField = event.srcElement;&lt;br /&gt;&lt;br /&gt;var contactLookupItem = new Array;&lt;br /&gt;contactLookupItem = oField.DataValue;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;if (contactLookupItem &amp;&amp;amp; contactLookupItem[0] != null)&lt;br /&gt;{&lt;br /&gt;var sContactUrl = &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;"http://&lt;span style="color: rgb(255, 0, 0);"&gt;ServerName&lt;/span&gt;/sfa/conts/edit.aspx?ID=" + contactLookupItem[0].id;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;document.all.IFRAME_Car.src = sCarUrl;&lt;br /&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;Views&lt;/span&gt;&lt;/span&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;Update all Contact car views to display Car and Contact lookup, so users can quickly identify the records.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This is it.&lt;span style="font-style: italic; font-weight: bold;"&gt;&lt;/span&gt; I can't say it's GREAT solution, but it's still better than nothing. Users can see Contact's an Car's data in the same form. They can even change them, using the buttons in the IFRAME.&lt;br /&gt;&lt;br /&gt;You could hide the buttons in the IFRAME forms or disable the form (&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;document.all.IFRAME_Car.document.body.disabled = true;&lt;/span&gt;&lt;/span&gt;), but I haven't found a supported way to do this.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/780680930800461091-7243111013276201899?l=a-crm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-crm.blogspot.com/feeds/7243111013276201899/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=780680930800461091&amp;postID=7243111013276201899' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/7243111013276201899'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/7243111013276201899'/><link rel='alternate' type='text/html' href='http://a-crm.blogspot.com/2006/11/creating-many-to-many-relationships.html' title='Creating many to many relationships'/><author><name>Dejan Dular</name><uri>http://www.blogger.com/profile/00222488358810521805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh5.google.com/dejan.dular/RVhJF39ZABI/AAAAAAAAAHQ/jYuz5pHLch8/s288/potatpljanjeavartar.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-780680930800461091.post-5248178618835265436</id><published>2006-11-17T08:40:00.000+01:00</published><updated>2006-11-21T23:27:49.316+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='custom entity'/><category scheme='http://www.blogger.com/atom/ns#' term='limitation'/><title type='text'>Custom entity limitations</title><content type='html'>This is a summary from the book Working with Microsoft Dynamics CRM 3.0.&lt;br /&gt;&lt;br /&gt;A list what you &lt;span style="font-weight: bold;"&gt;can't&lt;/span&gt; do with custom entities:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;You cannot create many-to-many relationships between entities. Well... you cannot create many-to-many relationships at all&lt;/li&gt;&lt;li&gt;You can not merge two custom entities together&lt;/li&gt;&lt;li&gt;Export and import is possible only by using some third party tool. Microsoft CRM Data Migration Framework does not support custom entities&lt;/li&gt;&lt;li&gt;The Microsoft CRM system entities include a relationship to Customer in which users can select an Account or a Contact. For custom entities, you can specify a relationship with the Account entity and the Contact entity, but you cannot create a relationship to the composite Customer entity (in which users can select an Account or a Contact on a single lookup).&lt;/li&gt;&lt;li&gt;  Only one parent relationship per custom entity is allowed&lt;/li&gt;&lt;li&gt;Custom entities don't appear in an entity rollup&lt;/li&gt;&lt;li&gt;Organization-owned custom entities can't participate in Microsoft CRM workflow&lt;/li&gt;&lt;li&gt;You cannot create a custom relationship between an entity and itself&lt;/li&gt;&lt;li&gt; You could not create relationships in such a way that a form has two or more lookups that connect to the same custom entity.&lt;/li&gt;&lt;li&gt;Custom entities cannot have a parental relationship behavior to system entities&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/780680930800461091-5248178618835265436?l=a-crm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-crm.blogspot.com/feeds/5248178618835265436/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=780680930800461091&amp;postID=5248178618835265436' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/5248178618835265436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/5248178618835265436'/><link rel='alternate' type='text/html' href='http://a-crm.blogspot.com/2006/11/custom-entity-limitations.html' title='Custom entity limitations'/><author><name>Dejan Dular</name><uri>http://www.blogger.com/profile/00222488358810521805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh5.google.com/dejan.dular/RVhJF39ZABI/AAAAAAAAAHQ/jYuz5pHLch8/s288/potatpljanjeavartar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-780680930800461091.post-6469385800114902734</id><published>2006-11-16T10:40:00.000+01:00</published><updated>2006-11-16T11:00:00.793+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='datetime'/><category scheme='http://www.blogger.com/atom/ns#' term='picklist'/><category scheme='http://www.blogger.com/atom/ns#' term='duration'/><title type='text'>How to change duration or time picklist values</title><content type='html'>In previous post I suggested tweaking the form in the onLoad method to change the values of the duration or time picklist.&lt;br /&gt;&lt;br /&gt;Values are stored in a table that looks like this:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new;"&gt;&amp;lt;TABLE&amp;gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;TBODY&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;       &lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;TR&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;TD val=""&amp;gt;&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;/TD&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;/TR&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;       &lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;TR&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;TD val="1 minute"&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;1 minute&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;/TD&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;/TR&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;       &lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;TR&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;TD val="2 minutes"&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;2 minutes&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;/TD&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;/TR&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    ...&lt;br /&gt;    &lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;/TBODY&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;/TABLE&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;&lt;/span&gt; All you need is to change the table values so here's an example of the onLoad script that deletes all values from phone duration field and adds two new - 11 and 22 minutes to the list.&lt;br /&gt;Of course you can decide to delete only the vales you want or just add new values.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;//Get the duration field&lt;/span&gt;&lt;br /&gt;var oDuration = document.getElementById("actualdurationminutesSelect");&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;//Get the values table. The values table is the second table&lt;/span&gt;&lt;br /&gt;var oTable = oDuration.getElementsByTagName("TABLE")[1];&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;//Get the table TBODY element&lt;/span&gt;&lt;br /&gt;var oTbody = oTable.firstChild;&lt;br /&gt;&lt;br /&gt;var childs = oTbody.childNodes;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;//Delete all values&lt;/span&gt;&lt;br /&gt;for(var i=childs.length; i-- ; i&gt;= 0)&lt;br /&gt;{&lt;br /&gt;    oTbody.removeChild(childs(i));&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;//Create TR and TD elements&lt;/span&gt;&lt;br /&gt;var oTr = document.createElement("TR");&lt;br /&gt;var oTd = document.createElement("TD");&lt;br /&gt;&lt;br /&gt;oTd.innerText = "11 minutes"; &lt;span style="color: rgb(0, 153, 0);"&gt;//Set value&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;var oValue = document.createAttribute("val"); &lt;span style="color: rgb(0, 153, 0);"&gt;//Create attribute node&lt;/span&gt;&lt;br /&gt;oValue.value = "11 minutes"; &lt;span style="color: rgb(0, 153, 0);"&gt;//Set value of the attribute&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;//Add elements to the table&lt;/span&gt;&lt;br /&gt;oTd.attributes.setNamedItem(oValue);&lt;br /&gt;oTr.appendChild(oTd);&lt;br /&gt;oTbody.appendChild(oTr);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;//Repeat...&lt;/span&gt;&lt;br /&gt;oTr = document.createElement("TR");&lt;br /&gt;oTd = document.createElement("TD");&lt;br /&gt;&lt;br /&gt;oTd.innerText = "22 minutes"; //Set display value&lt;br /&gt;&lt;br /&gt;var oValue = document.createAttribute("val");&lt;br /&gt;oValue.value = "22 minutes";&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;oTd.attributes.setNamedItem(oValue);&lt;br /&gt;oTr.appendChild(oTd);&lt;br /&gt;oTbody.appendChild(oTr);&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/780680930800461091-6469385800114902734?l=a-crm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-crm.blogspot.com/feeds/6469385800114902734/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=780680930800461091&amp;postID=6469385800114902734' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/6469385800114902734'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/6469385800114902734'/><link rel='alternate' type='text/html' href='http://a-crm.blogspot.com/2006/11/how-to-change-duration-or-time-picklist.html' title='How to change duration or time picklist values'/><author><name>Dejan Dular</name><uri>http://www.blogger.com/profile/00222488358810521805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh5.google.com/dejan.dular/RVhJF39ZABI/AAAAAAAAAHQ/jYuz5pHLch8/s288/potatpljanjeavartar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-780680930800461091.post-8790821768617599706</id><published>2006-11-16T09:13:00.000+01:00</published><updated>2006-11-16T09:37:43.593+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='datetime'/><category scheme='http://www.blogger.com/atom/ns#' term='picklist'/><category scheme='http://www.blogger.com/atom/ns#' term='duration'/><title type='text'>Picklist hell</title><content type='html'>Here are three main problems with picklists developers should be aware of:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Deleting values from a picklist&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Mapping picklists&lt;/li&gt;&lt;li&gt;Picklists as duration or time fields&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:130%;"&gt;1. Deleting values from a picklist&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;When you are deleting values from a picklist be aware that the value will be deleted also from all records that contain the deleted value. You will loose data. Fortunately CRM 3.0 warns you before you attempt to do this.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;2. Mapping picklists&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;Value type of a picklist is integer. Every time you add a value to the picklist, CRM automatically assigns integer values. You cannot edit these values since they are read-only. So if you have two mapped picklists be sure to enter both picklists in the same order. If you made a mistake, delete the values from both picklists and add them again in the same order.&lt;br /&gt;&lt;br /&gt;Wouldn't it be nice to have some sort of "global" picklists that can be used in different entities and edited on one place?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;3. Picklists as duration or time fields&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;You can not add values to duration or date time fields. Users can click in the field and enter the value themselves.  The database stores the duration in whole minutes, so 14,25 minutes will be stored as 14 minutes.&lt;br /&gt;&lt;br /&gt;You can tweak the lists in onLoad script to add or delete values.&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/780680930800461091-8790821768617599706?l=a-crm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-crm.blogspot.com/feeds/8790821768617599706/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=780680930800461091&amp;postID=8790821768617599706' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/8790821768617599706'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/8790821768617599706'/><link rel='alternate' type='text/html' href='http://a-crm.blogspot.com/2006/11/picklist-hell.html' title='Picklist hell'/><author><name>Dejan Dular</name><uri>http://www.blogger.com/profile/00222488358810521805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh5.google.com/dejan.dular/RVhJF39ZABI/AAAAAAAAAHQ/jYuz5pHLch8/s288/potatpljanjeavartar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-780680930800461091.post-7729963826825505222</id><published>2006-11-15T10:46:00.000+01:00</published><updated>2006-11-16T09:38:06.995+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='search'/><category scheme='http://www.blogger.com/atom/ns#' term='lookup view'/><title type='text'>Search in lookup views</title><content type='html'>I've noticed users have problems searching custom fields in lookup views. Actually it does not have anything with custom fields.&lt;br /&gt;&lt;br /&gt;In a lookup view search is performed only on columns displayed in the view. Even if you add a column to "&lt;span style="font-weight: bold;"&gt;Find columns&lt;/span&gt;" list, you still have to add it to "&lt;span style="font-weight: bold;"&gt;Displayed columns&lt;/span&gt;" list.&lt;br /&gt;&lt;br /&gt;So if you want to find a Contact by his, let's say, birth date, you have to modify Contact's lookup view to display birth date &lt;span style="font-weight: bold;"&gt;and&lt;/span&gt; add the birth date column to "Find columns" list.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/780680930800461091-7729963826825505222?l=a-crm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-crm.blogspot.com/feeds/7729963826825505222/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=780680930800461091&amp;postID=7729963826825505222' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/7729963826825505222'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/7729963826825505222'/><link rel='alternate' type='text/html' href='http://a-crm.blogspot.com/2006/11/search-in-lookup-views.html' title='Search in lookup views'/><author><name>Dejan Dular</name><uri>http://www.blogger.com/profile/00222488358810521805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh5.google.com/dejan.dular/RVhJF39ZABI/AAAAAAAAAHQ/jYuz5pHLch8/s288/potatpljanjeavartar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-780680930800461091.post-6311485941461074472</id><published>2006-11-14T08:43:00.000+01:00</published><updated>2006-11-16T09:38:53.768+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='custom attributes'/><category scheme='http://www.blogger.com/atom/ns#' term='creating'/><category scheme='http://www.blogger.com/atom/ns#' term='mail merge'/><title type='text'>Creating new attributes -Take a moment and think again</title><content type='html'>Imagine you just discovered that you make an appointment with Mr Smith mostly on Mondays, Mrs Brown prefers Wednesdays etc.&lt;br /&gt;&lt;br /&gt;So you decide to put a picklist in the Contact form. You create a new attribute and name it new_PreferredAppointmentDay containing all days in a week. Problem solved!&lt;br /&gt;&lt;br /&gt;Not exactly!&lt;br /&gt;&lt;br /&gt;Everything looks great until you want to use mail merge in Outlook to make an appointment with Mr Smith on his preferred day. What happened to my custom attributes? Where is new_PreferredAppointmentDay?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;You cannot include custom attributes as Mail Merge fields.&lt;br /&gt;&lt;/span&gt;Take a look at the attributes list in the Contact entity. You will find the attribute named preferredappointmentdaycode.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;1. Take a close look at the predefined attributes in an entity&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Microsoft created about 15.000 attributes right out of the box. And they are there for you to use them. They are accessible through mail merge in Outlook and they save you the time you need to create custom attributes.&lt;br /&gt;Custom attributes are accessed through filtered views, so you can use them in other applications when you connect directly to the database, but not in Outlook mail merge.&lt;br /&gt;&lt;br /&gt;You can access the list of all entities and their attributes also with metadata browser on http://&lt;span style="font-style: italic;"&gt;crmServer&lt;/span&gt;&lt;crmserver&gt;/sdk/list.aspx&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;2. Create new attributes with care&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/crmserver&gt;&lt;ul&gt;&lt;li&gt;When creating new attribute it is really important to &lt;span style="font-weight: bold;"&gt;enter a description&lt;/span&gt; of the attribute. At least put your name and date in. Do try to enter a purpose for adding the attribute.&lt;/li&gt;&lt;li&gt;The &lt;span style="font-weight: bold;"&gt;name of the attribute&lt;/span&gt; should be short, but descriptive. For god's sake do not name it new_att1! The name must not be too long, otherwise you'll get lost in SQL queries.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;3. Limitations when modifying an attribute&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Maximum length&lt;/span&gt; - You cannot increase maximum length of the &lt;span style="font-style: italic;"&gt;nvarchar &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;or &lt;span style="font-style: italic;"&gt;ntext&lt;/span&gt; field. You can decrease it, but not increase. So think again when setting the limit of the text field length.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Picklist values&lt;/span&gt; - When you delete a value from picklist you can permanently loose your data. Microsoft CRM automatically deletes the picklist value from all records that used this value. Those records will display blank picklist.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/780680930800461091-6311485941461074472?l=a-crm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-crm.blogspot.com/feeds/6311485941461074472/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=780680930800461091&amp;postID=6311485941461074472' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/6311485941461074472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/6311485941461074472'/><link rel='alternate' type='text/html' href='http://a-crm.blogspot.com/2006/11/creating-new-attributes-take-moment-and.html' title='Creating new attributes -Take a moment and think again'/><author><name>Dejan Dular</name><uri>http://www.blogger.com/profile/00222488358810521805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh5.google.com/dejan.dular/RVhJF39ZABI/AAAAAAAAAHQ/jYuz5pHLch8/s288/potatpljanjeavartar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-780680930800461091.post-764369941875190183</id><published>2006-11-13T11:53:00.000+01:00</published><updated>2006-11-13T12:31:37.305+01:00</updated><title type='text'>So what is this "Afna" thing all about?</title><content type='html'>I ran into MS CRM 3.0 about six months ago and immediately I got addicted to it. Really simple interface for the end-users and flexible design for developers.&lt;br /&gt;&lt;br /&gt;Microsoft really did it's best to create a really useful out of a box platform that can be used in most companies almost (and I mean it) immediately. All basic entities, attributes and relationships are prepared for the "first use".&lt;br /&gt;&lt;br /&gt;The slogan for CRM 3.0 should be &lt;span style="font-weight: bold;"&gt;MS CRM 3.0 - Just add data.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Meanwhile I developed an application that imports data from any SQL database to CRM. I really suggest that you take a look at Michael Hohne's site (&lt;a href="http://www.stunnware.com/crm2"&gt;http://www.stunnware.com/crm2&lt;/a&gt;) and the newsgroups:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://groups.google.com/group/microsoft.public.crm"&gt;microsoft.public.crm&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://groups.google.com/group/microsoft.public.crm.developer"&gt;microsoft.public.crm.developer&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://groups.google.com/group/microsoft.public.crm.deployment"&gt;microsoft.public.crm.deployment&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Currently I am reading a great book from MS press: &lt;span style="font-weight: bold;"&gt;Working with Microsoft Dynamics CRM 3.0&lt;/span&gt;. (&lt;a href="http://www.amazon.com/Working-Microsoft-DynamicsTM-CRM-3-0/dp/0735622590"&gt;link to Amazon&lt;/a&gt;).&lt;br /&gt;I already went through all CRM at my own, had three day training, went deep into the database and CRM metadata, but this book still gives me new things and what is more important - very useful tips.&lt;br /&gt;&lt;br /&gt;I took a glance at &lt;b class="sans"&gt;Microsoft CRM 3 For Dummies.&lt;/b&gt;&lt;span class="sans"&gt; (&lt;a href="http://www.amazon.com/Microsoft-CRM-Dummies-Computer-Tech/dp/0471799459/"&gt;link to Amazon&lt;/a&gt;). Not disappointed, but not for developers. Nice to read if you really don't know what CRM really is.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I still owe you an explanation of the word "Afna". In my language we use it to describe the @ sign. But originally it means a person who is acting funny, usually making a fool of himself. So a play of words.&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/780680930800461091-764369941875190183?l=a-crm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-crm.blogspot.com/feeds/764369941875190183/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=780680930800461091&amp;postID=764369941875190183' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/764369941875190183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/780680930800461091/posts/default/764369941875190183'/><link rel='alternate' type='text/html' href='http://a-crm.blogspot.com/2006/11/so-what-is-this-afna-thing-all-about.html' title='So what is this &quot;Afna&quot; thing all about?'/><author><name>Dejan Dular</name><uri>http://www.blogger.com/profile/00222488358810521805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh5.google.com/dejan.dular/RVhJF39ZABI/AAAAAAAAAHQ/jYuz5pHLch8/s288/potatpljanjeavartar.jpg'/></author><thr:total>1</thr:total></entry></feed>
