0

SharePoint の分離コードで、別のリストのルックアップ フィールドにあるリストから計算フィールドの値にアクセスできません。

ページ上の ListFieldIterator は、多数のオプションをユーザーに表示します。ユーザーが行った特定の選択に対して、バックエンドの検証を実行する必要があります。

ユーザーが再生、パフォーマンス、表示などを選択できる「イベントタイプ」というリストがあります。このリストには、説明、有効、デフォルト、フィルターの4つの列があります。Filtered は、他の列で選択されたオプションに基づいて生成される計算列です。

リスト Events には、このリストへの参照である列があり、フィルタリングされた列が表示されます。

ページ上で、これはすべてうまく機能します。オプションがユーザーに表示され、ユーザーは選択を行うことができます。計算フィールドを追加する前に、以下を実行して選択にアクセスできました

SPFieldLookup eventTypeField = ListFieldIterator.Item.Fields.GetField("Event_x0020_Type") as SPFieldLookup;
if (eventTypeField.GetFieldValueAsText(ListFieldIterator.Item["Event_x0020_Type"]) == "Performance")
{
    // some other logic
    errorMessages.Add("There is an error here");                
}

ただし、この方法でフィールドにアクセスすると、空の文字列が返されます。

選択したアイテムにアクセスしようとすると

string value = eventFields.Item["Event_x0020_Type_x0020_1"].ToString();

次に、選択したアイテムのリスト内の位置である「8」が返されます。(選択したリストのアイテムに基づいて変化します)

この投稿計算フィールドの値を取得する 関連しているようですが、ルックアップフィールドから計算フィールドを取得する明確な方法がわかりません。

任意の提案をいただければ幸いです

4

1 に答える 1

1

私がそうであったように、ルックアップ列または計算フィールドを含むルックアップ列のいずれかを使用するとき、私は物事を間違った方法で行っていたことがわかりました。この投稿は私を解決策に導きました。コードは以下にもあります。

基本的に、アイテムの値ではなく、ListFieldIterator のコントロールに格納されている値にアクセスする必要があります。以下のコード (上記のリンクから) は、これを行う優れた方法を提供します。

public static List<T> GetControlsOfType<T>(this ControlCollection controls)
{
  List<T> resultList = new List<T>();
  foreach (Control control in controls)
  {
    if (control is T)
      resultList.Add((T)((object)control));
    if (control.Controls.Count > 0)
    {
      resultList.AddRange(GetControlsOfType<T>(control.Controls));
    }
  }
  return resultList;
}


public object GetFieldValue(ListFieldIterator lfi, string fieldName)
{
  FormField formField = lfi.Controls.GetControlsOfType<FormField>().Where(f => f.FieldName == fieldName).FirstOrDefault();
  if (formField == null) return null;
  return formField.Value;
}
于 2012-08-14T10:16:50.947 に答える