代码之家  ›  专栏  ›  技术社区  ›  Matt

使用CRM 4.0 WebService设置BusinessEntity选择列表值

  •  0
  • Matt  · 技术社区  · 14 年前

    我正试图在CRM 4.0中创建一个importmap对象。我需要设置TargetEntity属性,它是一个选择列表值。 link text 似乎意味着可以通过使用

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

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

    有什么想法吗?

    2 回复  |  直到 13 年前
        1
  •  1
  •   Kamran Khan    14 年前

    如果是选择列表,则必须提供索引值。假设您有一个名为TargetValues的枚举。请与值为1的联系人联系,然后它将如下所示:

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

    --编辑——

    我相信,对于你试图实现的目标,你必须以某种方式找回目标实体,只有这样你才能列举出它们。

    See this ,这可能会有所帮助。

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

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

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

    1. 每次有人要更改索引,这是非常罕见的,管理员还必须更改XML文件。
    2. 加载外部XML文件是一种开销。

    不是很好的方法,但在一个滴答滴答的截止日期前,这是你能做的;这永远不会打破或造成麻烦。只是XML加载部分不好。

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

        2
  •  0
  •   gdbdable    13 年前

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

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