intra-mart Microsoft Office 連 携 ソリューション Ver.7.0 VSTO 開 発 支 援 ガイド 2009/08/25 初 版
変 更 年 月 日 2009/8/25 初 版 << 変 更 履 歴 >> 変 更 内 容
本 書 の 目 的 本 書 は Visual Studio Tools for Office 開 発 者 が 2007 Microsoft Office System に intra-mart Microsoft Office 連 携 ワークフローソ リューションに 必 要 な 機 能 を 導 入 する 事 を 支 援 します
目 次 << 目 次 >> 1 概 要... 1 1.1 連 携 の 概 要... 1 1.1.1 2007 Microsoft Office Systemに 付 加 する 機 能... 1 2 SharePoint Server 2007 とOfficeドキュメントの 連 携... 2 2.1 ドキュメントライブラリとドキュメントの 情 報 連 携... 2 2.1.1 起 動 ドキュメントライブラリ 情 報 の 取 得... 2 2.1.2 ドキュメントライブラリのプロパティ 列 とドキュメントの 連 携... 4 2.2 ドキュメントライブラリへOfficeドキュメントを 保 存... 5 2.2.1 特 定 のドキュメントライブラリにOfficeドキュメントを 保 存 する... 5 2.2.2 ドキュメントのチェックイン... 6 2.3 Officeドキュメントからのワークフロー 操 作... 7 2.3.1 ワークフローの 起 動... 7 2.3.2 タスクの 操 作... 9 2.3.3 リボンの 制 御... 11 作 成 者 : 株 式 会 社 NTT DATA イントラマート Page i
1 概 要 1 概 要 1.1 連 携 の 概 要 1.1.1 2007 Microsoft Office Systemに 付 加 する 機 能 intra-mart Microsoft Office 連 携 ワークフローソリューションでは 2007 Microsoft Office System で 以 下 の 機 能 を 実 現 します Office ドキュメントを Microsoft Office SharePoint Server 2007 のドキュメントライブラリへ 自 動 保 存 ワークフローの 起 動 ( 起 票 ) ワークフローの 操 作 ( 承 認, 否 認, 取 消 等 ) また これらの 機 能 を 実 現 するために intra-mart Microsoft Office 連 携 ワークフローソリューションのプレゼンテー ション 環 境 構 築 で 使 用 した 手 法 も 紹 介 します ワークフロー 操 作 intra-mart V7 テンプレートのダウンロード Office SharePoint Server 2007 ドキュメントの 保 存 と ワークフローの 操 作 作 成 者 : 株 式 会 社 NTT DATA イントラマート Page 1
intra-mart VSTO 開 発 支 援 ガイド 2 SharePoint Server 2007 と Office ドキュメ ントの 連 携 2.1 ドキュメントライブラリとドキュメントの 情 報 連 携 2.1.1 起 動 ドキュメントライブラリ 情 報 の 取 得 ドキュメントライブラリから 起 動 された Office ドキュメントは 自 身 の 保 存 先 や 起 動 するワークフロー 情 報 を 取 得 する ためにどのドキュメントライブラリから 起 動 されたかを 特 定 する 必 要 があります 連 携 サンプルでは 起 動 元 のドキュメントライブラリを 特 定 する 手 段 として[ContentTypeId]を 使 用 しています 予 め データベースにドキュメントライブラリの[ContentTypeId]をキーとしたテーブルを 用 意 し ドキュメントライブラリの URL や SharePoint ワークフローの GUID, intra-mart ワークフローのプロセス 定 義 コード, バージョン 等 を 格 納 して おきます 実 行 時 に SharePoint が Office ドキュメントに 設 定 する[ContentTypeId]を 元 にドキュメントライブラリやワ ークフローの 情 報 を 取 得 することでワークフローや Office ドキュメントを 汎 用 的 に 扱 う 事 が 可 能 となります 起 動 したListのContentTypeId がカスタムプロパティに 設 定 さ れる Office SharePoint Server 2007 ContentTypeIdをもとに ライブラリ 情 報 を 取 得 データベース SQL Server 2008 共 通 情 報 テーブル ライブラリ 情 報 テーブル アプリケーションキーテーブル Page 2 Copyright 2000-2009 株 式 会 社 NTT データ イントラマート All rights Reserved.
2 SharePoint Server 2007 と Office ドキュメントの 連 携 2.1.1.1 [ContentTypeId]を 取 得 する [ContentTypeId]は Office ドキュメント 起 動 時 に Office ドキュメントのカスタムドキュメントプロパティとして 設 定 されま す VSTO からカスタムドキュメントプロパティにアクセスするには Office ドキュメントの CustomDocumentProperties プ ロパティから DocumentProperties オブジェクトを 取 得 し コレクションの 中 から[ContentTypeId]が 格 納 されているア イテムを 取 得 します Office.DocumentProperties properties = (Office.DocumentProperties)this.CustomDocumentProperties; contenttypeid = properties["contenttypeid"].value.tostring(); 作 成 者 : 株 式 会 社 NTT DATA イントラマート Page 3
intra-mart VSTO 開 発 支 援 ガイド 2.1.2 ドキュメントライブラリのプロパティ 列 とドキュメントの 連 携 SharePoint Server 2007 と 2007 Office System はドキュメントライブラリの 列 プロパティを 通 じて 情 報 の 連 携 を 行 う 事 が 出 来 ます ドキュメントライブラリの 列 プロパティは Office 2007 のドキュメント 情 報 パネルと 連 携 します VSTO からのドキュメント 情 報 パネルの 情 報 を 操 作 は MetaProperty オブジェクトを 通 じて 行 います Office ドキュ メントの ContentTypeProperties プロパティから MetaProperties オブジェクトを 取 得 しコレクション 内 から 操 作 対 象 の MetaProperty オブジェクトを 取 得 します Office.MetaProperties metaproperties = Office.MetaProperties)Globals.ThisWorkbook.ContentTypeProperties; Office.MetaProperty metaproperty = metaproperties.getitembyinternalname("documentid"); metaproperty.value = value; 連 携 サンプルでは VSTO が intra-mart からユニークな ID を 採 番 し [DocumentID]として 文 章 にひもづく 業 務 情 報 のキー 情 報 としています SharePoint はプロパティ 列 から[DocumentID]を 取 得 することで 業 務 情 報 と 連 携 していま す ワークフローの 条 件 として 業 務 情 報 を 設 定 intra-mart V7 Office SharePoint Server 2007 DocumentIDをもとに 業 務 情 報 を 取 得 DocumentIDを 取 得 MetaPropertyの 値 は プロパティ 列 に 格 納 される MetaPropertyに DocumentIDを 設 定 DocumetntIDをキーに 業 務 情 報 を 設 定 データベース SQL Server 2008 Page 4 Copyright 2000-2009 株 式 会 社 NTT データ イントラマート All rights Reserved.
2 SharePoint Server 2007 と Office ドキュメントの 連 携 2.2 ドキュメントライブラリへOfficeドキュメントを 保 存 2.2.1 特 定 のドキュメントライブラリにOfficeドキュメントを 保 存 する ドキュメントの 保 存 には 通 常 のファイルシステムに 保 存 する 場 合 と 同 じ SaveAs メソッドを 使 用 します 通 常 のファイ ルシステムへの 保 存 と 異 なる 点 は 保 存 するファイルのパスとしてドキュメントライブラリの URL を 指 定 する 点 で す //ファイル 名 のプリフィックスを 取 得 します string safix = GetDocumentSafix(); //ファイル 名 のサフィックスを 取 得 します string prefix = GetDocumentPrefix(); //ファイルの 保 存 URL を 生 成 します // 保 存 URLはMOSSのライブラリ+ 保 存 するドキュメントのファイル 名 です string filename = string.format("012.3", prefix,filename, safix, FileExtension); string docpath = string.format(@"0/1", GetDirName().TrimEnd('/'), filename); //ファイルを 保 存 します Globals.ThisWorkbook.SaveAs(docpath, Excel.XlFileFormat.xlOpenXMLWorkbook, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); ファイル 名 は 保 存 ファイル 名 に 連 番 を 付 加 する 等 してファイル 名 の 重 複 を 防 止 します 連 携 サンプルでは 業 務 毎 の 採 番 テーブルから 連 番 を 取 得 してファイル 名 に 付 加 しています ドキュメントライブラ リの URL は 前 述 の[ContentTypeId]をもとにライブラリ 情 報 テーブルから 取 得 しています 作 成 者 : 株 式 会 社 NTT DATA イントラマート Page 5
intra-mart VSTO 開 発 支 援 ガイド 2.2.2 ドキュメントのチェックイン ドキュメントライブラリに 保 存 した Office ドキュメントをチェックインしてワークフローから 操 作 が 可 能 な 状 態 にしま す 2.2.2.1 チェックインの 実 行 Office ドキュメントをチェックインするには 一 度 CheckOut メソッドを 実 行 し Office ドキュメントをチェックアウト 状 態 に する 必 要 があります チェックアウト 実 行 後 CheckIn メソッドを 実 行 します CheckIn メソッドが 実 行 されると チェック インされた Office ドキュメントは 閉 じられます //ファイル 名 を 取 得 します string docpath = Globals.ThisWorkbook.FullName; //ワークブックを 取 得 します Excel.Workbooks books = Globals.ThisWorkbook.Application.Workbooks; //ワークブックがチェックアウト 可 能 か 調 べます if (books.cancheckout(docpath)) //ドキュメントをチェックアウトします books.checkout(docpath); //ワークブックがチェックイン 可 能 か 調 べます if (Globals.ThisWorkbook.CanCheckIn()) //ドキュメントをチェックインします Globals.ThisWorkbook.CheckIn(true, Type.Missing, true); Page 6 Copyright 2000-2009 株 式 会 社 NTT データ イントラマート All rights Reserved.
2 SharePoint Server 2007 と Office ドキュメントの 連 携 2.3 Officeドキュメントからのワークフロー 操 作 2.3.1 ワークフローの 起 動 2.3.1.1 ワークフローテンプレートの 取 得 とユーザーインターフェイスの 表 示 ワークフローを 起 動 するには 現 在 のドキュメントで 使 用 できるワークフローのコレクションを 取 得 し 起 動 したいアイ テムのユーザーインターフェイス( 起 票 画 面 )を 表 示 します ワークフローのコレクション(WorkflowTemplates オブジェクト)を 取 得 するには GetWorkflowTemplates メソッドを 使 用 します GetWorkflowTemplates メソッドが 取 得 する WorkflowTemplates オブジェクトは[ワークフロー]ダイアログ ボックスに 表 示 される このドキュメントで 使 用 可 能 なワークフロー に 対 応 します 作 成 者 : 株 式 会 社 NTT DATA イントラマート Page 7
intra-mart VSTO 開 発 支 援 ガイド ワークフローのユーザーインターフェイスは[ワークフロー]ダイアログボックスの 開 始 ボタン 押 下 時 に 表 示 される 画 面 です 表 示 するには WorkflowTemplates オブジェクトから 対 象 となるの WorkflowTemplate オブジェクトを 取 得 し Show メソッドを 実 行 します 起 動 するワークフローの 特 定 にはワークフローの 名 称 説 明 GUID 等 を 利 用 します 連 携 サンプルではワークフローの GUID を 前 述 の[ContentTypeId] 使 用 した 連 携 テーブルから 取 得 して 起 動 ワー クフローを 取 得 しています //ドキュメントライブラリからワークフローテンプレートを 取 得 します Microsoft.Office.Core.WorkflowTemplates templates = Globals.ThisWorkbook.GetWorkflowTemplates(); Microsoft.Office.Core.WorkflowTemplate template = null; //ワークフローテンプレートを 検 索 します foreach (Microsoft.Office.Core.WorkflowTemplate item in templates) if (item.id == DocumentList.WorkflowId.ToString()) template = item; break; if (template == null) throw new Exception(" 起 票 対 象 のワークフローが 見 つかりません "); //ワークフローを 起 動 します template.show(); Page 8 Copyright 2000-2009 株 式 会 社 NTT データ イントラマート All rights Reserved.
2 SharePoint Server 2007 と Office ドキュメントの 連 携 2.3.2 タスクの 操 作 2.3.2.1 ワークフロータスクの 取 得 とユーザーインターフェイスの 表 示 起 票 済 みのワークフローの 操 作 ( 承 認 引 き 戻 し 再 申 請 等 )を 行 うには 現 在 のドキュメントで 使 用 できるワークフロ ータスクのコレクションを 取 得 し 特 定 のタスクのワークフロータスク 編 集 ユーザーインターフェイスを 表 示 します ワークフロータスクのコレクション(WorkflowTasks オブジェクト)を 取 得 するには GetWorkflowTasks メソッドを 使 用 します GetWorkflowTasks メソッドが 取 得 する WorkflowTasks オブジェクトは[ワークフロータスク]ダイアログボック スに 表 示 される 一 覧 に 対 応 します 作 成 者 : 株 式 会 社 NTT DATA イントラマート Page 9
intra-mart VSTO 開 発 支 援 ガイド ワークフロータスクの 編 集 ユーザーインターフェイスは[ワークフロータスク]ダイアログボックスの 開 く ボタン 押 下 時 に 表 示 される 画 面 です 表 示 するには WorkflowTasks オブジェクトから 対 象 となる WorkflowTask オブジェクト を 取 得 し Show メソッドを 実 行 します 起 動 するワークフロータスクの 特 定 にはワークフローの 名 称 説 明 等 を 利 用 します 連 携 サンプルではワークフロータスクの 名 称 を 承 認 再 申 請 引 き 戻 し 等 とすることでリボンインターフェイ スのボタンとタスクを 関 連 付 けています //ドキュメントライブラリからタスクを 取 得 します Microsoft.Office.Core.WorkflowTasks workflowtasks = Globals.ThisWorkbook.GetWorkflowTasks(); Microsoft.Office.Core.WorkflowTask workflowtask = null; // 編 集 するタスクを 選 択 します foreach (Microsoft.Office.Core.WorkflowTask item in workflowtasks) if (item!= null) if (item.name == Globals.Ribbons.RibbonWf.WorkflowTask) workflowtask = item; break; if (workflowtask == null) throw new Exception("ドキュメントにタスクが 見 つかりません "); //ワークフローを 起 動 します workflowtask.show(); Page 10 Copyright 2000-2009 株 式 会 社 NTT データ イントラマート All rights Reserved.
2 SharePoint Server 2007 と Office ドキュメントの 連 携 2.3.3 リボンの 制 御 2.3.3.1 ワークフローの 状 態 に 応 じたリボンインターフェイスの 制 御 連 携 サンプルではワークフローの 操 作 を 行 うため リボンインターフェイスのワークフロータブに 申 請 再 申 請 承 認 代 理 承 認 引 き 戻 し のボタンを 設 けています これらのボタンはユーザーが 所 有 するワークフロータ スクに 応 じて 有 効 / 無 効 を 制 御 する 必 要 があります 連 携 サンプルではボタンの 制 御 に[DocumentID]とワークフロ ータスクの 名 称 を 使 用 しています [DocumentID]が 設 定 されていない 場 合 は 新 規 文 章 として 申 請 を 有 効 に [DocumentID]が 設 定 されている 場 合 は 所 有 するワークフロータスクに 応 じてボタンを 有 効 にします また [DocumentID]が 設 定 されていてワークフロータスクを 所 有 していない 場 合 は 処 理 すべきワークフロータスクが 存 在 しないのでワークフロータブを 非 表 示 としています public void SetDraftMode() Globals.Ribbons.RibbonWf.draft.Enabled = true; Globals.Ribbons.RibbonWf.tglShowActionPane.Enabled = true; 作 成 者 : 株 式 会 社 NTT DATA イントラマート Page 11
intra-mart VSTO 開 発 支 援 ガイド public bool ChangeTaskButtonEnabled() //ドキュメントプロパティからタスクを 検 索 します Microsoft.Office.Core.WorkflowTasks workflowtasks = Globals.ThisWorkbook.GetWorkflowTasks(); if (workflowtasks == null) //MOSS から 起 動 していない 場 合 はタスクを 持 ちません return false; // 起 票 状 態 以 外 で if (workflowtasks.count == 0) return false; foreach (Microsoft.Office.Core.WorkflowTask item in workflowtasks) if (item!= null) switch (item.name) case Constants.IMART_WORKFLOW_TASK_APPROVE: // 承 認 Globals.Ribbons.RibbonWf.Approve.Enabled = true; break; case Constants.IMART_WORKFLOW_TASK_RETRY: // 再 起 票 Globals.Ribbons.RibbonWf.Retry.Enabled = true; Globals.Ribbons.RibbonWf.tglShowActionPane.Enabled= true; break; case Constants.IMART_WORKFLOW_TASK_PULLBACK: // 引 き 戻 し Globals.Ribbons.RibbonWf.PullBack.Enabled = true; break; case Constants.IMART_WORKFLOW_TASK_AGENTAPPROVE: // 代 理 承 認 Globals.Ribbons.RibbonWf.AgentApprove.Enabled = true; break; default: break; return true; Page 12 Copyright 2000-2009 株 式 会 社 NTT データ イントラマート All rights Reserved.
intra-mart Microsoft Office 連 携 ソリューション Ver.7.0 VSTO 開 発 支 援 ガイド 2009/08/25 初 版 Copyright 2000-2009 株 式 会 社 NTT データ イントラマート All rights Reserved. TEL: 03-5549-2821 FAX: 03-5549-2816 E-MAIL: info@intra-mart.jp URL: http://www.intra-mart.jp/