2016-09-14 11 views
-1

モジュール名に関連する連絡先ごとにデータを取得する関数が1つあります。ダイナミクスcrmの各エンティティからの連絡先に関連するフィールド名を取得するC#

コード:

if (modulename == "lead" || modulename == "opportunity") 
{ 
    contactfield= "parentcontactid"; 
} 
else if (modulename == "salesorder" || modulename == "quote" || modulename == "incident" || modulename == "invoice") 
{ 
    contactfield= = "customerid"; 
} 
else 
{ 
} 


quotequery = new QueryExpression() 
{ 
    Distinct = false, 
    EntityName = modulename, 
    ColumnSet = new ColumnSet(true), 
    Criteria = 
    { 
     Filters = 
     { 
      new FilterExpression 
      { 
       FilterOperator = LogicalOperator.And, 
       Conditions = 
       { 
        new ConditionExpression("ownerid", ConditionOperator.Equal, userid),         
        new ConditionExpression(contactfield, ConditionOperator.Equal, lstcredential.Contactid.ToString())             
       }, 
      }   
     } 
    } 
}; 
queryentityCollection = _serviceProxy.RetrieveMultiple(quotequery).Entities; 

しかし、すべてのモジュールのためにe.g.inそれはparentcontactidですが、請求書のためにそれが得意である鉛contact.forに関連するさまざまな異なる名前があります。

エンティティ名から連絡先に関連する属性名を取得するソリューションはありますか?なぜなら、各エンティティのelseが起動時と同様に解決できないからです。

私に答えてください。

+1

残念ながら、主な連絡先属性は異なるエンティティによって異なる可能性があります。エンティティ名を切り替えて、探している属性を派生させる必要があります。 – dynamicallyCRM

答えて

1

あなたは実体の有限集合上の特定の連絡先参照を探しているなら、私はハードあなたは多分、キーと値のペアストアを除いてやっているものと同様の名前と値のペアのコレクションでそれをコーディングします。

private Dictionary<String, String> _contactMappings = new Dictionary<String, String>{"lead", "parentcontactid"}, {"incident", "contactid"}; 

代替方法はquerying metadata to look for contact lookupsで、結果をキャッシュすることはできますが、どのルックアップが正しいかは分かりません。たとえば、incidentには、3件の問い合わせがあります(contactidresponsiblecontactid、およびprimarycontactid)。

関連する問題