2012-09-13 9 views
2

플러그인을 사용 중이며 레코드 상태 코드 값을 기반으로 작업을 수행하려고합니다. 나는 당신이 entity.FormattedValues["statuscode"] 옵션 세트에서 값을 얻기 위해 사용할 수 있지만 그것을 시도 할 때 "주어진 키가 사전에 존재하지 않는다"는 에러 메시지를받는 것을 보았다.C에서 상태 코드 텍스트 가져 오기

당신이 찾고있는 필드의 변경 사항을 플러그인에서 찾을 수 없을 때 일어날 수있는 일이지만, 이미 entity.Contains("statuscode")을 사용하여 존재 함을 확인했으며이 오류는 계속 발생하지만 여전히이 오류를 발생시킵니다.

누구나 그 실패 이유를 알아낼 수 있습니까?

덕분에

답변

3

나는 전에 entity.FormattedValues을 본 적이 없다.

나는 일반적으로 entity.Attributes을 사용합니다. entity.Attributes["statuscode"].

MSDN


편집

의 CRM이 경우의 상태 코드에 추가 정보를 보유 목적에 OptionSetValue가 사용하는, 그래서 당신이 필요로하는 가치를 얻을 수를 값의 많은 랩 :

((OptionSetValue)entity.Attributes["statuscode"]).Value 

이것은 Crm의 기본 값이므로 숫자를 반환합니다.

Crm에서 사용자 지정 옵션을 여는 경우 각 옵션의 레이블과 값을 볼 수 있도록 보통 (일부 시스템 필드는 잠겨 있습니다.) 당신이 레이블을해야하는 경우

enter image description here

, 당신은 CRM의 정보에 따라 약간의 하드 코딩을 할 수있는 중.

또는 here과 같이 메타 데이터 서비스에서 검색 할 수 있습니다. SDK가이를 확인하는 데 실패하지만, 내가 FormattedValues는 오직 크다고 생각하지만

if (entity.FormattedValues.Contains("statuscode")){ 
    var myStatusCode = entity.FormattedValues["statuscode"]; 
} 

:

+0

옵션 세트 값을 얻기 전에 FormattedValues를 보았지만 사용하지는 않았습니다. entity.Attributes [ "statuscode"]를 사용하려고하면 "Microsoft.Xrm.Sdk.OptionSetValue"가 반환됩니다. – jimminybob

+0

@JamesWood OP가 기본 정수가 아닌 상태 코드를 따르는 텍스트 뒤에 있다고 생각합니다. 통화 필드를 사용하기 전에이 속성을 사용했습니다. SDK에 정보가 부족하지만 숫자 및 통화 속성에 대해서만 유효하다고 판단됩니다. –

+0

내 게시물을 업데이트했습니다. 편집을 참조하십시오. –

3

하여 오류를 방지하려면, 당신은 당신이 (오히려 Attributes 수집보다) 사용하고자하는 컬렉션을 확인해야 숫자 또는 통화 속성을 나타냅니다. (내 생각 엔 파트 - 추측).

+0

그것은 그 사건이 나타납니다, 나는 방금 귀하의 코드를 시도하고 오류가 사라진 동안 가치를 데리러하지 않습니다. 당신의 도움을 주셔서 감사합니다 – jimminybob

0

entity.FormattedValues는 문자열 표시 값에서만 작동합니다.

예를 들어 표시 이름이 1,2,3, 인 옵션 집합이 있습니다. 위의 명령문은 정수이므로 이러한 값을 인식하지 못합니다. 당신은

http://msdn.microsoft.com/en-in/library/microsoft.xrm.sdk.formattedvaluecollection.aspx

아래의 링크 형식 값의 정확한 (고화질)을 보았다면 당신은이 문은 문자열 표시 값에 대한 유효 찾을 수 있습니다. 이 명령.을 Integer 값과 함 2 g 용하 려하면 사전 예외에서 키를 찾을 수 없습니다.

코드에서 정수 표시 이름 옵션 집합을 검색하는 데이 문을 사용하지 마십시오. 이 옵션 설정에 대해 이야기 할 때

0

string Title = (bool)entity.Attributes.Contains("title") ? entity.FormattedValues["title"].ToString() : ""; 

시도, 당신은 가치와 라벨을 가지고있다. 이것이 당신에게주는 것은 레이블입니다. '?' null 값이 전달되지 않도록합니다.

관련 문제