1

我有一个关于 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 的字段。有任何想法吗?

4

1 回答 1

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(长度):

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

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

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

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

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

于 2009-11-30T15:10:18.597 回答