【问题标题】:Retrieving values of MS CRM fields through variable通过变量检索 MS CRM 字段的值
【发布时间】:2009-11-27 15:44:09
【问题描述】:

我有一个关于 Dynamics CRM 4.0 Web 服务的问题。我一直在使用它从 CRM 获取记录到 ASP.NET。在请求和强制转换之后,可以通过以下方式访问列的值(例如联系人);

BusinessEntity be = getBusinessEntity(service, crmGuid, type, colnames);
contact tmp = (contact)be;

Response.Write("firstname: " + tmp.firstname + "<BR>");
Response.Write("lastname: " + tmp.lastname+ "<BR>");

我有一个字符串数组,用于标识应从 CRM (colnames) 中检索哪些列,例如在本例中为 {"firstname", "lastname"}

但是colnames 可能会变得很大(并且可能没有硬编码),所以我不想一一浏览。有没有办法使用类似的东西

for(int i = 0; i < colnames.length; i++)
{
    Response.write(colnames[i] + ": " + tmp.colnames[i] + "<BR>");
}

如果我现在这样做,我会收到一个错误,即 colnames 不是 tmp 的字段。 有什么想法吗?

【问题讨论】:

    标签: asp.net dynamics-crm dynamics-crm-4


    【解决方案1】:

    不使用 BusinessEntity(除非您使用反射)。 DynamicEntity 可通过派生自 Property 的类型进行枚举。你必须做类似的事情(我是从记忆中做的,所以可能无法编译)......

    for(int i = 0; i < colnames.length; i++)
    {
      string colName = colnames[i];
      foreach(Property prop in tmp)
      {  
        if (prop.name != colName)
          continue;
        if (prop is StringProperty)
        {
           var strProp = prop as StringProperty;
           Response.Write(String.Format("{0}: {1}<BR />", colName, strProp.Value));
        } 
        else if (prop is LookupProperty)
        {
          ...
         }
        ... for each type deriving from Property
    
      }
    }
    

    回复注释1(长度):

    你能给我一个你正在使用的例子吗?如果您只查看基本类型(Property),那么您将无法看到 value 属性 - 您需要转换为适当的类型(StringProperty 等)。

    在我的示例中,tmp 是一个 DynamicEntity(它定义了返回属性数组的 GetEnumerator)。访问 DynamicEntity 属性的另一种方法是使用字符串索引器。对于 tmp:

    string firstname = (string)tmp["firstname"];
    

    请注意,如果您使用此方法,您将获得值(字符串、CrmNumber、查找)而不是整个属性(StringProperty、CrmNumberProperty 等)。

    这是否回答了您的问题?另外,我建议使用 SDK 程序集而不是 Web 参考。它们更容易使用。但是,如果您选择使用 Web 参考,SDK 下载有一个帮助类列表。在 SDK 中搜索“Helper”。

    【讨论】:

    • 好吧,这是一个不错的选择。我一直在尝试使用 DynamicEntity,但我花了很长时间才弄清楚如何使用 DynamicEntities 获取属性的实际值。你有什么建议吗?我可以得到名称和类型,但不能得到值...
    • 我的评论太长了,看正文。
    • 我将主要使用字符串属性,但也会使用一些查找。我确实尝试过使用 SDK,但在使用自定义字段时遇到了问题。如果我执行类似 tmp.new_customfield1 的操作,SDK 中的 IE 代码将无法编译。 (其中 tmp 是联系人)。可能这也将通过使用 DynamicEntities 来解决。我将检查您使用 DynamicEntities 的方法。
    • 太棒了!是的,使用自定义字段和 SDK,您将不得不使用索引器。 WSDL 具有强类型属性的优点,但即便如此,我发现 SDK 更易于使用。实际上,您也可以为 MSCRM 找到强大的类型生成器,因此您可以使用 SDK 并使用 tmp.new_customfield1。
    猜你喜欢
    • 1970-01-01
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多