3

別のリストを参照するだけのルックアップ フィールドが sharepoint にあります。このフィールドのすべての可能な値をプログラムで列挙するにはどうすればよいでしょうか? たとえば、ルックアップ フィールド「Actual City」はリスト「Cities」と列「Title」を参照し、そこに 3 つの都市があります。コードでは、フィールド「実際の都市」のすべての可能な値のリストを取得したいと思います(メタコード、申し訳ありません):

SPFieldLookup f = myList["Actual City"];
Collection availableValues = f.GetAllPossibleValues();
//this should return collection with all cities a user might select for the field

4

4 に答える 4

0

可能なすべての値を列挙する場合は、基本的に、都市リストのすべてのアイテムからすべてのタイトルフィールド値を取得する必要があることを意味します。SharePointにGetAllPossibleValues()のようなメソッドはないと思いますが、都市のすべてのアイテムを一覧表示してタイトルを取得するか、数が少ない場合はCAMLクエリを使用することができます。

于 2010-03-31T09:59:23.313 に答える
0

欲しいものを返す明示的な方法はないと思います。ただし、SPFieldLookupクラスには、この情報を手動で要求するために必要なすべての情報(LookupFieldおよびLookupList)が格納されます。

したがって、ルックアップフィールドが使用するリストから情報を取得することで、情報を取得できます。再利用可能にするには、拡張メソッドとして実装できます。次回は本当に電話をかけることができますf.GetAllPossibleValues();

于 2010-03-31T08:23:44.827 に答える
0

私が理解しているように、使用中のすべての値を照会したいですか?

その場合、Actual Cityがnullでないアイテムをクエリする必要があり、クエリは次のようになります。

<Where><IsNotNull><FieldRef Name='Actual City'/></IsNotNull></Where>

次に、クエリされたアイテムごとに、

List<SPFieldLookupValue> result = new List<SPFieldLookupValue>(returnedItemCount * 5);

foreach (SPListItem item in queriedItems) {
  object lookup = item["Actual City"];
  SPFieldLookupValueCollection lookupValues = new SPFIeldLookupValueCollection(
    (lookup != null) ? lookup.ToString() : ""
  );
  foreach (SPFieldLookupValue lookupValue in lookupValues) {
    if (!result.Contains(lookupValue)) {
      result.Add(lookupValue);
    }
  }
}

または、LookupIdが文字列でLookupValueがint idであるHashTableを使用してHashTable.ContainsKey(lookupId)、リスト内の文字列よりもハッシュテーブル内の整数を見つける方が速いかどうかを確認できますが、リソースを大量に消費する部分は、おそらくすべてのアイテムをクエリすることです。そのフィールドには値が含まれていて、ループします。

于 2010-03-31T08:25:10.737 に答える