チュートリアル: ワークフローにアプリケーション ページを追加する
このチュートリアルでは、ワークフローから得られたデータを表示するためのアプリケーション ページをワークフロー プロジェクトに追加する方法について説明します。 トピック「チュートリアル: 関連付けフォームと開始フォームを持つワークフローの作成」で説明されているプロジェクトに基づいています。
このチュートリアルでは、次のタスクについて説明します。
ASPX アプリケーション ページを SharePoint ワークフロー プロジェクトに追加する。
ワークフロー プロジェクトからデータを取得して操作する。
アプリケーション ページのテーブルにデータを表示する。
Note
次の手順で参照している Visual Studio ユーザー インターフェイス要素の一部は、お使いのコンピューターでは名前や場所が異なる場合があります。 これらの要素は、使用している Visual Studio のエディションや独自の設定によって決まります。 詳細については、「Visual Studio IDE のカスタマイズ」を参照してください。
必須コンポーネント
このチュートリアルを実行するには、次のコンポーネントが必要です。
サポート対象エディションの Microsoft Windows および SharePoint。
Visual Studio.
トピック「チュートリアル: 関連付けフォームと開始フォームを持つワークフローの作成」のプロジェクトが完成している必要もあります。
ワークフローのコードを修正する
まず、経費報告書の金額を Outcome 列の値に設定するコード行をワークフローに追加します。 この値は、後で経費報告書の概要の計算で使用されます。
ワークフローで Outcome 列の値を設定するには
トピック「チュートリアル: 関連付けフォームと開始フォームを持つワークフローの作成」で完成したプロジェクトを Visual Studio に読み込みます。
Workflow1.cs または Workflow1.vb のコードを開きます (プログラミング言語によって異なります)。
createTask1_MethodInvoking
メソッドの末尾に、次のコードを追加します。
アプリケーション ページを作成する
次に、ASPX フォームをプロジェクトに追加します。 このフォームには、経費報告書ワークフロー プロジェクトから取得されたデータが表示されます。 これを行うには、アプリケーション ページを追加します。 アプリケーション ページでは、他の SharePoint ページと同じマスター ページが使用されます。つまり、SharePoint サイトの他のページに似ています。
プロジェクトにアプリケーション ページを追加するには
ExpenseReport プロジェクトを選択した後、メニュー バーで [プロジェクト]>[新しい項目の追加] を選択します。
[テンプレート] ペインで [アプリケーション ページ] テンプレートを選択し、プロジェクト項目に既定の名前 (ApplicationPage1.aspx) を使用して、[追加] ボタンを選択します。
ApplicationPage1.aspx の XML で、
PlaceHolderMain
セクションを次のように置き換えます。<asp:Content ID="Main" ContentPlaceHolderID="PlaceHolderMain" runat="server"> <asp:Label ID="Label1" runat="server" Font-Bold="True" Text="Expenses that exceeded allotted amount" Font-Size="Medium"></asp:Label> <br /> <asp:Table ID="Table1" runat="server"> </asp:Table> </asp:Content>
このコードにより、タイトルと共にテーブルがページに追加されます。
PlaceHolderPageTitleInTitleArea
セクションを次のように置き換えることで、アプリケーション ページにタイトルを追加します。<asp:Content ID="PageTitleInTitleArea" ContentPlaceHolderID="PlaceHolderPageTitleInTitleArea" runat="server" > Expense Report Summary </asp:Content>
アプリケーション ページのコーディング
次に、経費報告書の概要アプリケーション ページにコードを追加します。 ページを開くと、コードによって、割り当てられた支出制限を超える経費が、SharePoint のタスク一覧でスキャンされます。 このレポートには、各項目と共に経費の合計が一覧表示されます。
アプリケーション ページをコーディングするには
ApplicationPage1.aspx ノードを選択した後、メニュー バーで [表示]>[コード] を選択して、アプリケーション ページの背後にあるコードを表示します。
クラスの先頭にある using または Import ステートメント (プログラミング言語によって異なります) を、次のように置き換えます。
Page_Load
メソッドに次のコードを追加します。try { // Reference the Tasks list on the SharePoint site. // Replace "TestServer" with a valid SharePoint server name. SPSite site = new SPSite("http://TestServer"); SPList list = site.AllWebs[0].Lists["Tasks"]; // string text = ""; int sum = 0; Table1.Rows.Clear(); // Add table headers. TableHeaderRow hr = new TableHeaderRow(); hr.BackColor = Color.LightBlue; TableHeaderCell hc1 = new TableHeaderCell(); TableHeaderCell hc2 = new TableHeaderCell(); hc1.Text = "Expense Report Name"; hc2.Text = "Amount Exceeded"; hr.Cells.Add(hc1); hr.Cells.Add(hc2); // Add the TableHeaderRow as the first item // in the Rows collection of the table. Table1.Rows.AddAt(0, hr); // Iterate through the tasks in the Task list and collect those // that have values in the "Related Content" and "Outcome" // fields - the fields written to when expense approval is // required. foreach (SPListItem item in list.Items) { string s_relContent = ""; string s_outcome = ""; try { // Task has the fields - treat as expense report. s_relContent = item.GetFormattedValue("Related Content"); s_outcome = item.GetFormattedValue("Outcome"); } catch { // Task does not have fields - skip it. continue; } if (!String.IsNullOrEmpty(s_relContent) && !String.IsNullOrEmpty(s_outcome)) { // Convert amount to an int and keep a running total. sum += Convert.ToInt32(s_outcome); TableCell relContent = new TableCell(); relContent.Text = s_relContent; TableCell outcome = new TableCell(); outcome.Text = "$" + s_outcome; TableRow dataRow2 = new TableRow(); dataRow2.Cells.Add(relContent); dataRow2.Cells.Add(outcome); Table1.Rows.Add(dataRow2); } } // Report the sum of the reports in the table footer. TableFooterRow tfr = new TableFooterRow(); tfr.BackColor = Color.LightGreen; // Create a TableCell object to contain the // text for the footer. TableCell ftc1 = new TableCell(); TableCell ftc2 = new TableCell(); ftc1.Text = "TOTAL: "; ftc2.Text = "$" + Convert.ToString(sum); // Add the TableCell object to the Cells // collection of the TableFooterRow. tfr.Cells.Add(ftc1); tfr.Cells.Add(ftc2); // Add the TableFooterRow to the Rows // collection of the table. Table1.Rows.Add(tfr); } catch (Exception errx) { System.Diagnostics.Debug.WriteLine("Error: " + errx.ToString()); }
警告
コードの "TestServer" は、SharePoint を実行している有効なサーバーの名前に必ず置き換えてください。
アプリケーション ページをテストする
次に、アプリケーション ページに経費データが正しく表示されるかどうかを確認します。
アプリケーション ページをテストするには
F5 キーを押し、プロジェクトを実行して SharePoint に配置します。
[ホーム] ボタンを選択し、クイック起動バーの [共有ドキュメント] リンクを選択して、SharePoint サイトの共有ドキュメントの一覧を表示します。
この例の経費報告書を表示するには、ページの上部にある [ライブラリ ツール] タブの [ドキュメント] リンクを選択してから、ツール リボンの [ドキュメントのアップロード] ボタンを選択して、新しいドキュメントをドキュメントの一覧にアップロードします。
ドキュメントをいくつかアップロードした後、ページの上部にある [ライブラリ ツール] タブの [ライブラリ] リンクを選択し、ツール リボンの [ライブラリの設定] ボタンを選択して、ワークフローをインスタンス化します。
[Document Library Settings]\(ドキュメント ライブラリの設定\) ページで、[権限と管理] セクションの [ワークフロー設定] リンクを選択します。
[ワークフロー設定] ページで、[ワークフローの追加] リンクを選択します。
[ワークフローの追加] ページで [ExpenseReport - Workflow1] ワークフローを選択し、ワークフローの名前を入力して (「ExpenseTest」など)、[次へ] ボタンを選択します。
ワークフローの [関連付け] フォームが表示されます。 それを使用して、経費の上限金額を報告します。
[関連付け] フォームで、[Auto Approval Limit]\(自動承認の制限\) ボックスに「1000」と入力し、[ワークフローの関連付け] ボタンを選択します。
[ホーム] ボタンを選択して、SharePoint のホーム ページに戻ります。
クイック起動バーの [共有ドキュメント] リンクを選択します。
アップロードしたドキュメントのいずれかを選択してドロップダウン矢印を表示し、それを選択して、[ワークフロー] 項目を選択します。
ExpenseTest の横にある画像を選択して、ワークフロー開始フォームを表示します。
[Expense Total]\(経費合計\) テキスト ボックスに 1000 より大きい値を入力し、[ワークフローの開始] ボタンを選択します。
報告された経費が割り当てられた経費金額を超えると、タスクがタスク一覧に追加されます。 [ExpenseTest]\(経費テスト\) という名前で値が [Completed]\(完了\) の列も、共有ドキュメント一覧の経費報告書項目に追加されます。
共有ドキュメント一覧の他のドキュメントで、ステップ 11 から 13 を繰り返します。 (ドキュメントの正確な数は重要ではありません)。
Web ブラウザーで次の URL を開き、経費報告書概要アプリケーション ページを表示します: http://<システム名>/_layouts/ExpenseReport/ApplicationPage1.aspx。
経費報告書概要ページに、割り当てられた金額を超過したすべての経費報告書、超過分の金額、すべてのレポートの合計金額の一覧が表示されます。