C# 使用CRM 4.0 webservice设置BusinessEntity选取列表值

C# 使用CRM 4.0 webservice设置BusinessEntity选取列表值,c#,web-services,dynamics-crm,dynamics-crm-4,C#,Web Services,Dynamics Crm,Dynamics Crm 4,我正在尝试在CRM 4.0中创建ImportMap对象。我需要设置TargetEntity属性,它是一个Picklist值。似乎暗示可以通过使用 importmap map = new importmap(); map.name = "test map"; map.targetentity = new Picklist(); map.targetentity.name = "Contact" 但这似乎总是将目标实体属性保留为null 有什么想法吗 如果是选择列表,则必须提供索引值。假设您有一个

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

importmap map = new importmap();
map.name = "test map";
map.targetentity = new Picklist();
map.targetentity.name = "Contact"
但这似乎总是将目标实体属性保留为null


有什么想法吗

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

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

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

,也许这会有帮助

如果上述内容无效,则以下是您的操作方法:

  • 从UI中打开选取列表,记录索引数量及其值
  • 在代码中创建枚举,并将这些值/索引分配给它
  • 在运行时使用enum(在上面的示例中给出)来设置picklist
  • 但是索引可能会在一段时间内发生变化,所以在这种情况下,您可以使用这些值/索引创建一个枚举xml,并在运行时加载它们。但这种方法的问题在于:

  • 每次有人要更改索引时(这种情况非常罕见),管理员还必须更改xml文件
  • 加载外部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;
    }
    
    public IDictionary PickListValues(string entityname,string attributename)
    {
    var req=新的RetrieveAttributeRequest();
    req.EntityLogicalName=entityname;
    req.LogicalName=属性名称;
    req.RetrieveAsIfPublished=真;
    var response=(RetrieveAttributeResponse)Service.MetaDataService.Execute(req);
    var picklist=(PicklistAttributeMetadata)response.AttributeMetadata;
    var res=新字典();
    foreach(picklist.Options中的变量项)
    res.Add(item.Value.Value,item.Label.UserLocLabel.Label);
    返回res;
    }
    
    谢谢,这正是我想的。问题是,我试图设置的这个选择列表实际上是系统中所有实体类型的列表,包括自定义类型,所以在设计时我不知道索引是什么。是否有方法动态加载和枚举选取列表?感谢斯马特,很抱歉延迟回复;请查看我的更新回复。dynamics-crm-4似乎不存在“RetrieveAttributeRequest”类(2011年有)。这个问题的crm-4解决方案是什么?上面的评论不是真的,我只需要生成元数据服务的类,请参见: