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

  • 質問

  • 他の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 Snippet

    public 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()で登録される情報が異なるというのも解せません。

    もし、なにかキーになる情報があればご教授いただけると幸いです。

     

    #ちなみに、放置しておくと、次の再試行時にはきちんとワークフローが動くようです。(エラーコードは以前上記のままですが)

    #最初の起動時のみにログに記録されたエラーと共にワークフローのエラーが記録として残ってしまうようです。

     

     

    以上、よろしくお願いいたします。

    2008年4月15日 7:21

回答

すべての返信

  • 自己レスです。

     

    ワークフロー部分は、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は別物でしょうか?

    よく理解していないのもいけないのでしょうね...すみません。

    2008年4月16日 3:01
  • ワークフローの問題の件にはお力添えできませんが、ASP.NETのバージョンの選択は自分も躓いたのでレスします。

    下記をご覧下さい。

     

    http://support.microsoft.com/kb/306005/ja

     

    インストールの順番などによっては手動で設定する必要があるみたいですね。

    2008年4月16日 23:49
  • こんにちは。フォーラムオペレータの栗原麻里 です

     

    rednord さん、回答ありがとうございます。

     

    高橋史仁 さん、フォーラムのご利用ありがとうございます。

    その後いかがでしょうか?
    有用な情報だと思いましたので、rednord さんの回答へ回答済みチェックを

    つけさせていただきましたが、高橋史仁 さんはチェックを解除することもできますので、

    ご確認くださいね。

     

    また、追加のご質問などもございましたら、ぜひ投稿してください!

     

    回答済みチェックが付くことにより、フォーラムをご利用していただいている皆様が、有用な情報を
    見つけやすくなります。
    回答された情報が参考になりましたら、ぜひ回答済みボタンを押してチェックを付けて
    くださいね!

     

    それでは、ぜひまたご活用ください!

    2008年4月24日 6:31