1

シナリオ:

  • ユーザーがワークフローのコマンドをクリックします
  • ワークフローのカスタムアクションは、いくつかのチェックを実行します
  • ワークフローカスタムアクションは、結果に応じて同じワークフローで別のコマンドを実行します

私がこれまでに持っているコードは次のとおりです。

Database db = Factory.GetDatabase("master");
if (Request.QueryString["_id"] != null)
{
  var itm = db.GetItem(new ID(Request.QueryString["_id"]));
  WorkflowCommand[] availableCommands = wf.GetCommands(itm.Fields["__Workflow state"].Value);   
  wf.Execute(Request.QueryString["command"], itm, "Testing working flow new screens", false, new object[] { }); // Execute the workflow step.
}

ただし、wf.Execute行でオブジェクトがインスタンスエラーに設定されていませんが、意味のあるスタックトレースなどがありません:(

私はwf.GetCommands、物事が実際に私が期待する場所にあることを確認するためだけに行をavailableCommands追加し、存在するコマンドの素晴らしいリストが入力されています。

commandIdが有効であり、存在することを確認しました。

ItmnullではなくContent Item、ワークフローが関連付けられている(ワークフローをコンテキストで実行する)。

ユーザーコンテキストなどが有効であり、権限の問題がないことを確認しました。

.aspx唯一の違いは、 sitecore内で実行されているページ内でこのコードを実行していることです。ただし、適切に設定されていないコンテキストアイテムがない限り、これが問題を引き起こすとは予想していませんでした。

4

1 に答える 1

4

ワークフローは、ワークフローが有効になっSiteContextている内で実行する必要があります。ContentDatabaseサイト内でこれを行う最も簡単な方法は、を使用SiteContextSwitcherして「シェル」サイトに変更することです。

using (new SiteContextSwitcher(SiteContextFactory.GetSiteContext("shell")))
{
    wf.Execute(Request.QueryString["command"], itm, "Testing working flow new screens", false, new object[] { }); // Execute the workflow step.
}

この例は、WeBlogSitecoreモジュールのコード内にあります。

http://svn.sitecore.net/WeBlog/Trunk/Website/Pipelines/CreateComment/WorkflowSubmit.cs

于 2012-08-03T16:29:57.313 に答える