<?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-7798772653646425208</id><updated>2011-07-08T19:55:13.464+04:00</updated><category term='русский'/><category term='sample code'/><category term='tools'/><category term='support'/><category term='SQL'/><category term='javascript'/><category term='TFS'/><category term='plug-in'/><category term='информация'/><category term='ISV'/><category term='fetch'/><category term='XML'/><category term='template'/><category term='forum'/><category term='размышления'/><category term='SDK'/><category term='ASP.NET'/><category term='grid'/><category term='c#'/><category term='download'/><category term='message'/><category term='trick'/><category term='tips'/><category term='administration'/><category term='SSRS'/><category term='email'/><category term='error'/><category term='customization'/><title type='text'>CRM Programmer</title><subtitle type='html'>Sergey Kravchenko about Microsoft Dynamics CRM 4.0 implementation and development.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>65</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-2489012361516054064</id><published>2010-07-27T19:00:00.002+04:00</published><updated>2010-07-28T12:57:24.596+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TFS'/><title type='text'>TFS 2010 SharePoint Project Portal 403 Forbidden</title><content type='html'>When you try to open or create the workitem through the project portal you'll get an 403 forbidden error. This is because you have not enough privileges to the folder Inetpub\wwwroot\bin at the TFS server machine.&lt;br /&gt;&lt;br /&gt;Just set the next rights to the all domain users.&lt;br /&gt;&lt;table style="width:auto;"&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://picasaweb.google.com/lh/photo/7Xy9_THhT_0hXKEWToix0w?feat=embedwebsite"&gt;&lt;img src="http://lh5.ggpht.com/_jQIK0YmmxwQ/TE7yhyyLkPI/AAAAAAAAAIE/mhUtltt7OQg/s800/tt_2.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-family:arial,sans-serif; font-size:11px; text-align:right"&gt;From &lt;a href="http://picasaweb.google.com/105195708958292872735/ITBlogPosts?feat=embedwebsite"&gt;IT Blog Posts&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Via &lt;a href="http://www.cnblogs.com/patrick/archive/2010/04/30/1725167.html"&gt;http://www.cnblogs.com/patrick/archive/2010/04/30/1725167.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-2489012361516054064?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/2489012361516054064/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=2489012361516054064' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/2489012361516054064'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/2489012361516054064'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2010/07/tfs-2010-sharepoint-project-portal-403.html' title='TFS 2010 SharePoint Project Portal 403 Forbidden'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_jQIK0YmmxwQ/TE7yhyyLkPI/AAAAAAAAAIE/mhUtltt7OQg/s72-c/tt_2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-1406972080255891330</id><published>2010-06-22T19:33:00.006+04:00</published><updated>2010-06-23T12:35:35.220+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><title type='text'>How to hide a section or field by picklist value</title><content type='html'>That code snippet will hides a section by name(label) or by label of any field wich is in this section.&lt;br /&gt;&lt;pre class="brush:js"&gt;if(crmForm.all.new_1!=null)&lt;br /&gt;{&lt;br /&gt; var oField = crmForm.all.new_1;&lt;br /&gt; &lt;br /&gt; // field to hide&lt;br /&gt; var FieldToHide;&lt;br /&gt; if(document.getElementById("IDENT") != null)&lt;br /&gt; {&lt;br /&gt;  FieldToHide = document.getElementById("IDENT");&lt;br /&gt;  FieldToHide.style.display = "block";  &lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; // section to hide&lt;br /&gt; var td = document.getElementsByTagName("td");&lt;br /&gt; var tableH;&lt;br /&gt; for(var i=0; i&amp;lt;td.length; i++)&lt;br /&gt; {&lt;br /&gt;  // enter the correct section name&lt;br /&gt;  if(td[i].innerText == "Section name")&lt;br /&gt;  {&lt;br /&gt;   tableH = td[i].parentNode.parentNode.parentNode;&lt;br /&gt;   tableH.style.display = "block";&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; // here set the needed picklist value&lt;br /&gt; if(oField.DataValue == 1)&lt;br /&gt; {&lt;br /&gt;  // field to hide&lt;br /&gt;  if(FieldToHide != null)&lt;br /&gt;  {&lt;br /&gt;   FieldToHide.style.display = "none";  &lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt; else&lt;br /&gt; if(oField.DataValue == 3)&lt;br /&gt; {&lt;br /&gt;  // section to hide&lt;br /&gt;  if(tableH != null)&lt;br /&gt;  {&lt;br /&gt;   tableH.style.display = "none";&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-1406972080255891330?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/1406972080255891330/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=1406972080255891330' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/1406972080255891330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/1406972080255891330'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2010/06/how-to-hide-section-or-field-by.html' title='How to hide a section or field by picklist value'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-5649548264642931080</id><published>2010-06-10T19:03:00.002+04:00</published><updated>2010-06-10T19:03:07.390+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><title type='text'>Tooltip</title><content type='html'>To add a tooltip at some field on form, jast add next snippet with your changes to form On Load&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:js"&gt;var ele = document.getElementById("firstname_c");&lt;br /&gt;ele.title = "Name Name Name!";&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-5649548264642931080?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/5649548264642931080/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=5649548264642931080' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/5649548264642931080'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/5649548264642931080'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2010/06/tooltip.html' title='Tooltip'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-6378406560231485589</id><published>2010-02-27T13:10:00.002+03:00</published><updated>2010-02-27T13:10:49.749+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Get the localized names of all entities</title><content type='html'>&lt;pre class="brush:sql"&gt;select  ObjectTypeCode, Name, LogicalName, l.Label&lt;br /&gt;from MetadataSchema.Entity e left join&lt;br /&gt;MetadataSchema.LocalizedLabel l on e.EntityId=l.ObjectId&lt;br /&gt;where l.ObjectColumnName='LocalizedName'&lt;br /&gt; and l.CustomizationLevel=1&lt;br /&gt;&lt;br /&gt;union&lt;br /&gt;&lt;br /&gt;select  ObjectTypeCode, Name, LogicalName, l.Label&lt;br /&gt;from MetadataSchema.Entity e left join&lt;br /&gt;MetadataSchema.LocalizedLabel l on e.EntityId=l.ObjectId&lt;br /&gt;where l.ObjectColumnName='LocalizedName'&lt;br /&gt; and l.CustomizationLevel=0 &lt;br /&gt; and ObjectTypeCode not in &lt;br /&gt;  ( select  ObjectTypeCode&lt;br /&gt;   from MetadataSchema.Entity e left join&lt;br /&gt;   MetadataSchema.LocalizedLabel l on e.EntityId=l.ObjectId&lt;br /&gt;   where l.ObjectColumnName='LocalizedName'&lt;br /&gt;    and l.CustomizationLevel=1&lt;br /&gt;  )&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-6378406560231485589?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/6378406560231485589/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=6378406560231485589' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/6378406560231485589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/6378406560231485589'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2010/02/get-localized-names-of-all-entities.html' title='Get the localized names of all entities'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-2318693118656246868</id><published>2010-02-27T13:09:00.003+03:00</published><updated>2010-02-27T13:17:19.404+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Get the params of all localized attributes and all picklist values</title><content type='html'>&lt;pre class="brush:sql"&gt;SELECT&lt;br /&gt; e.Name as EntityName&lt;br /&gt; ,l.Label as 'Наименование атрибута', a.LogicalName ,at.Description as 'Тип атрибута' ,a.AttributeLogicalTypeId&lt;br /&gt; ,apv.Value as 'Значения пиклиста', lp.Label as 'Наименования пиклиста'&lt;br /&gt; ,[AttributeRequiredLevelId]&lt;br /&gt; ,[MaxLength]&lt;br /&gt; ,[MinValue]&lt;br /&gt; ,[MaxValue]&lt;br /&gt; ,LookupClass&lt;br /&gt; ,LookupStyle&lt;br /&gt; ,LookupBrowse&lt;br /&gt;FROM&lt;br /&gt; [NaviconGroup_MSCRM].[MetadataSchema].[Attribute] a&lt;br /&gt; join MetadataSchema.Entity e on e.EntityId=a.EntityId&lt;br /&gt; join MetadataSchema.AttributeTypes at on at.AttributeTypeId=a.AttributeTypeId&lt;br /&gt; join MetadataSchema.LocalizedLabel l on l.ObjectId=a.AttributeId and l.ObjectColumnName='DisplayName'&lt;br /&gt; left join MetadataSchema.AttributePicklistValue apv on apv.AttributeId=a.AttributeId&lt;br /&gt; left join MetadataSchema.LocalizedLabel lp on lp.ObjectId=apv.AttributePicklistValueId&lt;br /&gt;order by EntityName, l.Label, at.Description,apv.Value&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-2318693118656246868?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/2318693118656246868/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=2318693118656246868' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/2318693118656246868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/2318693118656246868'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2010/02/get-params-of-all-attrib-and-all.html' title='Get the params of all localized attributes and all picklist values'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-5523635025294022858</id><published>2010-02-04T19:22:00.002+03:00</published><updated>2010-02-05T12:38:44.957+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><title type='text'>Get Picklist Value By Picklist Name</title><content type='html'>I wrote some method to get picklist value by knowing picklist name.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:c#"&gt;namespace test&lt;br /&gt;{&lt;br /&gt;    public class CrmServiceProvider&lt;br /&gt;    {&lt;br /&gt;&lt;br /&gt;  private WebMetadataService.MetadataService _MetaService = null;&lt;br /&gt;  &lt;br /&gt;  ///* Create a MetadataService end point */&lt;br /&gt;        private WebMetadataService.MetadataService MetaService&lt;br /&gt;        {&lt;br /&gt;            get&lt;br /&gt;            {&lt;br /&gt;                if (_MetaService == null)&lt;br /&gt;                {&lt;br /&gt;                    _MetaService = new WebMetadataService.MetadataService();&lt;br /&gt;                    _MetaService.Url = "http://localhost/mscrmservices/2007/metadataservice.asmx";&lt;br /&gt;&lt;br /&gt;                    // Use a special user credentials&lt;br /&gt;     NetworkCredential cred = new NetworkCredential();&lt;br /&gt;                    cred.Domain = ConfigurationManager.AppSettings["Domain"];&lt;br /&gt;                    cred.UserName = ConfigurationManager.AppSettings["UserName"];&lt;br /&gt;                    cred.Password = ConfigurationManager.AppSettings["PassWord"];&lt;br /&gt;&lt;br /&gt;                    _MetaService.UseDefaultCredentials = false;&lt;br /&gt;                    _MetaService.Credentials = cred;&lt;br /&gt;&lt;br /&gt;                    _MetaService.UnsafeAuthenticatedConnectionSharing = true;&lt;br /&gt;&lt;br /&gt;                    WebMetadataService.CrmAuthenticationToken token = new WebMetadataService.CrmAuthenticationToken();&lt;br /&gt;                    token.AuthenticationType = 0;&lt;br /&gt;                    token.OrganizationName = ConfigurationManager.AppSettings["Organization"];&lt;br /&gt;&lt;br /&gt;                    _MetaService.CrmAuthenticationTokenValue = token;&lt;br /&gt;                }&lt;br /&gt;                return _MetaService;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  public int GetPicklistValueByPicklistName(string PicklistName, string EntityLogicalName, string LogicalName)&lt;br /&gt;  {&lt;br /&gt;   int retval = -1;&lt;br /&gt;   &lt;br /&gt;   /* Retrieve the attribute metadata */&lt;br /&gt;   WebMetadataService.RetrieveAttributeRequest attributeRequest = new WebMetadataService.RetrieveAttributeRequest();&lt;br /&gt;   attributeRequest.EntityLogicalName = EntityLogicalName;&lt;br /&gt;   attributeRequest.LogicalName = LogicalName; //picklist&lt;br /&gt;&lt;br /&gt;   WebMetadataService.RetrieveAttributeResponse attributeResponse =&lt;br /&gt;      (WebMetadataService.RetrieveAttributeResponse)MetaService.Execute(attributeRequest);&lt;br /&gt;&lt;br /&gt;   /* Cast the attribute metadata to a picklist metadata */&lt;br /&gt;   WebMetadataService.PicklistAttributeMetadata picklist =&lt;br /&gt;      (WebMetadataService.PicklistAttributeMetadata)attributeResponse.AttributeMetadata;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   foreach (WebMetadataService.Option op in picklist.Options)&lt;br /&gt;   {&lt;br /&gt;    if (op.Label.UserLocLabel.Label == PicklistName)&lt;br /&gt;     retval = op.Value.Value;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   return retval;&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;To call this method use the next construction:&lt;br /&gt;&lt;pre class="brush:c#"&gt;int psv = GetPicklistValueByPaymentSystemName(categorycode, "account", "accountcategorycode");&lt;br /&gt;if (psv &gt; 0)&lt;br /&gt;{&lt;br /&gt; acc.accountcategorycode = new Picklist();&lt;br /&gt; acc.accountcategorycode.Value = psv;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-5523635025294022858?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/5523635025294022858/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=5523635025294022858' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/5523635025294022858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/5523635025294022858'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2010/02/get-picklist-value-by-picklist-name.html' title='Get Picklist Value By Picklist Name'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-201070467194872359</id><published>2009-12-21T16:51:00.002+03:00</published><updated>2009-12-21T16:53:59.214+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='trick'/><title type='text'>Upgrade of javascript function to hide "Add Existing ..." button</title><content type='html'>I improved the source code for one of my previous post — &lt;a href="http://crmpro.blogspot.com/2009/08/remove-add-existing-button-from.html"&gt;Remove 'Add Existing...' button from associated view entities form&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:js"&gt;function HideAssociatedViewButtons(areaPrefix, loadAreaId, buttonTitles,addAreaParams){&lt;br /&gt; var navElement = document.getElementById(areaPrefix+loadAreaId); &lt;br /&gt;   if (navElement != null)    {&lt;br /&gt;        navElement.onclick = function LoadAreaOverride(){&lt;br /&gt;            if(addAreaParams.length&gt;0)&lt;br /&gt;    loadArea('area'+loadAreaId, addAreaParams[0]);&lt;br /&gt;   else&lt;br /&gt;    loadArea('area'+loadAreaId);&lt;br /&gt;            var iframeid='area' + loadAreaId + 'Frame';&lt;br /&gt;   HideViewButtons(document.getElementById(iframeid), buttonTitles);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;function HideViewButtons(Iframe, buttonTitles) { &lt;br /&gt;    if (Iframe != null ) {&lt;br /&gt;  Iframe.onreadystatechange = function HideTitledButtons() { &lt;br /&gt;            if (Iframe.readyState == 'complete') { &lt;br /&gt;                var iFrame = frames[window.event.srcElement.id]; &lt;br /&gt;                var liElements = iFrame.document.getElementsByTagName('li');&lt;br /&gt; &lt;br /&gt;    for (var j = 0; j &lt; buttonTitles.length; j++) { &lt;br /&gt;                    for (var i = 0; i &lt; liElements.length; i++) { &lt;br /&gt;                        if (liElements[i].getAttribute('title') == buttonTitles[j]) { &lt;br /&gt;                            liElements[i].style.display = 'none'; &lt;br /&gt;                            break; &lt;br /&gt;                        }&lt;br /&gt;                    } &lt;br /&gt;                } &lt;br /&gt;            } &lt;br /&gt;        } &lt;br /&gt;    }&lt;br /&gt;} &lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-201070467194872359?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/201070467194872359/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=201070467194872359' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/201070467194872359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/201070467194872359'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2009/12/upgrade-of-javascript-function-to-hide.html' title='Upgrade of javascript function to hide &quot;Add Existing ...&quot; button'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-4163287289598875754</id><published>2009-12-03T18:52:00.001+03:00</published><updated>2009-12-03T18:54:37.104+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><title type='text'>On form load set some selected value for related entity pick-list</title><content type='html'>I had to set the value for related entity pick-list — filter of date for Activities of some account, like it was default Selected value.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:javascript"&gt;SelectArea('Activities', 'scheduledend');&lt;br /&gt;SelectArea('ActivityHistory', 'actualend');&lt;br /&gt;&lt;br /&gt;function SelectArea(loadAreaId, selectId)&lt;br /&gt;{&lt;br /&gt;var navElement = document.getElementById('nav'+loadAreaId); &lt;br /&gt;if (navElement != null) &lt;br /&gt;{&lt;br /&gt; navElement.onclick = function LoadAreaOverride() {&lt;br /&gt;  loadArea('area'+loadAreaId);&lt;br /&gt;  var iframeid = 'area'+loadAreaId + 'Frame';&lt;br /&gt;  var Iframe=document.getElementById(iframeid);&lt;br /&gt;  if (Iframe != null ) {&lt;br /&gt;   Iframe.onreadystatechange = function SetAllasDefault() { &lt;br /&gt;    if (Iframe.readyState == 'complete') { &lt;br /&gt;     var iFrame = frames[window.event.srcElement.id]; &lt;br /&gt;     var oSelect = iFrame.document.getElementById(selectId);&lt;br /&gt;     var oOption = oSelect.options[oSelect.options.length-1];&lt;br /&gt;     oOption.selected = true;&lt;br /&gt;     oSelect.FireOnChange();&lt;br /&gt;    }&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  &lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Put at form OnLoad() event;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-4163287289598875754?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/4163287289598875754/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=4163287289598875754' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/4163287289598875754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/4163287289598875754'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2009/12/on-form-load-set-selected-for-related.html' title='On form load set some selected value for related entity pick-list'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-3891033314198373562</id><published>2009-11-13T16:24:00.002+03:00</published><updated>2009-11-13T16:35:24.217+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='trick'/><title type='text'>Passing parameters between MS CRM plugins</title><content type='html'>I was needed to pass a variable from one plugin to another. If you have a two plugin at pre and post stage registered for on entity, then you can use a &lt;a href="http://msdn.microsoft.com/en-us/library/cc151094.aspx"&gt;SharedVariables&lt;/a&gt; context property. But, if every plugins is a different assembly, and they are registered for a different entities... So, when the first plugin is firing, the second, which is starting after that, needed to know some information for redirecting it logic to another way.&lt;br /&gt;&lt;br /&gt;I had created some common assembly with helper methods and called it "Helper". Then I had created a static class with static variable and had put the value into it, at the first plugin execution runtime. In the second plugin I just get the value from the static common variable.&lt;br /&gt;&lt;br /&gt;And nothing about read\write DB operations.&lt;br /&gt;Helper assembly.&lt;br /&gt;&lt;pre class="brush:c#"&gt;namespace Helper&lt;br /&gt;{&lt;br /&gt;    public static class Keeper&lt;br /&gt;    {&lt;br /&gt;        private static bool _UpdateOppAfterHistory = true;&lt;br /&gt;        public static bool UpdateOppAfterHistory &lt;br /&gt;        {&lt;br /&gt;            get { return _UpdateOppAfterHistory; }&lt;br /&gt;            set { _UpdateOppAfterHistory = value; }&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;    }&lt;br /&gt;    public class OpportunityHelper&lt;br /&gt;    { ... }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;First firing plugin code&lt;br /&gt;&lt;pre class="brush:c#"&gt;Keeper.UpdateOppAfterHistory = false;&lt;br /&gt;&lt;br /&gt;OpportunityHelper.CreateOpportunityHistory(Opp,crmService);&lt;br /&gt;                &lt;br /&gt;// removing the flag to the back&lt;br /&gt;Keeper.UpdateOppAfterHistory = true;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Second firing plugin code&lt;br /&gt;&lt;pre class="brush:c#"&gt;// common shared variable analysis&lt;br /&gt;bool UpdateOppAfterHistory = Keeper.UpdateOppAfterHistory;&lt;br /&gt;if (UpdateOppAfterHistory)&lt;br /&gt;{ ... }&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-3891033314198373562?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/3891033314198373562/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=3891033314198373562' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/3891033314198373562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/3891033314198373562'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2009/11/passing-parameters-between-ms-crm.html' title='Passing parameters between MS CRM plugins'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-7096248982156654714</id><published>2009-11-10T12:37:00.000+03:00</published><updated>2009-11-10T12:37:49.837+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><title type='text'>How to hide an items of drop-down list?</title><content type='html'>"We should not be able to choose some steps of Opportunity History, if the opportunity has no quotes or sales orders." - that was they said.&lt;br /&gt;&lt;br /&gt;And that was I wrote.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:javascript"&gt;var oService = null;&lt;br /&gt;var oppid = null;&lt;br /&gt;&lt;br /&gt;function FormOnLoad()&lt;br /&gt;{&lt;br /&gt; oService = new Ascentium_CrmService(null, null);&lt;br /&gt; &lt;br /&gt; var oParentCrmForm = window.opener.parent.document.all.crmForm;&lt;br /&gt; if(oParentCrmForm)&lt;br /&gt; { &lt;br /&gt;  oppid = oParentCrmForm.ObjectId;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; HideComboboxItems();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;window.HideComboboxItems = function()&lt;br /&gt;{&lt;br /&gt;var newstep = document.getElementById("new_step");&lt;br /&gt;if(newstep)&lt;br /&gt;{&lt;br /&gt; // checking opportunity for quotes&lt;br /&gt; var sFetchXml ='&amp;lt;fetch mapping="logical" aggregate="true" version="1.0"&gt;&amp;lt;entity name="quote"&gt;&amp;lt;attribute name="quoteid" aggregate="count" alias="count" /&gt;'+&lt;br /&gt;  '&amp;lt;filter&gt;&amp;lt;condition attribute="opportunityid" operator="eq" value="'+oppid+'" /&gt;&amp;lt;/filter&gt;&amp;lt;/entity&gt;&amp;lt;/fetch&gt;';&lt;br /&gt; &lt;br /&gt; var aoFetchResult = oService.Fetch(sFetchXml); &lt;br /&gt; var quoteCount = 0;&lt;br /&gt;&lt;br /&gt;    if(aoFetchResult.length &gt; 0)&lt;br /&gt;    {&lt;br /&gt;       quoteCount = aoFetchResult[0].attributes["count"].value;&lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt; // if no qoutes, then hiding items 4,5,6,7 of dropdown list&lt;br /&gt; if(quoteCount == 0 )&lt;br /&gt; {&lt;br /&gt;  var allDropDownElements = newstep.childNodes;&lt;br /&gt;  var lastnodevalue = allDropDownElements.length;&lt;br /&gt;  for(var i=lastnodevalue; i &gt;= 4; i--)&lt;br /&gt;  {&lt;br /&gt;    newstep.options.remove(i);&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt; else&lt;br /&gt; {&lt;br /&gt;  // if there is some qoutes, then checking for salesorders&lt;br /&gt;  var sFetchXml ='&amp;lr;fetch mapping="logical" aggregate="true" version="1.0"&gt;&amp;lt;entity name="salesorder"&gt;&amp;lt;attribute name="salesorderid" aggregate="count" alias="count" /&gt;'+&lt;br /&gt;   '&amp;lt;filter&gt;&amp;lt;condition attribute="opportunityid" operator="eq" value="'+oppid+'" /&gt;&amp;lt;/filter&gt;&amp;lt;/entity&gt;&amp;lt;/fetch&gt;';&lt;br /&gt;  &lt;br /&gt;  var aoFetchResult = oService.Fetch(sFetchXml); &lt;br /&gt;  var SOCount = 0;&lt;br /&gt;&lt;br /&gt;  if(aoFetchResult.length &gt; 0)&lt;br /&gt;  {&lt;br /&gt;     SOCount = aoFetchResult[0].attributes["count"].value;&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  // if no salesorders, then hiding items 6,7&lt;br /&gt;  if(SOCount == 0)&lt;br /&gt;  {&lt;br /&gt;   var allDropDownElements = newstep.childNodes;&lt;br /&gt;   var lastnodevalue = allDropDownElements.length;&lt;br /&gt;   for(var i=lastnodevalue; i &gt;=6; i--)&lt;br /&gt;   {&lt;br /&gt;     newstep.options.remove(i);&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-7096248982156654714?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/7096248982156654714/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=7096248982156654714' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/7096248982156654714'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/7096248982156654714'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2009/11/how-to-hide-items-of-drop-down-list.html' title='How to hide an items of drop-down list?'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-1085693255111993224</id><published>2009-11-09T17:24:00.000+03:00</published><updated>2009-11-09T17:24:40.417+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plug-in'/><category scheme='http://www.blogger.com/atom/ns#' term='trick'/><title type='text'>Salesorder Fulfill state</title><content type='html'>I was trying to catch the Fulfill state of sales order and my try was successful, with registering plugin to Update message at Child pipeline. But there was a one little problem - you can't get the salesorderdetail thru service. I don't know why, but the simple code like in "Example 1" was falling down with Generic SQL error x80044150.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:c#"&gt;//  Example 1&lt;br /&gt;QueryByAttribute qba = new QueryByAttribute();&lt;br /&gt;qba.EntityName = EntityName.salesorderdetail.ToString();&lt;br /&gt;qba.ColumnSet = new AllColumns();&lt;br /&gt;qba.Attributes = new string[] { "salesorderid" };&lt;br /&gt;qba.Values = new object[] { soid };&lt;br /&gt;BusinessEntityCollection bec = crmService.RetrieveMultiple(qba);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Then I was switch on the Fulfill Sdk Message and everything start working fine!&lt;br /&gt;&lt;blockquote&gt;1. open up the SdkMessage view, filter by Name and find the SdkMessageId&lt;br /&gt;2. open up the SdkMessageFilter view, filter by SdkMessageId you got from step 1.&lt;br /&gt;3. change IsCustomProcessingStepAllowed to 'True'&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;pre class="brush:sql"&gt;update dbo.SdkMessageFilter&lt;br /&gt;set IsCustomProcessingStepAllowed=1&lt;br /&gt;where SdkMessageId=&lt;br /&gt;(select top 1 SdkMessageId from dbo.SdkMessage where name ='Fulfill')&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I have a question, why the Fulfill message has been unplugged from customization?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-1085693255111993224?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/1085693255111993224/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=1085693255111993224' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/1085693255111993224'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/1085693255111993224'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2009/11/salesorder-fulfill-state.html' title='Salesorder Fulfill state'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-1463178050409727500</id><published>2009-11-02T17:01:00.001+03:00</published><updated>2009-11-02T17:02:13.890+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><title type='text'>Parse XML date in CRM date with Javascript</title><content type='html'>A JavaScript function to parse an XML (ISO-8601) date string (e.g., "2008-01-18") that returns a JavaScript Date object.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:javascript"&gt;// parsing&lt;br /&gt;function parseDate(xmlDate)&lt;br /&gt;{&lt;br /&gt;      if (!/^[0-9]{4}\-[0-9]{2}\-[0-9]{2}/.test(xmlDate)) {&lt;br /&gt;           throw new RangeError("xmlDate must be in ISO-8601 format YYYY-MM-DD.");&lt;br /&gt;      }&lt;br /&gt;      return new Date(xmlDate.substring(0,4), xmlDate.substring(5,7)-1, xmlDate.substring(8,10));&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// and using&lt;br /&gt;if(retrievedOpp.attributes["estimatedclosedate"] != null &amp;&amp; retrievedOpp.attributes["estimatedclosedate"] != undefined){&lt;br /&gt;     crmForm.all.new_estimatedclosedate.DataValue = parseDate(retrievedOpp.attributes["estimatedclosedate"].value);}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;Source &lt;a href="http://dev.ektron.com/blogs.aspx?id=14140"&gt;http://dev.ektron.com/blogs.aspx?id=14140&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-1463178050409727500?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/1463178050409727500/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=1463178050409727500' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/1463178050409727500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/1463178050409727500'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2009/11/javascript-function-to-parse-xml-iso.html' title='Parse XML date in CRM date with Javascript'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-6469428685749865426</id><published>2009-10-29T13:30:00.005+03:00</published><updated>2009-10-29T14:47:18.974+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plug-in'/><title type='text'>How to determine on which pipeline a plugin is executing - Parent or Childe</title><content type='html'>The &lt;i&gt;InvocationSource&lt;/i&gt; &lt;b&gt;property &lt;/b&gt;is an integer value that you can use to determine whether the current plug-in is running in a child pipeline. &lt;br /&gt;&lt;br /&gt;&lt;i&gt;MessageInvocationSource&lt;/i&gt; Values&lt;br /&gt;&lt;table cellspacing="7px" &gt;&lt;tr style="background:#AAAAAA none repeat scroll 0 0;"&gt;&lt;td &gt;Field&lt;/td&gt;&lt;td&gt;Value&lt;/td&gt;&lt;td&gt;Description&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Child&lt;/td&gt;&lt;td&gt; 1 &lt;/td&gt;&lt;td&gt;Specifies a child pipeline&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Parent&lt;/td&gt;&lt;td&gt; 0 &lt;/td&gt;&lt;td&gt;Specifies a parent pipeline&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-6469428685749865426?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/6469428685749865426/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=6469428685749865426' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/6469428685749865426'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/6469428685749865426'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2009/10/how-to-determine-on-which-pipeline.html' title='How to determine on which pipeline a plugin is executing - Parent or Childe'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-7716758091549542876</id><published>2009-10-20T12:15:00.005+04:00</published><updated>2009-10-20T14:03:58.336+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='fetch'/><category scheme='http://www.blogger.com/atom/ns#' term='sample code'/><title type='text'>MS CRM Fetch and Retrieve from javascript</title><content type='html'>This code snippet was writing exactly like recommended in MSCRM SDK 4.09.&lt;br /&gt;I was put it in OnLoad() event of my account form, and in the lookup field(at my example - new_postalcodeid) at OnChange() event I was calling my function.&lt;br /&gt;&lt;br /&gt;There is two function that are doing the same work but with different methods.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:javascript"&gt;var authenticationHeader = GenerateAuthenticationHeader();&lt;br /&gt;crmForm.all.address1_city.ForceSubmit = true;&lt;br /&gt;&lt;br /&gt;window.GetRegionByIndex_Retrieve = function()  &lt;br /&gt;{  &lt;br /&gt; &lt;br /&gt;if (crmForm.all.new_postalcodeid.DataValue == null)&lt;br /&gt;{&lt;br /&gt;  crmForm.all.address1_city.Disabled = false;&lt;br /&gt; crmForm.all.address1_city.DataValue = "";&lt;br /&gt; return;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;var lookupItem = new Array;&lt;br /&gt;&lt;br /&gt;lookupItem = crmForm.all.new_postalcodeid.DataValue;&lt;br /&gt;if(lookupItem[0] != null)&lt;br /&gt;{&lt;br /&gt; // Prepare the SOAP message.&lt;br /&gt; var xml = "&amp;lt;?xml version='1.0' encoding='utf-8'?&amp;gt;"+ &lt;br /&gt; "&amp;lt;soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'"+&lt;br /&gt; " xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'"+&lt;br /&gt; " xmlns:xsd='http://www.w3.org/2001/XMLSchema'&amp;gt;"+ &lt;br /&gt; authenticationHeader+ &lt;br /&gt; "&amp;lt;soap:Body&amp;gt;"+ &lt;br /&gt; "&amp;lt;Retrieve xmlns='http://schemas.microsoft.com/crm/2007/WebServices'&amp;gt;"+ &lt;br /&gt; "&amp;lt;entityName&amp;gt;new_postalcode&amp;lt;/entityName&amp;gt;"+ &lt;br /&gt; "&amp;lt;id&amp;gt;"+lookupItem[0].id+"&amp;lt;/id&amp;gt;"+ &lt;br /&gt; "&amp;lt;columnSet xmlns:q1='http://schemas.microsoft.com/crm/2006/Query' xsi:type='q1:ColumnSet'&amp;gt;"+ &lt;br /&gt; "&amp;lt;q1:Attributes&amp;gt;"+ &lt;br /&gt; "&amp;lt;q1:Attribute&amp;gt;new_regcityarea&amp;lt;/q1:Attribute&amp;gt;"+ &lt;br /&gt; "&amp;lt;/q1:Attributes&amp;gt;"+ &lt;br /&gt; "&amp;lt;/columnSet&amp;gt;"+ &lt;br /&gt; "&amp;lt;/Retrieve&amp;gt;"+ &lt;br /&gt; "&amp;lt;/soap:Body&amp;gt;"+ &lt;br /&gt; "&amp;lt;/soap:Envelope&amp;gt;";&lt;br /&gt; // Prepare the xmlHttpObject and send the request.&lt;br /&gt; var xHReq = new ActiveXObject("Msxml2.XMLHTTP");&lt;br /&gt; xHReq.Open("POST", "/mscrmservices/2007/CrmService.asmx", false);&lt;br /&gt; xHReq.setRequestHeader("SOAPAction","http://schemas.microsoft.com/crm/2007/WebServices/Retrieve");&lt;br /&gt; xHReq.setRequestHeader("Content-Type", "text/xml; charset=utf-8");&lt;br /&gt; xHReq.setRequestHeader("Content-Length", xml.length);&lt;br /&gt; xHReq.send(xml);&lt;br /&gt; // Capture the result.&lt;br /&gt; var resultXml = xHReq.responseXML;&lt;br /&gt;&lt;br /&gt; // Check for errors.&lt;br /&gt; var errorCount = resultXml.selectNodes('//error').length;&lt;br /&gt; if (errorCount != 0)&lt;br /&gt; {&lt;br /&gt; var msg = resultXml.selectSingleNode('//description').nodeTypedValue;&lt;br /&gt; alert(msg);&lt;br /&gt; }&lt;br /&gt; // Display the retrieved value.&lt;br /&gt; else&lt;br /&gt; {&lt;br /&gt; crmForm.all.address1_city.DataValue = resultXml.selectSingleNode("//q1:new_regcityarea").nodeTypedValue;&lt;br /&gt; crmForm.all.address1_city.Disabled = true;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;window.GetRegionByIndex_Fetch = function (){&lt;br /&gt;if (crmForm.all.new_postalcodeid.DataValue == null)&lt;br /&gt;{&lt;br /&gt;  crmForm.all.address1_city.Disabled = false;&lt;br /&gt; crmForm.all.address1_city.DataValue = "";&lt;br /&gt; return;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;var lookupItem = new Array;&lt;br /&gt;&lt;br /&gt;lookupItem = crmForm.all.new_postalcodeid.DataValue;&lt;br /&gt;if(lookupItem[0] != null)&lt;br /&gt;{&lt;br /&gt; var xml = "&amp;lt;?xml version='1.0' encoding='utf-8'?&gt;" +&lt;br /&gt; "&amp;lt;soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'" +&lt;br /&gt; " xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'" +&lt;br /&gt; " xmlns:xsd='http://www.w3.org/2001/XMLSchema'&gt;" +&lt;br /&gt; authenticationHeader +&lt;br /&gt; "&amp;lt;soap:Body&gt;" +&lt;br /&gt; "&amp;lt;Fetch xmlns='http://schemas.microsoft.com/crm/2007/WebServices'&gt;" +&lt;br /&gt; "&amp;lt;fetchXml&gt;" +&lt;br /&gt; "&amp;amp;lt;fetch mapping='logical'&amp;amp;gt;" +&lt;br /&gt; "&amp;amp;lt;entity name='new_postalcode'&amp;amp;gt;" +&lt;br /&gt; "&amp;amp;lt;attribute name='new_postalcodeid'/&amp;amp;gt;"+&lt;br /&gt; "&amp;amp;lt;attribute name='new_regcityarea'/&amp;amp;gt;"+&lt;br /&gt; "&amp;amp;lt;filter type='and'&amp;amp;gt;"+&lt;br /&gt; "&amp;amp;lt;condition attribute='new_postalcodeid' operator='eq' value='"+lookupItem[0].id+"'/&amp;amp;gt;"+&lt;br /&gt; "&amp;amp;lt;/filter&amp;amp;gt;&amp;amp;lt;/entity&amp;amp;gt;&amp;amp;lt;/fetch&amp;amp;gt;" +&lt;br /&gt; "&amp;lt;/fetchXml&gt;" +&lt;br /&gt; "&amp;lt;/Fetch&gt;" +&lt;br /&gt; " &amp;lt;/soap:Body&gt;" +&lt;br /&gt; "&amp;lt;/soap:Envelope&gt;";&lt;br /&gt;&lt;br /&gt; var xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");&lt;br /&gt; xmlHttpRequest.Open("POST", "/mscrmservices/2007/CrmService.asmx", false);&lt;br /&gt; xmlHttpRequest.setRequestHeader("SOAPAction","http://schemas.microsoft.com/crm/2007/WebServices/Fetch");&lt;br /&gt; xmlHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8");&lt;br /&gt; xmlHttpRequest.setRequestHeader("Content-Length", xml.length);&lt;br /&gt; xmlHttpRequest.send(xml);&lt;br /&gt; &lt;br /&gt; var resultXml = xmlHttpRequest.responseXML;&lt;br /&gt; // Check for errors.&lt;br /&gt; var errorCount = resultXml.selectNodes('//error').length;&lt;br /&gt; if (errorCount != 0)&lt;br /&gt; {&lt;br /&gt;  var msg = resultXml.selectSingleNode('//description').nodeTypedValue;&lt;br /&gt;  alert(msg);&lt;br /&gt; }&lt;br /&gt; // Process and display the results.&lt;br /&gt; else&lt;br /&gt; {&lt;br /&gt;&lt;br /&gt;  // Capture the result and UnEncode it.&lt;br /&gt;  var resultSet = new String();&lt;br /&gt;  resultSet = resultXml.text;&lt;br /&gt;  resultSet.replace('&amp;amp;lt;','&amp;lt;');&lt;br /&gt;  resultSet.replace('&amp;amp;gt;','&gt;');&lt;br /&gt;&lt;br /&gt;  var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");&lt;br /&gt;  xmlDoc.async = false;&lt;br /&gt;  xmlDoc.loadXML(resultSet);&lt;br /&gt;  var results = xmlDoc.getElementsByTagName('result');&lt;br /&gt;  &lt;br /&gt;  for(i=0;i&amp;lt;results.length;i++)&lt;br /&gt;  {&lt;br /&gt;   crmForm.all.address1_city.DataValue = results[i].selectSingleNode('//new_regcityarea').nodeTypedValue;&lt;br /&gt;  }&lt;br /&gt;   crmForm.all.address1_city.Disabled = true;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-7716758091549542876?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/7716758091549542876/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=7716758091549542876' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/7716758091549542876'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/7716758091549542876'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2009/10/ms-crm-fetch-and-retrieve-from.html' title='MS CRM Fetch and Retrieve from javascript'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-5569762366372302039</id><published>2009-10-13T16:41:00.005+04:00</published><updated>2009-10-13T16:51:32.926+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plug-in'/><category scheme='http://www.blogger.com/atom/ns#' term='sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><title type='text'>How to retrieve from many-to-many entity.</title><content type='html'>If you need to retrieve something from many-to-many relationship entity, and there is no such entity in CRM, then you should use the FetchXml, instead of Query.&lt;br /&gt;&lt;pre class="brush:c#"&gt;// Base bodel of FetchXml for get relationship entity&lt;br /&gt;string fetchXML =&lt;br /&gt;"&amp;lt;fetch distinct='false' mapping='logical'&gt;" +&lt;br /&gt;"&amp;lt;entity name='" + relationshipName + "'&gt;&amp;lt;filter type='and'&gt;" +&lt;br /&gt;"&amp;lt;condition attribute='" + relatedEntityName + "id' operator='eq' value='" + relatedId + "' /&gt;" +&lt;br /&gt;"&amp;lt;condition attribute='" + typeEntityName + "id' operator='eq' value='" + profileId + "' /&gt;" +&lt;br /&gt;"&amp;lt;/filter&gt;&amp;lt;/entity&gt;" + "&amp;lt;/fetch&gt;";&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;For example, next code snippet is checking a count of relations between the Account entity and New_Industry entity, wich relationship is many-to-many. To achieve this, I need to check the relationship entity - New_industry_account, wich is contains all of relation of our two entities.&lt;br /&gt;&lt;pre class="brush:c#"&gt;ICrmService crmService = context.CreateCrmService(true);&lt;br /&gt;&lt;br /&gt;// check for relation&lt;br /&gt;#region FetchXML&lt;br /&gt;string fetchXML =&lt;br /&gt;"&amp;lt;fetch distinct='false' mapping='logical'&gt;" +&lt;br /&gt;"&amp;lt;entity name='new_industry_account'&gt;&amp;lt;filter type='and'&gt;" +&lt;br /&gt;"&amp;lt;condition attribute='accountid' operator='eq' value='" + accountid.ToString() + "' /&gt;" +&lt;br /&gt;"&amp;lt;/filter&gt;&amp;lt;/entity&gt;&amp;lt;/fetch&gt;";&lt;br /&gt;#endregion&lt;br /&gt;&lt;br /&gt;string fetchresult = crmService.Fetch(fetchXML);&lt;br /&gt;XmlDocument xmldoc = new XmlDocument();&lt;br /&gt;xmldoc.LoadXml(fetchresult);&lt;br /&gt;XmlNodeList xnodlist = xmldoc.SelectNodes("resultset/result");&lt;br /&gt;if (xnodlist.Count &gt; 0) { return; }&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-5569762366372302039?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/5569762366372302039/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=5569762366372302039' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/5569762366372302039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/5569762366372302039'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2009/10/how-to-retrieve-from-many-to-many.html' title='How to retrieve from many-to-many entity.'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-8391406766688544758</id><published>2009-10-13T14:42:00.001+04:00</published><updated>2009-10-13T15:02:00.678+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><title type='text'>Update a number of custom attributes of DynamicEntity with TargetUpdateDynamic.</title><content type='html'>This code I was used in plugins for updating the custom attributes using Microsoft.Crm.SDK.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:c#"&gt;using System;&lt;br /&gt;using System.Collections.Generic;&lt;br /&gt;using System.Collections;&lt;br /&gt;&lt;br /&gt;// Microsoft Dynamics CRM namespaces&lt;br /&gt;using Microsoft.Crm.Sdk;&lt;br /&gt;using Microsoft.Crm.Sdk.Query;&lt;br /&gt;using Microsoft.Crm.SdkTypeProxy;&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;// Extract the DynamicEntity from the request.&lt;br /&gt;entity = (DynamicEntity)retrieved.BusinessEntity;&lt;br /&gt;&lt;br /&gt;// declare a property array&lt;br /&gt;ArrayList arrProps = new ArrayList();&lt;br /&gt;&lt;br /&gt;// create some property&lt;br /&gt;CrmBooleanProperty new_withindustry = new CrmBooleanProperty();&lt;br /&gt;new_withindustry.Name="new_withindustry";&lt;br /&gt;new_withindustry.Value= new CrmBoolean();&lt;br /&gt;new_withindustry.Value.Value=true;&lt;br /&gt;arrProps.Add(new_withindustry);&lt;br /&gt;&lt;br /&gt;// create another property&lt;br /&gt;CrmMoneyProperty new_industrydeal = new CrmMoneyProperty();&lt;br /&gt;new_industrydeal.Name = "new_industrydeal";&lt;br /&gt;new_industrydeal.Value = new CrmMoney();&lt;br /&gt;new_industrydeal.Value.Value = 12345.0m;&lt;br /&gt;arrProps.Add(new_industrydeal);&lt;br /&gt;&lt;br /&gt;//   Update the properties array on the DynamicEntity.&lt;br /&gt;entity.Properties.AddRange((Property[])arrProps.ToArray(typeof(Property)));&lt;br /&gt;&lt;br /&gt;// Create the update target.&lt;br /&gt;TargetUpdateDynamic updateDynamic = new TargetUpdateDynamic();&lt;br /&gt;&lt;br /&gt;// Set the properties of the target.&lt;br /&gt;updateDynamic.Entity = entity;&lt;br /&gt;&lt;br /&gt;//   Create the update request object.&lt;br /&gt;UpdateRequest update = new UpdateRequest();&lt;br /&gt;&lt;br /&gt;//   Set request properties.&lt;br /&gt;update.Target = updateDynamic;&lt;br /&gt;&lt;br /&gt;//   Execute the request.&lt;br /&gt;UpdateResponse updated = (UpdateResponse)crmService.Execute(update);&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-8391406766688544758?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/8391406766688544758/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=8391406766688544758' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/8391406766688544758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/8391406766688544758'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2009/10/update-number-of-properties-of.html' title='Update a number of custom attributes of DynamicEntity with TargetUpdateDynamic.'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-2494868828250999160</id><published>2009-10-13T02:01:00.001+04:00</published><updated>2009-10-13T02:03:30.163+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SSRS'/><title type='text'>Dynamic hyperlink in Reporting Services 2008</title><content type='html'>I had a custom entity - project and was needed to open a project card from the report.&lt;br /&gt;So I had done exactly as saying in &lt;a href="http://msdn.microsoft.com/en-us/library/ms157159.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms157159.aspx&lt;/a&gt; and in the expression field of hyperlink I was typed next&lt;br /&gt;&lt;br /&gt;="http://SERVERNAME/ORGANIZATIONNAME/userdefined/edit.aspx?id=%7b" &amp; Fields!projectid.Value.ToString() &amp; "%7d&amp;etc=10005"&lt;br /&gt;&lt;br /&gt;SERVERNAME and ORGANIZATIONNAME must be replaced with your crm values.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-2494868828250999160?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/2494868828250999160/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=2494868828250999160' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/2494868828250999160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/2494868828250999160'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2009/10/dynamic-hyperlink-in-reporting-services.html' title='Dynamic hyperlink in Reporting Services 2008'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-2349220614237198123</id><published>2009-10-12T16:05:00.008+04:00</published><updated>2009-10-13T15:53:31.704+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plug-in'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><category scheme='http://www.blogger.com/atom/ns#' term='trick'/><title type='text'>Registering plugins for event on many-to-many entities</title><content type='html'>I found that from the box MS CRM 4.0 are not supported the events on many-to-many relationship entities(bridge entities). But Aaron Elder has hack it.&lt;br /&gt;&lt;br /&gt;All you need is just register it at AssociateEntities or DiassociateEntities event with empty Primary and Secondary Entity fields.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:sql"&gt;-- ============================================================================&lt;br /&gt;-- Enable Associate and Disassociate Plug-in Events Script v1.0&lt;br /&gt;-- ----------------------------------------------------------------------------&lt;br /&gt;-- (c) 2009 Aaron Elder&lt;br /&gt;-- ============================================================================&lt;br /&gt;-- DISCLAIMER:&lt;br /&gt;-- This script is provided "AS IS" with no warranties, and confers no rights.&lt;br /&gt;-- ============================================================================&lt;br /&gt;-- While this is obviously "unsupported", I think the fact that these events&lt;br /&gt;-- are not available is a bug and hopefully it will be fixed in a rollup.&lt;br /&gt;-- ============================================================================&lt;br /&gt;&lt;br /&gt;USE AscentiumCrmDev_MSCRM&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;-- Find the deployments SDK Filter ID for the&lt;br /&gt;-- Associate and Disassociate Entity SDK Messages&lt;br /&gt;DECLARE @DisassociateEntitiesFilterId uniqueidentifier&lt;br /&gt;DECLARE @AssociateEntitiesFilterId uniqueidentifier&lt;br /&gt;SET @DisassociateEntitiesFilterId = (SELECT SdkMessageId FROM SdkMessageBase WHERE [Name] = 'DisassociateEntities')&lt;br /&gt;SET @AssociateEntitiesFilterId = (SELECT SdkMessageId FROM SdkMessageBase WHERE [Name] = 'AssociateEntities')&lt;br /&gt;&lt;br /&gt;-- Enable the Associate and Disassociate Filters to be valid for custom processing&lt;br /&gt;-- Custom Processing means "you register plug-ins against it"&lt;br /&gt;-- Note: We only do this for the "generic" (OTC == 0) case, just to be safer&lt;br /&gt;UPDATE SdkMessageFilterBase SET IsCustomProcessingStepAllowed = 1&lt;br /&gt;       WHERE SdkMessageId = @DisassociateEntitiesFilterId AND PrimaryObjectTypeCode = 0&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;UPDATE SdkMessageFilterBase SET IsCustomProcessingStepAllowed = 1&lt;br /&gt;       WHERE SdkMessageId = @AssociateEntitiesFilterId AND PrimaryObjectTypeCode = 0&lt;br /&gt;&lt;/pre&gt;(C)&lt;a href="http://consulting.ascentium.com/blog/crm/Post533.aspx"&gt;&lt;br /&gt;http://consulting.ascentium.com/blog/crm/Post533.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-2349220614237198123?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/2349220614237198123/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=2349220614237198123' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/2349220614237198123'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/2349220614237198123'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2009/10/registering-plugins-for-event-on-many.html' title='Registering plugins for event on many-to-many entities'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-8550738506321923531</id><published>2009-10-07T17:58:00.005+04:00</published><updated>2009-10-08T14:48:22.944+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='trick'/><title type='text'>Window redirect and close</title><content type='html'>This was the window that was opened from CRM form menu (ISV.Config.xml). The window has received some parameters and then redirected to another window, which is preparing and opening the MS Word document, but the pop-up window was still open - this is rude. So, I've closed it.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:js"&gt;// call this code on body onload event&lt;br /&gt;function redirect()&lt;br /&gt;{&lt;br /&gt;    // needed URL of pop-up window or modify current location URL&lt;br /&gt;    window.opener.location = window.location.href.replace(/Default2/, "Default");&lt;br /&gt;    window.top.close();&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-8550738506321923531?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/8550738506321923531/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=8550738506321923531' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/8550738506321923531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/8550738506321923531'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2009/10/window-redirect-close.html' title='Window redirect and close'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-2857407317177787952</id><published>2009-10-07T17:36:00.004+04:00</published><updated>2009-10-07T18:02:07.707+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><title type='text'>Close window from server-side</title><content type='html'>&lt;pre class="brush:c#"&gt;// closethe page if successful update&lt;br /&gt;RegisterStartupScript("load", "&lt;" + "script type=\"text/javascript\"&gt;\n" +&lt;br /&gt;"self.close();\n" +&lt;br /&gt;"&lt;" + "/script&gt;");&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="brush:vb"&gt;Dim strscript As String = "&lt;"+"script language=javascript&gt;window.top.close();&lt;"+"/script&gt;"&lt;br /&gt;If (Not ClientScript.IsStartupScriptRegistered("clientScript")) Then&lt;br /&gt;ClientScript.RegisterStartupScript(Page.GetType(), "clientScript", strscript)&lt;br /&gt;End If&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="brush:c#"&gt;System.Text.StringBuilder sb = System.Text.StringBuilder ();&lt;br /&gt;&lt;br /&gt;sb.Append("&lt;script type='javascript'&gt;");&lt;br /&gt;sb.Append("this.close();  window.open('www.mysite.com','_blank');  ");&lt;br /&gt;sb.Append("&lt;/script&gt;");&lt;br /&gt;&lt;br /&gt;if(!IsClientScriptRegistered("myScript",sb.ToString())&lt;br /&gt;   this.RegisterClientScriptBlock("myScript",sb.ToString());&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;All of code was found in Internet&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-2857407317177787952?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/2857407317177787952/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=2857407317177787952' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/2857407317177787952'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/2857407317177787952'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2009/10/close-window-from-server-side.html' title='Close window from server-side'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-1491916193526233702</id><published>2009-10-05T19:28:00.002+04:00</published><updated>2009-10-05T19:31:15.656+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><title type='text'>Mask the phone fields</title><content type='html'>I was need some mask on the "mobilephone" field in contact card. So I was combine some google search result with my experience and got next code:&lt;br /&gt;&lt;pre class="brush:js"&gt;//base maskphone function &lt;br /&gt;window.applyMask = function()&lt;br /&gt;{&lt;br /&gt;    // var of fields wich must be masked&lt;br /&gt;    var ele = document.getElementById("mobilephone");&lt;br /&gt;&lt;br /&gt;var FormatPhoneHandler=function()&lt;br /&gt;    {&lt;br /&gt;      var PH = this.value;&lt;br /&gt;      var re = /\D/g;&lt;br /&gt;      // +7 - this is country code of Russia, so this is decision only for one country&lt;br /&gt;      PH = PH.replace("+7","");&lt;br /&gt;      PH = PH.replace(re,"");&lt;br /&gt;     &lt;br /&gt;      if(PH.length &lt;1)&lt;br /&gt;      {&lt;br /&gt;          this.value = "";&lt;br /&gt;      }&lt;br /&gt;      else if(PH.length &lt;= 3)&lt;br /&gt;      {&lt;br /&gt;            this.value = "+7 (" + PH;&lt;br /&gt;      }&lt;br /&gt;      else if(PH.length &gt; 3 &amp;&amp; PH.length &lt;= 6)&lt;br /&gt;      {&lt;br /&gt;            this.value = "+7 (" + PH.substring(0,3) + ") " + PH.substring(3,6);&lt;br /&gt;      }&lt;br /&gt;      else if(PH.length &gt; 6)&lt;br /&gt;      {&lt;br /&gt;            this.value = "+7 (" + PH.substring(0,3) + ") " + PH.substring(3,6) + "-" + PH.substring(6,10);&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    ele.onkeyup = FormatPhoneHandler;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// turn it on&lt;br /&gt;applyMask();&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Place this code in onLoad event in the entity wich you need and don't forget change names of the field for the right one.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-1491916193526233702?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/1491916193526233702/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=1491916193526233702' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/1491916193526233702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/1491916193526233702'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2009/10/mask-on-phone-fields.html' title='Mask the phone fields'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-4331962373626022945</id><published>2009-08-20T16:50:00.004+04:00</published><updated>2009-08-20T17:15:41.732+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='sample code'/><title type='text'>Embeded notification</title><content type='html'>We were needed some kind of notify message for user without any pop-up or an alerts.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:javascript"&gt;&lt;br /&gt;function CreateRequestObject() {&lt;br /&gt;  if (window.XMLHttpRequest) {&lt;br /&gt;    try {&lt;br /&gt;      return new XMLHttpRequest();&lt;br /&gt;    } catch (e) { }&lt;br /&gt;  } else if (window.ActiveXObject) {&lt;br /&gt;    try {&lt;br /&gt;      return new ActiveXObject('Msxml2.XMLHTTP');&lt;br /&gt;    } catch (e) {&lt;br /&gt;      try {&lt;br /&gt;        return new ActiveXObject('Microsoft.XMLHTTP');&lt;br /&gt;      } catch (e) { }&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;  return null;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function RetrieveEntity(sEntityName, GUID, sAttributeNames) {&lt;br /&gt;  var attributes = "";&lt;br /&gt;  if (sAttributeNames.length == 0)&lt;br /&gt;    return null;&lt;br /&gt;  for (var i = 0; i &lt; sAttributeNames.length; i++) {&lt;br /&gt;    attributes += "&lt;cs:Attribute&gt;" + sAttributeNames[i] + "&lt;/cs:Attribute&gt;";&lt;br /&gt;  }&lt;br /&gt;  var soapBody = "&lt;soap:Body&gt;" +&lt;br /&gt;        "&lt;Retrieve xmlns='http://schemas.microsoft.com/crm/2007/WebServices'&gt;" +&lt;br /&gt;         "&lt;entityName&gt;" + sEntityName + "&lt;/entityName&gt;" +&lt;br /&gt;        "&lt;id&gt;" + GUID + "&lt;/id&gt;" +&lt;br /&gt;        "&lt;columnSet xmlns:cs='http://schemas.microsoft.com/crm/2006/Query' xsi:type='cs:ColumnSet'&gt;" +&lt;br /&gt;        "&lt;cs:Attributes&gt;" + attributes + "&lt;/cs:Attributes&gt;" +&lt;br /&gt;        "&lt;/columnSet&gt;" +&lt;br /&gt;        "&lt;/Retrieve&gt;" +&lt;br /&gt;        "&lt;/soap:Body&gt;";&lt;br /&gt;  var soapXml = "&lt;soap:Envelope " +&lt;br /&gt;       "xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' " +&lt;br /&gt;       "xmlns:xsd='http://www.w3.org/2001/XMLSchema' " +&lt;br /&gt;       "xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'&gt;";&lt;br /&gt;  soapXml += GenerateAuthenticationHeader();&lt;br /&gt;  soapXml += soapBody;&lt;br /&gt;  soapXml += "&lt;/soap:Envelope&gt;";&lt;br /&gt;&lt;br /&gt;  xmlhttp = CreateRequestObject();&lt;br /&gt;  xmlhttp.open("POST", "/mscrmservices/2007/crmservice.asmx", false);&lt;br /&gt;  xmlhttp.setRequestHeader("Content-Type", "text/xml; charset=utf-8");&lt;br /&gt;  xmlhttp.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/crm/2007/WebServices/Retrieve");&lt;br /&gt;  xmlhttp.setRequestHeader("Content-Length", soapXml.length);&lt;br /&gt;  xmlhttp.send(soapXml);&lt;br /&gt;&lt;br /&gt;  // Capture the result.&lt;br /&gt;  var resultXml = xmlhttp.responseXML;&lt;br /&gt;  // Check for errors.&lt;br /&gt;  var errorCount = resultXml.selectNodes('//error').length;&lt;br /&gt;  if (errorCount != 0) {&lt;br /&gt;    var msg = resultXml.selectSingleNode('//description').nodeTypedValue;&lt;br /&gt;    alert(msg);&lt;br /&gt;    return null;&lt;br /&gt;  }&lt;br /&gt;  // Display the retrieved value.&lt;br /&gt;  else {&lt;br /&gt;    var retEntityValues = new Array();&lt;br /&gt;    var retrieveNodes = resultXml.selectNodes("soap:Envelope/soap:Body/RetrieveResponse/RetrieveResult/q1:*");&lt;br /&gt;    for (var i = 0; i &lt; retrieveNodes.length; i++) {&lt;br /&gt;      var nodeName = retrieveNodes[0].baseName;&lt;br /&gt;      var nodeValue = retrieveNodes[0].nodeTypedValue;&lt;br /&gt;      retEntityValues[nodeName] = nodeValue;&lt;br /&gt;    }&lt;br /&gt;    return retEntityValues&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function AddNotification(noticationId, text) {&lt;br /&gt;  if (crmForm.all.Notifications.all[noticationId] != null)&lt;br /&gt;    crmForm.all.Notifications.all[noticationId + '_text'].innerHTML = text;&lt;br /&gt;  else {&lt;br /&gt;    crmForm.all.Notifications.innerHTML += '&lt;DIV class="Notification" id="' + noticationId + '" Order="0" Severity="1" Source="Client" NotificationId="' + noticationId + '"&gt;&lt;TABLE cellSpacing="0" cellPadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD vAlign="top"&gt;&lt;IMG class="ms-crm-Lookup-Item" alt="" src="/_imgs/error/notif_icn_crit16.png" /&gt;&lt;/TD&gt;&lt;TD&gt;&lt;SPAN id="' + noticationId + '_text"&gt;' + text + '&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;';&lt;br /&gt;    crmForm.all.Notifications.style.display = 'block';&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function RemoveNotification(noticationId) {&lt;br /&gt;  if (crmForm.all.Notifications.all[noticationId] != null) {&lt;br /&gt;    crmForm.all.Notifications.all[noticationId].removeNode(true);&lt;br /&gt;    if (crmForm.all.Notifications.childNodes.length == 0)&lt;br /&gt;      crmForm.all.Notifications.style.display = 'none';&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;var customer = crmForm.all.customerid;&lt;br /&gt;if (customer.DataValue != null &amp;&amp; customer.DataValue[0].typename == 'account') {&lt;br /&gt;  var cs = new Array();&lt;br /&gt;  cs[0] = 'new_attention';&lt;br /&gt;  var acc = RetrieveEntity('account', customer.DataValue[0].id, cs);&lt;br /&gt;  if (acc != null &amp;&amp; acc['new_attention'] == 1) {&lt;br /&gt;    AddNotification('NotificationAccount', 'Клиент требует внимания! Для более подробной информации перейдите в карточку клиента.');&lt;br /&gt;    crmForm.all.customerid_d.getElementsByTagName('SPAN')[0].style.color = 'Red';&lt;br /&gt;  }&lt;br /&gt;  else {&lt;br /&gt;    RemoveNotification('NotificationAccount');&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;else {&lt;br /&gt;  RemoveNotification('NotificationAccount');&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-4331962373626022945?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/4331962373626022945/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=4331962373626022945' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/4331962373626022945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/4331962373626022945'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2009/08/embeded-notification.html' title='Embeded notification'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-8727579531927179296</id><published>2009-08-19T15:27:00.001+04:00</published><updated>2009-08-19T15:30:32.941+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Get contact status in custom extended marketing list</title><content type='html'>&lt;pre class="brush:sql"&gt;&lt;br /&gt;declare @contactid uniqueidentifier&lt;br /&gt;declare @campaignactivityid uniqueidentifier&lt;br /&gt;-- some Guids&lt;br /&gt;set @contactid='48CF39EE-AA8C-DE11-A526-000C2989FA53'&lt;br /&gt;set @campaignactivityid='72CE8156-AD8C-DE11-A526-000C2989FA53'&lt;br /&gt;&lt;br /&gt;select exL.New_ExtMarketingListsElementId, exL.New_contactStatus&lt;br /&gt;from dbo.New_ExtMarketingListsElementExtensionBase exL&lt;br /&gt; JOIN dbo.ContactBase cnt ON exL.new_contact=cnt.ContactId&lt;br /&gt; JOIN dbo.ListBase lst ON exL.new_list=lst.ListId&lt;br /&gt; JOIN dbo.CampaignActivityItemBase cai ON lst.ListId=cai.ItemId&lt;br /&gt;where cnt.ContactId=@contactid &lt;br /&gt; and cai.CampaignActivityId=@campaignactivityid&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-8727579531927179296?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/8727579531927179296/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=8727579531927179296' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/8727579531927179296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/8727579531927179296'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2009/08/get-contact-status-in-custom-extended.html' title='Get contact status in custom extended marketing list'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-1250794690821941055</id><published>2009-08-19T15:21:00.005+04:00</published><updated>2009-08-19T15:27:01.283+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='русский'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>How to get Marketing Lists by Campaign Activity Id</title><content type='html'>&lt;pre class="brush:sql"&gt;&lt;br /&gt;declare @campaignactivityid uniqueidentifier&lt;br /&gt;-- an example GUID&lt;br /&gt;set @campaignactivityid='72CE8156-AD8C-DE11-A526-000C2989FA53'&lt;br /&gt;&lt;br /&gt;-- связь между маркетинговым списком и кампанией осуществляется через промежуточную таблицу CampaignActivityItemBase&lt;br /&gt;select * &lt;br /&gt;from dbo.CampaignActivityItemBase cai&lt;br /&gt; JOIN dbo.ListBase lb ON lb.ListId=cai.ItemId&lt;br /&gt;where cai.CampaignActivityId=@campaignactivityid&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-1250794690821941055?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/1250794690821941055/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=1250794690821941055' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/1250794690821941055'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/1250794690821941055'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2009/08/how-to-get-marketing-lists-by-campaign.html' title='How to get Marketing Lists by Campaign Activity Id'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-5671549833978859775</id><published>2009-08-13T13:31:00.007+04:00</published><updated>2009-08-13T13:45:14.366+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='trick'/><title type='text'>Remove 'Add Existing...' button from associated view entities form</title><content type='html'>I was found this code at Dave Hawes blog — &lt;a href="http://blog.davehawes.com/post/2008/04/23/MSCRM-4-Remove-Add-Existing-xxxxx-button.aspx"&gt;http://blog.davehawes.com/post/2008/04/23/MSCRM-4-Remove-Add-Existing-xxxxx-button.aspx&lt;/a&gt;&lt;br /&gt;This code should be added to onLoad event for the form of the entity where you want to hide buttons for the associated views of other entities.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:js"&gt;&lt;br /&gt;HideAssociatedViewButtons('new_account_new_accountclassificate', ['Добавить к этой записи существующий объект Классификация организации']);  &lt;br /&gt; &lt;br /&gt;function HideAssociatedViewButtons(loadAreaId, buttonTitles){&lt;br /&gt;    var navElement = document.getElementById('nav_' + loadAreaId); &lt;br /&gt;   if (navElement != null)    {&lt;br /&gt;        navElement.onclick = function LoadAreaOverride()        {&lt;br /&gt;            loadArea(loadAreaId);&lt;br /&gt;            HideViewButtons(document.getElementById(loadAreaId + 'Frame'), buttonTitles);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;function HideViewButtons(Iframe, buttonTitles) { &lt;br /&gt;    if (Iframe != null ) {&lt;br /&gt;        Iframe.onreadystatechange = function HideTitledButtons() { &lt;br /&gt;            if (Iframe.readyState == 'complete') { &lt;br /&gt;                var iFrame = frames[window.event.srcElement.id]; &lt;br /&gt;                var liElements = iFrame.document.getElementsByTagName('li'); &lt;br /&gt; &lt;br /&gt;                for (var j = 0; j &lt; buttonTitles.length; j++) { &lt;br /&gt;                    for (var i = 0; i &lt; liElements.length; i++) { &lt;br /&gt;                        if (liElements[i].getAttribute('title') == buttonTitles[j]) { &lt;br /&gt;                            liElements[i].style.display = 'none'; &lt;br /&gt;                            break; &lt;br /&gt;                        }&lt;br /&gt;                    } &lt;br /&gt;                } &lt;br /&gt;            } &lt;br /&gt;        } &lt;br /&gt;    }&lt;br /&gt;} &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Publishing it here for memory.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-5671549833978859775?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/5671549833978859775/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=5671549833978859775' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/5671549833978859775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/5671549833978859775'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2009/08/remove-add-existing-button-from.html' title='Remove &apos;Add Existing...&apos; button from associated view entities form'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-3163625031771578762</id><published>2009-08-12T19:52:00.001+04:00</published><updated>2009-08-12T19:53:52.448+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>How to get a PhoneCallId</title><content type='html'>&lt;pre class="brush:sql"&gt;&lt;br /&gt;SELECT&lt;br /&gt;  ActivityPartyBase.PartyId AS ContactId,&lt;br /&gt;  ActivityPartyBase.ActivityId AS PhoneCallId&lt;br /&gt;FROM&lt;br /&gt;&lt;br /&gt;CampaignActivityBase&lt;br /&gt;INNER JOIN ActivityPointerBase&lt;br /&gt;&lt;br /&gt;ON (ActivityPointerBase.RegardingObjectId = CampaignActivityBase.ActivityId)AND (ActivityPointerBase.DeletionStateCode = 0) &lt;br /&gt;&lt;br /&gt;INNER JOIN PhoneCall &lt;br /&gt;&lt;br /&gt;ON ((PhoneCall.ActivityId = ActivityPointerBase.ActivityId) AND (ActivityPointerBase.StateCode = 0) AND (PhoneCall.DeletionStateCode = 0))&lt;br /&gt;&lt;br /&gt;INNER JOIN ActivityPartyBase&lt;br /&gt;&lt;br /&gt;ON ((PhoneCall.ActivityId = ActivityPartyBase.ActivityId) AND (PartyObjectTypeCode = 2))&lt;br /&gt;&lt;br /&gt;INNER JOIN ContactBase&lt;br /&gt;&lt;br /&gt;ON (ContactBase.ContactId = ActivityPartyBase.PartyId) AND (ContactBase.DeletionStateCode = 0)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;WHERE &lt;br /&gt;  (CampaignActivityBase.ActivityId = @CampaignActivityId)&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-3163625031771578762?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/3163625031771578762/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=3163625031771578762' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/3163625031771578762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/3163625031771578762'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2009/08/how-to-get-phonecallid.html' title='How to get a PhoneCallId'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-2604877374862279159</id><published>2009-07-20T19:03:00.003+04:00</published><updated>2009-07-20T19:06:42.942+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><title type='text'>How to write into the eventlog custom journal with impersonalization in code</title><content type='html'>&lt;pre class="brush:csharp"&gt;&lt;br /&gt;private const string LOG_NAME = "MSCRM.Common";&lt;br /&gt;&lt;br /&gt;/// &lt;summary&gt;&lt;br /&gt;/// Write message in log&lt;br /&gt;/// &lt;/summary&gt;&lt;br /&gt;public static void WriteLog(string message, Exception exception)&lt;br /&gt;{&lt;br /&gt;      System.Security.Principal.WindowsImpersonationContext ctx = null;&lt;br /&gt;      ctx = System.Security.Principal.WindowsIdentity.Impersonate(IntPtr.Zero);&lt;br /&gt;      try&lt;br /&gt;      {&lt;br /&gt;        string logSource = "MSCRM.Common.Web.Controls.Grid";&lt;br /&gt;&lt;br /&gt;        if (EventLog.SourceExists(logSource))&lt;br /&gt;        {&lt;br /&gt;          if (!EventLog.LogNameFromSourceName(logSource, ".").Equals(LOG_NAME))&lt;br /&gt;          {&lt;br /&gt;            EventLog.DeleteEventSource(logSource, ".");&lt;br /&gt;            EventLog.CreateEventSource(logSource, LOG_NAME);&lt;br /&gt;          }&lt;br /&gt;        }&lt;br /&gt;        else &lt;br /&gt;        {&lt;br /&gt;          EventLog.CreateEventSource(logSource, LOG_NAME);&lt;br /&gt;        }&lt;br /&gt;        EventLog el = new EventLog();&lt;br /&gt;        el.Log = LOG_NAME;&lt;br /&gt;        el.Source = logSource;&lt;br /&gt;        el.WriteEntry(String.Format("{0}\nDetails:\n{1}", message, GetLogInfo(exception)), EventLogEntryType.Error);&lt;br /&gt;      }&lt;br /&gt;      catch (Exception ex)&lt;br /&gt;      {&lt;br /&gt;        throw ex;&lt;br /&gt;      }&lt;br /&gt;      finally&lt;br /&gt;      {&lt;br /&gt;        ctx.Undo();&lt;br /&gt;      }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-2604877374862279159?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/2604877374862279159/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=2604877374862279159' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/2604877374862279159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/2604877374862279159'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2009/07/how-to-write-into-eventlog-custom.html' title='How to write into the eventlog custom journal with impersonalization in code'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-8115186314132672486</id><published>2009-07-20T18:31:00.006+04:00</published><updated>2009-07-20T19:09:43.535+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='customization'/><category scheme='http://www.blogger.com/atom/ns#' term='ISV'/><category scheme='http://www.blogger.com/atom/ns#' term='grid'/><title type='text'>Get selected item in CRM grid</title><content type='html'>The following snippet will allow you to retrieve an array containing the Id values of the selected records in the grid:&lt;br /&gt;&lt;pre class="brush:javascript"&gt;&lt;br /&gt;    //    get array of selected records&lt;br /&gt;    var a = document.all['crmGrid'].InnerGrid.SelectedRecords;&lt;br /&gt;    var selectedItems = new Array(a.length);&lt;br /&gt;    for (var i=0; i &lt; a.length; i++)&lt;br /&gt;    {&lt;br /&gt;        selectedItems[i] = a[i][0];&lt;br /&gt;    }&lt;br /&gt;    alert(selectedItems);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;To get all of the records in the grid (ie. “All Records on Current Page”):&lt;br /&gt;&lt;pre class="brush:javascript"&gt;&lt;br /&gt;    //    array of all records on current page&lt;br /&gt;    var iTotal = document.all['crmGrid'].InnerGrid.NumberOfRecords;&lt;br /&gt;    var o = document.all['crmGrid'].InnerGrid;&lt;br /&gt;    var allItems = new Array;&lt;br /&gt;    var ii = 0;&lt;br /&gt;    for (var i=0; i &lt; iTotal; i++)&lt;br /&gt;    {&lt;br /&gt;        allItems[ii] = o.rows[i].oid;&lt;br /&gt;        ii++;&lt;br /&gt;    }&lt;br /&gt;    alert(allItems);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The source: &lt;a href="http://blog.customereffective.com/blog/2009/02/javascript-snippets-for-working-with-grids-in-crm.html"&gt;http://blog.customereffective.com/blog/2009/02/javascript-snippets-for-working-with-grids-in-crm.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-8115186314132672486?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/8115186314132672486/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=8115186314132672486' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/8115186314132672486'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/8115186314132672486'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2009/07/following-snippet-will-allow-you-to.html' title='Get selected item in CRM grid'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-4819546895163141925</id><published>2009-07-16T20:09:00.012+04:00</published><updated>2009-07-27T19:41:55.858+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><title type='text'>How to programmatically launch an application under a specific user</title><content type='html'>&lt;pre class="brush:csharp"&gt;&lt;br /&gt;ProcessStartInfo psi = new ProcessStartInfo("cmd", @"/C c:\SomeApp.exe");&lt;br /&gt;psi.UserName = "UserName";&lt;br /&gt;psi.Domain = "DomaiName";&lt;br /&gt;psi.Password = ReadPassword("password");&lt;br /&gt;psi.UseShellExecute = false;&lt;br /&gt;psi.RedirectStandardInput = true;&lt;br /&gt;psi.RedirectStandardOutput = true;&lt;br /&gt;psi.RedirectStandardError = true;&lt;br /&gt;using (Process p = Process.Start(psi))&lt;br /&gt;{  &lt;br /&gt;  // if you need to wait the end of the process&lt;br /&gt;  p.WaitForExit();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public System.Security.SecureString ReadPassword(string password)&lt;br /&gt;{&lt;br /&gt; System.Security.SecureString secPass = new System.Security.SecureString();&lt;br /&gt; for (int i = 0; i &lt; password.Length; i++)&lt;br /&gt;  secPass.AppendChar(password[i]);&lt;br /&gt; return secPass;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-4819546895163141925?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/4819546895163141925/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=4819546895163141925' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/4819546895163141925'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/4819546895163141925'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2009/07/how-to-lunch-application-from.html' title='How to programmatically launch an application under a specific user'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-9090126432531290797</id><published>2009-07-10T17:48:00.003+04:00</published><updated>2009-07-10T17:51:44.809+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>MSCRM, SQL and Localization</title><content type='html'>If you need to look at localized name of some attribute thru the SQL then check out next code&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:sql"&gt;&lt;br /&gt;select l.* &lt;br /&gt;from MetadataSchema.LocalizedLabel l&lt;br /&gt; join MetadataSchema.Attribute a on l.objectid=a.AttributeId&lt;br /&gt; join MetadataSchema.Entity e on a.EntityId=e.EntityId  &lt;br /&gt;where a.name= 'address1_city' and e.name='account'&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-9090126432531290797?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/9090126432531290797/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=9090126432531290797' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/9090126432531290797'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/9090126432531290797'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2009/07/mscrm-sql-and-localization.html' title='MSCRM, SQL and Localization'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-1559338675190876350</id><published>2009-06-26T19:19:00.009+04:00</published><updated>2009-06-29T20:02:16.563+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='administration'/><title type='text'>Campaign Activity status = Pending</title><content type='html'>If campaignactivity status is "pending" all the time, when you are distributing the activities, then check out the &lt;b&gt;Microsoft CRM Asynchronous Processing Service&lt;/b&gt; was started on the server.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-1559338675190876350?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/1559338675190876350/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=1559338675190876350' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/1559338675190876350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/1559338675190876350'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2009/06/campaign-activity-status-pending.html' title='Campaign Activity status = Pending'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-7102047263170048126</id><published>2009-06-26T19:09:00.006+04:00</published><updated>2009-06-26T19:14:03.740+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><title type='text'>Convert HTML to plain text and remove tags</title><content type='html'>&lt;pre class="brush:csharp"&gt;&lt;br /&gt;// convert HTML to plain text&lt;br /&gt;string Description = System.Web.HttpUtility.HtmlDecode(HTML_encoded_string);&lt;br /&gt;&lt;br /&gt;Description = StripTags(Description);&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;// remove tags from HTML-parsed string&lt;br /&gt;private string StripTags(string HTML)&lt;br /&gt;{&lt;br /&gt; System.Text.RegularExpressions.Regex objRegEx = new System.Text.RegularExpressions.Regex("&lt;[^&gt;]*&gt;");&lt;br /&gt;&lt;br /&gt; return objRegEx.Replace(HTML, "");&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-7102047263170048126?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/7102047263170048126/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=7102047263170048126' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/7102047263170048126'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/7102047263170048126'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2009/06/convert-html-to-plain-text-and-remove.html' title='Convert HTML to plain text and remove tags'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-6951568854414965149</id><published>2009-06-09T12:16:00.006+04:00</published><updated>2009-07-27T16:25:08.150+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SDK'/><title type='text'>TargetUpdate VS Update method</title><content type='html'>If you have a question what is better for use: UpdateRequest with TargetUpdate or Update method, then first of all you must to look at MS CRM SDK &lt;a href="http://msdn.microsoft.com/en-us/library/cc151016.aspx"&gt;"CrmService Common Methods" article&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;There was said:&lt;br /&gt;&lt;blockquote&gt;"The CrmService Web service provides a set of methods used to perform the most common operations on system and custom entities. These operations can also be performed by using the Execute method and the corresponding message. &lt;span style="font-weight:bold;"&gt;However, the methods will perform faster so they should be used whenever possible.&lt;/span&gt;"&lt;/blockquote&gt;&lt;br /&gt;So &lt;span style="font-weight:bold;"&gt;service.Update&lt;/span&gt; is a winner.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-6951568854414965149?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/6951568854414965149/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=6951568854414965149' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/6951568854414965149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/6951568854414965149'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2009/06/targetupdate-vs-update-method.html' title='TargetUpdate VS Update method'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-1697217936947619537</id><published>2009-06-04T17:42:00.003+04:00</published><updated>2009-06-04T17:45:22.785+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='customization'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><title type='text'>CrmDateTime conversion to DateTime</title><content type='html'>&lt;pre class="brush:csharp"&gt;&lt;br /&gt;Convert.ToDateTime(crmdatetime.Value)&lt;br /&gt;DateTime.Parse(crmdatetime.Value)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;For more information on the CrmDateTime, look in the SDK:&lt;br /&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa613542.aspx"&gt;http://msdn2.microsoft.com/en-us/library/aa613542.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-1697217936947619537?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/1697217936947619537/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=1697217936947619537' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/1697217936947619537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/1697217936947619537'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2009/06/crmdatetime-conversion-to-datetime.html' title='CrmDateTime conversion to DateTime'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-2492826354148566341</id><published>2009-06-04T13:18:00.005+04:00</published><updated>2009-10-16T12:49:55.900+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='trick'/><title type='text'>Open any entity for edit</title><content type='html'>The universal URL to open any entity for edit is&lt;br /&gt;&lt;br /&gt;http://&lt;i&gt;server name&lt;/i&gt;/&lt;i&gt;company name&lt;/i&gt;/CRMReports/viewer/drillopen.aspx?ID=&lt;b&gt;objectguid&lt;/b&gt;&amp;OTC=&lt;b&gt;object type code&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Object type code you can find at Microsoft Dynamics CRM SDK &lt;b&gt;Entity Type Codes&lt;/b&gt; article.&lt;br /&gt;&lt;br /&gt;Also like that:&lt;br /&gt;http://server name/company name/CRMReports/viewer/drillopen.aspx?ID=objectguid&amp;LogicalName=entity name (contact, account, e.t.c.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-2492826354148566341?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/2492826354148566341/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=2492826354148566341' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/2492826354148566341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/2492826354148566341'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2009/06/universal-page-to-open-any-object-is.html' title='Open any entity for edit'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-4267901206373321718</id><published>2009-05-29T15:31:00.004+04:00</published><updated>2009-05-29T15:45:41.993+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='error'/><title type='text'>Error: "Unable to connect to the remote server"</title><content type='html'>To resolve this error you can edit registry at MS CRM Server - look through the article (PartnerSource) at Microsoft Dynamics: &lt;a href="https://mbs.microsoft.com/knowledgebase/KBDisplay.aspx?scid=kb%24en-us%24913515&amp;wa=wsignin1.0"&gt;KB913515&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Also here is another way, to use the unsafe connection sharing.&lt;br /&gt;Article at blogs.msdn.com: &lt;a href="http://blogs.msdn.com/crm/archive/2007/01/09/best-practices-for-better-performance-from-your-custom-code.aspx"&gt;"Best Practices for Better Performance from Your Custom Code"&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-4267901206373321718?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/4267901206373321718/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=4267901206373321718' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/4267901206373321718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/4267901206373321718'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2009/05/error-unable-to-connect-to-remote.html' title='Error: &quot;Unable to connect to the remote server&quot;'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-4279657920815201934</id><published>2009-05-12T14:03:00.005+04:00</published><updated>2009-05-12T14:52:13.278+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>MS CRM database fragmentation</title><content type='html'>If your CRM is very slow, then check the indexes fragmentation.&lt;br /&gt;And if received table was not empty then you must rebuild the indexes.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:sql"&gt;&lt;br /&gt;USE AdventureBase&lt;br /&gt;GO&lt;br /&gt;SELECT a.index_id, name, avg_fragmentation_in_percent&lt;br /&gt;FROM sys.dm_db_index_physical_stats (DB_ID(N'AdventureBase'), NULL,NULL, NULL, NULL) AS a&lt;br /&gt; JOIN sys.indexes AS b ON a.object_id = b.object_id AND a.index_id = b.index_id    &lt;br /&gt;where avg_fragmentation_in_percent&gt;30&lt;br /&gt;GO&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-4279657920815201934?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/4279657920815201934/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=4279657920815201934' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/4279657920815201934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/4279657920815201934'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2009/05/ms-crm-database-fragmentation.html' title='MS CRM database fragmentation'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-6992201701856862687</id><published>2009-05-08T20:03:00.007+04:00</published><updated>2009-05-08T20:13:30.573+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><title type='text'>Replace non-digit symbols with RegEx</title><content type='html'>If you need to restrict input in &lt;span style="font-weight:bold;"&gt;nvarchar&lt;/span&gt; field(only the digit symbols for example), you may write some code to &lt;span style="font-weight:bold;"&gt;OnSave()&lt;/span&gt; event.&lt;br /&gt;This code is replace all of non-digit symbols in &lt;span style="font-weight:bold;"&gt;new_telephonenumber&lt;/span&gt; field to nothing, i.e. "".&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:js"&gt;&lt;br /&gt;//before: new_telephonenumber = "555-555$#5"&lt;br /&gt;//after: new_telephonenumber = "5555555"&lt;br /&gt;&lt;br /&gt;var re = /\D/g;&lt;br /&gt;if(document.crmForm.all.new_telephonenumber.DataValue != null){&lt;br /&gt;   crmForm.all.new_telephonenumber.DataValue = crmForm.all.new_telephonenumber.DataValue.replace(re,"");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-6992201701856862687?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/6992201701856862687/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=6992201701856862687' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/6992201701856862687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/6992201701856862687'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2009/05/replace-non-digit-symbols-with-regex.html' title='Replace non-digit symbols with RegEx'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-8053663924515289781</id><published>2009-05-06T13:11:00.005+04:00</published><updated>2009-05-12T12:13:18.161+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><title type='text'>The Microsoft Dynamics CRM Developer Toolkit</title><content type='html'>Microsoft Dynamics CRM 4.0 toolkit for Visual Studio 2008. &lt;a href="http://code.msdn.microsoft.com/E2DevTkt"&gt;Download link&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-8053663924515289781?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/8053663924515289781/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=8053663924515289781' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/8053663924515289781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/8053663924515289781'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2009/05/microsoft-dynamics-crm-developer.html' title='The Microsoft Dynamics CRM Developer Toolkit'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-5163453761069459518</id><published>2009-05-05T20:47:00.007+04:00</published><updated>2009-05-12T15:44:26.928+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='sample code'/><title type='text'>Test before save</title><content type='html'>I don't want to write a server code if I can do the same at the client side.&lt;br /&gt;Here is the test for INN field, that must contain only the numbers.&lt;br /&gt;&lt;pre class="brush:js"&gt;&lt;br /&gt;var re = new RegExp("[^0-9]");&lt;br /&gt;if(crmForm.all.new_inn.DataValue != null){&lt;br /&gt;   if(re.test(crmForm.all.new_inn.DataValue == true){&lt;br /&gt;      alert("ИНН должен содержать только цифры");&lt;br /&gt;      event.returnValue = false;&lt;br /&gt;      return false;&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-5163453761069459518?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/5163453761069459518/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=5163453761069459518' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/5163453761069459518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/5163453761069459518'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2009/05/test-before-save.html' title='Test before save'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-2491153888133719001</id><published>2009-05-04T13:34:00.020+04:00</published><updated>2009-07-27T16:23:18.899+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='error'/><title type='text'>Error: 0x80042f09 SecLib::CheckPrivilege failed. Returned hr = -2147209463</title><content type='html'>If you get an exception like next one:&lt;br /&gt;&lt;div style="background-color:#CACABA"&gt;&lt;blockquote&gt;&lt;br /&gt; 0x80042f09&lt;br /&gt;  SecLib::CheckPrivilege failed. Returned hr = -2147209463, User: 529cc8c0-23b6-dd11-a373-001cc458db68&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;br /&gt;You should check the user roles, because the error code &lt;b&gt;0x80042f09&lt;/b&gt; means &lt;b&gt;&amp;quot;The user has not been granted any licenses or the user has not been assigned any roles.&amp;quot;&lt;/b&gt;&lt;br /&gt;The user can have the role that can have no rights to the entity or to the entities witch have the owner-member relationship with base entity.&lt;br /&gt;For example:&lt;br /&gt;We have two entities &lt;span style="font-weight:bold;"&gt;organization -&gt; opportunity&lt;/span&gt; and one role &lt;span style="font-style:italic;"&gt;"salesperson"&lt;/span&gt; with rights on the &lt;span style="font-weight:bold;"&gt;organization&lt;/span&gt; and no rights to the &lt;span style="font-weight:bold;"&gt;opportunity&lt;/span&gt;. If you set the user with just &lt;span style="font-style:italic;"&gt;"salesperson"&lt;/span&gt; role to the Owner of some organization, you will get the error 0x80042f09.&lt;br /&gt;&lt;br /&gt;Same is fair to all errors &amp;quot;SecLib::CrmCheckPrivilege failed.&amp;quot;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-2491153888133719001?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/2491153888133719001/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=2491153888133719001' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/2491153888133719001'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/2491153888133719001'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2009/05/error-0x80042f09-seclibcheckprivilege.html' title='Error: 0x80042f09 SecLib::CheckPrivilege failed. Returned hr = -2147209463'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-4874285064294628813</id><published>2009-04-26T14:43:00.005+04:00</published><updated>2009-05-05T20:53:42.210+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><title type='text'>DateTime in MSCRM</title><content type='html'>How to format string to write in CrmDateTime attribute:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: csharp"&gt;&lt;br /&gt;string startdate; // - can be a parameter in method&lt;br /&gt;&lt;br /&gt;opportunity oop = new opportunity();&lt;br /&gt;&lt;br /&gt;opp.new_startdate = new CrmDateTime();&lt;br /&gt;&lt;br /&gt;if(startdate!="")&lt;br /&gt;   opp.new_startdate.Value = (Convert.ToDateTime(startdate)).ToString("yyyy-MM-ddTHH:mm:ss");&lt;br /&gt;else&lt;br /&gt;   opp.new_startdate.Value = DateTime.Today.ToString("yyyy-MM-ddTHH:mm:ss");&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-4874285064294628813?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/4874285064294628813/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=4874285064294628813' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/4874285064294628813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/4874285064294628813'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2009/04/datetime-in-mscrm.html' title='DateTime in MSCRM'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-3833431712735042993</id><published>2009-04-10T11:12:00.012+04:00</published><updated>2009-05-04T15:38:26.451+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='SDK'/><title type='text'>Null Values - based on MS CRM SDK</title><content type='html'>From &lt;a href="http://msdn.microsoft.com/en-us/library/cc151060.aspx"&gt;Microsoft CRM SDK&lt;/a&gt;  :&lt;br /&gt;&lt;br /&gt;When you update an entity instance there is a mechanism you can use to differentiate the absence of a value from a null value. To set an attribute value to null you must set both IsNull and IsNullSpecified to true. For attributes of type String, you must assign the value to String.Empty. This same mechanism is used when you create a query to find a null value.&lt;br /&gt;&lt;br /&gt;Another option is to use the type helper code available in Microsoft.Crm.Sdk assembly and in the CRMHelpers classes.&lt;br /&gt;&lt;br /&gt;Example&lt;br /&gt;The following code example shows you how to create null instances of the various Microsoft Dynamics CRM attribute types.&lt;br /&gt;&lt;pre class="brush: csharp"&gt;&lt;br /&gt;CrmBoolean boolean = new CrmBoolean();&lt;br /&gt;boolean.IsNull = true;&lt;br /&gt;boolean.IsNullSpecified = true;&lt;br /&gt;&lt;br /&gt;CrmDecimal dec = new CrmDecimal();&lt;br /&gt;dec.IsNull = true;&lt;br /&gt;dec.IsNullSpecified = true;&lt;br /&gt;&lt;br /&gt;CrmFloat f = new CrmFloat();&lt;br /&gt;f.IsNull = true;&lt;br /&gt;f.IsNullSpecified = true;&lt;br /&gt;&lt;br /&gt;CrmMoney money = new CrmMoney();&lt;br /&gt;money.IsNull = true;&lt;br /&gt;money.IsNullSpecified = true;&lt;br /&gt;&lt;br /&gt;CrmNumber number = new CrmNumber();&lt;br /&gt;number.IsNull = true;&lt;br /&gt;number.IsNullSpecified = true;&lt;br /&gt;&lt;br /&gt;Lookup lookup = new Lookup();&lt;br /&gt;lookup.IsNull = true;&lt;br /&gt;lookup.IsNullSpecified = true;&lt;br /&gt;&lt;br /&gt;PickList list = new PickList();&lt;br /&gt;list.IsNull = true;&lt;br /&gt;list.IsNullSpecified = true;&lt;br /&gt;&lt;br /&gt;Status status = new Status();&lt;br /&gt;status.IsNull = true;&lt;br /&gt;status.IsNullSpecified = true;&lt;br /&gt;&lt;br /&gt;Owner owner = new Owner();&lt;br /&gt;owner.IsNull = true;&lt;br /&gt;owner.IsNullSpecified = true;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Example&lt;br /&gt;The following code example shows you how to create null instances of the various Microsoft Dynamics CRM attribute types using the type helper classes.&lt;br /&gt;&lt;pre class="brush: csharp"&gt;&lt;br /&gt;CrmBoolean boolean = CrmBoolean.Null;&lt;br /&gt;&lt;br /&gt;CrmDecimal dec = CrmDecimal.Null;&lt;br /&gt;&lt;br /&gt;CrmFloat flt = CrmFloat.Null;&lt;br /&gt;&lt;br /&gt;CrmMoney money = CrmMoney.Null;&lt;br /&gt;&lt;br /&gt;CrmNumber number = CrmNumber.Null;&lt;br /&gt;&lt;br /&gt;Lookup lookup = Lookup.Null;&lt;br /&gt;&lt;br /&gt;Picklist list = Picklist.Null;&lt;br /&gt;&lt;br /&gt;Status status = Status.Null;&lt;br /&gt;&lt;br /&gt;Owner owner = Owner.Null;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;My Example&lt;br /&gt;Moving the data from one field to another and cleaning the first field after that.&lt;br /&gt;&lt;pre class="brush: csharp"&gt;&lt;br /&gt;opportunity opp = new opportunity();&lt;br /&gt;opp.opportunityid = new Key();&lt;br /&gt;opp.opportunityid.Value = findedopp.opportunityid.Value;&lt;br /&gt;&lt;br /&gt;opp.new_profittreshold = new CrmMoney();&lt;br /&gt;opp.new_profittreshold.Value = (decimal)findedopp.new_investmenttreshold.Value;&lt;br /&gt;&lt;br /&gt;opp.new_investmenttreshold = new CrmFloat();&lt;br /&gt;opp.new_investmenttreshold.IsNull = true;&lt;br /&gt;opp.new_investmenttreshold.IsNullSpecified = true;&lt;br /&gt;&lt;br /&gt;service.Update(opp);&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-3833431712735042993?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/3833431712735042993/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=3833431712735042993' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/3833431712735042993'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/3833431712735042993'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2009/04/null-values-from-ms-crm-sdk.html' title='Null Values - based on MS CRM SDK'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-3182260741908942276</id><published>2009-04-08T11:07:00.001+04:00</published><updated>2009-04-14T15:00:43.284+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><title type='text'>JavaScript свойства объекта</title><content type='html'>Посмотреть свойства объекта - можно использовать конструкцию &lt;br /&gt;&lt;pre class="brush:js"&gt;&lt;br /&gt;for(key in obj){alert(key)}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-3182260741908942276?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/3182260741908942276/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=3182260741908942276' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/3182260741908942276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/3182260741908942276'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2009/04/javascript.html' title='JavaScript свойства объекта'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-3180640068419589289</id><published>2009-01-21T15:09:00.005+03:00</published><updated>2009-04-14T14:52:52.949+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='trick'/><title type='text'>How to close window without prompt. JavaScript.</title><content type='html'>For &lt;span style="font-weight:bold;"&gt;most of browsers&lt;/span&gt; work code like this:&lt;br /&gt; &lt;br /&gt;&lt;pre class="brush: js"&gt;&lt;br /&gt;window.opener = top;&lt;br /&gt;window.close();&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;But for &lt;span style="font-weight:bold;"&gt;IE7&lt;/span&gt; will work this code:&lt;br /&gt;&lt;pre class="brush: html"&gt;&lt;br /&gt;&amp;lt;script language=javascript&gt;&lt;br /&gt;function CloseWindow() &lt;br /&gt;{&lt;br /&gt;  window.open('','_self','');&lt;br /&gt;  window.close();&lt;br /&gt;}&lt;br /&gt;&amp;lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;input type=button name="closebutton" value="Close" class="Button" onclick="CloseWindow()"/&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-3180640068419589289?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/3180640068419589289/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=3180640068419589289' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/3180640068419589289'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/3180640068419589289'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2009/01/how-to-close-window-without-prompt.html' title='How to close window without prompt. JavaScript.'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-6850307065226503691</id><published>2009-01-21T14:54:00.003+03:00</published><updated>2009-04-10T12:17:45.557+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='ISV'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><title type='text'>Передача нескольких параметров JavaSript  в XML</title><content type='html'>In ISV.Config I was needed a &amp;lt;Button&gt; with JavaScript on it for open modal dialog with 2 or more parameters. In the dialog I'll calculate some sums for displayed opportunities.&lt;br /&gt;&lt;br /&gt;So this is example:&lt;br /&gt;&lt;pre class="brush: xml"&gt;&lt;br /&gt;&amp;lt;Button JavaScript="var url='http://localhost/CalcTotals.aspx';var paramStr = 'viewid=' + crmGrid.GetParameter('viewid'); if (crmGrid.GetParameter('filterDisplay') != null) paramStr += '&amp;amp;amp;' + 'filter=' + crmGrid.GetParameter('filterDisplay');if (crmGrid.GetParameter('quickfind') != null) paramStr += '&amp;amp;amp;' + 'quickfind=' + crmGrid.GetParameter('quickfind'); url= url + '?' + paramStr; showModalDialog(url , '','status:no;dialogWidth:610px;dialogHeight:210px;dialogHide:true;help:no;scroll:no');" AccessKey="в" WinMode="1" PassParams="1"&gt;;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The character "&amp;" must be replaced with "&amp;amp;amp;".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-6850307065226503691?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/6850307065226503691/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=6850307065226503691' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/6850307065226503691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/6850307065226503691'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2009/01/javasript-xml.html' title='Передача нескольких параметров JavaSript  в XML'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-4790703539500630647</id><published>2009-01-21T11:45:00.000+03:00</published><updated>2009-01-21T13:02:18.331+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='error'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><title type='text'>An XML comment cannot contain '--', and '-' cannot be the last character.</title><content type='html'>The most possible reason of this error is in your &lt;span style="font-weight:bold;"&gt;web.config&lt;/span&gt; or in your custom XML file. &lt;br /&gt;There is great likelihood that is in &lt;span style="font-weight:bold;"&gt;AppSettings&lt;/span&gt; section.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-4790703539500630647?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/4790703539500630647/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=4790703539500630647' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/4790703539500630647'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/4790703539500630647'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2009/01/xml-comment-cannot-contain-and-cannot.html' title='An XML comment cannot contain &apos;--&apos;, and &apos;-&apos; cannot be the last character.'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-2285192035640051548</id><published>2008-11-13T16:01:00.001+03:00</published><updated>2009-05-04T15:41:01.877+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='error'/><category scheme='http://www.blogger.com/atom/ns#' term='administration'/><title type='text'>Error: The request failed with http status 400: Bad Request</title><content type='html'>Ошибка в переданных сервису данных.&lt;br /&gt;Например, при создании systemuser или salesperson в логине вместо &lt;span style="font-weight:bold;"&gt;DomainName\UserName&lt;/span&gt; надо передавать &lt;span style="font-weight:bold;"&gt;DomainName\\UserName&lt;/span&gt;, иначе некоторые совпадения символов косой черты и последующей буквы могут быть распознаны как escape-последовательность.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-2285192035640051548?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/2285192035640051548/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=2285192035640051548' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/2285192035640051548'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/2285192035640051548'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2008/11/error-request-failed-with-http-status.html' title='Error: The request failed with http status 400: Bad Request'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-106507933120766359</id><published>2008-10-30T19:30:00.000+03:00</published><updated>2008-11-13T16:12:20.204+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='trick'/><title type='text'>Ownerid</title><content type='html'>Если сущность создавать программно и не заполнять поле &lt;span style="font-weight:bold;"&gt;ownerid&lt;/span&gt;, то MSCRM сам заполнит это поле Guid'ом пользователя, вызвавшего метод &lt;span style="font-weight:bold;"&gt;Create()&lt;/span&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-106507933120766359?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/106507933120766359/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=106507933120766359' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/106507933120766359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/106507933120766359'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2008/10/ownerid.html' title='Ownerid'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-2030261363065661160</id><published>2008-10-16T18:51:00.001+04:00</published><updated>2009-04-14T14:59:27.337+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='trick'/><title type='text'>Скрытие стандартных ссылок в панели навигации сущности.</title><content type='html'>Узнаем наименование скрываемой ссылки, например с помощью &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=e59c3964-672d-4511-bb3e-2d5e1db91038&amp;displaylang=en"&gt;IE DEV Tools&lt;/a&gt;.&lt;br /&gt;И в форме сущности на событе OnLoad пишем следующий JavaScript:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:js"&gt;&lt;br /&gt;if(document.all.navAddresses != undefined) {&lt;br /&gt;  document.all.navAddresses.parentNode.style.display = 'none';&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-2030261363065661160?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/2030261363065661160/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=2030261363065661160' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/2030261363065661160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/2030261363065661160'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2008/10/blog-post.html' title='Скрытие стандартных ссылок в панели навигации сущности.'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-8667101844811185032</id><published>2008-10-14T20:35:00.000+04:00</published><updated>2008-10-16T18:57:59.918+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='trick'/><title type='text'>Закрытие окна CRM без подтверждения</title><content type='html'>Если вы хотите закрыть окно CRM без подтверждения, до вызова &lt;b&gt;window.close()&lt;/b&gt; вызовите функцию &lt;b&gt;crmForm.detachCloseAlert()&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-8667101844811185032?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/8667101844811185032/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=8667101844811185032' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/8667101844811185032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/8667101844811185032'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2008/10/crm.html' title='Закрытие окна CRM без подтверждения'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-7010671184050811687</id><published>2008-09-19T19:00:00.002+04:00</published><updated>2009-04-14T14:49:54.739+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><title type='text'>На событие OnSave формы сущности account</title><content type='html'>&lt;pre class="brush:js"&gt;&lt;br /&gt;/*Start:Script added by Me*/&lt;br /&gt;var CRM_FORM_TYPE_CREATE=1;&lt;br /&gt;var CRM_FORM_TYPE_QCREATE=5;&lt;br /&gt;var Return;&lt;br /&gt;/******* comment 21.04 *******/&lt;br /&gt;if ((crmForm.FormType==CRM_FORM_TYPE_CREATE)||(crmForm.FormType==CRM_FORM_TYPE_QCREATE))&lt;br /&gt;{&lt;br /&gt;    var str="http://servername/Dedup/duplicatelist.aspx?name=" + escape(crmForm.all.name.DataValue)+"&amp;EntityTypeId=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX";&lt;br /&gt;    Return = showModalDialog(str,"","resizable=yes;");&lt;br /&gt;    if(Return==true)&lt;br /&gt;    {     /* продолжить сохранение */&lt;br /&gt;        event.returnValue = true;&lt;br /&gt;        return true;&lt;br /&gt;    }&lt;br /&gt;    else&lt;br /&gt;    {     /* отменить сохранение */&lt;br /&gt;        event.returnValue = false;&lt;br /&gt;        crmForm.detachCloseAlert();&lt;br /&gt;        //return false;&lt;br /&gt;        window.close();&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;/******* comment 21.04 *******/&lt;br /&gt;/*End:Script added by Me*/&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-7010671184050811687?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/7010671184050811687/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=7010671184050811687' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/7010671184050811687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/7010671184050811687'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2008/09/onsave-account.html' title='На событие OnSave формы сущности account'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-9006891678940455680</id><published>2008-09-17T21:00:00.003+04:00</published><updated>2009-10-16T12:10:20.786+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plug-in'/><category scheme='http://www.blogger.com/atom/ns#' term='sample code'/><category scheme='http://www.blogger.com/atom/ns#' term='message'/><title type='text'>Plugin's Starter Execution Method</title><content type='html'>Have found excellent method at David Fronk blog &lt;a href="http://dmcrm.blogspot.com/2008/08/starter-execution-method.html"&gt;Starter Execution Method&lt;/a&gt; and slightly update it in to separate method.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:csharp"&gt;// based on Starter Execution Method&lt;br /&gt;&lt;br /&gt;/// &lt;summary&gt;&lt;br /&gt;/// Return the opportunity id&lt;br /&gt;/// &lt;/summary&gt;&lt;br /&gt;/// &lt;param name="context"&gt;Plugin context&lt;/param&gt;/// &lt;returns&gt;opportunityid&lt;/returns&gt;&lt;br /&gt;public string GetEntityId(IPluginExecutionContext context)&lt;br /&gt;{&lt;br /&gt; string opportunityid = "";&lt;br /&gt; DynamicEntity opportunityClose = null;&lt;br /&gt;&lt;br /&gt; switch (context.MessageName)&lt;br /&gt; {&lt;br /&gt;  case "Create":&lt;br /&gt;   if (context.OutputParameters.Properties.Contains("id"))&lt;br /&gt;   {&lt;br /&gt;    opportunityid = context.OutputParameters.Properties["id"].ToString();&lt;br /&gt;   }&lt;br /&gt;   break;&lt;br /&gt;  case "Update":&lt;br /&gt;   if (context.InputParameters.Properties.Contains(ParameterName.Target) &amp;&amp; context.InputParameters.Properties[ParameterName.Target] is DynamicEntity)&lt;br /&gt;   {&lt;br /&gt;    DynamicEntity entity = (DynamicEntity)context.InputParameters.Properties[ParameterName.Target];&lt;br /&gt;    opportunityid = ((Key)entity.Properties["opportunityid"]).Value.ToString();&lt;br /&gt;   }&lt;br /&gt;   break;&lt;br /&gt;  case "SetState":&lt;br /&gt;   if (context.InputParameters.Properties.Contains("EntityMoniker"))&lt;br /&gt;   {&lt;br /&gt;    if (context.InputParameters.Properties.Contains("State"))&lt;br /&gt;    {&lt;br /&gt;     Moniker entityMoniker = (Moniker)context.InputParameters.Properties[ParameterName.EntityMoniker];&lt;br /&gt;     opportunityid = entityMoniker.Id.ToString();&lt;br /&gt;    }&lt;br /&gt;   }&lt;br /&gt;   break;&lt;br /&gt;  case "SetStateDynamicEntity":&lt;br /&gt;   if (context.InputParameters.Properties.Contains("EntityMoniker"))&lt;br /&gt;   {&lt;br /&gt;    if (context.InputParameters.Properties.Contains("State"))&lt;br /&gt;    {&lt;br /&gt;     Moniker entityMoniker = (Moniker)context.InputParameters.Properties[ParameterName.EntityMoniker];&lt;br /&gt;     opportunityid = entityMoniker.Id.ToString();&lt;br /&gt;    }&lt;br /&gt;   }&lt;br /&gt;   break;&lt;br /&gt;  case "Win":&lt;br /&gt;   opportunityClose = (DynamicEntity)context.InputParameters["OpportunityClose"];&lt;br /&gt;   Lookup WonLook = (Lookup)opportunityClose.Properties["opportunityid"];&lt;br /&gt;   opportunityid = WonLook.Value.ToString();&lt;br /&gt;   break;&lt;br /&gt;  case "Lose":&lt;br /&gt;   opportunityClose = (DynamicEntity)context.InputParameters["OpportunityClose"];&lt;br /&gt;   Lookup LoseLook = (Lookup)opportunityClose.Properties["opportunityid"];&lt;br /&gt;   opportunityid = LoseLook.Value.ToString();&lt;br /&gt;   break;&lt;br /&gt;  case "Assign":&lt;br /&gt;   if (context.InputParameters.Properties.Contains("Assignee") &amp;&amp; context.InputParameters.Properties["Assignee"] is SecurityPrincipal)&lt;br /&gt;   {&lt;br /&gt;    Moniker assignEntity = (Moniker)context.InputParameters.Properties["Target"];&lt;br /&gt;    opportunityid = assignEntity.Id.ToString();&lt;br /&gt;   }&lt;br /&gt;   break;&lt;br /&gt;  case "Delete":&lt;br /&gt;   if (context.InputParameters.Properties.Contains("Target"))&lt;br /&gt;   {&lt;br /&gt;    Moniker entityMoniker = null;&lt;br /&gt;    entityMoniker = (Moniker)context.InputParameters.Properties[ParameterName.Target];&lt;br /&gt;    opportunityid = entityMoniker.Id.ToString();&lt;br /&gt;   }&lt;br /&gt;   break;&lt;br /&gt; }&lt;br /&gt; return opportunityid;&lt;br /&gt;}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-9006891678940455680?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/9006891678940455680/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=9006891678940455680' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/9006891678940455680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/9006891678940455680'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2008/09/plugins-starter-execution-method.html' title='Plugin&apos;s Starter Execution Method'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-4220243678279220088</id><published>2008-09-09T16:15:00.001+04:00</published><updated>2009-04-14T14:51:22.143+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='plug-in'/><category scheme='http://www.blogger.com/atom/ns#' term='template'/><title type='text'>Сущность template, plug-in и Javascript</title><content type='html'>Начну с того, что сущность template не изменяемая, но настраиваемая. Однако, это не преимущество. Я не понимаю по каким причинам сущность template была скрыта от нас, но ни форма ни события на ней нам недоступны.&lt;br /&gt;Более того, &lt;span style="font-weight:bold;"&gt;plug-in&lt;/span&gt; на шаг PreCreate для этой сущности дает поразительный результат - при выбрасывании InvalidPluginExecutionException стирает тело и тему самого template.&lt;br /&gt;А задача простая - не дать или хотя бы уведомить пользователя о том, что шаблон с таким именем уже существует. Ну чтобы пользователь потом не выбирал из десятка шаблонов с одинаковым title.&lt;br /&gt;Как же решить? Plug-in не функционален, скрипт вставить некуда. Решил внедриться в оригинальную страничку. Называется она &lt;span style="font-style:italic;"&gt;emailtemplateeditor.aspx&lt;/span&gt;. Там есть функция &lt;span style="font-weight:bold;"&gt;Save&lt;/span&gt; в нее и написал свой код.&lt;br /&gt;Но проблема обнаружилась и тут. Оказывается CRM не дает обратиться к значению поля templateid (нужно, чтобы title не сравнивать с самим собой), т.е. &lt;span style="font-weight:bold;"&gt;crmForm.all.templateid.DataValue&lt;/span&gt; не работает.&lt;br /&gt;Что ж решил действовать старым проверенным способом через crmForm.FormType, чтобы узнать создаем новый шаблон(FormType=1) или редактируем старый(FormType=2). И тут Microsoft окончательно убедил меня в том, что его сотрудники видимо произошли не от углеродной формы жизни - FormType=0 (Undefined form type). Т.е. согласно SDK сущность создана для системных нужд &lt;span style="font-style:italic;"&gt;"For internal use only"&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Спасло свойство crmForm.ObjectId, которое и содержало значение поля templateid.&lt;br /&gt;В результате скрипт был закончен и стал иметь такой вид:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:js"&gt;&lt;br /&gt;var url = "http://mcrm4/wsTemplateCreateCheckDup/CheckTemplateTitleDup.asmx/IsDup";&lt;br /&gt;var templateid="null";&lt;br /&gt;if (crmForm.ObjectId != null)&lt;br /&gt;{&lt;br /&gt; templateid=crmForm.ObjectId;&lt;br /&gt; templateid=templateid.slice(1, templateid.indexOf('}'));&lt;br /&gt;}&lt;br /&gt;var paramstr = "TemplateTitle="+crmForm.all.title.DataValue+"&amp;"+"TemplateId="+templateid;&lt;br /&gt;try{&lt;br /&gt; var oXmlHTTP = new ActiveXObject("Msxml2.XMLHTTP");&lt;br /&gt; oXmlHTTP.open("POST", url,false); &lt;br /&gt; oXmlHTTP.setRequestHeader("Content-Type","application/x-www-form-urlencoded");&lt;br /&gt; oXmlHTTP.send(paramstr);&lt;br /&gt; if(oXmlHTTP.status == 200) &lt;br /&gt; {&lt;br /&gt;  var retstr=oXmlHTTP.responseText;&lt;br /&gt;  var retidx=retstr.indexOf("&gt;found");&lt;br /&gt;  if(retidx&gt;0)&lt;br /&gt;  {&lt;br /&gt;   alert("Имя шаблона '"+crmForm.all.title.value+"' уже есть в списке.\n Пожалуйста, задайте другое имя.");&lt;br /&gt;   SubjectEditor.focus();&lt;br /&gt;   event.returnValue=false;&lt;br /&gt;   return false;&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt; else&lt;br /&gt; {&lt;br /&gt;  alert("Ошибка "+ oXmlHTTP.status+" при проверке на повторное использование имени шаблона.");&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;catch(e){alert(e);}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-4220243678279220088?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/4220243678279220088/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=4220243678279220088' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/4220243678279220088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/4220243678279220088'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2008/09/template-plug-in-javascript.html' title='Сущность template, plug-in и Javascript'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-4253841281422331593</id><published>2008-08-18T17:23:00.000+04:00</published><updated>2008-09-17T15:17:35.570+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plug-in'/><title type='text'>Plug-in signing</title><content type='html'>При разработке plug-in'а, нужно обязательно задавать сильное имя(strong name) и не забывать при релизе переподписывать(re-sign) библиотеку, если был выставлен атрибут Delay Sign Only.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;sn - R &amp;lt;assembly&amp;gt; &amp;lt;keyfile&amp;gt;&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-4253841281422331593?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/4253841281422331593/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=4253841281422331593' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/4253841281422331593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/4253841281422331593'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2008/08/plug-in-signing.html' title='Plug-in signing'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-2032992658316267491</id><published>2008-08-18T17:03:00.002+04:00</published><updated>2009-04-14T14:58:37.966+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plug-in'/><category scheme='http://www.blogger.com/atom/ns#' term='error'/><category scheme='http://www.blogger.com/atom/ns#' term='administration'/><title type='text'>"Not have enough privilege to complete Create operation for an Sdk entity" при регистрации плагина в CRM 4.0</title><content type='html'>Эта ошибка возникает даже если пользователь обладает ролью &lt;span style="font-weight:bold;"&gt;System Administrator&lt;/span&gt;. Причина её возникновения, в том, что пользователь не является членом группы &lt;span style="font-weight:bold;"&gt;Deployment Administrators group&lt;/span&gt; в утилите &lt;span style="font-weight:bold;"&gt;CRM Deployment Manager&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Вы написали plug-in и пытаетесь его зарегистрировать. Не важно, делаете ли вы это с помощью Plug-in Registration Tool из SDK или с помощью собственного инсталлера, однако, даже если вы Системный Администратор, то возможно вам все-равно не удастся зарегистрировать plug-in, и вы получите следующую ошибку:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;"Not have enough privilege to complete Create operation for an Sdk entity"&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Оказывается System Administrator больше не царь и бог, и эта роль не обладает привилегиями развертывания(deploy). Есть отдельная роль Deployment Administrator. Изначально ее имеет тот, кто устанавливал CRM на локальную машину.&lt;br /&gt;Чтобы регистрировать плагины, понадобится добавить пользователя из-под которого происходит регистрация в Deployment Manager.&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Откройте CRM 4.0 Deployment Manager (Start -&gt; All Programs -&gt; Microsoft Dynamics CRM -&gt; Deployment Manager)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Добавьте пользователя из Active Directory в Deployment Administrator'ы&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;После этого попробуйте еще раз зарегистрировать свой plug-in.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-2032992658316267491?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/2032992658316267491/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=2032992658316267491' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/2032992658316267491'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/2032992658316267491'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2008/08/not-have-enough-privilege-to-complete.html' title='&quot;Not have enough privilege to complete Create operation for an Sdk entity&quot; при регистрации плагина в CRM 4.0'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-1896259355337442507</id><published>2008-08-05T17:55:00.002+04:00</published><updated>2010-06-08T10:41:14.287+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sample code'/><title type='text'>TargetUpdate Sample Code.</title><content type='html'>Этого Sample Code я не нашел в SDK, однако нашел вопросы на форумах, оставленные без ответов и решенные с помощью CrmService.Update. Потому я решил написать такой пример.&lt;br /&gt;Думаю кому-то будет интересно как же на самом деле может быть решена задача обновления через TargetUpdate.&lt;br /&gt;&lt;pre class="brush:csharp"&gt;private void EmailDeliveryChange(email emailResult, int new_delivery)&lt;br /&gt;{&lt;br /&gt;service = new CrmService.CrmService();&lt;br /&gt;service.Credentials = System.Net.CredentialCache.DefaultCredentials;&lt;br /&gt;service.Url = CrmServiceUrl;&lt;br /&gt;&lt;br /&gt;TargetUpdateEmail tue = new TargetUpdateEmail();&lt;br /&gt;// create new email entity for update&lt;br /&gt;email emailUpdate = new email();&lt;br /&gt;&lt;br /&gt;// Set the ID of entity which we want to update&lt;br /&gt;emailUpdate.activityid = new Key();&lt;br /&gt;emailUpdate.activityid.Value = new Guid(emailResult.activityid.Value.ToString()); // parameter&lt;br /&gt;&lt;br /&gt;// set new value of attribute&lt;br /&gt;emailUpdate.new_delivery = new Picklist();    &lt;br /&gt;emailUpdate.new_delivery.Value = new_delivery;  // parameter&lt;br /&gt;&lt;br /&gt;tue.Email = emailUpdate;    &lt;br /&gt;UpdateRequest upreq = new UpdateRequest();&lt;br /&gt;&lt;br /&gt;upreq.Target = tue;&lt;br /&gt;UpdateResponse upres = (UpdateResponse)service.Execute(upreq);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-1896259355337442507?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/1896259355337442507/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=1896259355337442507' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/1896259355337442507'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/1896259355337442507'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2008/08/targetupdate-sample-code.html' title='TargetUpdate Sample Code.'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-3263788770405134948</id><published>2008-07-23T11:43:00.000+04:00</published><updated>2008-07-23T11:49:19.983+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='support'/><category scheme='http://www.blogger.com/atom/ns#' term='forum'/><title type='text'>Dynamics CRM 4.0 Solution Center</title><content type='html'>Команда Microsoft Dynamics CRM 4.0 создали на сайте поддрежки Microsoft страницу &lt;a href="http://support.microsoft.com/ph/12976"&gt;Dynamics CRM 4.0 Solution Center&lt;/a&gt;, где публикуются решения, на часто возникающие проблемы и вопросы.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-3263788770405134948?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/3263788770405134948/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=3263788770405134948' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/3263788770405134948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/3263788770405134948'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2008/07/dynamics-crm-40-solution-center.html' title='Dynamics CRM 4.0 Solution Center'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-3966137216860835948</id><published>2008-07-22T17:52:00.001+04:00</published><updated>2008-07-22T18:07:42.524+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='размышления'/><title type='text'>Кастомизируемость</title><content type='html'>Очень меня печалит, что переводили CRM 4.0  видимо с помощью программы переводчика, а не лингвиста-переводчика. Особенно это заметно, когда в сущности &lt;span style="color:#0300FF"&gt;template&lt;/span&gt; атрибут &lt;span style="color:#0300FF"&gt;title&lt;/span&gt; переведен как "&lt;span style="color:#FFAA00"&gt;Должность&lt;/span&gt;".&lt;br /&gt;Это не было бы критично, если бы разработчики CRM позволили менять названия атрибутов стандартными средствами.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-3966137216860835948?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/3966137216860835948/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=3966137216860835948' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/3966137216860835948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/3966137216860835948'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2008/07/blog-post_22.html' title='Кастомизируемость'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-9013769793922279276</id><published>2008-07-21T19:56:00.000+04:00</published><updated>2008-07-21T20:01:28.284+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='download'/><category scheme='http://www.blogger.com/atom/ns#' term='SDK'/><title type='text'>Microsoft Dynamics CRM 4.0 SDK</title><content type='html'>Если кто-то еще не знает где взять(скачать) Microsoft Dynamics CRM SDK, то это можно сделать вот тут:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkID=102966&amp;clcid=0x409"&gt;Microsoft Dynamics CRM 4.0 Software Development Kit&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;P.S. Версия SDK 4.0.5&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-9013769793922279276?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/9013769793922279276/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=9013769793922279276' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/9013769793922279276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/9013769793922279276'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2008/07/microsoft-dynamics-crm-40-sdk.html' title='Microsoft Dynamics CRM 4.0 SDK'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-6643265783026630398</id><published>2008-07-21T12:31:00.000+04:00</published><updated>2008-07-21T19:59:28.485+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='download'/><category scheme='http://www.blogger.com/atom/ns#' term='email'/><title type='text'>CRM 4.0 E-mail access type bulk setting tool</title><content type='html'>Джим Ванг написан замечательную утилиту для правки email'ов.&lt;br /&gt;Эта утилита, в помощь администраторам CRM, позволяет менять настройки доступа для всех писем попадающих в фильтр по определенному пользователю, т.е. массово. Сама Dynamics CRM не предоставляет такой возможности.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Скачачать ее можно здесь: &lt;a href="http://code.msdn.microsoft.com/crm/Release/ProjectReleases.aspx"&gt;http://code.msdn.microsoft.com/crm/Release/ProjectReleases.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-6643265783026630398?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/6643265783026630398/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=6643265783026630398' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/6643265783026630398'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/6643265783026630398'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2008/07/crm-40-e-mail-access-type-bulk-setting.html' title='CRM 4.0 E-mail access type bulk setting tool'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-811865710140766143</id><published>2008-07-14T20:17:00.002+04:00</published><updated>2009-04-14T14:56:49.728+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='русский'/><category scheme='http://www.blogger.com/atom/ns#' term='customization'/><category scheme='http://www.blogger.com/atom/ns#' term='ISV'/><title type='text'>ISV.config.xml и русские символы</title><content type='html'>Если при импорте ISV.config.xml у вас не отображаются русские символы, то посмотрите, есть ли у вас в начале файла строка&lt;br /&gt;&lt;pre class="brush:xml"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&gt;;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-811865710140766143?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/811865710140766143/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=811865710140766143' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/811865710140766143'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/811865710140766143'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2008/07/isvconfigxml_14.html' title='ISV.config.xml и русские символы'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-2132069936142639701</id><published>2008-07-14T19:33:00.002+04:00</published><updated>2009-04-14T14:54:55.687+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='customization'/><category scheme='http://www.blogger.com/atom/ns#' term='ISV'/><title type='text'>ISV.config.xml</title><content type='html'>В MS CMR 4.0 поменялся формат ISV.config.xml&lt;br /&gt;Все Title и ToolTips теперь должны быть вынесены в отдельные тэги.&lt;br /&gt;Например, вместо&lt;br /&gt;&lt;pre class="brush:xml"&gt;&lt;br /&gt;&amp;lt;button&lt;br /&gt;title="Dial..."&lt;br /&gt;tooltip="Dials one of the phone numbers on this record"&lt;br /&gt;icon="/_imgs/ico_16_137.gif" url="/C4Web/C4Dial.aspx" passparams="1"&lt;br /&gt;winparams="directories=0,height=150,width=300,location=no,menubar=no,resizable=no,scrollbars=no,status=no,titlebar=no,toolbar=no" winmode="0" client="Web, Outlook" availableoffline="false"&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;следует писать&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:xml"&gt;&lt;br /&gt;&amp;lt;Button Icon="/_imgs/ico_16_137.gif" Url="/C4Web/C4Dial.aspx" PassParams="1" WinParams="directories=0,height=150,width=300,location=no,menubar=no,resizable=no,scrollbars=no,status=no,titlebar=no,toolbar=no" WinMode="0" Client="Web, Outlook" AvailableOffline="false"&gt;&lt;br /&gt;&amp;lt;Titles&gt;&lt;br /&gt;&amp;lt;Title LCID="1001" Text="Dial..." /&gt;&lt;br /&gt;&amp;lt;/Titles&gt;&lt;br /&gt;&amp;lt;ToolTips&gt;&lt;br /&gt;&amp;lt;ToolTip LCID="1001" Text="Dials one of the phone numbers on this record" /&gt;&lt;br /&gt;&amp;lt;/ToolTips&gt;&lt;br /&gt;&amp;lt;/Button›&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-2132069936142639701?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/2132069936142639701/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=2132069936142639701' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/2132069936142639701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/2132069936142639701'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2008/07/isvconfigxml.html' title='ISV.config.xml'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-4470627278989131454</id><published>2008-07-11T15:19:00.002+04:00</published><updated>2009-05-04T15:47:20.100+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='error'/><title type='text'>Microsoft.Crm.WebServices.Crm2007.MultipleOrganizationSoapHeaderAuthenticationProvider</title><content type='html'>&lt;b&gt;Проблема:&lt;/b&gt;&lt;br /&gt;В MS CRM 4.0 столкнулся с проблемой размещения своего сайта в виртуальном каталоге сайта MS CRM.&lt;br /&gt;&lt;br /&gt;Ошибка выдавалась следующая:&lt;br /&gt;&lt;div style="background-color:#CACABA"&gt;&lt;blockquote&gt;&lt;br /&gt;Microsoft.Crm.WebServices.Crm2007.MultipleOrganizationSoapHeaderAuthenticationProvider,  Microsoft.Crm.WebServices, Version=4.0.0.0, Culture=neutral,  PublicKeyToken=31bf3856ad364e35' doesn't exist.&lt;br /&gt;Parameter name:  Microsoft.Crm.WebServices.Crm2007.MultipleOrganizationSoapHeaderAuthenticationProvider,  Microsoft.Crm.WebServices, Version=4.0.0.0, Culture=neutral,  PublicKeyToken=31bf3856ad364e35&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Решение:&lt;/b&gt;&lt;br /&gt;Было найдено на &lt;a href="http://forums.microsoft.com/Dynamics/ShowPost.aspx?PostID=2611229&amp;amp;SiteID=27"&gt;форуме Dynamics&lt;/a&gt;&lt;br /&gt;Решение совершенно бредовое, но только так и удалось запустить свой сайт. Необходимо зарегистрировать в GAC библиотеку Microsoft.Crm.WebServices.dll(лежит в %CRM Web%/bin)&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(84, 161, 255);"&gt;&lt;b&gt;gacutil /i Microsoft.Crm.WebServices.dll&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Если вы не нашли gacutil.exe, то можно в Explorer'е просто перетащить нужную DLL в папку WINDOWS\assembly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-4470627278989131454?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/4470627278989131454/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=4470627278989131454' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/4470627278989131454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/4470627278989131454'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2008/07/microsoftcrmwebservicescrm2007multipleo.html' title='Microsoft.Crm.WebServices.Crm2007.MultipleOrganizationSoapHeaderAuthenticationProvider'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7798772653646425208.post-4943043497887911896</id><published>2008-07-10T18:57:00.000+04:00</published><updated>2008-07-10T19:06:23.628+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='информация'/><title type='text'>Ожидания</title><content type='html'>Под Microsoft CRM я начал писать недавно. До этого много сил отдал Navision, так и не достигнув нирваны, но добившись каких-то успехов.&lt;br /&gt;&lt;br /&gt;MS CRM привлек сразу несколькими возможностями: писать под web  с использованием нормального объектно-ориентированного языка C# и в нормальной рабоче среде Visual Studio. Это радовало. Особенно после Navision.&lt;br /&gt;Но как оказалось все было не так радужно, как представлялось. MS CRM да и .Net Framework преподносит сюрпризы, которые могут по началу шокировать. Но задачи становятся настолько интересными, на сколько это вообще возможно!&lt;br /&gt;&lt;br /&gt;Вот о некоторых таких задачах и их решении я и буду писать здесь. Возможно тематика будет не всегда касаться непосредственно CRM, но всегда программирования.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7798772653646425208-4943043497887911896?l=crmpro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crmpro.blogspot.com/feeds/4943043497887911896/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7798772653646425208&amp;postID=4943043497887911896' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/4943043497887911896'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7798772653646425208/posts/default/4943043497887911896'/><link rel='alternate' type='text/html' href='http://crmpro.blogspot.com/2008/07/blog-post.html' title='Ожидания'/><author><name>hyper</name><uri>http://www.blogger.com/profile/16996652523024990008</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://4.bp.blogspot.com/_jQIK0YmmxwQ/SgBwTQbUKFI/AAAAAAAAAAM/0uqarQq7oZQ/S220/face_2008_2.jpg'/></author><thr:total>0</thr:total></entry></feed>
