我正在尝试在 CRM 4.0 中创建 ImportMap 对象。我需要设置 TargetEntity 属性,它是一个 Picklist 值。 链接文本似乎暗示它可以通过使用来完成
importmap map = new importmap();
map.name = "test map";
map.targetentity = new Picklist();
map.targetentity.name = "Contact"
但这似乎总是将目标实体属性保留为空。
有什么想法吗?
我正在尝试在 CRM 4.0 中创建 ImportMap 对象。我需要设置 TargetEntity 属性,它是一个 Picklist 值。 链接文本似乎暗示它可以通过使用来完成
importmap map = new importmap();
map.name = "test map";
map.targetentity = new Picklist();
map.targetentity.name = "Contact"
但这似乎总是将目标实体属性保留为空。
有什么想法吗?
如果它是一个选择列表,您将必须提供索引值。假设您有一个名为 TargetValues.Contact 的枚举值为 1,那么它将如下所示:
map.targetentity = new Picklist();
//map.targetentity.name = "Contact"
map.targetentity.Value = Convert.ToInt32(TargetEntities.Contact);
- 编辑 -
我相信对于您要实现的目标,您必须以某种方式检索目标实体,然后才能枚举它们。
看到这个,可能这会有所帮助。
如果上面没有用,那么以下是你可以做到的:
但不知何故,索引可能会在一段时间内发生变化,因此在这种情况下,您可以使用这些值/索引创建一个枚举 xml,并在运行时加载它们。但是这种方法的问题在于:
不太好的方法,但是在截止日期前运行这是你可以做的;这永远不会破坏或造成麻烦。只是那个xml加载部分不好。
顺便说一句,如果你通过 CRM SDK,你会发现类似的例子。
将此函数用于动态请求选项列表值:
public IDictionary<int,string> PickListValues(string entityname, string attributename)
{
var req = new RetrieveAttributeRequest();
req.EntityLogicalName = entityname;
req.LogicalName = attributename;
req.RetrieveAsIfPublished = true;
var response = (RetrieveAttributeResponse)Service.MetaDataService.Execute(req);
var picklist = (PicklistAttributeMetadata)response.AttributeMetadata;
var res = new Dictionary<int,string>();
foreach (var item in picklist.Options)
res.Add(item.Value.Value, item.Label.UserLocLabel.Label);
return res;
}