Dynamics CRM 2011 から systemuser 情報を取得しようとしているときにエラーが発生しました。次のコードが機能します。
public List<CrmUser> GetAllCrmUsers()
{
List<CrmUser> CrmUsers = new List<CrmUser>();
using (CrmSdk.OrganizationServiceClient myCrm = new CrmSdk.OrganizationServiceClient("CustomBinding_IOrganizationService1"))
{
try
{
// this will need to be changed... the address to a key in the app.config and the credentials will need to be whatever is correct for the
// end server to hit the CRM WCF service
myCrm.Endpoint.Address = new System.ServiceModel.EndpointAddress("https://devcrm.removed/XRMServices/2011/Organization.svc");
myCrm.ClientCredentials.Windows.ClientCredential = System.Net.CredentialCache.DefaultNetworkCredentials;
CrmSdk.ColumnSet colsPrincipal = new CrmSdk.ColumnSet();
colsPrincipal.Columns = new string[] { "lastname", "firstname", "domainname", "systemuserid" };
CrmSdk.QueryExpression queryPrincipal = new CrmSdk.QueryExpression();
queryPrincipal.EntityName = "systemuser";
queryPrincipal.ColumnSet = colsPrincipal;
CrmSdk.EntityCollection myAccounts = myCrm.RetrieveMultiple(queryPrincipal);
foreach (CrmSdk.Entity myEntity in myAccounts.Entities)
{
//create new crm users and add it to the list
CrmUser thisOne = new CrmUser();
thisOne.firstName = myEntity.Attributes[0].Value.ToString();
thisOne.lastName = myEntity.Attributes[1].Value.ToString();
thisOne.userId = myEntity.Attributes[2].Value.ToString();
thisOne.userGuid = myEntity.Attributes[3].Value.ToString();
CrmUsers.Add(thisOne);
}
}
catch (Exception ex)
{
CrmUser thisOne = new CrmUser();
thisOne.firstName = "Crap there was an error";
thisOne.lastName = ex.ToString();
CrmUsers.Add(thisOne);
}
}
return CrmUsers;
}
ただし、サービスを呼び出すときに「businessunitid」を ColumnSet に追加しようとすると、次のエラーが表示されます。
「行 1 の位置 1879 にエラーがあります。要素 \ 2004/07/System.Collections.Generic:value\' には、名前 \'/xrm/2011/Contracts:OptionSetValue\' にマップされるタイプのデータが含まれています。この名前にマップされる型の知識。DataContractResolver の使用を検討するか、\'OptionSetValue\' に対応する型を既知の型のリストに追加します。たとえば、KnownTypeAttribute 属性を使用するか、既知の型のリストに追加します。 DataContractSerializer に渡されました。\'"
このエラーは、返されるデータがメタデータ情報によると「Lookup」タイプであるためです。[KnownType(typeof(OptionSetValue))]
タグのすぐ下に追加しようとし[Data Contract]
ましたが無駄でした。これを 2 日間グーグルとビンギング (?) しているので、既に回答されている場合はお詫びします。