2014-03-03 2 views
1

동일한 플러그인에 대한 여러 호출간에 IPluginExecutionContext의 SharedVariable을 사용하려고합니다. 다음과 같은 시나리오가 있습니다 :CRM 2011 플러그인의 공유 변수

사용자가 새로운 엔티티 레코드를 생성하려고 시도하고 플러그인이 사전 단계에서 트리거되었습니다. 어떤 논리를 바탕으로, 정말 같은 SharedVariable을 설정하고 있습니다 :

var context = (IPluginExecutionContext) serviceProvider.GetService(typeof (IPluginExecutionContext)); 
context.SharedVariables.Add("MySharedVariable", true); 

나는 다음과 같이 동일한 개체의 다른 레코드를 업데이트하려고 :

var qe = new QueryExpression("new_myentity"); 
qe.Criteria.AddCondition("ecs_myfield", ConditionOperator.Equal,"someValue"); 
var results = service.RetrieveMultiple(qe); 

foreach (var foo in results.Entities) 
{ 
    //Do something to foo 
    service.Update(foo); 
} 

는 또한 등록 플러그인을 그러나 Pre 단계에서 업데이트를하면 MySharedVariable을 확인하고 설정 여부에 따라 다른 작업을 수행하려고합니다.

업데이트에서 컨텍스트에 'MySharedVariable'키가 없습니다. ITracingService를 사용하여이를 확인했습니다.

다른 레코드에서 실행되는 플러그인간에 공유 변수를 전달하는 데 몇 가지 제한 사항이 있습니까?

의 플러그인 실행 모드를 모두 작성 및 업데이트는 동기로 설정하고 이미 설명, 모두

답변

4

나는 종종 SharedVariables를 사용하지 않는 사전 작업 단계에 등록되어 있지만, 나는 그들이 확신한다 동일한 실행 컨텍스트에서 사용할 수 있습니다 (예 : 사전 이벤트에서 동일한 레코드의 동일한 메시지에 대한 포스트 이벤트까지).

다른 레코드의 서로 다른 메시지에 다른 플러그인간에 값을 공유하는 데 사용할 수 없습니다 (예 : 하나의 레코드 만들기에서 값을 설정하고 다른 레코드의 업데이트 메시지에서 값 검색)

상황에 따라 사용자 지정 엔터티를 사용하여 값을 저장하거나 엔터티에 대한 추가 특성을 만드는 것이 바람직하다고 생각합니다.

+1

? 나는 그들이 트랜잭션과 마찬가지로 전달되었다고 생각하고 있었고, 그래서 당신의 플러그인이 트리거하는 플러그인이 무엇이든간에, 그들은 따라 가게 될 것입니다, 맞지 않습니까? – Daryl

+0

일반적인 시나리오의 테스트 일괄 처리만으로도이를 명확히 할 수 있다고 생각합니다. –

+2

무엇을?!?!? 당신은 할 시간이 없다는 테스트를 할 수있는 무한한 시간이 없다는 것을 의미합니까 ??? :) – Daryl

0

안녕하세요, 당신이 설명하신 시나리오를 살펴보십시오.

나는이 자기 자신을 시험 할 수 없을 것이다. 그러나 업데이트 플러그인을 Pre에서 Post로 변경하는 경우.

사전 작업에서 까지 작업 후 업데이트 작업. 실행 컨텍스트에서 SharedVariable을 확실히 얻습니다.

SharedVariables는 문맥에 따라 전달되는 주변의 규칙은 무엇

Pass Data Between Plug-Ins

CRM 2011 Plugins – Shared Variables