2016-11-16 1 views
0

나는 ms crm 2016에 대해 다음과 같은 중복을 감지하는 플러그인을 작성했습니다."ms crm duplication plugin"을 예외없이 메시지없이 완료하는 방법은 무엇입니까?

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

"사용자가 알지 못해도 레코드를 만들 수 없게"하는 방법은 없습니다. 레코드 작성을 방지하는 유일한 지원 f}은 동기 플 러그가 pre-operation에 등록되고 예외가 발생하는 경우입니다. CRM은 전체 트랜잭션을 롤백하여 저장을 방지합니다. 일치하는 기록을 위해 CRM을 조회하고 클라이언트 측의 기록 Prevent Save, 기록의 저장에

:

더 나은 대안은 자바 스크립트을 사용하는 것입니다. 이 방법으로 저장하면 서버 측에 저장되지 않습니다.


미운 해결 방법 (어떤 이유 당신은 자바 스크립트를 사용하지 않으려는 경우) :

post-op에 플러그인을 등록하거나 사용자 지정 워크 플로 작업을 사용하고 사후 기록을 삭제합니다. 이상적이지 않습니다.