トップ回答者
IIS管理のWebアプリから、リストアイテムを追加するとワークフローの初回起動でエラーとなる。

質問
-
他のWebアプリからリストアイテムを追加し、そのカスタムリストにひも付いているワークフローを起動しようとしています。
対象サーバ:MOSS2007
現状
・IE(PCクライアント)からのアイテム登録
→正しくワークフローが起動
・Webアプリからの登録
→ワークフローエラー:「開始時に失敗(再試行中)」
になります。
共に、新規アイテムの登録ですが、
Webアプリからの ListItem.Add() → Update() で登録したリストアイテムはどうしてワークフロー起動にてエラーとなるのでしょうか?
エラーが発生したログには、以下のように記載されています。
エラーログ04/15/2008 14:58:49.53 w3wp.exe (0x0F5C) 0x16DC Windows SharePoint Services Workflow Infrastructure 72fs Unexpected RunWorkflow: Microsoft.SharePoint.SPException: <Error><CompilerError Line="1" Column="1" Text="ルート アクティビティの種類が無効です。" /></Error> 場所 Microsoft.SharePoint.Workflow.SPNoCodeXomlCompiler.LoadXomlAssembly(String assmNameIn, SPWeb web) 場所 Microsoft.SharePoint.Workflow.SPWinOeHostServices.CreateInstance(Guid trackingId, SPWorkflow workflow) 場所 Microsoft.SharePoint.Workflow.SPWinOeEngine.RunWorkflow(Guid trackingId, SPWorkflowHostService host, SPWorkflow workflow, Collection`1 events, TimeSpan timeOut) 場所 Microsoft.SharePoint.Workflow.SPWorkflowManager.RunWorkflowElev(SPWorkflow originalWorkflow, SPWorkflow workflow, Collection`1 events, SPRunWorkflowOptions runOptions)なお、Webアプリでは以下の様な環境で構築しています。
・MOSSサーバ(単一構成)の稼働しているサーバに構成
・アプリは「IISの規定のWebサイト」下にVisualStudio2005C#にて作成
・MOSSへのアクセスは、.Net Framework 3.0のクラスを利用
・Web.configでは、ユーザー認証をNone、Windowsユーザ偽装でAdministratorで実行
アイテム追加のコード(抜粋)
外部変数
MossTop:TOPのURL
Site:サイト名
ListName:リスト名
User:MOSS利用のユーザ名(アイテム登録者)
Code Snippetpublic bool UpdateListItem2MOSS()
{
SPSite siteCollection = null;
SPWeb mySite = null;
SPListItemCollection lItemColl = null;
SPUser targetUser = null;
SPUserToken token = null;
SPSite impersonatedSiteCollection = null;
SPWeb impersonatedSite = null;
SPFolder folder = null;
SPFileCollection filec = null;
SPFile file = null;SPListItem newItem = null;
try{
SPSecurity.RunWithElevatedPrivileges(delegate()
{
// サイト情報作成
siteCollection = new SPSite(MossTop);
mySite = siteCollection.AllWebs[Site];// 作成ユーザ変更
targetUser = mySite.SiteUsers[User];
token = targetUser.UserToken;
impersonatedSiteCollection = new SPSite(siteCollection.ID, token);
impersonatedSite = impersonatedSiteCollection.OpenWeb(mySite.ID);
impersonatedSite.AllowUnsafeUpdates = true;// アイテムコレクション取得
lItemColl = impersonatedSite.Lists[ListName].Items;// 新規追加
newItem = lItemColl.Add();
});
// フィールドデータ生成
→ここでフィールドデータ追加// 添付データ生成
→ここで、Attachmentファイルの生成と追加// 更新
newItem.Update();
}
catch( Exception ex)
{
return false;
}
finally
{
// サイトクローズ
if (impersonatedSite != null)
{
impersonatedSite.AllowUnsafeUpdates = false;
impersonatedSite.Dispose();
}
if (impersonatedSiteCollection != null) impersonatedSiteCollection.Dispose();
mySite.Dispose();
siteCollection.Dispose();
}return true;
}IEのユーザ認証機能が利用できない環境なので、もしかするとユーザ認証を落としている(利用していない)のが問題とも思うのです。が、現状Windows統合認証も、Form認証も利用できない環境で困っています。
Webアプリ側からなんらかの手段でMOSSのワークフローが必要とする情報をセットすることは出来ないのでしょうか?
そもそも、IEからの登録と、外部からのSPListItem.Update()で登録される情報が異なるというのも解せません。
もし、なにかキーになる情報があればご教授いただけると幸いです。
#ちなみに、放置しておくと、次の再試行時にはきちんとワークフローが動くようです。(エラーコードは以前上記のままですが)
#最初の起動時のみにログに記録されたエラーと共にワークフローのエラーが記録として残ってしまうようです。
以上、よろしくお願いいたします。
回答
-
ワークフローの問題の件にはお力添えできませんが、ASP.NETのバージョンの選択は自分も躓いたのでレスします。
下記をご覧下さい。
http://support.microsoft.com/kb/306005/ja
インストールの順番などによっては手動で設定する必要があるみたいですね。
すべての返信
-
自己レスです。
ワークフロー部分は、SharePoint Designer 2007を利用しています。
単に、ステータスのフィールド列(Choice)をチェックしながら、そのステータスが特定の文字になった時にタスク登録しています。
ワークフロー実行は「自動実行」にしています。
いろいろ探し回っていて、こういった記事を見つけました。
「Workflow "Failed on Start (retrying)" when new item created by BizTalk SharePoint Adapter 」
http://forums.microsoft.com/TechNet/ShowPost.aspx?PostID=2071849&SiteID=17
きちんと読めていないのですが、もしかして既知の問題でしょうか?
SharePoint Designer での自動開始を停止し、かつ別のWebアプリ等でListを監視して登録アイテムが見つかったら、ワークフローを実行させる。
というように読めるのですが...。
MOSS2007のフォーム認証プロバイダをきちんと実装し、そのうえでWebアプリ側からLIstItemのUpdateを行うのがセオリーなのでしょうか?
そうすると、SPSecurity.RunWithElevatedPrivileges()を使う意味が見えないのですが....
意見などあったらお願いいたします。
そういえば、WebアプリのASP.Netが2.0.50727までしか選択できません。
(IISの管理コンソール→既定のWebサイトのプロパティ→ASP.NETタブ→ASP.NETバージョン)
3.0にする手段がわからないのですが、これでいいのでしょうか?
それとも、ASP と .Net Frameworkは別物でしょうか?
よく理解していないのもいけないのでしょうね...すみません。
-
ワークフローの問題の件にはお力添えできませんが、ASP.NETのバージョンの選択は自分も躓いたのでレスします。
下記をご覧下さい。
http://support.microsoft.com/kb/306005/ja
インストールの順番などによっては手動で設定する必要があるみたいですね。
-
こんにちは。フォーラムオペレータの栗原麻里 です
rednord さん、回答ありがとうございます。
高橋史仁 さん、フォーラムのご利用ありがとうございます。
その後いかがでしょうか?
有用な情報だと思いましたので、rednord さんの回答へ回答済みチェックをつけさせていただきましたが、高橋史仁 さんはチェックを解除することもできますので、
ご確認くださいね。
また、追加のご質問などもございましたら、ぜひ投稿してください!
回答済みチェックが付くことにより、フォーラムをご利用していただいている皆様が、有用な情報を
見つけやすくなります。
回答された情報が参考になりましたら、ぜひ回答済みボタンを押してチェックを付けて
くださいね!それでは、ぜひまたご活用ください!