本書の目的
本書は 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 概要
作成者:株式会社 NTT DATA イントラマート Page 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
intra-mart VSTO 開発支援ガイド
Page 2 Copyright 2000-2009 株式会社 NTT データ イントラマート All rights Reserved.
2 SharePoint Server 2007 と Office ドキュメ
ントの連携
2.1 ドキュメントライブラリとドキュメントの情報連携
2.1.1 起動ドキュメントライブラリ情報の取得 ドキュメントライブラリから起動された Office ドキュメントは自身の保存先や起動するワークフロー情報を取得する
ためにどのドキュメントライブラリから起動されたかを特定する必要があります。
連携サンプルでは起動元のドキュメントライブラリを特定する手段として[ContentTypeId]を使用しています。予め
データベースにドキュメントライブラリの[ContentTypeId]をキーとしたテーブルを用意し、ドキュメントライブラリの
URL や SharePoint ワークフローの GUID, intra-mart ワークフローのプロセス定義コード, バージョン等を格納して
おきます。実行時に SharePoint が Office ドキュメントに設定する[ContentTypeId]を元にドキュメントライブラリやワ
ークフローの情報を取得することでワークフローや Office ドキュメントを汎用的に扱う事が可能となります。
Office SharePoint Server 2007
データベースSQL Server 2008
•共通情報テーブル•ライブラリ情報テーブル•アプリケーションキーテーブル
起動したListのContentTypeIdがカスタムプロパティに設定される
ContentTypeIdをもとにライブラリ情報を取得
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 開発支援ガイド
Page 4 Copyright 2000-2009 株式会社 NTT データ イントラマート All rights Reserved.
2.1.2 ドキュメントライブラリのプロパティ列とドキュメントの連携 SharePoint Server 2007 と 2007 Office System はドキュメントライブラリの列プロパティを通じて情報の連携を行う事
が出来ます。ドキュメントライブラリの列プロパティは Office 2007 のドキュメント情報パネルと連携します。
VSTO からのドキュメント情報パネルの情報を操作は、MetaProperty オブジェクトを通じて行います。Office ドキュ
メントの ContentTypeProperties プロパティから MetaProperties オブジェクトを取得しコレクション内から操作対象の
MetaProperty オブジェクトを取得します。
連携サンプルではVSTOが intra-martからユニークな IDを採番し、[DocumentID]として文章にひもづく業務情報
のキー情報としています。SharePoint はプロパティ列から[DocumentID]を取得することで業務情報と連携していま
す。
Office SharePoint Server 2007
データベースSQL Server 2008
intra-mart V7
DocumetntIDをキーに業務情報を設定
DocumentIDを取得
MetaPropertyにDocumentIDを設定
MetaPropertyの値はプロパティ列に格納される
DocumentIDをもとに業務情報を取得
ワークフローの条件として業務情報を設定
Office.MetaProperties metaProperties =
Office.MetaProperties)Globals.ThisWorkbook.ContentTypeProperties;
Office.MetaProperty metaProperty = metaProperties.GetItemByInternalName("DocumentID");
metaProperty.Value = value;
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("{0}{1}{2}.{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 開発支援ガイド
Page 6 Copyright 2000-2009 株式会社 NTT データ イントラマート All rights Reserved.
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);
}
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 開発支援ガイド
Page 8 Copyright 2000-2009 株式会社 NTT データ イントラマート All rights Reserved.
ワークフローのユーザーインターフェイスは[ワークフロー]ダイアログボックスの開始ボタン押下時に表示される画
面です。表示するには 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();
2 SharePoint Server 2007 と Office ドキュメントの連携
2.3.2 タスクの操作
2.3.2.1 ワークフロータスクの取得とユーザーインターフェイスの表示 起票済みのワークフローの操作(承認、引き戻し、再申請等)を行うには現在のドキュメントで使用できるワークフロ
ータスクのコレクションを取得し、特定のタスクのワークフロータスク編集ユーザーインターフェイスを表示します。
ワークフロータスクのコレクション(WorkflowTasks オブジェクト)を取得するには GetWorkflowTasks メソッドを使用
します。GetWorkflowTasksメソッドが取得するWorkflowTasksオブジェクトは[ワークフロータスク]ダイアログボック
スに表示される一覧に対応します。
作成者:株式会社 NTT DATA イントラマート Page 9
intra-mart VSTO 開発支援ガイド
Page 10 Copyright 2000-2009 株式会社 NTT データ イントラマート All rights Reserved.
ワークフロータスクの編集ユーザーインターフェイスは[ワークフロータスク]ダイアログボックスの「開く」ボタン押下
時に表示される画面です。表示するには 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();
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 開発支援ガイド
Page 12 Copyright 2000-2009 株式会社 NTT データ イントラマート All rights Reserved.
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;
}
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: [email protected]
URL: http://www.intra-mart.jp/