Uncategorized

Visual Studio で Office SharePoint Server 2007 Workflow を作成するチュートリアル (第3回: 配置・インストール編) 【Beta2版】

環境:Office SharePoint Server 2007 Beta 2

(2008/04/25 追記 : Visual Studio 2008 をお使いの方は、ここの処理はすべて自動で実施してくれますので必要ありません、、、ワークフローフォームを使用した場合などのみ、設定してください)

(Beta2TR 版については ここ を参照)

こんにちは。

では、前回までに開発したワークフローを Office SharePoint Server 2007 に配置していきましょう。
現 Beta 2 では、配置においては、多くのコツが詰まっています。(最終的にはこのような「コツ」を憶えなくてもインストールできるようになるはずですが、、、)

【ステップ:feature.xml の編集】

前回までに作成した Visual Studio のプロジェクトに、登録用の設定ファイルである feature.xml、workflow.xml という 2 つのファイルが存在しています。この XML ファイルに、以下の通りコードを記入してください。

[feature.xml の内容]

<?xml version="1.0" encoding="utf-8"?>
<!-- _lcid="1033" _version="12.0.3111" _dal="1" -->
<!-- _LocalBinding -->


<!-- Insert Feature.xml Code Snippet here.  To do this:
1) Right click on this page and select "Insert Snippet" (or press Ctrl+K, then X)
2) Select Snippets->Windows SharePoint Services Workflow->Feature.xml Code -->
<Feature  Id="1ab1c855-dba3-4d1c-90c5-4d65121ec3de"
          Title="My Demo Workflow2"
          Description="Workflow demo for japanese developer"
          Version="12.0.0.0"
          Scope="Site"
          ReceiverAssembly="Microsoft.Office.Workflow.Feature, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
          ReceiverClass="Microsoft.Office.Workflow.Feature.WorkflowFeatureReceiver"
          xmlns="http://schemas.microsoft.com/sharepoint/">
  <ElementManifests>
    <ElementManifest Location="workflow.xml" />
  </ElementManifests>
  <Properties>
    <Property Key="GloballyAvailable" Value="true" />


    <!-- Value for RegisterForms key indicates the path to the forms relative to feature file location -->
    <!-- if you don't have forms, use *.xsn -->
    <Property Key="RegisterForms" Value="Forms*.xsn" />
  </Properties>
</Feature>

[記入上の注意事項]

  • 上記で、Id は、GUID を生成して固有の値を設定してください。(Visual Studio のメニュー [Tools] – [Create GUID] で作成できます。)
  • 一方、ReceiverAssembly、ReceiverClass は Microsoft が提供するクラスに関する情報ですので、Id などは変更しないように注意してください。
  • Property Key=”RegisterForms” の要素は非常に重要です。これから配置するフォーム一式の登録(インストール)を指示しています。(まずはこのままの値でつぎに進んでください。)

[workflow.xml の内容]

<?xml version="1.0" encoding="utf-8" ?>
<!-- _lcid="1033" _version="12.0.3015" _dal="1"   -->
<!-- _LocalBinding   -->


<!-- Insert Workflow.xml Code Snippet here.  To do this:
1) Right click on this page and select "Insert Snippet" (or press Ctrl+K, then X)
2) Select Snippets->Windows SharePoint Services Workflow->Workflow.xml Code -->
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <Workflow
       Name="My Demo Workflow2"
       Description="Demo workflow for Office/VS"
       Id="93734ca7-eeb9-400d-ba30-e2e06df40fb7"
       CodeBesideClass="SharePointWorkflowLibrary2.Workflow1" 
       CodeBesideAssembly="SharePointWorkflowLibrary2, Version=3.0.0.0, Culture=neutral, PublicKeyToken=f6c3bf90bf04e8eb"
       TaskListContentTypeId="0x01080100C9C9515DE4E24001905074F980F93160"
       InstantiationUrl="_layouts/IniWrkflIP.aspx">


    <Categories/>
    <MetaData>
      <!-- Tags to specify InfoPath forms for the workflow; delete tags for forms that you do not have -->
      <Instantiation_FormURN>urn:schemas-microsoft-com:office:infopath:formsource:-myXSD-2006-08-18T15-38-16</Instantiation_FormURN>
      <Task0_FormURN>urn:schemas-microsoft-com:office:infopath:mytaskform:-myXSD-2006-08-22T12-53-35</Task0_FormURN>
      <StatusPageUrl>_layouts/WrkStat.aspx</StatusPageUrl>
    </MetaData>
  </Workflow>
</Elements>

[記入上の注意事項]

  • 同様に、Id は、GUID を生成して、各自、固有の値を設定してください。(Visual Studio のメニュー [Tools] – [Create GUID] で作成できます。)
  • CodeBesideAssembly、CodeBesideClass には作成したアセンブリ名を設定してください。この中で設定している Public Key Token の値の設定方法はこの後記載しますので、まずはこのまま進んでください。
  • Instantiation_FormURN、Task0_FormURN には、それぞれ前回までに作成したInfoPath の Initiation Form、Task Form の URN を入力してください。フォームの URN は、InfoPath でフォームをデザインモードで表示し、メニュー [File] – [Properties] で確認することができます。

ここで、意味がわからないと気持ちが悪い方も居られるかもしれませんので、このフィーチャー登録用の XML の意味について簡単に (数行程度で) 意味をご説明しておきます (ご存知の方は読み飛ばしてください)。フィーチャーとは、SharePoint に登録できるカスタムの処理のようなものです。Feature の Receiver を (DLLとして) 独自に実装し、そのDLLをGACに登録することで、例えば、Feature の Install または Activate の処理の際にサイトに所定のアイテムを作成したり変更したりといった処理や (Microsoft.SharePoint 名前空間のクラスを利用してさまざまなサイトのカスタマイズができます)、逆に Deactivate や Uninstall の時にはその作成したアイテムを削除したり元の値に戻したり、などといったカスタムの処理を実装して、「フィーチャー」というオブジェクトを install & activate するかの如くカスタムの処理を実装することが可能です。ここでは、「ワークフロー」という SharePoint が標準で提供している仕組みを組み込むので、ReceiverClass を見て頂いてお分かりの通り、install と activate においては SharePoint (マイクロソフト) が標準で提供しているフィーチャーレシーバーを使用しています。(ですから、ここのクラス名や PublicKeyToken などは勝手に変更しないください。)

あと、前回説明を割愛してしまいましたが、Task0_FormURN の “Task0” の意味は、前回コードで記述した

taskProps.TaskType = 0

により、タスク番号 0 番として登録されているためです。このように、複数の Task Form を登録して設定することができます。

では、つぎに、以下の手順で、上記の Public Key Token を設定します。まずは、通常の共有アセンブリの作成・登録方法と同じです。
ソリューションエクスプローラを右クリックしてプロジェクトのプロパティ画面を表示し、[Signing] タブを選択して、[Choose a strong name key file] で [New…] を選択して、新しいキーファイル (snk ファイル) を作成しプロジェクトに設定します。
ここで一旦、ワークフローのプロジェクトを (Debug 構成のままで) リビルドします。
Visual Studio コマンドプロンプトを使って、以下のコマンドを実行して、Public Key Token (Public Key のハッシュ値) を表示します。

sn.exe -T [アセンブリファイル名]

ここで表示された Public Key Token の値を上述の workflow.xml の Workflow タグの CodeBesideAssembly 属性の PublicKeyToken に記入してください。(共有アセンブリのGACへの登録は、これから実施しますので現段階では必要ありません。)

【ステップ:install.bat の編集と実行】

登録(インストール)作業は、プロジェクトに存在しているファイル install.bat を使って実施できます。が、その前に、install.bat の中身を適切な内容に変更しておきましょう。

まず、install.bat で、文字列「MyFeature」の箇所をプロジェクト名 (作成された dll の名前から .dll を取り除いた名称) に変更しておきましょう。
さらに、stsadm コマンドの -url オプションの値をワークフローをインストールする先(ワークフローを利用する場所)の Web アプリケーションの URL に変更しておきます。

では、コマンドプロンプトを起動して、install.bat を実行しましょう。フィーチャーがインストールされます。
もし、エラーなどが表示されインストールに失敗したら、

pushd %programfiles%\common files\microsoft shared\web server extenstions\12\bin
stsadm.exe -o deactivatefeature -filename [XML のフィーチャーファイル] -url [登録先のURL]
stsadm.exe -o uninstallfeature -filename [XML のフィーチャーファイル] -force
popd
iisreset

で一旦インストールされたフィーチャーをクリーンアップしてから修正し、再度実行してください。

しかし、実は、上記の方法では、正しくインストールがおこなわれていません。というのは、feature.xml で指定した InfoPath のフォームが所定の場所に存在しないためです。

【ステップ:フォームの配置と発行】

では、申し訳ありませんが、一旦、以下のコマンドで上記でインストールした Feature をアンインストールしてください。

pushd %programfiles%\common files\microsoft shared\web server extenstions\12\bin
stsadm.exe -o deactivatefeature -filename [XML のフィーチャーファイル] -url [登録先のURL]
stsadm.exe -o uninstallfeature -filename [XML のフィーチャーファイル] -force
popd
iisreset

これより、以下の手順で、前回(第2回)までで作成した Initiation Form、Task Form の 2 つの InfoPath フォームを正しくインストールしていきましょう。

まず、InfoPath をデザインモードで起動して作成した Initiation Form を表示し、メニュー [Tool] – [Form Options] で [Security and Trust] を選択し、[Domain Trust] に設定します。さらに同じ画面で、[Sign the form template] をチェックし、適当な Certification を設定します。(設定する Certification が存在しない場合は、新規作成してください。)

つぎに、発行をおこないます。[File] – [Publish] を選択し、表示される発行ウィザードで、[To a SharePoint server with or without InfoPath Forms Services] にチェックを付け、Location としてこのワークフローを使用する Site Collection の URL を入力してウィザードを進めます。つぎに、登録方法として [Enable this form to be filled out by using a browser] にチェックを付け(もし、ここのチェックが Disabled になっている場合は、作成したフォームが Web Enabled になっていないためです。Web Enabled に設定して再実行してください)、さらに [Administrator approved form template (advanced)] にチェックを付け、保存先として、上記のワークフロープロジェクトの Install.bat が作成したフォルダの下に Forms サブフォルダを作成して (%CommonProgramFiles%\Microsoft Shared\web server extensions\12\TEMPLATE\FEATURES\[プロジェクト名]\Forms)、ここにフォームを保存してください。

Task Form についても上記と同様の設定と発行 (Publish) をおこなってください。

これで、Admin Deploy 可能なワークフローフォームが正しい場所に配置され、stsadm によりインストール可能な準備が整いました。

では、いよいよ、再度フィーチャーのインストールを実行して正しくワークフローをインストールしましょう。コマンドプロンプトから、以下のコマンドを実行して再インストールを実施してください。(install.bat は実行しないください。bat ファイルを見て頂くとわかりますが、上記で配置したフォームが削除されてしまうためです。)

pushd %programfiles%\common files\microsoft shared\web server extensions\12\bin
stsadm -o installfeature -filename [XML のフィーチャーファイル] -force
stsadm -o activatefeature -filename [XML のフィーチャーファイル] -url [登録先のURL]
popd
iisreset

================================================
ご参考:
Install.bat などを使用せずにすべて手動で実施したい場合は、要は、以下のコマンドですべてインストールされます。
(
< > 内は適当に変更してください)

インストール時

echo GACへアセンブリをインストールします...
IF EXIST "%programfiles%\Microsoft Visual Studio 8\SDKv2.0\Bin\gacutil.exe" (SET GACUTIL="%programfiles%\Microsoft Visual Studio 8\SDKv2.0\Bin\gacutil.exe" & GOTO DEPLOY)
IF EXIST "%programfiles% (x86)\Microsoft Visual Studio 8\SDKv2.0\Bin\gacutil.exe" (SET GACUTIL="%programfiles%\Microsoft Visual Studio 8\SDKv2.0\Bin\gacutil.exe" & GOTO DEPLOY)
IF EXIST "%programfiles%\Microsoft SDKs\Windows\v6.0A\bin\gacutil.exe" (SET GACUTIL="%programfiles%\Microsoft SDKs\Windows\v6.0A\bin\gacutil.exe") ELSE (ECHO Gacutil.exe could not be found! & GOTO QUIT)
%GACUTIL% -if <プロジェクトで作成された dll>


echo ファイル一式をフィーチャーフォルダにコピーします...
copy /Y <プロジェクトの feature.xml>  "%CommonProgramFiles%\Microsoft Shared\web server extensions\12\TEMPLATE\FEATURES\<フィーチャーフォルダの名前>"
copy /Y <プロジェクトの workflow.xml> "%CommonProgramFiles%\Microsoft Shared\web server extensions\12\TEMPLATE\FEATURES\<フィーチャーフォルダの名前>"
xcopy /s /Y <プロジェクトで使う *.xsn> "%programfiles%\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\FEATURES\<フィーチャーフォルダの名前>"


echo フィーチャーをインストールします...
pushd %programfiles%\common files\microsoft shared\web server extensions\12\bin
stsadm -o installfeature -filename <フィーチャーフォルダの名前>\feature.xml -force
stsadm -o activatefeature -filename <フィーチャーフォルダの名前>\feature.xml -url <インストール先の web (例 http://localhost/)>
popd


echo IISのresetをおこないます...
iisreset

アンインストール時

echo フィーチャーをアンインストールします...
pushd %programfiles%\common files\microsoft shared\web server extensions\12\bin
stsadm -o deactivatefeature -filename <フィーチャーフォルダの名前>\feature.xml -url <インストール先の web (例 http://localhost/)>
stsadm -o uninstallfeature -filename <フィーチャーフォルダの名前>\feature.xml -force
popd


echo フィーチャーフォルダを削除します...
rmdir /S /Q "%programfiles%\common files\microsoft shared\web server extensions\12\TEMPLATE\FEATURES\<フィーチャーフォルダの名前>"


echo GACからアセンブリを削除します...
IF EXIST "%programfiles%\Microsoft Visual Studio 8\SDKv2.0\Bin\gacutil.exe" (SET GACUTIL="%programfiles%\Microsoft Visual Studio 8\SDKv2.0\Bin\gacutil.exe" & GOTO DEPLOY)
IF EXIST "%programfiles% (x86)\Microsoft Visual Studio 8\SDKv2.0\Bin\gacutil.exe" (SET GACUTIL="%programfiles%\Microsoft Visual Studio 8\SDKv2.0\Bin\gacutil.exe" & GOTO DEPLOY)
IF EXIST "%programfiles%\Microsoft SDKs\Windows\v6.0A\bin\gacutil.exe" (SET GACUTIL="%programfiles%\Microsoft SDKs\Windows\v6.0A\bin\gacutil.exe") ELSE (ECHO Gacutil.exe could not be found! & GOTO QUIT)
%GACUTIL% -uf <プロジェクトで作成された dll>


echo IISのresetをおこないます...
iisreset

================================================

フォームが正しくインストールされたことを確認するため、SharePoint Central Administration で [Manage form templates] をクリックして、登録されたフォームが Workflow Enabled なフォームとして一覧に表示されていることを確認してください。(フォームが正しく配置されていれば、この一覧に作成したフォームが [Workflow Enabled] にチェックがついた形で表示されます。)

さいごの仕上げとして、ワークフローを使用する Site Collection に管理者の ID でログインして、[Site Action] – [Site Settings] を選択してください。[Site Collection Features] のリンクをクリックすると、登録したワークフローが表示されているので、もし Deactivate になっていたら、[Activate] ボタンを押してアクティベートしておきます。
これで、すべての準備は終了です。(お疲れ様でした、、、)

ここまでで作成したプロジェクトをご参考のため添付しておきます。(このプロジェクトは私の環境で作成・インストールしたものですので、皆さんの環境でそのままインストールすることはできません。細かな箇所をチェックして頂くためのご参考情報として添付しています。)

配置については、「大変面倒な作業である」(とても、無理、、、) と思われるかもしれませんが、これは、まだ Beta リリースの仮の姿であると思ってご辛抱ください。現時点で最終的な仕様は未定ですが、配置については、最終的にはもっと簡単になるはずですので、SharePoint ワークフロー開発チームの活躍に期待しましょう。
以上で、配置・インストールが終了しましたので、次回、まとめとして、このワークフローを使用していきます。またそれと共に、デバッグが出来ないとかなり修正がツライ状況になると思いますので、デバッグ方法もあわせて説明します。

第1回 デザイン編
第2回 コード実装編

第4回 動作の確認とデバッグ編

 

SharePointWorkflowLibrary2.zip

Advertisements

Categories: Uncategorized

Tagged as: ,

3 replies »

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s