C# 在CRM 2011中创建实体时出错-CRM不喜欢OptionSetValue

C# 在CRM 2011中创建实体时出错-CRM不喜欢OptionSetValue,c#,dynamics-crm,dynamics-crm-2011,C#,Dynamics Crm,Dynamics Crm 2011,我试图在CRM 2011中创建一个实体,而不是开箱即用的实体,但CRM 4中的实体被称为DynamicEntity。。。一个与我的自定义属性。下面的代码给了我这个错误,我不知道为什么。如果我删除新的_accounttype属性并尝试使用另一个自定义属性,那么这段代码也会起作用 CRM似乎对将OptionSetValue设置为该键值对的值产生了问题。new_accounttype是CRM 2011中的一个选择列表或OptionSet,该值100000003是从前端提取的,因此它是一个有效值 错误:

我试图在CRM 2011中创建一个实体,而不是开箱即用的实体,但CRM 4中的实体被称为DynamicEntity。。。一个与我的自定义属性。下面的代码给了我这个错误,我不知道为什么。如果我删除新的_accounttype属性并尝试使用另一个自定义属性,那么这段代码也会起作用

CRM似乎对将OptionSetValue设置为该键值对的值产生了问题。new_accounttype是CRM 2011中的一个选择列表或OptionSet,该值100000003是从前端提取的,因此它是一个有效值

错误:发生验证错误。上的“new_accounttype”的值 “帐户”类型的记录超出有效范围

我做错了什么

public static void CreateAccount(string accountName, string accountType)
{
   //Create properties
   KeyValuePairOfstringanyType[] attributes = new KeyValuePairOfstringanyType[2];
   attributes[0] = new KeyValuePairOfstringanyType() { key = "name", value = accountName ?? "" };
   attributes[1] = new KeyValuePairOfstringanyType() { key = "new_accounttype", value = new OptionSetValue() { Value = 100000003 } };

   ////Create DynamicEntity
   Entity accountToCreate = new Entity();
   accountToCreate.LogicalName = "account";
   accountToCreate.Attributes = attributes;

   try
   {
     service.Create(accountToCreate);
   }
}

试一试:key=new\u accounttype,value=new options setvalue100000003我同意你所拥有的应该很好用。这只能表示该值未发布或不正确。正如@glosrob提到的,检查更改是否已实际发布。通过查看发布的表单并查看是否存在新值来确认这些值,或者使用IE开发人员工具(点击F12)进行双重检查,并确认HTML中的select>option对象中的值包含您期望的整数

顺便说一句,您的代码看起来比必要的更复杂!。我相信这更容易理解,但效率不低:

试试这个:

public static void CreateAccount(string accountName, string accountType)
{
   ////Create DynamicEntity
   Entity accountToCreate = new Entity();
   accountToCreate.LogicalName = "account";
   accountToCreate.Attributes = attributes;

   //Append properties
   accountToCreate.Attributes.Add("name", accountName ?? "" );
   accountToCreate.Attributes.Add("new_accounttype", new OptionSetValue(100000003);

   try
   {
     service.Create(accountToCreate);
   }
}

您是否引用了silverlight的soap端点?所有内容是否都已发布?根据使用的值和名称判断,这是一个自定义字段。只是一个疑难解答建议,获取一个具有该值的现有实体,然后查看它在调试器或其他输出中的设置。如果你的设置不是系统期望的,这里也有同样的问题。有解决方案吗?如果我不知道哪些值是有效值呢?如何知道picklist的一组或至少一个有效值?您需要调用以获取属性元数据:您可以在对PicklistAttributeMetadata的响应中强制转换元数据,然后访问OptionSet属性。肯定是+1表示良好提示。但我认为这应该是答案的一部分。毕竟,选项集的值是非常可变的,取决于组织,不是吗?