[T2-401 デモ (2)] Rehosting を使ったエンドユーザへのワークフロー公開


環境 :
Visual Studio 2008 (.NET Framework 3.5)

こんにちは。

  1. WCF の Transport レベルの Custom Channel Sample
  2. Rehosting を使ったエンドユーザへのワークフロー公開
  3. WF による Rule Base のアプリケーション
  4. Custom の SharePoint Workflow Editor

製品開発者向けということで実施した Tech Ed の T2-401 セッションですが、お約束通り、デモを添付しておきます。
ここからは WF でお見せしたデモです。

まずは、WF のリホスティングによるワークフロー公開とエンドユーザーによるワークフロー作成のデモで使用したサンプルプロジェクトのダウンロードを掲載しておきます。

download sample (20080826_CustomWorkflowService)

ワークフローの公開には、いろいろと実装方法の選択肢と、それぞれのメリット・デメリットがありましたが、ここでの説明は割愛します。
ここでは、 WorkflowView を使用したリホスティングを使用しています。

コードは以下の通りです。

ワークフローデザイナーへの xoml のワークフローのロードをおこないますが、まず、WorkflowView を使った場合には、ロードやアンロードの処理のために、必ず Workflow Loader が必要でした。デザイナー上の「アイテム選択」、「コンテキストメニュー選択」、などの機能は、「サービス」として追加 (AddService) をおこないます。(下記で、WorkflowMenuCommandService はカスタムで作成したメニュー表示のためのクラスであり、後述でそのクラスを実装しています。)
さらに WorkflowView でデザイナーリホスティングをする場合の面倒なもう 1 つのポイントとして、Validation Check (Visual Studio のデザイナー上で出てくる赤のスマートタグアイコンです) へ対処しなければならないという点がありました。この Validation Check を意識して参照すべきアセンブリの設定などをおこなっておく必要があるため、以下ではそうした設定をおこなっています。

private DesignSurface designSurface;

private WorkflowView workflowView;

private MyWorkflowLoader loader;

string projectpath;

 

public Form1()

{

    InitializeComponent();

 

    // ワークフロープロジェクトのパスを取得

    projectpath = Path.Combine(Directory.GetCurrentDirectory(), @"......CustomWorkflowLibrary");

 

    // ワークフローデザイナーの初期化

    this.designSurface = new DesignSurface();

    loader = new MyWorkflowLoader(Path.Combine(projectpath, "Workflow1.xoml"));

    designSurface.BeginLoad(loader);

 

    this.workflowView = new WorkflowView((IServiceProvider) this.designSurface);

    splitContainer1.Panel1.Controls.Add(this.workflowView);

    this.workflowView.Dock = DockStyle.Fill;

 

    IDesignerHost designerHost = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost));

    designerHost.Activate();

 

    // コンテキストメニューを使用可にする

  //(下記で定義するカスタムのメニューを設定)

    IMenuCommandService menuService = new WorkflowMenuCommandService((IServiceProvider)workflowView);

    designerHost.AddService(typeof(IMenuCommandService), menuService);

 

    // 参照するアセンブリ(一部) を設定

    // (パラメータのValidation チェックなどの際に、このアセンブリを見にいくため)

    TypeProvider typeProvider = new TypeProvider((IServiceProvider)workflowView);

    typeProvider.AddAssemblyReference(@"......CustomWorkflowLibrarybinDebugCustomWorkflowLibrary.dll");

    designerHost.AddService(typeof(ITypeProvider), typeProvider);

 

    // 以下、省略

    . . .

}

 

 

// ワークフローローダーのクラス

class

MyWorkflowLoader : WorkflowDesignerLoader

{

    string xomlfile;

 

    public MyWorkflowLoader(string filename)

    {

        xomlfile = filename;

    }

 

    public override TextReader GetFileReader(string filePath)

    {

        throw new NotImplementedException();

    }

 

    public override TextWriter GetFileWriter(string filePath)

    {

        throw new NotImplementedException();

    }

 

    public override

Comments (2)

  1. こんにちは。 WCF の Transport レベルの Custom Channel Sample Rehosting を使ったエンドユーザへのワークフロー公開 WF による Rule Base のアプリケーション

Skip to main content