2010-01-04 2 views
1

CRM 3.0 콜 아웃의 라이브러리를 다시 컴파일하여 CRM 4.0 인스턴스에 배포했습니다. 내 PostUpdate 콜 아웃 중 하나가 service.Update()를 호출합니다. 이로 인해 업데이트 메서드가 여러 번 발생합니다. 결국 시간 초과 오류로 인해 중지됩니다. 이러한 설명 선을 CRM 3.0과 함께 사용하면 이러한 일이 발생하지 않습니다.CRM 4.0에서 실행되는 CRM 3.0 콜 아웃 무한 루프 발생

메서드 서명은이 사용자 지정 코드의 진입 점에 대해 다음과 같습니다.

public override void PostUpdate(CalloutUserContext userContext, CalloutEntityContext entityContext, string preImageEntityXml, string postImageEntityXml) 

답변

1

IPluginExecutionContext의 속성 중 하나는 깊이입니다. 이것은 플러그인이 실행중인 'call-stack'플러그인의 '깊이'를 나타냅니다. CRM 폼에서 저장을 누르면 깊이 1부터 시작합니다. 게시물 업데이트가 업데이트를 호출 할 때마다 깊이가 증가합니다.

플러그인 로직을 실행하기 전에 깊이가 1인지 확인하는 사용자가 있습니다. 그러나 이것은 모두에게 옳지 않습니다. 워크 플로우가이 엔티티를 업데이트하는 경우 깊이는 2입니다 (워크 플로우는 1이었고 이제는 업데이트가 2입니다).

깊이가 8이되면 CRM은 재귀 호출을 중지합니다. 실제로 시간 초과 또는이 오류가 발생하는지 확실하지 않습니다. 오랜 시간 동안 나는 그들이 어떤 오류를 던지는지 보았다.

우리는 재귀를 확인해야하는 곳에서 우리의 솔루션 전반에 걸쳐 사용자 지정 코드를 개발했습니다. 나는이 모든 것을 공유 할 수있는 입장이 아니지만, 당신이 원한다면 그 생각을 가질 수 있습니다.

또 다른 아이디어는 엔티티에 맞춤 속성을 추가하는 것입니다. 양식에 넣지 마십시오. 일반적으로 해당 속성은 업데이트 속성 가방에 존재하지 않습니다. 다음 번에 업데이트 플러그인을 단락시킬 코드에서 update를 호출 할 때 속성을 설정하십시오. 속성이 설정되면 단락이 발생하고 플러그인을 처리하지 않습니다.

희망이 도움이됩니다.

+0

플러그인이 아닌 설명 선을 사용하고 있습니다. 내 질문에 추가 한 코드 줄을보십시오. 새 속성을 추가 할 생각입니다. 그러나 설명 선이 crm 3.0에서 실행될 때 필요하지 않습니다. – KClough

+0

crm 3.0에서 테스트 할 때 첫 번째 이름 필드가 채워진 문제가 있습니다. crm 4.0에서는 그렇지 않았고 사업 논리로 인해 루핑을 막았습니다. 감사. – KClough

관련 문제