2017-03-31 56 views
0

下面的代碼似乎在創建聯繫人時起作用,對於輸入值發佈它搜索並關聯現有訂閱。但是相同的代碼不適用於更新聯繫人。任何意見,爲什麼這可能會發生在我的插件?Dynamics CRM插件 - 對於輸入發佈值,搜索訂閱(如果找到)將其添加到創建/更新的聯繫人

if (!String.IsNullOrEmpty(publication)) 
{ 
    //Query for existing Publication 
    var publicationQuery = new QueryByAttribute("msdynhcp_publicationnewsletter"); 
    //publicationQuery.ColumnSet.AllColumns = true; 
    publicationQuery.Attributes.AddRange("msdynhcp_publicationname"); 
    publicationQuery.Values.AddRange(publication); 
    publicationQuery.TopCount = 1; 

    //Call Query 
    EntityCollection publicationIds = organizationService.RetrieveMultiple(publicationQuery); 

    if (publicationIds.Entities.Count > 0) 
    { 
     //Query for existing subscription 
     var subscriptionQuery = new QueryExpression("msdynhcp_subscription"); 

     var linkedContact = new LinkEntity("msdynhcp_subscription", "contact", "msdynhcp_contactlookup", "contact" + "id", JoinOperator.Inner); 
     linkedContact.LinkCriteria = new FilterExpression(LogicalOperator.And); 
     linkedContact.LinkCriteria.AddCondition("contact" + "id", ConditionOperator.Equal, ContactId); 
     subscriptionQuery.LinkEntities.Add(linkedContact); 

     var linkedPublication = new LinkEntity("msdynhcp_subscription", "msdynhcp_publicationnewsletter", "msdynhcp_publicationlookup", "msdynhcp_publicationnewsletter" + "id", JoinOperator.Inner); 
     linkedPublication.LinkCriteria = new FilterExpression(LogicalOperator.And); 
     linkedPublication.LinkCriteria.AddCondition("msdynhcp_publicationnewsletter" + "id", ConditionOperator.Equal, publicationIds[0].Id); 
     subscriptionQuery.LinkEntities.Add(linkedContact); 

     subscriptionQuery.TopCount = 1; 

     //Call Query 
     EntityCollection subscriptionIDs = organizationService.RetrieveMultiple(subscriptionQuery); 

     if (subscriptionIDs.Entities.Count == 0) 
     { 
      //New Subscription 
      var crmSubscription = new Entity("msdynhcp_subscription"); 
      crmSubscription["msdynhcp_utcdatetimestamp"] = DateTime.UtcNow; 
      crmSubscription["msdynhcp_enabledactive"] = true; 

      //Call Create 
      var id = organizationService.Create(crmSubscription); 

      //Call Associate 
      organizationService.Associate("msdynhcp_subscription", id, new Relationship("msdynhcp_contact_new_subscription_contactlookup"), 
       new EntityReferenceCollection(new List<EntityReference>() { new EntityReference("contact", new Guid(ContactId)) })); 
      //Call Associate 
      organizationService.Associate("msdynhcp_subscription", id, new Relationship("msdynhcp_new_publicationnewsletter_new_subscription_publicationlookup"), 
       new EntityReferenceCollection(new List<EntityReference>() { new EntityReference("msdynhcp_publicationnewsletter", publicationIds.Entities[0].Id) })); 
     } 
    } 
} 
+0

定義「不會工作」。它引發異常?發佈郵件.dld不會引發錯誤但聯繫人未更新?爲什麼您會得出結論?您是否在更新後更新'organizationService'? –

+0

它不會拋出任何異常,但聯繫人不會更新相關訂閱。總之,聯繫人在更新後保存,即使發佈與訂閱相關聯,也不添加訂閱並沒有拋出任何異常,我不更新更新後的組織服務,我是否可以進一步澄清?謝謝! –

回答

0

你沒有發佈整個插件邏輯,但是如果它在創建時工作並且不能在更新上工作,那麼很可能,你期望在你的插件中有一個根本就不存在的屬性。創建實體時,必須填寫所有必填字段(至少如果您在Web表單上執行該操作),並且所有這些屬性都位於插件的InputParameters中的Target中。但是當你更新實體時,只有被修改的屬性存在於InputParameters的Target中(當然還有一些標準屬性,如modifiedon,modifiedby等)。所以,最有可能的是,你的插件會檢查一些屬性是否爲null(這首先檢查publication看起來很可疑,但我不知道是否是這樣,因爲它不是完整的代碼。爲了確保該屬性在那裏,得到它從PostImage/PreImage不是目標(請參閱:https://msdn.microsoft.com/en-us/library/gg309673.aspx#Anchor_5

相關問題