2016-11-16 16 views
0

我爲ms crm 2016編寫了以下插件,用於檢測重複內容。如何毫無例外地完成「ms crm複製插件」並且沒有消息?

public void Execute(IServiceProvider serviceProvider) 
    { 
     var context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext)); 
     var serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory)); 
     var service = (IOrganizationService)serviceFactory.CreateOrganizationService(context.UserId); 

     if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity) 
     { 
      var entity = (Entity) context.InputParameters["Target"]; 
      var name = entity.GetAttributeValue<string>("name"); 

      var opportunityCompany = new QueryExpression 
      { 
       EntityName = entity.LogicalName, 
       ColumnSet = new ColumnSet("name") 
      }; 
      opportunityCompany.Criteria.AddCondition("name", ConditionOperator.Equal, name); 

      var retrieveAccount = service.RetrieveMultiple(opportunityCompany); 

      //If the retrieved Company Count Greater Than 1 , following Error Message Throw 

      if (retrieveAccount.Entities.Count > 1) 
      { 
       throw new InvalidPluginExecutionException("Following Record with Same Name is Exists"); 
      } 
     } 
    } 

這工作正常,但在重複的情況下,我想結束記錄創建沒有例外,沒有消息在頁面上。我如何在插件中做到這一點?有些人跟我說我可以在CodeActivity中實現這個功能。我如何在ms crm插件中實現CodeActivity?

或者,我想停止插件,以便「用戶」不知道它。它有多好?

回答

2

沒有辦法「防止在用戶不知情的情況下創建記錄」。防止記錄創建的唯一支持方式是在pre-operation上註冊同步插件並引發異常。 CRM回滾整個事務以防止保存。

一個更好的選擇是使用JavaScript的

對記錄的保存,查詢CRM爲匹配的記錄,並在客戶端的記錄Prevent Save。這樣保存將永遠不會讓服務器端。


醜陋的解決方法(如果出於某種原因你不喜歡使用JavaScript):

註冊上post-op插件或使用自定義工作流活動,並在事後刪除的記錄。不理想。

相關問題