ワークフローの状態列は16 列目以降は空欄 (SPWorkflowStatus.ViewQueryOverflow) で表示される。

現象
WSS 3.0 または SharePoint Server 2007 にて 1 つのビューにワークフローの状態列を 16 個以上表示すると 16 個目以降のワークフローの状態列が空欄になります。
原因
WSS 3.0 および SharePoint Server 2007 では、パフォーマンスを考慮し、ワークフローの状態列は一度に 15 個までしか取得できないよう制限されています。
一度に 16 個以上のワークフローの状態列を取得しようとした場合、16 個目以降のワークフローの状態列は SPWorkflowStatus.ViewQueryOverflow が返されます。
また、権限が継承されていないアイテムの件数が 1000 件を超えている場合、表示できるワークフローの状態列は 7 個までとなります。

既定では SPWorkflowStatus.ViewQueryOverflow に対応するワークフローの状態の文字列は定義されていませんので、ワークフローの状態列が空欄になります。
解決方法

回避策
ワークフローの状態列を 16 個以上表示しないようビューを設計します。
なお、権限継承されないアイテムがリスト内に 1000 件を超える場合は 8 個以上表示しないように設計します。


SharePoint オブジェクト モデルを使用する場合

オブジェクトモデルを使用して 16 個以上のワークフローの状態列を参照した場合にも 16 個目 (または 8 個目) 以降のワークフローの状態列は 8 (SPWorkflowStatus.ViewQueryOverflow) が返されます。

16 個目 (または 8 個目) 以降のワークフローの状態列をオブジェクトモデルから参照するには、一度にワークフローの状態列を多数取得しないように、表示対象の列を指定してリスト情報を取得するコードを実装します。

以下に例を記載します。 

  using (SPSite site = new SPSite("http://sharepoint"))
  {
      using (SPWeb web = site.OpenWeb())
      {
          SPList list = web.Lists["workflowlist"];
          SPQuery spQuery = new SPQuery();
          spQuery.ViewFields = "<FieldRef Name='wf16' />"; // ワークフローの状態列 (例. wf16) の内部名 (InternalName) を指定します。
          SPListItemCollection items = list.GetItems(spQuery);
          foreach (SPListItem item in items)
          {
              Console.WriteLine(string.Format("{0}\t{1}", item["ID"], (item["wf16"] ?? "(null)").ToString())); 
              // 進行中の場合 SPWorkflowStatus.InProgress (2) が返されます
          }
      }
  }

状況
この動作は仕様です。
詳細
関連情報
注意 : これは、マイクロソフトのサポート組織内で直接作成された "緊急公開" の資料です。 この資料には、確認中の問題に関する現状ベースの情報が記載されています。 情報提供のスピードを優先するため、資料には誤植が含まれる可能性があり、予告なしに随時改定される場合があります。 その他の考慮事項については、使用条件を参照してください。
Proprietà

ID articolo: 2670776 - Ultima revisione: 09/20/2016 10:57:00 - Revisione: 3.0

Microsoft Windows SharePoint Services 3.0, Microsoft Office SharePoint Server 2007

  • KB2670776
Feedback