20
intra-mart Microsoft® Office 連携ソリューション Ver.7.0 VSTO 開発支援ガイド 2009/08/25 初版

intra-mart Microsoft® Office 連携ソリューション...1 概要 作成者:株式会社NTT DATA イントラマート Page 1 1 概要 1.1 連携の概要 1.1.1 2007 Microsoft

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: intra-mart Microsoft® Office 連携ソリューション...1 概要 作成者:株式会社NTT DATA イントラマート Page 1 1 概要 1.1 連携の概要 1.1.1 2007 Microsoft

intra-mart Microsoft® Office連携ソリューション

Ver.7.0VSTO 開発支援ガイド

2009/08/25 初版

Page 2: intra-mart Microsoft® Office 連携ソリューション...1 概要 作成者:株式会社NTT DATA イントラマート Page 1 1 概要 1.1 連携の概要 1.1.1 2007 Microsoft
Page 3: intra-mart Microsoft® Office 連携ソリューション...1 概要 作成者:株式会社NTT DATA イントラマート Page 1 1 概要 1.1 連携の概要 1.1.1 2007 Microsoft

<< 変更履歴 >> 変更年月日 変更内容

2009/8/25 初版

Page 4: intra-mart Microsoft® Office 連携ソリューション...1 概要 作成者:株式会社NTT DATA イントラマート Page 1 1 概要 1.1 連携の概要 1.1.1 2007 Microsoft

本書の目的

本書は Visual Studio Tools for Office 開発者が 2007 Microsoft Office System に intra-mart Microsoft® Office 連携ワークフローソ

リューションに必要な機能を導入する事を支援します。

Page 5: intra-mart Microsoft® Office 連携ソリューション...1 概要 作成者:株式会社NTT DATA イントラマート Page 1 1 概要 1.1 連携の概要 1.1.1 2007 Microsoft

目次

<< 目次 >> 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

Page 6: intra-mart Microsoft® Office 連携ソリューション...1 概要 作成者:株式会社NTT DATA イントラマート Page 1 1 概要 1.1 連携の概要 1.1.1 2007 Microsoft
Page 7: intra-mart Microsoft® Office 連携ソリューション...1 概要 作成者:株式会社NTT DATA イントラマート Page 1 1 概要 1.1 連携の概要 1.1.1 2007 Microsoft

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

Page 8: intra-mart Microsoft® Office 連携ソリューション...1 概要 作成者:株式会社NTT DATA イントラマート Page 1 1 概要 1.1 連携の概要 1.1.1 2007 Microsoft

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をもとにライブラリ情報を取得

Page 9: intra-mart Microsoft® Office 連携ソリューション...1 概要 作成者:株式会社NTT DATA イントラマート Page 1 1 概要 1.1 連携の概要 1.1.1 2007 Microsoft

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

Page 10: intra-mart Microsoft® Office 連携ソリューション...1 概要 作成者:株式会社NTT DATA イントラマート Page 1 1 概要 1.1 連携の概要 1.1.1 2007 Microsoft

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;

Page 11: intra-mart Microsoft® Office 連携ソリューション...1 概要 作成者:株式会社NTT DATA イントラマート Page 1 1 概要 1.1 連携の概要 1.1.1 2007 Microsoft

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

Page 12: intra-mart Microsoft® Office 連携ソリューション...1 概要 作成者:株式会社NTT DATA イントラマート Page 1 1 概要 1.1 連携の概要 1.1.1 2007 Microsoft

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);

}

Page 13: intra-mart Microsoft® Office 連携ソリューション...1 概要 作成者:株式会社NTT DATA イントラマート Page 1 1 概要 1.1 連携の概要 1.1.1 2007 Microsoft

2 SharePoint Server 2007 と Office ドキュメントの連携

2.3 Officeドキュメントからのワークフロー操作

2.3.1 ワークフローの起動

2.3.1.1 ワークフローテンプレートの取得とユーザーインターフェイスの表示 ワークフローを起動するには現在のドキュメントで使用できるワークフローのコレクションを取得し、起動したいアイ

テムのユーザーインターフェイス(起票画面)を表示します。

ワークフローのコレクション(WorkflowTemplates オブジェクト)を取得するには GetWorkflowTemplates メソッドを使

用します。GetWorkflowTemplatesメソッドが取得する WorkflowTemplates オブジェクトは[ワークフロー]ダイアログ

ボックスに表示される「このドキュメントで使用可能なワークフロー」に対応します。

作成者:株式会社 NTT DATA イントラマート Page 7

Page 14: intra-mart Microsoft® Office 連携ソリューション...1 概要 作成者:株式会社NTT DATA イントラマート Page 1 1 概要 1.1 連携の概要 1.1.1 2007 Microsoft

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();

Page 15: intra-mart Microsoft® Office 連携ソリューション...1 概要 作成者:株式会社NTT DATA イントラマート Page 1 1 概要 1.1 連携の概要 1.1.1 2007 Microsoft

2 SharePoint Server 2007 と Office ドキュメントの連携

2.3.2 タスクの操作

2.3.2.1 ワークフロータスクの取得とユーザーインターフェイスの表示 起票済みのワークフローの操作(承認、引き戻し、再申請等)を行うには現在のドキュメントで使用できるワークフロ

ータスクのコレクションを取得し、特定のタスクのワークフロータスク編集ユーザーインターフェイスを表示します。

ワークフロータスクのコレクション(WorkflowTasks オブジェクト)を取得するには GetWorkflowTasks メソッドを使用

します。GetWorkflowTasksメソッドが取得するWorkflowTasksオブジェクトは[ワークフロータスク]ダイアログボック

スに表示される一覧に対応します。

作成者:株式会社 NTT DATA イントラマート Page 9

Page 16: intra-mart Microsoft® Office 連携ソリューション...1 概要 作成者:株式会社NTT DATA イントラマート Page 1 1 概要 1.1 連携の概要 1.1.1 2007 Microsoft

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();

Page 17: intra-mart Microsoft® Office 連携ソリューション...1 概要 作成者:株式会社NTT DATA イントラマート Page 1 1 概要 1.1 連携の概要 1.1.1 2007 Microsoft

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

Page 18: intra-mart Microsoft® Office 連携ソリューション...1 概要 作成者:株式会社NTT DATA イントラマート Page 1 1 概要 1.1 連携の概要 1.1.1 2007 Microsoft

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;

}

Page 19: intra-mart Microsoft® Office 連携ソリューション...1 概要 作成者:株式会社NTT DATA イントラマート Page 1 1 概要 1.1 連携の概要 1.1.1 2007 Microsoft
Page 20: intra-mart Microsoft® Office 連携ソリューション...1 概要 作成者:株式会社NTT DATA イントラマート Page 1 1 概要 1.1 連携の概要 1.1.1 2007 Microsoft

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/