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

时间:2011-08-05 05:47:16

标签: c# dynamics-crm dynamics-crm-2011

我正在尝试在CRM 2011中创建一个实体(不是开箱即用的类型,但CRM 4中的内容将被称为DynamicEntity ...具有我的自定义属性)。下面的代码给了我这个错误,我不知道为什么。如果我删除new_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);
   }
}

2 个答案:

答案 0 :(得分:3)

我同意你所拥有的应该可以正常工作。这只能意味着该值未发布或不正确。正如@glosrob提到的那样,检查更改是否实际发布。通过查看已发布的表单并查看是否存在新值来确认这些值(也许可以使用IE Developer Tools进行双重检查 - 点击F12 - 并确认HTML中select>选项对象中的值包含您期望的整数)。

顺便说一下,你的代码看起来比必要的复杂(恕我直言!)。我相信这更容易阅读效率:

试试这个:

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);
   }
}

答案 1 :(得分:0)

给这一点:key = "new_accounttype", value = new OptionSetValue(100000003)