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、非常に大きくなる可能性がある (そしてハードコードされていない可能性がある) ため、1 つずつ確認したくありません。のようなものを使用する方法はありますか

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 への返信 (長さ):

使っているものの例を教えてください。基本型 (Property) のみを見ている場合、value プロパティは表示されません。適切な型 (StringProperty など) に変換する必要があります。

私の例では、tmp は DynamicEntity です (プロパティの配列を返す GetEnumerator を定義します)。DynamicEntity のプロパティにアクセスするもう 1 つの方法は、文字列インデクサーを使用することです。tmp の場合:

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

このメソッドを使用すると、プロパティ全体 (StringProperty、CrmNumberProperty など) ではなく、値 (string、CrmNumber、Lookup) が取得されることに注意してください。

それはあなたの質問に答えていますか?また、Web 参照ではなく、SDK アセンブリを使用することをお勧めします。それらははるかに使いやすいです。ただし、Web 参照を使用することを選択した場合は、SDK ダウンロードにヘルパー クラスのリストが含まれています。SDK で「ヘルパー」を検索します。

于 2009-11-30T15:10:18.597 に答える