2009-11-20 56 views
0

我試圖在CRM 4.0中創建一個ImportMap對象。我需要設置作爲Picklist值的TargetEntity屬性。 link text似乎在暗示,它可以通過使用使用CRM 4.0設置BusinessEntity選項列表值webservice

importmap map = new importmap(); 
map.name = "test map"; 
map.targetentity = new Picklist(); 
map.targetentity.name = "Contact" 

來完成,但這似乎總是保持目標實體屬性爲空。

有什麼想法?

回答

1

如果它是一個選擇列表,你將不得不提供索引值。假設你有一個名爲TargetValues.Contact其值爲1的枚舉,那麼它會是這樣的:

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

- 編輯 -

我相信你正在努力實現你將不得不以某種方式是什麼檢索目標實體,只有這樣你才能枚舉它們。

See this,這可能會有所幫助。

如果上面是沒有用的,那麼下面是你如何能做到這:

  1. 開領料單,從UI,寫下指數及其cooresponding值的數量。
  2. 在代碼中創建一個枚舉,併爲其分配這些值/索引。
  3. 在運行時使用枚舉(在上面的示例中給出)來設置選取列表。

但後來不知怎的指數可能在一段時間內發生變化,所以在這種情況下,你可以創建這些值/索引枚舉XML,並加載它們在運行時。但是,這種方法的問題是:

  1. 每當任何人要更改索引,這是非常罕見的,管理員還必須更改xml文件。
  2. 加載外部xml文件是開銷。

不是很好的方法,但在截止日期前運行,這是你可以做的;這永遠不會中斷或造成麻煩。只是XML加載部分不好。

順便說一句,如果你想通過CRM SDK,你會發現類似的例子。

+0

謝謝,這幾乎是我想通。問題是我試圖設置的這個選項列表實際上是系統中所有實體類型的列表,包括自定義列表,所以我不知道在設計時索引會是什麼。有沒有一種方法來延遲加載和枚舉選擇列表?謝謝 – Matt 2009-11-20 11:59:58

+0

馬特,對於遲到的迴應感到抱歉;請看我最新的回覆。 – 2009-11-23 07:31:01

0

把這個功能動態請求列表值:

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; 
} 
+0

'RetrieveAttributeRequest'類似乎不存在動態crm-4(它在2011年..)。這個問題的crm-4解決方案是什麼? – NickGreen 2012-05-09 07:26:48

+0

上面的評論是不正確的,我只需要生成元數據服務的類,請參閱:http:// stackoverflow。COM /問題/ 10511528 /查詢最描述 - 值對的一領料單式動力學-CRM-4-0 – NickGreen 2012-05-09 08:38:33

相關問題