您是否知道是否有解决方案可以通过代码C#修改选项集中选项的值(而不是标签)。
例如,我有这个选项: (标签:OldLabel,Value:OldValue)
我想要这个: (标签:OldLabel,Value:NewValue)
我尝试使用以下代码,但无效:
UpdateOptionValueRequest updateOptionValueRequest =
new UpdateOptionValueRequest
{
OptionSetName = _globalOptionSetName,
// Update the second option value.
Value = newValue,
Label = new Label("oldLabel", _languageCode)
};
_serviceProxy.Execute(updateOptionValueRequest);
//Publish the OptionSet
PublishXmlRequest pxReq3 = new PublishXmlRequest { ParameterXml = String.Format("<importexportxml><optionsets><optionset>{0}</optionset></optionsets></importexportxml>", _globalOptionSetName) };
_serviceProxy.Execute(pxReq3);
答案 0 :(得分:2)
UpdateOptionValueRequest
是使用Key(Integer)更新Label(显示文本)的消息。您希望使用Label更新Integer键,不可以。
这将在整个系统中为现有数据与新数据创建数据不一致。即使你手动更新这样或删除选项&amp;使用SDK重新创建一个新选项,数据丢失是不可避免的。
如果您在MSDN中看到代码示例,那么评论会清楚地显示出来。
#region How to update an option item in a picklist
// In order to change *labels* on option set values (or delete) option set
// values, you must use UpdateOptionValueRequest
// (or DeleteOptionValueRequest).
UpdateOptionValueRequest updateOptionValueRequest =
new UpdateOptionValueRequest
{
OptionSetName = _globalOptionSetName,
// Update the second option value.
Value = optionList[1].Value.Value,
Label = new Label("Updated Option 1", _languageCode)
};
_serviceProxy.Execute(updateOptionValueRequest);
//Publish the OptionSet
PublishXmlRequest pxReq3 = new PublishXmlRequest { ParameterXml = String.Format("<importexportxml><optionsets><optionset>{0}</optionset></optionsets></importexportxml>", _globalOptionSetName) };
_serviceProxy.Execute(pxReq3);
Console.WriteLine("Option Set option *label* changed.");
#endregion How to update an option item in a picklist
答案 1 :(得分:1)
根据@Arun Vinoth,这似乎不可能通过代码,有充分的理由,因为它可能会破坏数据。
假设您有这个选项集:
1000 Ms。
1001太太
1002先生
1003博士
在记录中存储选项设置值时,CRM仅存储整数值。因此,在Contact的Salutation列中,将包含1000,1001等值。 如果你进入并将Mrs.的值从1001更改为2002,那么1001的记录仍然会有1001.当你需要加载该联系人时,它会尝试找到1001,它已不再存在,你会得到一个错误。
选项集值的主列表存储在名为StringMap的表中,该表将整数值与其标签(取决于语言)相匹配。 每当CRM检索选项集列时,它会在stringmap表中查找整数值并返回活动语言的标签。
由于所有这些,执行所需操作的方法是在选项集中创建新值,将具有旧值的所有记录设置为具有新值,然后从选项集中删除旧值。
你真的想在这做什么?