0

我正在尝试在 CRM 4.0 中创建 ImportMap 对象。我需要设置 TargetEntity 属性,它是一个 Picklist 值。 链接文本似乎暗示它可以通过使用来完成

importmap map = new importmap();
map.name = "test map";
map.targetentity = new Picklist();
map.targetentity.name = "Contact"

但这似乎总是将目标实体属性保留为空。

有什么想法吗?

4

2 回答 2

1

如果它是一个选择列表,您将必须提供索引值。假设您有一个名为 TargetValues.Contact 的枚举值为 1,那么它将如下所示:

map.targetentity = new Picklist();
//map.targetentity.name = "Contact"
map.targetentity.Value = Convert.ToInt32(TargetEntities.Contact);

- 编辑 -

我相信对于您要实现的目标,您必须以某种方式检索目标实体,然后才能枚举它们。

看到这个,可能这会有所帮助。

如果上面没有用,那么以下是你可以做到的:

  1. 从 UI 打开的选择列表,记下索引的数量及其对应的值。
  2. 在代码中创建了一个枚举,并将这些值/索引分配给它。
  3. 在运行时使用枚举(如上例所示)来设置选择列表。

但不知何故,索引可能会在一段时间内发生变化,因此在这种情况下,您可以使用这些值/索引创建一个枚举 xml,并在运行时加载它们。但是这种方法的问题在于:

  1. 每次有人要更改索引,这种情况很少见,管理员也必须更改 xml 文件。
  2. 加载外部 xml 文件是一种开销。

不太好的方法,但是在截止日期前运行这是你可以做的;这永远不会破坏或造成麻烦。只是那个xml加载部分不好。

顺便说一句,如果你通过 CRM SDK,你会发现类似的例子。

于 2009-11-20T11:57:50.423 回答
0

将此函数用于动态请求选项列表值:

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;
}
于 2011-10-09T15:54:44.260 回答