JP2006107478A - ワークフローを設計するための拡張可能フレームワーク - Google Patents

ワークフローを設計するための拡張可能フレームワーク Download PDF

Info

Publication number
JP2006107478A
JP2006107478A JP2005265378A JP2005265378A JP2006107478A JP 2006107478 A JP2006107478 A JP 2006107478A JP 2005265378 A JP2005265378 A JP 2005265378A JP 2005265378 A JP2005265378 A JP 2005265378A JP 2006107478 A JP2006107478 A JP 2006107478A
Authority
JP
Japan
Prior art keywords
workflow
activity
user
activities
designer
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2005265378A
Other languages
English (en)
Other versions
JP2006107478A5 (ja
Inventor
Dharma K Shukla
ケー.シュクラ ダーマ
Dennis Pilarinos
ピラリノス デニス
Abhay Vinayak Parasnis
ビナヤク パラスニス アブハイ
Akash J Sagar
ジェー.サガー アカシュ
Eli Hisdai
ヒスダイ エリ
Mayank Mehta
メヘタ マヤンク
Aditya G Bhandarkar
ジー.バンダルカール アディトヤ
Sergey Chub
チャブ セルゲイ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US11/046,967 external-priority patent/US8170901B2/en
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2006107478A publication Critical patent/JP2006107478A/ja
Publication of JP2006107478A5 publication Critical patent/JP2006107478A5/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/34Graphical or visual programming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/451Execution arrangements for user interfaces
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q10/00Administration; Management
    • G06Q10/06Resources, workflows, human or project management; Enterprise or organisation planning; Enterprise or organisation modelling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q50/00Systems or methods specially adapted for specific business sectors, e.g. utilities or tourism
    • G06Q50/10Services
    • G06Q50/18Legal services; Handling legal documents
    • G06Q50/188Electronic negotiation

Abstract

【課題】 コンポーネント化されたワークフローモデルをビルドするためのユーザインターフェイスを提供すること。
【解決手段】 ワークフローの各ステップは、ワークフローステップの設計時の態様、コンパイル時の態様、および実行時の態様を記述するメタデータを持つアクティビティとしてモデル化される。ユーザは、ユーザインターフェイスを介してワークフローを作成するアクティビティを選択し、配置する。ワークフロー内のアクティビティのそれぞれに関連付けられたメタデータが収集され、ワークフローの永続的表現を作成する。ユーザは、カスタムアクティビティをオーサリングすることによりワークフローモデルを拡張する。
【選択図】 図1

Description

本発明の実施形態は、ワークフローモデリングの分野に関係する。特に、本発明の実施形態は、コンポーネント化された拡張可能ワークフローモデル(componentized and extensible workflow model)に関係する。
既存のシステムでは、ビジネス問題をモデル化することによりビジネス問題を高水準のワークフローにマッピングすることを試みる。しかし、現実世界のワークフローは、(a)実行およびモデリングの複雑さ、(b)設計時のフローの構造に関する知識、(c)静的に定義された、またはアドホック/動的な特性、(d)ライフサイクルにおけるさまざまな時点でのフローのオーサリングおよび編集の容易さ、(e)ビジネスロジックとコアワークフロープロセスとの弱いまたは強い関連などのさまざまな次元において異なる。既存のモデルでは、これらすべての要因に対応することはできない。
さらに、ほとんどの既存のワークフローモデルは、言語ベースのアプローチ(例えば、BPEL4WS、XLANG/S、およびWSFL)またはアプリケーションベースのアプローチに基づいている。言語ベースのアプローチは、定義済み言語構文の閉じた集合を持つ高水準のワークフロー言語であり、これにより、ユーザ/プログラマに対するワークフロープロセスのモデル化が容易になる。ワークフロー言語は、言語構文の閉じた集合に対するすべての意味情報を備え、これによりユーザはワークフローモデルを構築できる。しかし、言語は、開発者側で拡張することはできず、ワークフローモデルを構成するプリミティブの閉じた集合となっている。言語は、ワークフローシステムベンダが出荷する言語コンパイラに結び付けられている。ワークフローシステム製品ベンダのみが、将来の製品バージョンにおいて新しい言語構文の集合を加えて言語を拡張することによりモデルを拡張することができる。このため、言語に関連付けられたコンパイラのアップグレードが必要となる。
アプリケーションベースのアプローチは、アプリケーション内に領域特有の問題を解決するためのワークフロー機能を備えるアプリケーションである。これらのアプリケーションは、本当に拡張可能であるとはいえず、またプログラム可能なモデルも持たない。
既存のアプローチでは、複雑さ、先見、動的ワークフロー、オーサリングの容易さ、およびビジネスロジックとコアワークフローとの関連度の強さの課題が適切に扱えない。さまざまなクラスのワークフローをモデル化するビジュアルワークフローデザイナ(visual workflow designers)を構築するために利用できる、拡張可能、カスタマイズ可能、および再ホスト可能な(re-hostable)ワークフローデザイナフレームワークはない。既存のシステムでは、ユーザがグラフィックスを利用してワークフロープロセスの設計を行い、開発者が選択したプログラミング言語によるビジネスロジックを関連付けることができるアプリケーション短期開発(RAD)スタイルのワークフロー設計の経験を欠いている。さらに、インク対応ワークフローデザイナ(ink-enabled workflow designer)もない。
さらに、既存システムは、ワークフローの実行のための継ぎ目のないアドホックな、または動的な編集機能を備えていない。ワークフロープロセスは、本質的に動的であり移動性を有し、その形態は設計時には全く予見できない。ワークフロープロセスは、構造化様式で始まり、最終的には、その実行存続期間の過程で発展し変化する。ワークフロービルダが設計時にさまざまな種類のワークフローモデルをオーサリングするだけでなく、継ぎ目のない方式でアドホックな、または動的な変更を実行中のワークフローに加えられるようにするワークフローオーサリングフレームワーク(workflow authoring framework)が必要である。ワークフロープロセスが展開された後、実行されていても、ビジネス要件に変更があれば、多くの場合、現在実行中のワークフロープロセスを変更または編集せざるを得ない。ワークフロープロセスの実行時オーサリングを行えるシステムが必要である。
さらに、ワークフロープロセスでは、ワークフロープロセスの複数のステップにまたがる分野横断的な直交する、入り組んだ諸問題を取り扱う。例えば、ワークフロープロセスの一部が長い実行トランザクションに参加するように設計されているが、同じプロセスの他の部分は同時実行用に設計されている。同じワークフロープロセスのさらに他の部分では、追跡を必要とするが、他の部分ではビジネスまたはアプリケーションレベルの例外を扱う。特定のビヘイビアをワークフロープロセスの1つまたは複数の部分に適用する必要はない。
いくつかのワークフローモデリングアプローチは、すべての例外および人間介入を含むビジネスプロセス全体の完全なフローベースの記述を必要とするので実用的でない。これらのアプローチのいくつかは、例外が発生したときの追加機能を用意しているが、他のアプローチでは、ビジネスプロセスをモデル化するフローベースのアプローチの代わりに制約ベースのアプローチのみを採用する。既存システムでは、フローベースまたは制約ベースのアプローチのいずれかを実装する。このようなシステムは、柔軟性が低すぎて、ビジネスの数多くの一般的状況をモデル化できない。
したがって、これらの欠点およびその他の欠点の1つまたは複数を解放するためにコンポーネント化された拡張可能なワークフローモデルが望まれる。
本発明のいくつかの実施形態は、コンポーネント化されたワークフローモデルを構築する拡張可能なフレームワークを実現する。特に、ワークフロープロセスの各ステップは、ワークフローステップの設計時の態様、コンパイル時の態様、および実行時の態様を記述する関連コンポーネントモデルを持つ。さらに、開発者は、これらのコンポーネントをオーサリングすることによりコアワークフローモデルを拡張することができる。本発明は、高度に形式的なマシン同士のプロセス、制約ベースのアドホックなヒューマンワークフロー、およびフローベースのアプローチおよび制約ベースのアプローチの混合を持つワークフローを含む、さまざまな種類のワークフローの実行を調整するのに十分柔軟であり強力なワークフローエンジンを含む。ワークフローエンジンでは、実行中ワークフローに対するアクティベーション、実行、クエリ、および制御機能を使用できる。例えば、本発明では、実行ワークフローにアドホックな動的変更を加えることができる。ワークフローエンジンは、サーバおよびクライアント環境の両方を含むさまざまなホスト環境において再ホスト可能または埋め込み可能である。それぞれの特定のホスト環境では、ワークフローエンジンをサービスプロバイダ群に結合する。サービスプロバイダの集約機能により、特定のホスト環境で実行できるワークフローの種類が決定される。
本発明の他の実施形態では、ワークフローモデルをシリアライズするために拡張オーケストレーションマークアップ言語(extensible orchestration markup language)(XOML)などの宣言形式を備える。宣言形式を使用すると、ユーザはコンポーネントの集合を書くことによりワークフローモデルを拡張することができる。ワークフロープロセスのさまざまなステップに対応する意味論は、コンパイル時に与えられたコンポーネントの意味論の妥当性を確認し、それを強制するアクティビティバリデータコンポーネント(activity validator component)内にカプセル化される。本発明の宣言形式の実施形態では、さらに、データの宣言およびデータとワークフローモデルのさまざまな要素との関連付けが可能である。宣言形式では、ワークフローを通じてデータを変換する操作をサポートする。例えば、この形式は、ワークフローモデル内のデータベースまたはファイル、コードスニペット、およびビジネスルールなどの外部データソースを宣言的に表す。
本発明の一実施形態では、さまざまなクラスのワークフローをモデル化するグラフィカル/ビジュアルワークフローデザイナを構築する拡張可能、カスタマイズ可能、および再ホスト可能なワークフローデザイナフレームワークを提供する。本発明の他の実施形態では、ユーザが任意のプログラミング言語によりグラフィックスを利用してワークフロープロセスの設計を行い、ビジネスロジックの関連付けを行うことができるようにするアプリケーション短期開発スタイルのワークフロー設計のエクスペリエンスをサポートする。本発明の実施形態は、さらに、ペンおよびタブレット技術を使用してインクもサポートする。本発明は、ユーザにより描画されたワークフローが内部表現に変換されるフリーフォームドローイングサーフェス(free form drawing surface)を備える。本発明は、既存のドローイングサーフェス上のインク編集(例えば、追加/削除アクティビティ)、および既存のワークフローのインク注釈(例えば、デザインサーフェス(design surface)に手書きされたコメント、提案、または注意喚起)を介してワークフローの作成および修正をサポートする。
本発明のさらに他の実施形態では、宣言的方法により分野横断的なビヘイビアを捕捉し、そのビヘイビアをワークフローモデルの選択された部分に適用するためのコンポーネントを備える。本発明の他の実施形態は、それに関連付けられているビヘイビアの背景状況においてワークフローモデルの選択された部分を実行する。本発明の実施形態は、フレームワーク、再利用可能コンポーネント、およびワークフロープロセスモデルの複数のステップにまたがる分野横断的な直交する入り組んだ諸問題を扱うための言語を提供する。
本発明の一態様によれば、方法は、ディスプレイおよびユーザインターフェイス選択装置を備えるコンピュータシステムにおいてワークフローをモデル化する。ワークフローはアクティビティを含み、ワークフローはビジネスプロセスをモデル化する。方法は、ディスプレイ上に複数のアクティビティを表示することを含む。方法は、さらに、ユーザインターフェイス選択装置を介してユーザからアクティビティの選択を受け取ることも含む。方法は、さらに、ディスプレイ上にアクティビティの受け取った選択を表示することも含む。方法は、さらに、ユーザインターフェイス選択装置を介してユーザから構造情報を受け取ることも含む。方法は、さらに、ワークフローを作成するために受け取った構造情報に従ってディスプレイ上にアクティビティの表示される選択を配列することも含む。
本発明の他の態様によれば、1つまたは複数のコンピュータ可読媒体は、ディスプレイおよびユーザインターフェイス選択装置を備えるコンピュータシステム内にワークフローをモデル化するためのコンピュータ実行可能コンポーネントを有する。ワークフローはアクティビティを含み、ワークフローはビジネスプロセスをモデル化する。コンポーネントは、ディスプレイ上に複数のアクティビティを表示するためのレンダリングコンポーネントを含む。コンポーネントは、さらに、ユーザインターフェイス選択装置を介してユーザからレンダリングコンポーネントにより表示されるアクティビティの選択を受け取るためのインターフェイスコンポーネントも含む。レンダリングコンポーネントは、さらに、ディスプレイ上に、インターフェイスコンポーネントが受け取ったアクティビティの選択を表示する。インターフェイスコンポーネントは、さらに、ユーザインターフェイス選択装置を介してユーザから構造情報を受け取る。コンポーネントは、さらに、ワークフローを作成するために受け取った構造情報に従ってディスプレイ上にアクティビティの選択を配列するデザイナコンポーネントも含む。
本発明のさらに他の態様によれば、システムはワークフローをモデル化する。ワークフローはアクティビティを含み、ワークフローはビジネスプロセスをモデル化する。システムは、複数のアクティビティを格納するためのメモリ領域を備える。システムは、さらに、メモリ領域に格納されている複数のアクティビティを表示するための表示領域も備える。システムは、さらに、ユーザからアクティビティの選択を受け取り、表示領域内にアクティビティの受け取った選択を表示し、ユーザから構造情報を受け取り、受け取った構造情報に従って表示領域内にアクティビティの表示される選択を配列してワークフローを作成するコンピュータ実行可能命令を実行するように構成されているプロセッサも備える。
それとは別に、本発明は、他のさまざまな方法および器具装置を含むことができる。
他の特徴は、一部は明白であり、また一部は以下で指摘される。
対応する参照文字は、図面全体を通して対応する部分を示す。
本発明のいくつかの実施形態では、ビジネスプロセスなどのプロセスを表すワークフローをモデル化する。ビジネスプロセスとは、予測可能で再現可能な成果が得られる従属する、順序付けられたタスク、アクティビティなどのことである。組織の運営手順、制度に関する実務知識、および情報資源を含めて、ビジネスプロセスは、効率よく、時機を逃すことなく定義済みのビジネス目的を達成するように設計される。効率的な環境では、プロセスの機能コンポーネントは、絶え間なく変化する企業要件に対処するために、容易に識別し、適合し、展開することができる。ワークフローは、ビジネスプロセス内のタスクとやり取りするエンドユーザのエクスペリエンスである。タスクは、アクティビティ、コンポーネントなどとしてモデル化され、それぞれ人またはマシンにより実行される一単位の作業である。一実施形態では、複数のアクティビティが一人のユーザ提示される。ユーザは、ワークフローを作成する複数のアクティビティを選択して編成する。作成されたワークフローは、実行され、ビジネスプロセスをモデル化する。図1を参照すると、ワークフロー100の実施例は、タスクおよび制御フロー複合アクティビティを含んでいる。
一実施例では、オーケストレーションエンジンワークフローモデルは、さまざまなクラスのワークフローのモデリング、オーサリング、および実行をサポートする。実施例は、整然とした順序で、または非同期イベントの集合として実行される構造化されたステップの集合に関して与えられた問題をモデル化することを含む。オーケストレーションエンジンは、スケジュールの実行を調整する。スケジュールは、ツリー構造で階層的に配列されたアクティビティのきちんと整理された集合である。実行アクティビティの実行コンテキストおよび実行アクティビティから見える共有データは、スコープにより規定される。それぞれのアクティビティは、ワークフロープロセス内のステップに対するメタデータをカプセル化するコンポーネントを表す。アクティビティは、ワークフローモデルでの実行の基本単位であり、関連付けられたプロパティ、ハンドラ、制約、およびイベントを持つ。それぞれのアクティビティは、任意のプログラミング言語のユーザコードにより構成することができる。例えば、ユーザコードは、共通言語ランタイム(CLR)言語で書かれたビジネスもしくはアプリケーションロジックまたはルールを表すことができる。それぞれのアクティビティは、ユーザコードでの実行へのインターセプト前フックおよびインターセプト後フック(pre-interception hooks and post-interception hooks)をサポートする。それぞれのアクティビティは、関連付けられたランタイム実行意味論およびビヘイビア(例えば、状態管理、トランザクション、イベント処理、および例外処理)を持つ。アクティビティは、他のアクティビティと状態を共有できる。アクティビティは、プリミティブなアクティビティであるか、または複合アクティビティにグループ化することができる。プリミティブつまり基本アクティビティは、下位構造(例えば、子アクティビティ)を持たず、したがって、ツリー構造内の葉ノードである。複合アクティビティは、下位構造を含む(例えば、これは、1つまたは複数の子アクティビティの親である)。
一実施形態では、アクティビティは、単純アクティビティ、コンテナアクティビティ、およびルートアクティビティの3種類がある。この実施形態では、モデルには1つのルートアクティビティがあり、ルートアクティビティの内側に単純アクティビティまたはコンテナアクティビティは全くないか、またはいくらかある。コンテナアクティビティは、単純またはコンテナアクティビティを含むことができる。ワークフロープロセス全体は、高位のワークフロープロセスを構築するアクティビティとして使用することができる。さらに、アクティビティは、中断可能であるか、または非中断可能とすることができる。非中断可能複合アクティビティは、中断可能アクティビティを含まない。非中断可能アクティビティには、アクティビティにブロックさせるサービスはない。
オーケストレーションエンジンは、アクティビティの集まりの例を示している。図2を参照すると、アクティビティ継承ツリーにアクティビティの実施例が示されている。図2に一覧として示されているアクティビティの実施例は、付録Aで詳しく説明する。さらに、ユーザは、ワークフローモデルを拡張するために1つまたは複数のアクティビティを書くことができる。例えば、ユーザは、特定のビジネス問題、領域、ワークフロー標準(例えば、ビジネスプロセス実行言語)、またはターゲットプラットフォームに対するアクティビティを書くことができる。オーケストレーションエンジンは、例えば、コードを分析するサービス、型解決およびタイプシステム、シリアライズするサービス、およびレンダリングを含むアクティビティを書くためのさまざまなサービスの集合をユーザに提供することができる。
一実施形態では、それぞれのアクティビティは、メタデータ、インスタンスデータ、および実行ロジックの少なくとも3つの部分を持つ。アクティビティのメタデータは、構成することができるデータプロパティを定義する。例えば、いくつかのアクティビティは、アクティビティ抽象基本クラスで定義されているメタデータの共通集合を共有することができる。それぞれのアクティビティは、このクラスを拡張することによりそのニーズに応じて独自の追加メタデータプロパティを宣言する。
メタデータプロパティの値は、アクティビティが構成されたスケジュールのいくつかのインスタンスにわたってそのアクティビティのすべてのインスタンスにより共有される。例えば、ユーザがスケジュールAを作成し、送信アクティビティをそれに追加した場合、送信アクティビティはそのメタデータの一部として識別情報(例えば、「001」)を与えられる。スケジュールに追加される第2の送信アクティビティは、その独自の一意的な識別情報(例えば、「002」)を受け取ることになる。スケジュールAの複数のインスタンスが作成され、実行されると、送信「001」のすべてのインスタンスはメタデータ値を共有する。対照的に、アクティビティのインスタンスデータは、実行スケジュールインスタンス内のアクティビティのインスタンスに特有のデータの集合を定義する。例えば、遅延アクティビティは、遅延アクティビティのタイムアウト値を表す日時値であるインスタンスデータに関する読み取り専用プロパティを与えることができる。この値は、遅延アクティビティが実行を開始した後利用可能になり、遅延アクティビティの1つ1つのインスタンスについて十中八九異なる。参照を「インスタンス」で修飾せずに、スケジュールのインスタンス、特にアクティビティおよびタスクのインスタンスを参照するのがふつうである。
複合アクティビティは、その子アクティビティの集合を他の要素として持つ。子アクティビティは、一実施形態ではメタデータと考えられる。オーケストレーションエンジンモデルでは、スケジュールのインスタンス内で実行時にこのメタデータを操作できることを明示している。新しい子アクティビティを実行スケジュールインスタンスの一部である複合アクティビティに追加し、そのスケジュールインスタンスに対するメタデータ(アクティビティツリー)のみが影響を受けるようにすることが可能である。
次に図3を参照すると、それぞれのアクティビティは、そのアクティビティに対するコンポーネントモデルを形成する関連付けられたコンポーネントの集合を持つ。関連付けられたコンポーネントの集合は、アクティビティエグゼキュータ(activity executor)、アクティビティデザイナ、アクティビティシリアライザ(activity serializer)、アクティビティバリデータ(例えば、意味チェッカー(semantic checker))、およびアクティビティコードジェネレータを含む。アクティビティエグゼキュータは、アクティビティに対する実行意味論を実装するステートレスコンポーネントである。アクティビティエグゼキュータは、アクティビティを実装するためのアクティビティのメタデータを操作する。コアスケジューラは、アクティビティエグゼキュータのサービスプロバイダとして機能し、アクティビティエグゼキュータにサービスを提供する。
アクティビティデザイナは、アクティビティの設計時ビジュアル表現を視覚的に表示する。アクティビティデザイナは、デザイナ階層内の1つのノードであり、テーマまたはスキンを作成して設定できる。アクティビティデザイナは、設計環境(例えば、アプリケーションプログラム)でホスティングされ、サービスを介してホスト設計環境とやり取りする。アクティビティバリデータでは、コンパイル時だけでなく実行時にもアクティビティ意味論を強制する。アクティビティバリデータは、ワークフローモデルのコンテキストに作用し、環境が提供するサービスを使用する(例えば、コンパイラ、デザイナ、またはランタイム)。バリデーションは、ワークフローのライフサイクルの各時点で実行される。構造準拠検査は、ワークフローのシリアライズ表現を作成するときに、コンパイルするときに、およびユーザの要求に対する応答として実行される。意味検査は、コンパイル時に実行するよりも実行時の方が強く、このため実行インスタンスのアクティビティツリー内のアクティビティの追加または置換などの実行時オペレーションの安全性を保証することができる。本発明では、例えば、定義済みインターフェイス要件への適合または準拠に関してアクティビティのそれぞれに関連付けられた意味論を評価する。
アクティビティシリアライザは、アクティビティのメタデータをシリアライズするコンポーネントである。アクティビティシリアライザは、さまざまなモデル/フォーマットシリアライザから呼び出される。ワークフローモデル全体が、拡張可能スキーマに基づいて宣言的マークアップ言語内にシリアライズされ、さらに、望むとおりに他のワークフロー言語に変換することができる。
一実施形態では、アクティビティのコンポーネントモデルは、コンピュータ可読媒体上にデータ構造体として格納される。データ構造体において、アクティビティデザイナは、アクティビティを視覚的に表現するためデータ(例えば、アイコン)を格納する画像フィールドにより表される。さらに、1つまたは複数の作者時刻フィールドでは、アクティビティに関連付けられているプロパティ、メソッド、およびイベントを定義するメタデータを格納する。アクティビティシリアライザは、作者時刻フィールドに格納されているメタデータをアクティビティの宣言的表現に変換するためのデータを格納するシリアライザフィールドにより表される。アクティビティジェネレータは、作者時刻フィールドに格納されているメタデータに関連付けられているソフトウェアコードを格納するビジネスロジックフィールドにより表される。アクティビティエグゼキュータは、ビジネスロジックフィールドに格納されているソフトウェアコードを実行するためのデータを格納するエグゼキュータフィールドにより表される。
スコープとスケジュール
実行アクティビティの実行コンテキストおよび実行アクティビティから見える共有データは、スコープにより規定される。スコープとは、コアアクティビティのうちの1つである。スコープは、変数および長時間実行しているサービスの状態をトランザクション意味論、エラー処理意味論、補正、イベントハンドラ、およびデータ状態管理とともにひとまとめにするための統一言語構文である。スコープは、関連付けられた例外およびイベントハンドラを持つことができる。一実施形態では、スコープは、トランザクション、アトミック、長時間実行、または同期化のスコープとすることができる。ユーザ変数に対するread−writeまたはwrite−write アクセスが衝突する場合にユーザのために同時実行制御が用意される。スコープは、さらに、トランザクション境界、例外処理境界、および補正境界でもある。スコープはスケジュール内でネストすることができるので、さらに、名前が衝突することなく異なるスコープ(スコープがネストしているとしても)内で同じ名前により変数、メッセージ、チャネル、および相関関係集合を宣言することが可能である。
スケジュール内にネストされているスコープは、そのスケジュールのコンテキスト内でのみ実行可能である。スケジュールは、アプリケーション(例えば、スタンドアロンの実行可能エンティティ)として、またはライブラリ(例えば、他のスケジュールから呼び出すため)としてコンパイルすることができる。ライブラリとしてコンパイルされたスケジュールはすべて、実際に、他のスケジュール内から呼び出すことができる新しいアクティビティ型を構成する。スケジュールのメタデータは、パラメータの宣言を含む。
スケジュールが作成された後、作成されたスケジュールのインスタンスを実行できる。スケジュールインスタンスをアクティベートし、制御するプロセスは、オーケストレーションエンジンが埋め込まれているホスト環境に応じて異なる。オーケストレーションエンジンは、スケジュールをテストするために使用できる余計な機能のない「単純なホスト」を提供する。さらに、オーケストレーションエンジンは、サービス環境(つまり、ホスト)とやり取りするためエンジンおよび外部アプリケーションにより同様に使用される「サービスプロバイダ」モデル(例えば、アプリケーションプログラミングインターフェイス)の標準化を推進するアクティベーションサービスを提供する。アクティベーションサービスは、特定のスケジュール型のスケジュールインスタンスを作成し、その際に、任意選択で、パラメータを受け渡す。スケジュールインスタンスは、本質的に、実行スケジュールインスタンスのプロキシであり、インスタンス、スケジュールのメタデータ(アクティビティツリー)への参照、およびインスタンスのサスペンド、レジューム、および終了を実行するメソッドを一意に識別する識別子を含む。アクティベーションサービスは、さらに、与えられたスケジュールインスタンス識別子に基づいてスケジュールインスタンスを見つける操作もサポートする。
コードビサイド
スコープアクティビティは、スコープアクティビティのビジネスロジックを含む関連するコードビサイドクラスを持つことができる。スケジュールはそれ自体スコープであるため、スケジュールはコードビサイドクラスも持つことができる。スケジュール内にネストされているスコープも、それ独自のコードビサイドクラスを持つことができる。スコープ内でネストされているアクティビティは、共有データ状態およびビジネスロジックのコンテナとして働くスコープのコードビサイドクラスを共有する。例えば、コードアクティビティのメタデータは、コードビサイド内に特定のシグネチャを持つメソッドへの参照を含む。他の実施例では、送信アクティビティのメタデータは、特定のシグネチャのコードビサイドメソッドへのオプションの参照に加えてメッセージ宣言およびチャネル宣言への必須参照を含む。
コードビサイドの使用例としては、変数、メッセージ、チャネル、および相関関係集合の宣言、in/out/refパラメータの宣言、追加カスタムプロパティの宣言、送信するメッセージの準備、受信されたメッセージの処理、論理値を返すコードで表現されたルールの実装、ローカルで定義されている変数の操作、アクティビティメタデータおよびインスタンスデータの読み取り、アクティビティインスタンスデータの書き込み(例えば、実行されようとしているアクティビティに関するプロパティの設定)、イベントの発生、例外のスロー、横断的なネストされているスコープおよびスケジュール呼び出し境界を含む実行スケジュールインスタンスのアクティビティツリー内のアクティビティの階層の列挙およびナビゲート、実行スケジュールインスタンス内で複合アクティビティへの新規アクティビティの追加、実行スケジュールインスタンス内のアクティビティに関連付けられている宣言的ルールの変更、ならびに他の実行スケジュールインスタンスへの参照の取得および他の実行スケジュールインスタンスの操作が挙げられる。
ワークフローを設計するためのユーザインターフェイス
図4を参照すると、ブロック図は、ワークフローを作成するためにユーザと本発明との間で行われるやり取りを例示している。ユーザ402は、ディスプレイ404(例えば、表示装置、またはアプリケーションプログラムの実行環境内の表示領域)およびユーザインターフェイス選択装置406を対話形式で操作し、コンピュータ実行可能コンポーネントを介してワークフローを設計する。ワークフローをモデル化するためのコンピュータ実行可能コンポーネントは、コンピュータ可読媒体410などの1つまたは複数のコンピュータ可読媒体上に格納され、レンダリングコンポーネント412、インターフェイスコンポーネント414、デザイナコンポーネント416、およびバリデーションコンポーネント418を含む。レンダリングコンポーネント412は、ディスプレイ404上に複数のアクティビティを表示する。インターフェイスコンポーネント414は、ユーザインターフェイス選択装置406を介してユーザ402からレンダリングコンポーネント412により表示されるアクティビティの選択を受け取る。レンダリングコンポーネント412は、さらに、ディスプレイ404上に、インターフェイスコンポーネント414が受け取ったアクティビティの選択を表示する。インターフェイスコンポーネント414は、さらに、ユーザインターフェイス選択装置406を介してユーザ402から構造情報を受け取る。デザイナコンポーネント416は、ワークフローを作成するために受け取った構造情報に従ってディスプレイ404上にアクティビティの選択を配列する。バリデーションコンポーネント418は、定義済みインターフェイス要件への適合具合の意味論を評価する。
一実施形態では、本発明は、インク対応であり、ユーザ402からワークフローの手描き表現を受け取るためのタッチスクリーン436を備える。本発明は、手描きワークフローをワークフローに変換する。インクワークフローの実施例が図5に示されている。ユーザ402が「auto−recognize」を選択した後、ワークフローは図6に示されているワークフローに変換される。インク対応実施形態を使用すると、ユーザ402は、タブレットコンピューティング装置と互換性のあるワークフローデザイナをビルドすることができる。インク対応ワークフローデザイナでは、ユーザ402は、ペン、ポインティング装置などをワークフロー作成プロセス全体にわたって使用することができる(例えば、追跡データの分析を含む最初のスケッチ段階から実行および実行後段階まで)。このような実施形態では、コンピュータ実行可能コンポーネントは、さらに、パレットコンポーネント422、レコグナイザコンポーネント420、スキンコンポーネント424、およびワークフローコンポーネント426を含む。パレットコンポーネント422は、複数のパレット要素を定義する。定義済みの複数のパレット要素はそれぞれ、複数のアクティビティのうちの少なくとも1つに対応する。インターフェイスコンポーネント414は、タッチスクリーン436を介してユーザ402から複数のグラフィック要素を受け取る。受け取った複数のグラフィック要素を配列してワークフローを作成する。レコグナイザコンポーネント420は、インターフェイスコンポーネント414が受け取った複数のグラフィック要素のそれぞれをパレットコンポーネント422によって定義されたパレット要素の1つに関連付け、ワークフローをタッチスクリーン436に表示するように関連付けられたパレット要素を配列する。スキンコンポーネント424は、受け取ったユーザ定義テーマをタッチスクリーン436に表示されるワークフローに適用する。ワークフローコンポーネント426は、レコグナイザコンポーネント420により配列された関連付けられたパレット要素に応じてワークフローを作成する。
特に、ユーザ402は、タブレットコンピューティング装置上にプロセスをグラフィックでスケッチする。本発明では、プロセスおよび、パラレル、決定、ループ、およびイベント/アクティベーション条件などのプロセスコンストラクトを対話形式で操作するためのさまざまなプロセス定義スイムレーン(swim lanes)をサポートする。その後、本発明のソフトウェアは、グラフィカルスケッチを、スケッチ中にオンザフライで、またはユーザ402によるスケッチが完了した後に、プロセス定義に変換する。次に、グラフィカルスケッチを、ディスプレイ404上で、標準の記号および要素を持つワークフローに置き換えることができる。ユーザ402は、表示されたワークフローを編集し、ワークフローのコメント(例えば、シングルユーザまたはマルチユーザのシナリオ)を追加または削除し、表示されているワークフロー要素に修正を加えることができる。特に、ユーザ402は、既存のワークフロー上でコメント、ノート、および/またはメモを描くか、または書くことにより注釈を付けることができ、本発明は、ワークフロー表現および周囲形状に関するインクの位置とともにインクを格納する。
さらに、ユーザ402は、追加スケッチを描画するか、または編集と解釈される標準ジェスチャー(例えば、削除、コピー、移動)を描画するか、または特定のアクティビティ型を挿入することにより、プロセス定義を修正することができる。本発明は、さらに、描画とプロセス定義との間のラウンドトリッピングをサポートする。例えば、プロセス定義は、描画が変化したときに更新され、またその逆も真である。
本発明では、描画を作成されたプロセス定義とともに格納する。一実施形態では、これは、ユーザ描画時にプロセス実行の進捗状況を示すために使用することができる。例えば、ビジネスアナリストは、ワークフローを描画し、それを、ワークフローをプロセス定義に変換し、コンパイルし、プロセス実行を開始する開発者に与える。ビジネスアナリストは、プロセス定義ビューまたはドローイングペインのいずれかの実行中のプロセスを見る。
本発明では、さらに、ユーザ402は、描くおよび/または書く操作を介して稼働中(例えば、実行中)ワークフローとやり取りすることができる。例えば、ユーザ402は、管理ビュー内の稼働中プロセスの実行(例えば、起動/停止/終了)を制御するか、またはペン、ポインティング装置などで入力を書き込むことによりワークフローと通信することができる。特定の形状を削除または挿入するなど本発明により認識されるジェスチャーは、ジェスチャーの定義済み集合に限られない。つまり、ユーザ402は、本発明のソフトウェアが認識するカスタムジェスチャーを作成することができる。
一実施形態では、本発明は、ビジネスアナリストを対象とするスタンドアロンアプリケーションとして具現される。他の実施形態では、本発明は、アプリケーションプログラムで使用するワークフローデザイナとして具現される。つまり、図4に例示されているコンポーネントは、アプリケーションプログラムの実行環境内で実行される。
他の実施形態では、プロセッサ408は、ワークフローをモデル化するコンピュータ実行可能命令を実行するように構成され、メモリ領域428にアクセスすることができる。メモリ領域428は、複数のアクティビティ430を格納する。プロセッサ408は、ユーザ402からアクティビティ430の選択を受け取り、ディスプレイ404上にアクティビティ430の受け取った選択を表示し、ユーザ402から構造情報を受け取り、受け取った構造情報に従ってディスプレイ404上にアクティビティ430の表示される選択を配列してワークフローを作成するコンピュータ実行可能命令を実行する。
タッチスクリーン436またはポインティング装置などに反応するディスプレイ404などの他のディスプレイを含む一実施形態では、メモリ領域428は、さらに、ディスプレイ404およびオプションによりポインティング装置を介してユーザ402から受け取った複数のグラフィック要素432を格納する。グラフィック要素432は、ワークフローを表すようにユーザ402により配列される。メモリ領域428は、さらに、それぞれアクティビティ430のうちの少なくとも1つに対応する複数のパレット要素434を格納する。このような実施形態では、プロセッサ408は、さらに、メモリ領域428に格納されているグラフィック要素432のそれぞれを複数のパレット要素434のうちの1つにマッピングし、マッピングされたパレット要素434に応じてワークフローを作成し、ディスプレイ404上にワークフローを表示するコンピュータ実行可能命令を実行するように構成される。
図4に例示されている要素は、アクティビティ430などの複数のアクティビティを表示する手段の実施例、アクティビティの選択を受け取る手段の実施例、ユーザ402から構造情報を受け取る手段の実施例、およびワークフローを作成するために受け取った構造情報に従ってアクティビティの表示された選択を配列する手段を実施例の構成要素となる。さらに、ポインティング装置は、デジタルペンまたはスタイラスなどを介して情報を伝達する手段の実施例を構成し、ディスプレイ404は、デジタルペンまたはスタイラスなどから入力を受け取る手段の実施例を構成し、プロセッサ408は、ユーザ402からグラフィック要素432などの複数のグラフィック要素を受け取ってそれに応じてワークフローを作成する手段の実施例の構成要素となる。
再び図4を参照し、次に図7を参照すると、流れ図は、ワークフローをモデル化する方法を例示している。この方法は、702でディスプレイ404上に複数のアクティビティ430を表示すること、704でユーザインターフェイス選択装置406を介してユーザ402からアクティビティ430の選択を受け取ること、706でディスプレイ404にアクティビティ430の受け取った選択を表示すること、708でユーザインターフェイス選択装置406を介してユーザ402から構造情報を受け取ること、および710でワークフローを作成するために受け取った構造情報に従ってディスプレイ404にアクティビティ430の表示される選択を配列することを含む。一実施形態では、複数のアクティビティ430を表示することは、複数のアクティビティ430をディスプレイ404上のパレット表示領域および/またはワークスペース表示領域内に表示することを含む。
次に図8を参照すると、タッチスクリーンの実施形態では、この方法は、さらに、802で定義されている複数のパレット要素のそれぞれが複数のアクティビティのうちの少なくとも1つに対応する複数のパレット要素を定義すること、804でワークフローを作成するために受け取った複数のグラフィック要素が配列されるタッチスクリーンを介してユーザから複数のグラフィック要素を受け取ること、806で受け取った複数のグラフィック要素のそれぞれを定義されているパレット要素のうちの1つに関連付けることにより受け取った複数のグラフィック要素のそれぞれを認識すること、および808でワークフローを表示するように関連付けられているパレット要素をタッチスクリーン上に配列することを含む。
一実施形態では、コンピュータ可読媒体410、428などの1つまたは複数のコンピュータ可読媒体は、図7および図8に例示されているメソッドを実行するコンピュータ実行可能命令を持つ。
ワークフローステンシル(Workflow Stencils)
ワークフローステンシル(例えば、ワークフローテンプレートまたはアクティビティパッケージ)は、ルートアクティビティおよびアクティビティの集合を含む。ステンシルは、領域および/またはホスト固有である。前者の実施例としては、構造化ワークフローステンシル、ヒューマンワークフローステンシル、および非構造化ワークフローステンシルがある。いくつかのステンシルは、場合によっては特定のホスト環境内で連携するように設計されている1つまたは複数のルートを含むアクティビティの集合として「閉じて」いてもよい。他のステンシルは、さまざまな程度で「開いて」いてもよい。ステンシルは、その拡張性ポイントを定める。例えば、開発者は、CustomRootおよび新しい抽象CustomActivityを書いて、パッケージがCustomRootであり、さらにCustomActivityから派生したアクティビティであると宣言する。
BPELまたはXLANG/Sステンシルの実施例は、状態管理およびトランザクションに参加する、関連付けられたイベントおよび例外ハンドラを備える、コントラクトファーストモデル(contract first model)をサポートする、分析できる、正しく定義されたアクティベーションおよび終了ビヘイビアを持つ、という特性を有するルートアクティビティを含む。ステンシルの実施例は、さらに、メッセージング特有のアクティビティの集合(例えば、SendおよびReceiveおよびその変種)およびScope、Loop、Condition、Listen、およびThrowなどの他の構造化アクティビティを含む。
Halifax Stencilの実施例は、暗黙の状態管理関連の例外ハンドラ(0〜n)、イベントベースのモデルをサポートする、適切に定義されたアクティベーションビヘイビアを持つ、および未定義の終了がある、という特性を備えるルートアクティビティを含む。ルートアクティビティは、0〜nのEventDrivenアクティビティを含む。それぞれのEventDriven Activityは、Halifax Actionを表す。それぞれのEventDriven Activityは、関連付けられた状態管理プロトコルを有し、アトミックスコープ内で実行される。
デザイナフレームワーク(ユーザインターフェイス)
オーケストレーションエンジンは、WYSWYG方式でさまざまなクラスのワークフローモデルを設計するためのフレームワークを備える。例えば、図9を参照すると、ワークフローオーサリングするための高水準アプリケーションユーザインターフェイスは、ワークフローの指定にウィザードに依存している。このフレームワークは、開発者がビジュアルワークフローデザイナを書けるようにするサービスおよびビヘイビアの集合を含む。これらのサービスは、ワークフロープロセスのレンダリング、フローを描画するためのインク/タブレットのサポート、および元に戻す/繰り返し、ドラッグ/ドロップ、切り取り/コピー/貼り付け、ズーム、パン、検索/置換、ブックマーク、装飾、バリデーションエラー用のスマートタグ、アクティビティ用の有効なドロップターゲットインジケータ、自動レイアウト、ビューページ付け、ナビゲーションマーカー、ドラッグインジケータ、ヘッダ/フッタ付き印刷およびプレビューなどの効率的方法を提供する。このようなユーザインターフェイスを使用することで、タスクおよび制御フロー複合アクティビティ(例えば、シーケンス、パラレル、および条件付き)を含む単純なワークフローを構成することができる。ルール指定(例えば、条件付き分岐ロジック、whileループロジック)、またはデータフロー指定(例えば、タスクAの出力がタスクBへの入力である)のいずれにも、コードの入力(または既存のコンパイル済みコードへの依存)は不要である。スケジュールのシリアライズされた表現(ルールおよびデータフローを含む)は、コードビサイドが必要ないいくつかのシナリオでは自己充足しており、完全である。
本発明のデザイナフレームワークを使用することで、本発明のオーケストレーションエンジンは、ソフトウェアコードをビジュアルな形でワークフローモデルに関連付ける機能をサポートするアプリケーション短期開発(RAD)スタイルのビジュアルワークフローデザイナを含む。ワークフロー内のそれぞれのアクティビティは、関連付けられたアクティビティデザイナを備える。それぞれのアクティビティデザイナは、フレームワークサービスに関して作成される。本発明のフレームワークは、さらに、ビジュアルデザイナモデルも含む。ビジュアルデザイナモデルは、ワークフローモデルで記述された関係を介して互いにリンクされているアクティビティデザイナの集合を含む。図10は、ワークフローデザイナの実施例を示す。ビジュアルデザイナおよびアクティビティデザイナについては、付録Bで詳しく説明する。本発明は、ユーザコードとワークフローモデルとの間のラウンドトリッピングをリアルタイムで可能にする「Code−Beside」、「Code−Within」、および「Code−Only」を含むコードをワークフローモデルに関連付けるさまざまなモードを含む。本発明は、さらに、ユーザがワークフロー構築している最中にリアルタイムで意味論的エラーを提示する。
オーケストレーションエンジンデザイナでは、ユーザはそのために他の作成済みスケジュールを使用し、それらを使用して上位のスケジュールを再帰的に作成することができる。スケジュールのインライン展開では、ユーザはスケジュールコンテンツをインラインで表示し、コンテンツを切り取ったりコピーしたりすることができる。スケジュールのインライン展開を有効にし、スケジュールを読み取り専用にするには、インラインスケジュールに対して別のデザインサーフェスおよびデザイナホストを作成する。さらに、複合スケジュールデザイナはそれ独自の階層を持つ。呼び出されたスケジュールはロードされ、ユーザによってデザイナが展開されたときに表示される。一実施形態では、デザイナは、デザインサーフェス上でアクティビティドロップまたはコピーされた場合に縮小するプロパティは、呼び出し側アクティビティデザイナをホスティングされたスケジュールのルートデザイナに連鎖する。以下の関数は、デザイナからアクティビティの追加および削除を行うことを禁止する。
internal static bool AreAllComponentsInWritableContext(Icollection components)
internal static bool IsContextReadOnly(IServiceProvider serviceProvider)
これらの関数は、アクティビティが挿入されるコンテキストが書き込み可能かどうかをチェックするためにインフラストラクチャにより呼び出される。ホスティングされたデザイナでは、これらの関数はfalseを返す。さらに、プロパティの修正が禁止される。他の関数は、適切なコンポーネントからアクティビティデザイナをフェッチする。
internal static ServiceDesigner GetSafeRootDesigner(IServiceProvider serviceProvider)
internal static ICompositeActivityDesigner GetSafeParentDesigner(object obj)
internal static IActivityDesigner GetSafeDesigner(object obj)
一実施例では、ユーザはスケジュールを作成し、それをアクティビティとしてコンパイルする。コンパイルに成功すると、スケジュールはツールボックス上に表示される。ユーザは、コンパイルされたスケジュールの使用が望ましいスケジュールを開くか、または作成する。ユーザは、ツールボックスからコンパイル済みスケジュールをドラッグ&ドロップする。縮小されたスケジュールデザイナがデザインサーフェスに示される。ユーザがドロップされたコンパイル済みスケジュールのコンテンツを表示したい場合、ユーザはそのスケジュールデザイナを展開して、呼び出されたスケジュールのコンテンツを読み取り専用状態でインライン表示する。呼び出されたスケジュールのインライン化により、ユーザはスケジュールデザイナ同士を切り換えなくても呼び出されたスケジュールを表示することができる。この機能は、既存のスケジュールを再利用して上位スケジュールを作成する開発者に有用な機能である。
テーマ/スキンを使用したデザイナフレームワークのカスタマイズのサポート
デザイナフレームワークを使用して書かれたワークフローデザイナは、ワークフローテーマを使用してカスタマイズすることができる。これらは、デザイナのさまざまな態様を宣言的に記述する拡張マークアップ言語(XML)ファイルとすることができる。ワークフローデザイナは、アクティビティを拡張するパートナのサポートをウィザードで対応している。ワークフローデザイナによりサポートされるユーザインターフェイス機能の例として、限定はしないが、元に戻す/繰り返し、ドラッグ/ドロップ、切り取り/コピー/貼り付け、ズーム、パン、検索/置換、ブックマーク、装飾、バリデーションエラー用のスマートタグ、アクティビティ用の有効なドロップターゲットインジケータ、自動レイアウト、ビューページ付け、ナビゲーションマーカー、ドラッグインジケータ、ヘッダ/フッタ付き印刷およびプレビュー、およびドキュメントアウトライン統合がある。ワークフローデザイナは、XMLメタデータを使用してデザイナのルック&フィールをカスタマイズできるカスタムデザイナテーマ/スキンをサポートする。例えば、ワークフローデザイナは、ユーザからカスタマイズ情報を受け取る。ワークフローデザイナでは、バックグラウンドコンパイルをサポートする。一実施例では、スケジュールを設計しながらバリデーションエラーを調べるスマートタグおよびスマートアクションが用意される。ワークフローデザイナは、任意のコンテナ(例えば、アプリケーションプログラム、シェルなど)でホスティングすることができる。
オーケストレーションエンジンプログラムの一実施例は、送信はアクティビティが後に続く受信アクティビティを含む。このプロセスでは、メッセージを受信して、送出する。ユーザは、「Hello World」と呼ばれるプロジェクトを作成して、オーケストレーションアイテムをプロジェクトに追加する。ユーザは、その後、スコープアクティビティをデザインサーフェス上にドラッグ&ドロップする。次に、ユーザは、送信アクティビティが後に続く受信アクティビティをスコープ上にドロップする。図11は、デザイナ内の結果として得られるワークフロー1100を例示している。それぞれのアクティビティデザイナは、オブジェクトモデル上のユーザインターフェイス表現を提供する。開発者は、オブジェクトモデルを直接プログラムして、アクティビティのプロパティを設定するか、またはデザイナを使用することができる。オーケストレーションエンジンデザイナを使用することにより、開発者はツールボックスからアクティビティを選択し、それをデザイナサーフェス上にドラッグすることができる。アクティビティがすでにスケジュールに入れられており、移動する必要がある場合、開発者は、それを選択して(それをクリックすることにより)、そのアクティビティを入れる必要のあるスケジュールの領域にドラッグすることができる。開発者がコントロールキーを押しながらドラッグ&ドロップを行うと、選択されたアクティビティのコピーが作成される。
アクティブな配置では、可能なドロップポイント(ターゲット)をデザインサーフェス上にビジュアルインジケータとして用意する。自動スクロール機能も、ドラッグ&ドロップのコンテキスト内で関与する。大きなスケジュールを取り扱う場合、現在ビューポート内にないデザイナの領域へのナビゲーションは、入れるスケジュールの領域に向かってアクティビティをドラッグすることによりアクセス可能である。
ドラッグ&ドロップは、同じプロジェクト内のスケジュール間で、また同じソリューション内の他のプロジェクト内のスケジュール間でサポートされる。アクティビティがデザインサーフェス上に配置された後、開発者はそのアクティビティの構成を設定する。各アクティビティは、スケジュールが有効なものとなるように開発者が構成する一連のプロパティを持つ。これらのプロパティは、プロパティブラウザで編集可能である。すべてのアクティビティは、プロパティブラウザ内にどのようなプロパティを表示できるかを制御する。開発者がさまざまなアクティビティを構成するのを補助するため、デザイナはさまざまなダイアログまたは「サブデザイナ」を備えている。ダイアログは、それぞれ、アクティビティのさまざまなプロパティについて呼び出される。
オーケストレーションエンジンは、ツールボックス内に提示されるアクティビティをカスタマイズすることができる。開発者がカスタムアクティビティまたはスケジュールを作成する場合、最終結果はアセンブリである。ダイアログを使用することにより、開発者は、アセンブリロケーションに移動してブラウズし、そのアセンブリを選択してオーケストレーションエンジンアクティビティとして現れるようにすることができる。それとは別に、開発者は、オーケストレーションエンジンのインストールパス内にそのアセンブリを置くことができ、オーケストレーションエンジンアクティビティとして存在することになる。
アプリケーションプログラミングインターフェイス(API)
他の実施形態では、本発明は、さまざまなワークフローオペレーションを実行するためのアプリケーションプログラミングインターフェイス(API)を備える。ハードウェア、ソフトウェア、および1つまたは複数のアプリケーションプログラミングインターフェイスは、ワークフローをオーサリングする手段の実施例、アクティビティの1つまたは複数を選択してワークフローを作成する手段の実施例、ワークフローをシリアライズする手段の実施例、ワークフローの視覚的表示をカスタマイズする手段の実施例、ワークフローの妥当性確認を行う手段の実施例、ワークフローをコンパイルする手段の実施例、および型をワークフロー内のアクティビティのそれぞれに関連付ける手段の実施例の構成要素となる。
アクティビティ実行フレームワーク
スケジュールおよびスコープを除き、エンジンは、アクティビティを抽象エンティティとして表示し、単に、特定のアクティビティの特定のデータまたは意味論を知らずにアクティビティの実行を簡単に調整する。一実施形態では、4つのエンティティは、アクティビティ自体、実行中のアクティビティの親アクティビティ、実行中のアクティビティを閉じるスコープ、およびオーケストレーションエンジンの実行中にやり取りをする。それぞれのエンティティは異なる関数を持つ。
完了をアクティビティコーディネータに知らせることなくアクティビティの実行メソッドが戻る場合、そのアクティビティは、論理的待ち状態にあると識別される。このようなアクティビティは、オーケストレーションエンジンによりキャンセルするか、または継続することができる(例えば、待っているアイテムまたはイベントが利用可能になるか、または実行され、エンジンによりこれにアクティビティが通知された後)。
論理的待ち状態に決して入らないいくつかのアクティビティは、決してキャンセルできない。実施例は、送信アクティビティおよびコードアクティビティを含むが、これらは外部イベントまたはサブスクリプションへの要求なしで実行されるからである。スレッドを渡された後(つまり、実行メソッドがオーケストレーションエンジンにより呼ばれた後)、これらのアクティビティは完了するまで動作し続ける。完了を通知するまでスレッドを返さないので、オーケストレーションエンジンにはキャンセルする機会が決して与えられない。
オーケストレーションエンジンのランタイムは、ルールを使用して、オーケストレーションエンジンアクティビティが実行されるイベントをトリガする。オーケストレーションエンジンデザイナは、関連付けられたルールを実行時に評価し、イベントを取り出するユーザ機能を提供する。オーケストレーションエンジンデザイナを利用することで、ユーザは、拡張性アーキテクチャを用意することによりさまざまな種類のルール技術を使用できる。デザイナは、使用されるルールの型には関知しない。
一実施形態では、デザイナは、ルールをアクティビティに関連付ける手段として論理式ハンドラをサポートしている。これは、ユーザコードファイル内で、ユーザが値trueまたはfalseを返すメソッドを書くことを意味し、それに基づいてルールがトリガされる。現在、Info AgentおよびBusiness Rules Engine(BRE)を含むルールを評価するために使用することもできる複数の技術がある。これを達成するために、デザイナは、ルール技術開発者がデザイナでカスタムユーザインターフェイスをホスティングできるようにする拡張性アーキテクチャを備える。デザイナは、コードステートメントコレクションの形でルールをシリアライズするカスタムユーザインターフェイスライター向けの手段を用意している。デザイナは、コードステートメントコレクションが中に挿入されているユーザコードファイル内にブールハンドラを生成し出力する。オーケストレーションエンジンは、ルールライターにより使用することもできる既定のユーザインターフェイスを含む。ルール技術プロバイダは、カスタムルール宣言を作成し、そのカスタムルール宣言に関連付けられたユーザインターフェイスタイプエディタを書き、ルールユーザインターフェイスをホスティングするカスタムユーザインターフェイスを作成し、保存後にコードステートメントを生成することによりオーケストレーションエンジンデザイナにルールを追加する。
一実施例では、ユーザは、ルールがアタッチされる必要のあるアクティビティデザイナを選択し、プロパティブラウザでルールプロパティを特定し、ドロップダウン内の「RuleExpressionHandler」を選択し(「Statements」プロパティがユーザインターフェイス内のRule Propertyの下に表示されるようにする)、「Statements」プロパティ内のユーザコードメソッド名を指定し、ユーザインターフェイスタイプエディタを呼び出してルール特有のユーザインターフェイスをホスティングするダイアログを呼び出し、新しい述語行を作成しそれらをグループ化することによりダイアログ内でルールを定義する。ユーザインターフェイスは、ユーザコードファイルにメソッドを生成して出力する。メソッド名は、プロパティブラウザでユーザが指定したのと同じものである。ルールを作成することに相当するコードステートメントが、ルール用のユーザコードメソッド内に挿入される。
実行時のメッセージング
実行ワークフローでは、スケジュールに送られるメッセージは、特定のスケジュールインスタンス向けである。例えば、発注書#123に対するインボイスをその発注書を発信した(例えば、送出した)のと同じスケジュールインスタンスに送り返さなければならない。受信メッセージと適切なスケジュールインスタンスとを照合するために、メッセージおよびスケジュールインスタンスは相関関係集合を共有する。相関関係集合は、メッセージ内の識別子フィールドがスケジュールインスタンスにより保持される同じ型の識別子と突き合わせて照合されることを意味する一価相関関係集合でよい。多プロパティ相関関係集合も、可能であり、データベーステーブル内の複数列主キーに類似している。
スケジュールインスタンスにより保持されている相関関係集合の値は、スケジュールインスタンスがメッセージを送出するか(例えば、値は送信発注書の識別子フィールドから取り出せる)、またはメッセージを受信するときに初期化される。その後、この相関関係集合値は、そのスケジュールインスタンスの状態の一部となる。後続の受信メッセージが到着すると、スケジュールインスタンス状態で保持されている相関関係集合値は、予想される型の受信メッセージにより保持されている識別子と突き合わせて照合される。一致が見つかった場合、相関関係集合は満たされ、メッセージがスケジュールインスタンスに配送される。
相関関係集合の実装はオーケストレーションエンジンおよびホスト環境に左右されるが、一実施形態では、ユーザは相関関係集合を宣言してスケジュールインスタンスを正しく動作するようにする。他の実施形態では、いくつかのアクティビティ(例えば、SendRequest/ReceiveResponseアクティビティおよびReceiveRequest/SendResponseアクティビティ)は、ユーザと無関係に相関関係集合をセットアップする。送信および受信アクティビティにより広範にわたるバリデーションチェックが実行され、相関関係集合が正しく初期化され、追随されるようにする。
実行ワークフローの動的編集
オーケストレーションエンジンは、さまざまな種類のワークフローをオーサリングする(そして、その後、ビジュアル化し、実行する)ためのフレームワークを提供する。実施例としては、event−condition−action(ECA)スタイルのワークフローまたは構造化フローまたはルール駆動フローがある。さらに、ワークフローのモデル化方法に関係なく、フレームワークにより、ユーザは設計時と同じ方法で、またはワークフロープロセスを再コンパイルしなくてもワークフロープロセスが実行しているときであってもワークフローをオーサリングまたは編集することができる。フレームワークを使用すると、ユーザはランタイムと高忠実度の設計時表現との間のラウンドトリッピングが可能になる。アドホックな変更は、プロセスモデルに対し実行時に加えられる変更である。ユーザは、そのスケジュールモデルを実行インスタンスに問い合わせ、モデルに変更を加えることができる。例えば、ユーザは、バッチ式でアクティビティの追加、削除、または置換を行うことができ、その後、バッチ変更をコミットまたはロールバックすることができる。一実施形態では、モデルは更新の後に妥当性確認が行われる。本発明の多くのワークフローシナリオでは、「設計時オーサリング」および「ランタイム実行」との間の分離のぼかし、またはさらには除去がある。
スケジュールインスタンスは、実際に、それらのインスタンスのスケジュール型について定義されているアクティビティ型(メタデータ)ツリーを他のインスタンスと共有する。しかし、スケジュールインスタンスは、実行を開始した後、新しいアクティビティの追加または宣言的ルールの操作を介してオンザフライで変更できる。そのような修正されたスケジュールインスタンスを取り出し、新しいスケジュール型として「名前を付けて保存」するか、またはより一般的に、インスタンスからシリアライズされた表現を単純に復元することが可能である。つまり、実行スケジュールインスタンスを、シリアライズし、その後、デザイナ(例えば、オーサリング環境)またはランタイムビジュアル化ツールに持ち込むことができる。
さらに、上級開発者は、スケジュールを丸ごとソフトウェアコードとしてオーサリングすることも可能である。スケジュール型を直接オーサリングする場合も、開発者は、単に、スケジュールのコードビサイドクラスのソフトウェアコードにInitializeScheduleModelという静的メソッドを入れ、このメソッドに[ScheduleCreator]属性でマークするだけである。一実施形態では、静的メソッドは、パラメータを取らず、Scheduleオブジェクトを返す。随伴するシリアライズされたファイルはないが、スケジュールのシリアライズされた表現は、作成されるScheduleオブジェクトから復元できる。これは、単一のソフトウェアコードファイルを使用してスケジュールを作成できることを意味しているが、バリデーションチェックは、このファイルには実行されえない。オーケストレーションエンジンのコンパイルにより、スケジュール型の基礎となっているアクティビティツリーの構造上および意味論的な有効性が保証される。他の実施形態では、コンパイルおよびバリデーションを内部で実行し、実行される実際の型を生成するが、コードの入力は不要である。スケジュール型のコンパイルは、コンパイル時オブジェクトモデルから実行時オブジェクトモデルへの変換がない分、超軽量なプロセスとなっている。本質的に、コンパイルは、単に、スケジュールのオブジェクトモデル表現をコードビサイドと組み合わせて新しい型を生成するだけである。一実施形態では、基本的に、コンパイル済みコードビサイドがオブジェクトモデル内のアクティビティにより要求される内容と一致するか、またはコードビサイドがコンパイル済みフォーム(アセンブリ)内にすでに存在している可能性がある場合には、特定のスケジュールについてコードビサイドを全く生成する必要はないと考えられる。
シリアライズされたスケジュールをコンパイルする場合、そのスケジュールに対するコードビサイドとして実際に使用される既存のコンパイル済み型を指すことが可能である。このコンパイル済み型の派生型が作成され、この新しい型はコードビサイドとして使用され、一意的な型が新しいスケジュールを表すように作成されることが保証される。
シリアライゼーションアーキテクチャ
シリアライゼーションインフラストラクチャは、オーケストレーションエンジンのアクティビティツリーをシリアライズする、モジュール方式の、形式に依存しない、容易に拡張可能なメカニズムを提供する。
特に、呼び出し側(例えば、アプリケーションプログラムまたはユーザ)は、シリアライゼーションマネージャからシリアライザにオブジェクト(またはアクティビティ)Aを要求する。オブジェクトAの型のメタデータ属性により、オブジェクトAは要求された型のシリアライザにバインドされる。次に、呼び出し側は、オブジェクトAをシリアライズするようにシリアライザに要求する。続いて、オブジェクトAのシリアライザはオブジェクトAをシリアライズする。シリアライザは、遭遇するオブジェクト毎に、シリアライズしながら、シリアライゼーションマネージャに追加シリアライザを要求する。シリアライゼーションの結果が呼び出し側に返される。
オーケストレーションエンジンコンポーネントモデル内のすべてのアクティビティは、シリアライゼーションに参加することができる。シリアライザコンポーネントは、一実施形態ではアクティビティクラス自体の一部ではない。その代わりに、このコンポーネントは、アクティビティに関連付けられたクラス内のシリアライザ属性に注釈を入れることにより指定される。シリアライザ属性は、そのアクティビティ型のオブジェクトをシリアライズするために使用されるクラスを指す。他の実施形態では、ある1つのアクティビティ型のプロバイダコンポーネントが、そのアクティビティにより与えられる既定のシリアライザをオーバーライドする。
デザイナシリアライゼーションは、メタデータ、シリアライザ、およびシリアライゼーションマネージャに基づく。メタデータ属性は、型をシリアライザに関係付けるために使用される。「ブートストラッピング」属性は、シリアライザを持たない型に対しシリアライザを提供するオブジェクトをインストールするために使用することができる。シリアライザは、特定の1つの型またはある範囲の複数の型をシリアライズする方法を認識するオブジェクトである。それぞれのデータ形式に対して1つの基本クラスがある。例えば、オブジェクトをXMLに変換する方法を認識するXmlSerializer基本クラスが考えられる。本発明は、特定のシリアライゼーション形式に関係しない一般的なアーキテクチャである。シリアライゼーションマネージャは、オブジェクトグラフをシリアライズするために使用されるさまざまなシリアライザに対する情報ストアとなるオブジェクトである。例えば、50個のオブジェクトのグラフは、すべてそれ独自の出力を生成する50個の異なるシリアライザを持つことができる。シリアライゼーションマネージャを、これらのシリアライザが使用して、必要な場合に互いに通信し合うことができる。
一実施形態では、ジェネリックなオブジェクトメタデータを使用するシリアライザに結合されたシリアライゼーションプロバイダを使用することにより、与えられた型に対するシリアライザを用意する機会がオブジェクトに与えられるコールバックメカニズムを実現する。AddSerializationProviderなどのメソッドを通じて、シリアライゼーションマネージャにシリアライゼーションプロバイダを用意することができる。シリアライゼーションプロバイダは、DefaultSerializationProviderAttributeなどの属性をシリアライザに追加することによりシリアライゼーションマネージャに自動的に追加できる。
一実施形態では、オブジェクトはxml要素としてシリアライズされる、オブジェクトのプロパティは単純プロパティ(例えば、xml属性としてシリアライズされる)または複合プロパティ(子要素としてシリアライズされる)として分類される、オブジェクトの子オブジェクトは子要素としてシリアライズされる、というルールに従って形式が示される。子オブジェクトの定義は、オブジェクト毎に異なることがある。以下の実施例は、子オブジェクトの1つとしてSendアクティビティを持つ、whileアクティビティのシリアライゼーションである。
Figure 2006107478
シリアライゼーションに使用される言語がXOMLである一実施形態では、それぞれのXOML要素は、スケジュールがコンパイルされるときにそれぞれのオブジェクトにシリアライズされる。オブジェクトは、単純型と複合型の両方を含む。各アクティビティのXOML表現の間のマッピングとオーサリングオブジェクトモデルへのマッピングについて、次に説明する。XOMLのシリアライゼーションは、プリミティブアクティビティと複合アクティビティとで異なる。
プリミティブアクティビティに対する単純型は、アクティビティタイプに関する属性としてシリアライズされる。プリミティブアクティビティに対する複合型は、子要素としてシリアライズされる。例えば、以下に、SendアクティビティのXOML表現を示す。
Figure 2006107478
プリミティブ型のシリアライゼーションと同様に、複合アクティビティに対する単純型は、アクティビティ型に関する属性としてシリアライズされる。しかし、定義により、複合アクティビティはネストされたアクティビティをカプセル化したものである。それぞれのネストされているアクティビティは、他の子要素としてシリアライズされる。例えば、以下に、WhileアクティビティのXOML表現を示す。
Figure 2006107478
プロセス/ワークフロービューとシリアライズされた表現との間に強い関係が存在する。ワークフローのシリアライズされた(例えば、XOML)表現またはワークフローのコードビサイドでオーサリングした場合、他方は変更を受ける。そのため、アクティビティ(または複合アクティビティの場合にはその構成要素部分)に対するXOMLを修正すると、開発者がプロセス/ワークフロービューの切り換えを行うときにプロセス/ワークフロービューに直接反映される。逆も言える。プロセス/ワークフロービュー内のアクティビティを修正すると、XOML内に適切な修正が生じる。例えば、プロセス/ワークフロービュー内でアクティビティを削除すると、同じアクティビティについてXOML内のXML要素も削除される。ラウンドトリッピングは、プロセス/ワークフロービューとコードビサイドとの間にも生じる。
XOMLコードを作成するときに、XOML定義が定義済みインターフェイス要件に適合していない場合、違反しているXML要素は、下線が付けられるか、または開発者がそれとわかるように他の何らかの方法で視覚的に識別される。開発者がプロセスビューに切り換えた場合、XOML内にエラーがあると警告され、デザイナがリンクを表示するので、開発者はそのリンクをクリックして、違反している要素にナビゲートする。この同じエラーは、タスクペインにも表示され、そのエラーをダブルクリックすると、開発者はXOMLの違反要素にナビゲートされる。
XOMLファイルからのアクティビティツリーの作成(デシリアライゼーション)
一実施形態では、CreateEditorInstance()関数が、DesignSurfaceオブジェクトを作成し、その後、DesignSurfaceオブジェクト上でBeginLoad()関数を呼び出して実際のローダオブジェクトをその中に渡し、最後に、BeginLoad()でDesignerLoader()関数を呼び出す。PerformLoad()関数は、テキストバッファオブジェクトを読み込み、それをオーケストレーションエンジンコンポーネントモデル階層にデシリアライズする。本発明は、階層内を辿り、アクティビティをデザインサーフェスに挿入し、コンポーネントをVisual Studioにロードする。
本発明は、さらに、XOMLの変更を監視し、階層およびアイテム識別の変更を追跡して、Visual Studioのキャッシュ内の値を更新する。二次ドキュメントデータリストは、オーケストレーションエンジンデザイナが作用する、ユーザには見えない二次ドキュメントのリストを含む。例えば、ユーザはコードビサイドファイルを開いていないが、ユーザがオーケストレーションエンジンデザイナ内で変更を加えた場合に、コードビサイドファイルに変更が加えられる。このファイルはユーザには見えないので、ファイルは二次ドキュメントとして保持されるXOMLファイルが保存されると、必ず、二次ドキュメントも自動的に保存される。これらのファイルの1つの名前が変更されるか、またはファイルが削除された場合、本発明では、それに応じて、対応する二次ドキュメントオブジェクトを更新する。
オブジェクトツリーのデシリアライゼーションガイドラインの例を以下に示す。xml要素は、まず、親オブジェクトのプロパティとして取り扱われる。親オブジェクトが要素のタグ名を持つプロパティを持たない場合、その要素は親オブジェクトの子オブジェクトとして取り扱われる。xml要素は、親オブジェクト上の単純プロパティとして取り扱われる。
上記のシリアライズされたコードを使用するデシリアライゼーションの実施例では、<While>要素は、xml名前空間情報を使用して作成されたオブジェクトとして取り扱われる。<ConditionRule>要素は、Whileアクティビティのプロパティとして取り扱われる。<CodeExpressionRuleDeclaration>要素は、値がConditionRuleプロパティに適用されるオブジェクトとして取り扱われる。最初に、<Send>要素がWhileアクティビティのプロパティとして試みられるが、「While」アクティビティは、名前「Send」のプロパティを持たず、したがって、<Send>要素はオブジェクトとして取り扱われ、whileアクティビティの子アクティビティとして取り扱われる。<Message>要素は、Sendアクティビティのプロパティとして取り扱われる。Send 上のMessageプロパティは読み取り専用なので、Message要素のコンテンツは、Messageオブジェクトのコンテンツと考えられる。同様のルールが、<OnBeforeSend>および<TypedChannel>要素のデシリアライゼーションに適用される。
XOMLコードがきちんとした形でない、XomlDocumentがXOMLコード内の第1の要素でなく、XOMLコード内の第1のアクティビティがデシリアライザできないという第1の条件の下では、XOMLデシリアライゼーションは決定的に失敗する開発者に対して、XOMLビューからプロセス/ワークフロービューから切り換える場合に、違反している側のXML要素にナビゲートするためのエラーメッセージが提示される。
オーケストレーションエンジンデザイナのホスティング
デザイナフレームワークは、どのようなアプリケーションプログラムでもホスティングできる。これは、サードパーティのアプリケーションでそれぞれの環境においてワークフローをレンダリングするのに非常に有用な機能である。またこれにより、サードパーティは、デザインサーフェスを再ホスティングおよびカスタマイズすることで、オーケストレーションエンジンデザイナ周辺のツールを開発することができる。本発明のフレームワークでは、ホスティングコンテナアプリケーション側でエディタおよび/またはテキストバッファなどのサービス群を用意することを想定している。
デザイナを再ホストする1ステップでは、ローダおよびデザインサーフェスを作成する。ローダは、XOMLファイルをロードし、アクティビティホストインフラストラクチャを構築する役割を持つ。デザインサーフェスは、その中にデザイナホストインフラストラクチャを保持し、デザインサーフェスをホスティングし、それとやり取りするサービスを提供する。デザインサーフェスは、サービスコンテナだけでなくサービスプロバイダとしても機能する。一実施例では、以下のコードを実行して、XOMLドキュメントをロードし、その中にアクティビティを保持するデザイナホストを構築する。
Figure 2006107478
以下のサービスでは、デザイナで異なる機能を使用できる。ISelectionService関数は、選択されたオブジェクトを保持する。IToolboxService関数は、ツールボックスとのやり取りを管理する。IMenuCommandService関数は、メニューとのやり取りを管理する。ITypeProvider関数を使用すると、タイプシステムを利用できる。さらに、高度なデザイナ機能を使用可能にするデザイナホスティング環境が提供する追加サービスもありえる。
タイプシステムは、本発明のコンポーネントモデルフレームワーク内の一コンポーネントである。デザイナがプロジェクトシステムの内側でホスティングされる場合、TypeProviderオブジェクトがプロジェクト毎に作成される。プロジェクト内のアセンブリ参照はタイププロバイダへプッシュされる。さらに、プロジェクト内のユーザコードファイルが解析され、単一コードコンパイル単位が作成され、タイププロバイダへプッシュされる。また、本発明は、タイプシステム内で型を変更させることが可能なプロジェクトシステム内のイベントを監視し、その変更に対する応答として型を再ロードする適切な呼び出しをタイププロバイダに対し実行する。
元に戻す/繰り返し
スケジュールを作成し、正しく構築した後、開発者は一連の実行済みオペレーションをロールバックしたい場合がある。本発明の「元に戻す」および「繰り返し」機能を使用すると、どのアクティビティが直接影響を受けているかを例示する視覚的フィードバックが得られる。例えば、アクティビティ上でプロパティの変更が元に戻される場合、影響を受けたアクティビティは選択状態になる。複数のオブジェクトの削除が元に戻される場合、関わっているすべてのオブジェクトが、スケジュールに復元されるときに選択状態になる。Undo/Redo(元に戻す/繰り返し)は、他の分野における多くのアプリケーション全体を通して使用される共通の機能であり、その意味はよく理解されている。オーケストレーションエンジンデザイナでは、Save後に、元に戻す/繰り返しアイテムがパージされることはない。さらに、元に戻す/繰り返しは、プロセス/ワークフロービューで、XOMLビューで、開発者がビューを切り換えた場合に、およびコードビサイド内で実行することができる。
Undo/Redoは、プロセス/ワークフロービュー内のアクション、つまり、アクティビティのドラッグ&ドロップ(例えば、ツールボックスからデザインサーフェスにアクティビティをドラッグする、スケジュールの一部分から他の部分にアクティビティを移動する、一方のデザイナから他方のデザイナにアクティビティを移動する)、アクティビティの構成(例えば、アクティビティのプロパティを指定する)、および切り取り/コピー/貼り付け/削除のアクションに対し用意されている。
一実施形態では、シリアライズされたビュー(例えば、XOMLビュー)は、テキストエディタ標準の元に戻す/繰り返しオペレーションを備えるXMLエディタである。本発明のデザイナは、プロセス/ワークフロービュー内で加えられた変更を示すフィードバックを開発者に提示し、その後、シリアライズされたビュー内で元に戻した結果として、シリアライズされたコードは失われる。開発者がプロセス/ワークフロービュー内のスケジュールの一部分を構築し、シリアライズされたビューに切り換えて、その後、元に戻す/繰り返しオペレーションを実行することに決めた場合、警告が表示される。
動作環境の例
図12は、コンピュータ130の形態の汎用コンピューティング装置の一実施例を示している。本発明の一実施形態では、コンピュータ130などのコンピュータは、例示され、本明細書で説明されている他の図で使用するのに適している。コンピュータ130は、1つまたは複数のプロセッサまたは演算処理装置132およびシステムメモリ134を備える。例示されている実施形態では、システムバス136は、システムメモリ134を含むさまざまなシステムコンポーネントをプロセッサ132に結合する。バス136は、メモリバスまたはメモリコントローラ、周辺機器バス、アクセラレイティッドグラフィックスポート、およびさまざまなバスアーキテクチャのどれかを使用するプロセッサまたはローカルバスを含む数種類のバス構造のうちの1つまたは複数を表している。例えば、限定はしないが、このようなアーキテクチャとしては、Industry Standard Architecture(ISA)バス、Micro Channel Architecture(MCA)バス、Enhanced ISA(EISA)バス、Video Electronics Standards Association(VESA)ローカルバス、およびMezzanineバスとも呼ばれるPeripheral Component Interconnect(PCI)バスがある。
コンピュータ130は、通常、少なくともある種の形態のコンピュータ可読媒体を備える。コンピュータ可読媒体は、揮発性および不揮発性媒体、取り外し可能および取り外し不可能媒体を含み、コンピュータ130によってアクセスできる媒体であればどのような媒体でもよい。例えば、限定はしないが、コンピュータ可読媒体は、コンピュータ記憶媒体および通信媒体を含む。コンピュータ記憶媒体は、コンピュータ可読命令、データ構造体、プログラムモジュール、またはその他のデータなどの情報を格納する方法または技術で実装される揮発性および不揮発性、取り外し可能および取り外し不可能媒体を含む。例えば、コンピュータ記憶媒体は、RAM、ROM、EEPROM、フラッシュメモリまたはその他のメモリ技術、CD−ROM、デジタル多目的ディスク(DVD)またはその他の光ディスク記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置またはその他の磁気記憶装置、または所望の情報を格納するために使用することができ、しかもコンピュータ130によりアクセスできるその他の媒体を含む。通信媒体は、通常、コンピュータ可読命令、データ構造体、プログラムモジュール、または搬送波もしくはその他のトランスポートメカニズムなどの変調データ信号によるその他のデータを具現するものであり、任意の情報配信媒体を含む。当業者は、信号内の情報を符号化するなどの方法により特性のうちの1つまたは複数が設定または変更される変調データ信号を熟知している。有線ネットワークまたは直接配線接続などの有線媒体、ならびに音響、RF、赤外線、およびその他の無線媒体などの無線媒体は、通信媒体のいくつかの実施例である。上記のいずれの組み合わせもコンピュータ可読媒体の範囲に含まれる。
システムメモリ134は、取り外し可能な、および/または取り外し不可能な、揮発性および/または不揮発性メモリの形のコンピュータ記憶媒体を備える。例示されている実施形態では、システムメモリ134は、読み取り専用メモリ(ROM)138およびランダムアクセスメモリ(RAM)140を含む。起動時などにコンピュータ130内の要素間の情報伝送を助ける基本ルーチンを含む基本入出力システム142(BIOS)は、通常、ROM 138に格納される。通常、RAM 140は、演算処理装置132に直接アクセス可能な、および/または演算処理装置132によって現在操作されているデータおよび/またはプログラムモジュールを格納する。例えば、限定はしないが、図12は、オペレーティングシステム144、アプリケーションプログラム146、その他のプログラムモジュール148、およびプログラムデータ150を例示している。
コンピュータ130はさらに、その他の取り外し可能/取り外し不可能な揮発性/不揮発性コンピュータ記憶媒体を備えることもできる。例えば、図12は、取り外し不可能な不揮発性磁気媒体への読み書きを行うハードディスクドライブ154を例示している。図12は、さらに、取り外し可能不揮発性磁気ディスク158への読み書きを行う磁気ディスクドライブ156、およびCD−ROMまたはその他の光媒体などの取り外し可能不揮発性光ディスク162への読み書きを行う光ディスクドライブ160を示している。動作環境の実施例で使用できる他の取り外し可能/取り外し不可能な揮発性/不揮発性コンピュータ記憶媒体としては、限定はしないが、磁気テープカセット、フラッシュメモリカード、デジタル多目的ディスク、デジタルビデオテープ、ソリッドステートRAM、ソリッドステートROMなどがある。ハードディスクドライブ154、および磁気ディスクドライブ156、および光ディスクドライブ160は、通常、インターフェイス166などの不揮発性メモリインターフェイスによりシステムバス136に接続される。
図12に例示されている上記のドライブまたは他の大容量記憶装置およびその関連コンピュータ記憶媒体は、コンピュータ130用のコンピュータ可読命令、データ構造体、プログラムモジュール、およびその他のデータを格納する機能を備える。例えば、図12では、ハードディスクドライブ154は、オペレーティングシステム170、アプリケーションプログラム172、その他のプログラムモジュール174、およびプログラムデータ176を格納するものとして例示されている。これらのコンポーネントは、オペレーティングシステム144、アプリケーションプログラム146、その他のプログラムモジュール148、およびプログラムデータ150と同じである場合もあれば異なる場合もあることに留意されたい。オペレーティングシステム170、アプリケーションプログラム172、その他のプログラムモジュール174、およびプログラムデータ176に対しては、ここで、異なる番号を割り当てて、最低でも、それらが異なるコピーであることを示している。
ユーザは、キーボード180、およびポインティング装置182(例えば、マウス、トラックボール、ペン、またはタッチパッド)などのなどの入力装置またはユーザインターフェイス選択装置を通じてコマンドおよび情報をコンピュータ130に入力することができる。他の入力装置(図に示されていない)としては、マイク、ジョイスティック、ゲームパッド、衛星放送受信アンテナ、スキャナなどがある。これらの入力装置およびその他の入力装置は、システムバス136に結合されているユーザ入力インターフェイス184を通じて演算処理装置132に接続されるが、パラレルポート、ゲームポート、またはユニバーサルシリアルバス(USB)などの他のインターフェイスおよびバス構造により接続することもできる。モニタ188またはその他の種類の表示装置も、ビデオインターフェイス190などのインターフェイスを介してシステムバス136に接続される。モニタ188のほかに、コンピュータはプリンタおよびスピーカなどの他の周辺出力装置(図に示されていない)を備えることが多く、これらは出力周辺機器インターフェイス(図に示されていない)を通じて接続することができる。
コンピュータ130は、リモートコンピュータ194などの1つまたは複数のリモートコンピュータへの論理接続を使用してネットワーク接続環境で動作することができる。リモートコンピュータ194は、パーソナルコンピュータ、サーバ、ルータ、ネットワークPC、ピア装置、またはその他の共通ネットワークノードとすることができ、通常は、コンピュータ130に関して上で説明されている要素の多くまたはすべてを含む。図12に示されている論理接続は、ローカルエリアネットワーク(LAN)196およびワイドエリアネットワーク(WAN)198を含むが、他のネットワークを含むこともできる。LAN 136および/またはWAN 138は、有線ネットワーク、無線ネットワーク、それらの組み合わせなどとすることができる。このようなネットワーキング環境は、オフィス、企業全体にわたるコンピュータネットワーク、イントラネット、および大域的コンピュータネットワーク(例えば、インターネット)では一般的である。
ローカルエリアネットワーキング環境で使用される場合、コンピュータ130は、ネットワークインターフェイスまたはアダプタ186を介してLAN 196に接続される。ワイドエリアネットワーキング環境で使用される場合、コンピュータ130は、通常、インターネットなどのWAN 198上で通信を確立するためモデム178またはその他の手段を備える。モデム178は、内蔵でも外付けでもよいが、ユーザ入力インターフェイス184、またはその他の適切なメカニズムを介してシステムバス136に接続される。ネットワーク接続環境では、コンピュータ130またはその一部に関して示されているプログラムモジュールは、リモートメモリ記憶装置(図に示されていない)に格納されうる。例えば、限定はしないが、図12には、リモートアプリケーションプログラム192がメモリ装置に常駐しているように例示されている。図に示されているネットワーク接続は実施例であり、コンピュータ間の通信リンクを確立するのに他の手段が使用されうる。
一般に、コンピュータ130のデータプロセッサは、コンピュータのさまざまなコンピュータ可読記憶媒体にさまざまな時点において格納された命令を使ってプログラムされる。プログラムおよびオペレーティングシステムは、通常、例えば、フロッピー(登録商標)ディスクまたはCD−ROMで配布される。そこから、コンピュータの補助記憶装置にインストールまたはロードされる。実行時に、それらは少なくとも一部はコンピュータの主記憶装置にロードされる。本明細書で説明されている発明は、これらおよび他のさまざまな種類のコンピュータ可読記憶媒体を含むが、ただしそのような媒体にマイクロプロセッサまたはその他のデータプロセッサに関して以下で説明されるステップを実装する命令またはプログラムが格納されている場合である。本発明は、さらに、本明細書で説明されている方法および手法に従ってプログラムされた場合にコンピュータ自体も含む。
例示の目的に関して、オペレーティングシステムなどのプログラムおよびその他の実行可能プログラムコンポーネントは、本明細書では異なるブロックとして例示されている。しかし、そのようなプログラムおよびコンポーネントは、コンピュータの異なる記憶装置コンポーネント内にさまざまな時点において常駐し、コンピュータの(複数の)データプロセッサにより実行されることは理解される。
本発明は、コンピュータ130を含む、コンピューティングシステム環境例に関して説明されているが、他の多くの汎用または専用コンピューティングシステム環境または構成で動作する。このコンピューティングシステム環境は、本発明の用途または機能の範囲に関する制限を示唆する意図はない。さらに、コンピューティングシステム環境は、動作環境例に例示されている1つのコンポーネントまたは複数のコンポーネントの組み合わせに関係する何らかの依存関係または要求条件がその環境にあるものと解釈すべきでない。本発明とともに使用するのに適していると思われるよく知られているコンピューティングシステム、環境、および/または構成の例として、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルドまたはラップトップ装置、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラム可能な家電製品、携帯電話、ネットワークPC、ミニコンピュータ、メインフレームコンピュータ、上記システムまたは装置を含む分散コンピューティング環境などがある。
本発明は、1つまたは複数のコンピュータまたはその他の装置により実行される、プログラムモジュールなどのコンピュータ実行可能命令の一般的状況において説明することができる。一般に、プログラムモジュールは、限定はしないが、特定のタスクを実行する、または特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、およびデータ構造を含む。また、本発明は、通信ネットワークを通じてリンクされているリモート処理装置によりタスクが実行される分散コンピューティング環境で実施することもできる。分散コンピューティング環境では、プログラムモジュールをメモリ記憶装置などのローカルとリモートの両方のコンピュータ記憶媒体に配置できる。
ソフトウェアアーキテクチャの背景状況におけるインターフェイスは、ソフトウェアモジュール、コンポーネント、コード部分、またはコンピュータ実行可能命令の他のシーケンスを含む。例えば、インターフェイスは、第1のモジュールの代わりにコンピューティングタスクを実行するために第2のモジュールにアクセスする第1のモジュールを含む。第1および第2のモジュールは、一実施例では、オペレーティングシステムによって提供されるようなアプリケーションプログラミングインターフェイス(API)、コンポーネントオブジェクトモデル(COM)インターフェイス(例えば、ピアツーピアアプリケーション通信用)、および拡張マークアップ言語メタデータ交換形式(XMI)インターフェイス(例えば、複数のWebサービス間の通信用)を含む。
インターフェイスは、Java(登録商標) 2 Platform Enterprise Edition(J2EE)、COM、または分散COM(DCOM)の実施例などの密結合の同期実装であってよい。それとは別に、またはそれに加えて、インターフェイスは、Webサービスの場合のような疎結合の非同期実装とすることもできる(例えば、シンプルオブジェクトアクセスプロトコルを使用する)。一般に、インターフェイスは、密結合、疎結合、同期、および非同期という特性の任意の組み合わせを含む。さらに、インターフェイスは、標準プロトコル、専用プロトコル、または標準プロトコルと専用プロトコルとの任意の組み合わせに適合することができる。
本明細書で説明されているインターフェイスは、すべて、単一インターフェイスの一部であるか、または別々のインターフェイスもしくはそれらの任意の組み合わせとして実装することができる。これらのインターフェイスは、機能を提供するためにローカルまたはリモートで実行できる。さらに、これらのインターフェイスが含む機能は、例示されている、または本明細書で説明されている機能よりも多い場合も少ない場合もある。
例示され、本明細書で説明されている方法の実行または遂行の順序は、断りのない限り本質的ではない。つまり、これらの方法の要素は、断りのない限り任意の順序で実行することができ、それらの方法が含む要素は、本明細書で開示されている要素よりも多い場合も少ない場合もある。例えば、特定の要素を、他の要素の前に、他の要素と同時に、または他の要素の後に実行または遂行することは本発明の範囲であると考えられる。
本発明または本発明の(複数の)実施形態の要素を導入する際に、英文中の「a」、「an」、「the」、および「said」という冠詞、したがって和文中の「1つの」、「その」、「前記」は、それらの要素が1つまたは複数あることを意味することを意図している。「備える」、「含む」、および「持つ、格納する、含む、備える」という言葉は、包含的であることを意図し、一覧に示されている要素以外にさらに要素がありうることを意味する。
上記の説明に照らして、本発明の複数の目的が達成され、他の有益な結果が得られることは理解されるであろう。
本発明の範囲から逸脱することなく上記の構成、製品、および方法にさまざまな変更を加えることが可能であるので、上記の説明に含まれ、付属の図面に示されているすべての事柄は、例示しているのであって、限定する意味はないと解釈するものとする。
付録A
符号Aでは、アクティビティのいくつかの実施例を説明する。
アクティビティの例およびその実装例
アクティビティの例としては、Send、SendRequest、SendResponse、Receive、ReceiveRequest、ReceiveResponse、Code、Delay、Fault、Suspend、Terminate、InvokeSchedule、InvokeSchedules、Invoke WebService、DotNetEventSource、DotNetEventSink、Sequence、Parallel、While、ConditionalBranch、Conditional、Constrained、ConstrainedActivityGroup(CAG)、EventDriven、Listen、EventHandlers、ExceptionHandler、ExceptionHandlers、Compensate、CompensationHandler、Scope、およびScheduleがある。
アクティビティの実施例はそれぞれ、メタデータが関連付けられている。メタデータは、アクティビティに関連付けられたシリアライザによってワークフローの宣言的表現に移される。例えば、メタデータは、オプションのコードビサイドメソッドおよびオプションの相関関係集合のコレクションを含むことができる。
Sendアクティビティ
オーケストレーションエンジンは、メッセージを送信する3つのアクティビティ(例えば、Send、SendRequest、およびSendResponse)を備え、それぞれ異なる使用事例を対象とする。さらに、これら3つのアクティビティは、何らかのメタデータを共有するので、抽象基本クラスが3つのすべての上位クラスとして定義され使用される。
Receiveアクティビティ
オーケストレーションエンジンは、メッセージを受信する3つのアクティビティ(例えば、Receive、ReceiveRequest、およびReceiveResponse)を備え、それぞれ異なる使用事例を対象とする。さらに、これら3つのアクティビティは、何らかのメタデータを共有するので、抽象基本クラスが3つのすべての上位クラスとして定義され使用される。
Code
Codeアクティビティは、メタデータで指示されているコードビサイドメソッドを実行する。
Delay
Delayアクティビティは、その必須コードビサイドメソッドを実行してDateTime値を生成する。そのインスタンスデータのTimeoutValueプロパティをこの値に内部的に設定する。DateTimeが過去であれば、Delayは即座に完了する。そうでなければ、タイマーが発火したときにDelayに通知するようにタイマーサブスクリプションをセットアップする。タイマーが発火した場合、Delayは通知され、完了する。
Fault
Faultアクティビティは、その必須コードビサイドメソッドを実行してExceptionオブジェクトを生成する。その後、この例外をスローする。
Suspend
Suspendアクティビティは、現在のスケジュールインスタンスをサスペンドする。
Terminate
Terminateアクティビティは、現在のスケジュールインスタンスを終了する。
Invoke Schedule
InvokeScheduleアクティビティは、スケジュールを呼び出す。
Invoke Web Service
プロキシクラスを介してWebサービスを呼び出して、パラメータを指定通り受け渡し、受信する。
DotNetEvent Sink
すでに呼び出されているスケジュールインスタンスにより指定イベントが発生したという通知が来るのを待つブロック。
DotNetEvent Source
指定イベントを発生し、即座に実行を完了する。
Sequence
Sequenceアクティビティは、一度に1つずつ、順序正しく子アクティビティの集合の実行を調整する。
Parallel
Parallelアクティビティは、子アクティビティの集合を同時実行する。
While
子アクティビティを繰り返し実行する。
ConditionalBranch
Sequenceの意味論に従って、子アクティビティを実行する。
Conditional
Conditionalアクティビティは、ConditionalBranchアクティビティの順序付き集合を含む。
Constrained
ConstrainedアクティビティがCAGにより実行を指示された場合、それがラップするアクティビティを単に実行するだけである。
CAG(Constrained Activity Group)
CAGは、実行されると、そのイネーブルおよびディセーブル制約の評価に基づいて子アクティビティを実行(および再実行)する。
Task
1つまたは複数のプリンシパルにより実行される外部作業単位をモデル化する。
Event Driven
実行が「イベント」アクティビティによりトリガされるアクティビティをラップする。
Listen
n個の子EventDrivenアクティビティの1つを条件付きで実行する。
Event Handlers
EventHandlersアクティビティは、単純に、EventDrivenアクティビティの集合を保持し、これを関連するScopeが使用する。
Exception Handler
スコープに対するキャッチブロックを表すメタデータで、アクティビティをラップする。
Exception Handlers
ExceptionHandlerアクティビティの順序付き集合をラップする。
Compensate
完了した子スコープを補正する。
Compensation Handler
スコープに対する補正ハンドラとして定義されている子アクティビティをラップする。
Scope
スコープは、トランザクション境界、例外処理境界、補正境界、イベント処理境界、およびメッセージ、変数、相関関係集合、およびチャネル宣言の境界(つまり、共有データ状態)である。
Scope内のアクティビティの実行は順次であり、したがって、含まれているアクティビティは、Sequenceの場合のように、スコープが構築されたときに明示的に順序付けられる。
Schedule
Scheduleは、オーケストレーションエンジンが実行する唯一の最上位レベルのアクティビティである。
複合アクティビティ
制御フローを使用可能にする複合アクティビティ型は、Sequence、Parallel、Constrained Activity Group、Conditional、While、Listenである。さらに、ScopeおよびScheduleは、中にあるアクティビティの暗黙のシーケンス動作を含むコンテナとして動作する複合アクティビティ型である。
付録B
付録Bでは、ビジュアルデザイナおよび関連するアクティビティデザイナを説明する。
ビジュアルデザイナ
スケジュールは、一般に、多数のアクティビティからなる。それぞれのアクティビティはそれ自体の関連するデザイナを持つ。アクティビティがツールボックスからグラフィカルユーザインターフェイスのデザインサーフェス上にドラッグされた後、デザイナはグラフィカルユーザインターフェイス(UI)内にアイコンとして表される(例えば、Visual Studio)。デザイナは、オーサリングオブジェクトモデル(AOM)上にUI表現を提供する。開発者は、オブジェクトモデルに対して直接プログラムし、アクティビティのプロパティを設定するか、またはデザイナを使用し、Visual Studioのプロパティブラウザを利用することができる。
アクティビティの作成および構成
スケジュールを作成することは、アクティビティおよびスケジュールを構成するタスクを定義することを含む。オーケストレーションエンジンデザイナを使用することにより、開発者はツールボックス(例えば、カテゴリオーケストレーションエンジンアクティビティの下にある)からアクティビティを選択し、それをデザイナサーフェス上にドラッグすることができる。アクティビティがすでにスケジュールに入れられており、移動する必要がある場合、開発者は、それを選択して(それをクリックすることにより)、そのアクティビティを入れる必要のあるスケジュールの領域にドラッグすることができる。開発者がコントロールキーを押しながらドラッグ&ドロップを行うと、選択されたアクティビティのコピーが作成される。
アクティブ配置機能では、実行するコレクトバイコンストラクション意味論的バリデーション(correct by construction semantic validation)に基づいて可能なドロップ点(ターゲット)を視覚的インジケータとして与える。アクティビティは、スケジュール上のこれらのターゲットのどれにでもドラッグ&ドロップすることができる。自動スクロール機能も、ドラッグ&ドロップのコンテキストに参加する。大きなスケジュールを取り扱う場合、現在Visual Studioビューポート内にないデザイナの領域へのナビゲーションは、入れるスケジュールの領域に向かってアクティビティをドラッグすることによりアクセス可能である。ドラッグ&ドロップは、同じプロジェクト内のスケジュール間で、また同じソリューション内の他のプロジェクト内のスケジュール間でサポートされる。アクティビティがデザインサーフェス上に配置された後、開発者はプロパティの集合を介してそのアクティビティの構成を設定する。これらのプロパティは、標準Visual Studioプロパティブラウザで編集可能である。それぞれのアクティビティは、プロパティブラウザ内にどのようなプロパティを表示できるかを制御する。
ダイアログのガイドライン
開発者がさまざまなアクティビティを構成するのを補助するため、デザイナはさまざまなダイアログまたは「サブデザイナ」を備えている。それぞれのダイアログは、アクティビティのさまざまなプロパティについて呼び出される。開発者は、プロパティブラウザ内で省略記号により注釈されている場合にプロパティに対しデザイナを呼び出すことができる。
タイプブラウザダイアログ
プロパティブラウザを通じてアクティビティを構成するときに、開発者側でプロパティまたはオブジェクトの型を指定する必要がある場合が多い。開発者は、必要とする型(例えば、System.String)を知っていれば、プロパティブラウザ内に直に打ち込む。タイプブラウザは、そのプロパティの予想される型と一致するプロジェクト内のコンパイルされたすべての参照アセンブリに対し視覚化を行う。アセンブリがタイプブラウズに表示される前に、最初に参照プロジェクトがコンパイルされなければならない。構成される特定のアクティビティプロパティに基づいて、タイプブラウザは、開発者に表示される型をフィルタ処理する。基本にアクティビティにより予期される型に応じて、タイプブラウザは、シリアライズ可能なクラスおよびインターフェイスおよびIComparableを実装するクラスをフィルタ処理する。例えば、sendアクティビティのメッセージプロパティからブラウザを起動すると、ブラウザにはシリアライズ可能なクラスの一覧が表示される。オーケストレーションエンジンは、メッセージの型、ポートの型、および相関関係の型を第1のクラスのプロセス型として認識する。以下の表には、CLR型を持つもののマッピングをまとめた。
Figure 2006107478
一実施形態では、タイプブラウザのグラフィカルユーザインターフェイスは、サイズ変更できないが、2つのサブウィンドウのそれぞれに水平および垂直スクロールバーを用意している。左サブウィンドウの既定の並べ換え順は、現在のプロジェクトの参照アセンブリにリストされている型の名前に基づいて昇順である。右サブウィンドウ内には、「Type Name」および「Fully Qualified Name」の2つの列が存在する。既定の並べ換え順は、「Type Name」に基づき降順である。しかし、これらの列は両方とも並べ換え可能である。「Type Name」列は、型名全体を表示するようにサイズ変更可能である。開発者がそれぞれのアセンブリにフォーカスを置くと、右サブウィンドウには、そのアセンブリ内に収納された選択(上述のような)に対し許容できる型が表示される。有効な型を選択した後、2つのサブウィンドウの下のテキストボックスに、型の名前およびそれが収められるアセンブリが示される。アセンブリ情報からは、アセンブリ名、バージョン番号、カルチャー、および公開キートークンが得られる。この選択が実行されるまでのテキストは、「PIease select a Type from the list.」となっている。開発者は、最終的に、型を選択するか、またはブラウザから手を引くことを決定する。アクティビティのプロパティと一致する型が選択された場合、OKボタンが有効になる。開発者がプロパティブラウザダイアログを再度呼び出すと、型および参照アセンブリは自動的に選択される。
アクティビティのさまざまなプロパティを開発者が構成するのを手助けするために用意されているもう1つの種類のブラウザは相関関係集合ブラウザである。実行スケジュールでは、スケジュールに送られるメッセージは、実際には、特定のスケジュールインスタンス向けである。例えば、発注書#123に対するインボイスをその発注書を発信した(送出した)のと同じスケジュールインスタンスに送り返さなければならない。受信メッセージと適切なスケジュールインスタンスとを照合するために、メッセージおよびスケジュールインスタンスは相関関係集合と呼ばれるキーを共有する。相関関係集合は、SendおよびReceiveアクティビティ上で定義される。Correlation Set Browserを使用して、相関関係集合の構成を補助する。定義すべき第1のアイテムは、相関関係集合の名前である。開発者が新しい相関関係集合を作成する場合、その名前を直接入力することができる。定義済み相関関係に加わるようにSend/Receiveを構成する場合、ドロップダウンには、相関関係の名前が初期値として入る。このリストは、現在のプロジェクトのコードビサイドから取り出される。このダイアログの出力は、ここで詳しく説明されている構成に基づくコードビサイド内の相関関係変数である。例えば、文字列型の相関関係が作成された場合、形成される結果コードは、public OECorrelation<System.String>MyCorrelation=new OECorrelation<System.String>();となるであろう。
開発者が入力する必要のある次の構成オプションは、この相関関係が関わるアクティビティが集合を初期化するかどうかである。デザイナの目的のために、このオプションはTrueまたはFalseである。他の構成詳細では、相関関係集合の型を指定する。他のアクティビティの型を構成するのと同様にして、タイプブラウザを呼び出すことができる。開発者は、アクティビティが関わっている相関関係集合の追加および削除を行うことができる。しかし、相関関係がコードビサイド内で定義される結果として、アクティビティは、前のアクティビティ内で定義された相関関係内に関わることができる。さらに、相関関係を削除すると、実際には、コードビサイドにより生成されたコードではなく相関関係へのアクティビティの関与が取り除かれる。開発者が相関関係を表示させたくない場合、コードビサイドから定義を削除するのは開発者の役目である。
タブオーダーは、Correlation set、名前、ドロップダウンピッカー、Add、Remove、OK、Cancel、およびHelpである。複数の相関関係集合が定義されている場合、タブはAddの前、ドロップダウンピッカーの後の次の定義済み相関関係集合のところで停止する。開発者は、最終的に、相関関係の作成および/または削除を実行するか、またはブラウザから手を引くことを決定する。相関関係の名前および型が与えられた場合にOKボタンが有効になる。OKをクリックすると、新しい相関関係集合に対するコードビサイドが生成され、アクティビティが定義された相関関係に追加される。キャンセルを選択するか、またはエスケープキーを叩くことで、開発者は、アクティビティに変更加えることなくブラウザを終了することができる。アクティビティが正しく構成されていない場合、デザイナは、それぞれのアクティビティのどれをどのように構成するか関する広範にわたるフィードバックを開発者に送る。
制約デザイナダイアログ
本発明では、スケジュールでどの制約技術を使用するかに関係なく、開発者側で制約をオーサリングできる。開発者がドラッグ&ドロップメタファーを使用してコードを書くのは不自然なビヘイビアである。したがって、制約構成用のツールでは、マウスを使用し、さらにキーボードも使用して制約を定義する機能をサポートする。制約の最終的生成は、XOMLに継続する。そこで、生成された制約は、既存のXOMLオブジェクトモデルと整合しており、開発者は制約定義を手編集することができる。制約生成のため用意されているUIは、ユーザが制約を作成し、さらにそれを修正するのを補助する。このことは、すでに生成されている(および場合によっては修正されている)制約とUIとの間のラウンドトリッピングを意味する。
ユーザモデル
制約定義を行えるようにするアクティビティが与えられた場合、開発者は、対応する制約プロパティを特定し、ドロップダウンにおいて、適切なドロップダウンを選択することにより制約を定義したいことを指示する。ハンドラの定義の後、制約エディタを呼び出すためにプロパティブラウザでプロパティに省略記号を注釈として入れる。開発者は、制約の名前を指定することができる。この名前は、制約定義の残りとともにXOMLに継続する。制約定義は、定義グリッド内の、operand、operator、value、およびgroup byの4つの列を使用して実行される。operandは、制約に関わるオペランドを含むドロップダウンである。開発者は、ドロップダウンに直接打ち込み、オートコンプリート機能を使用して所望のオペランドを素早く選択することができる。operatorは、制約内で使用されるオペレータを定義するドロップダウンである。開発者は、オペレータをドロップダウンに直接打ち込むことができ、これにより、所望のオペレータを素早く選択できる。valueは、制約内で使用される開発者定義値である。制約を保存した後、この値と選択されたプロパティとが比較され、型が一致することを確認する。型が一致しない場合、「the operand and value types do not match」などのメッセージが表示され、開発者は違反する述語に向けられる。group by列は、「AND」または「OR」を含む2つの受け入れ可能な値を持つドロップダウンである。制約定義が進むにつれ、開発者は、定義グリッドの下にある編集不可能なダイアログ内の制約を表示することができる。これにより、開発者は、より直截的な方法で制約を表示することができる。この出力は、((A<3) AND (B>C)) AND (D=3)) OR (F=5)というような形になるであろう。
アクティビティエラー処理:「Smart Tags」
本発明では、タイプブラウザ、相関関係集合ブラウザ、およびルールデザイナなどの特定のアクティビティを構成することを補助するいくつかのサブデザイナを備える。アクティビティが十分に構成されていない場合、アクティビティのデザイナは、感嘆符スマートタグに似たアイコンで装飾される。開発者は、このアイコンをクリックして、そのアクティビティに特有の構成エラーのドロップダウンリストを表示する。プロパティ構成に関係するエラーについては、選択によりフォーカスがプロパティブラウザに移動し、エラーがあるプロパティ上にフォーカスが置かれる。アイコンは、アクティビティのすべてのプロパティが有効であれば、消える。
デザインサーフェス機能
本発明のデザイナは、さらに、アクセス性の面で補助する他のUIオプションをいくつか用意している。プロセスビューの背景状況におけるこれらの機能の多くは、開発者が大規模なスケジュールを操作するのを補助するために用意されている。例えば、zoomを使用すれば、開発者はそのスケジュールの選択を広げることができる。スケジュールのズームイン/ズームアウトを行うメカニズムがいくつかあり、それぞれ特定の関数用に設計されている。一方法では、開発者は、特定のズーム割合を設定することによりスケジュール内にズームすることができる。割合の例は、40%、60%、80%、100%、150%、200%、300%、および400%である。これらのレベルは、最上位のワークフローメニューを使用するか、またはスクロールバー上のコマンドボタンを使用して設定することができる。ワークフロービューにより、ユーザはズームレベルを設定できる。ズームレベルで、巨大なワークフローの拡張性問題に対処する。ズームレベルは、最上位のワークフローメニューを使用するか、またはスクロールバー上のコマンドボタンを使用して設定することができる。ズームレベルは、ワークフローの編集に影響を及ぼすことはないが、複数の座標系を使用するとワークフロービューでこれを達成できる。ワークフロービューは、ズーム率をキャッシュし、それをレンダリングおよび座標変換に使用する。ズーム率は描画で使用されるが、そのためには、Graphics.ScaleTransformメソッドで選択する。選択したら、グラフィックスオブジェクトを使用して実行されたすべての描画が、使用されるスケーリングに基づいて変換される。描画前に、すべての座標に倍率が掛けられる。ユーザが座標変換のためマウスを使ってアクションを実行する場合には、ズーム率も使用される。
他のメソッドでは、開発者は、Zoom In/Zoom Outオプションを垂直スクロールバーからのオプションとして選択することによりスケジュールのズームイン/ズームアウトを実行できる。これにより、カーソルが拡大鏡に切り換わることにより示されるデザイナの「モード」が変わる。開発者は、その後、ズームイン/ズームアウトが望まれているスケジュールの領域を「ラバーバンディング」することができる。Zoom Inが選択された場合、マウスボタンをクリックするとデザイナが「ズームイン」する(Zoom Outではその逆である)。しかし、開発者は、それぞれのモードにおいて、シフトキーを押し下げたままにして、Zoom In/Outを切り換えることができる。最後に、いずれのモードも終了するためには、開発者が「Escape」キーを叩いて、「既定の」モードに戻る。「既定の」モードの場合、開発者は、「Control」キーを押したまま、マウスホイールでスクロールすると、Zoomすることができる。ズームレベルだと開発者はスケジュールを操作できいということはない。言い換えると、開発者は、ズームレベルに関係なくアクティビティの操作、追加/削除を実行できる。既定のズームレベルは100%である。ズーム設定状態は、ビューに関係なく保存される。より具体的には、開発者がXOMLビュー、印刷プレビュー、またはコードビサイドに切り換えるか、あるいはスケジュールまたはソリューションを閉じた場合、ズーム状態は保存される。
Panは、スケジュールを「掴み」、シフトする開発者向けの機能である。開発者がPanモードを選択すると、カーソルは手のアイコンに変化する。開発者がマウスをクリックすると、手のアイコンがサーフェスを「掴む」ので、マウスを動かしてサーフェスをマウスの方向にシフトする。Panは、垂直スクロールバーのオプションとしてアクセス可能である。パンモードの場合、開発者は、デザイナにアクティビティを追加/削除することはできない。Panでは、特に、デザイナ内のスケジュールの現在のビューをシフトすることに注目する。
大きなスケジュールでは、開発者は、デザイナのズーム機能を利用せず、したがって可視でないスケジュールの一部を持つ場合がある。開発者は、それでも、ツールボックスから新しいアクティビティをドラッグして、スケジュールに追加できる機能を必要とする。このシナリオでは、開発者は、アクティビティを、スクロールしたいスケジュールの領域にドラッグし、「auto scroll zone」を入力した後、矢印が現れ、スケジュールはアクティビティがドラッグされる方向にシフトする。アクティビティが開発者がナビゲートを望む方向に画面の表示可能領域の10%の領域に入ったときに、これらの矢印によりデザイナビューをアクティブにし、スクロールする。
特に、本発明は、ユーザがワークフローの一部にナビゲートし、その部分にフォーカスを置いて修正し、先に進んでワークフローの他の何らかの部分を編集するためのメカニズムを備える。オートパニング機能を使用すると、ユーザは、ワークフローのピクチャ全体を描画させることができ、拡大鏡を使用すると、ワークフローの特定の部分にズームオンすることができる。オートパニング機能は、ズーム機能およびオートスクロール機能と統合され、ユーザは実際に大きなワークフローに取り組むことができる。オートパニングプロセスを起動するには、ユーザは、垂直スクロールバー上に表示されている拡大鏡アイコンをクリックする。このアイコンをクリックすると、ワークフロービューはオートパニングモードに入る。このモードでは、TakeMagnifierSnapShotを呼び出すことによりビューポート内に表示可能な現在のワークフロースナップショットをとることができる。この機能は、ズーム率を持たないメモリビットマップ内のワークフローのスナップショットをとる。これを実行した後、ワークフローのズーム率を計算し、ワークフローの大半がビューポート内で可視であるようにする。その後、マウスはMagnifierカーソルに変わる。カーソルのホットスポットは、ワークフローのメモリビットマップの部分にマッピングされる。その後、メモリビットマップのマッピングされた部分は、拡大鏡内に表示される。非常に大きなワークフローでは、ユーザがオートスクロール領域に入ると、オートスクロール機能が実行され、表示されるビューポートが修正される。オートスクロール機能が停止すると、新しいビューポートマップが捕捉される。ユーザがマウスを離すと、カーソルのホットスポットが実際のワークフロー部分にマッピングされ、その部分が画面の中心に置かれる。以下に、Auto Panningの擬似コードを示す。
−if ユーザがオートパニングモードに入る
−できる限りワークフローの大部分が表示されるようにズームレベルを設定する
−可視状態のワークフロービットマップを捕捉する
−if ユーザがマウスをドラッグしている
−マウス座標を取得する
−それをワークフロービットマップにマッピングする
−マッピングされたワークフロービットマップをコピーすることにより拡大鏡を描画する
−if マウスがオートスクロール領域に入り、ワークフローをスクロールできる
オートスクロールする
−else if ユーザがオートスクロール領域を出る
−可視状態のワークフロービットマップを再度捕捉する
−endif
−else
−マウスを離した座標を取得する
−それをワークフロー領域にマッピングする
−ワークフロー領域を中央に揃える
−endif
一実施形態では、本発明は、ワークフローの右下に小さなパンウィンドウを表示することによりオートパニング機能をサポートし、そこでは、ユーザはワークフロー全体の表現をサムネイル形式で表示することができる。
大きなスケジュールをナビゲートするテーマの範囲内にある間に、開発者は、文書アウトライン機能により、スケジュールを一目で素早く見渡すことができ、アウトライン内のノードを選択することにより、デザイナを選択されたアクティビティにナビゲートすることができる。各ノードの子は、順序列内の配置に基づいて順序付けられる。ノードまたは葉をダブルクリックすると、開発者は、スケジュール内の選択されたアクティビティにナビゲートされる。インライン化されたスケジュールは、文書アウトライン内の単一ノードとして提示される。インライン化されたスケジュールを含むアクティビティは、文書アウトライン内の別のエントリとしては表示されない。任意の時点で、開発者は、機能仕様全体を通して定義されているすべてのスケジュールオペレーション(追加、削除、コピー、貼り付け、名前の変更など)を実行することができ、文書アウトラインはそれに応じて反映される。文書アウトライン内のアクティビティを複数選択すると、それに対応して、プロセス/ワークフロービュー内のアクティビティが選択される。コントロールキーを押したまま、文書アウトライン内のノードを選択すると、選択されたノードがハイライト表示になり、選択されたことを示す。スコープにおいてイベントおよび/または例外ハンドラが定義されている場合、これは、スコープと同じレベルで表示される。このため、開発者は、スコープデザイナのさまざまなページをめくっていかなければならないのに対して、スコープの全体を1箇所で見られる。
アクティブ配置では、コレクトバイコンストラクション意味論を評価する機能を使用して、スケジュール全体を通してどのアクティビティを配置できるかをポジティブに示す。開発者がツールボックスからデザイナにアクティビティをドラッグするときに、ターゲットがスケジュール上に表示される。開発者がターゲット位置付近にノードをドラッグすると、ターゲットがアクティブ化される。ドラッグされたアクティビティのアイコンがスナップし、オリジナルのターゲットを置き換える場合、アクティベーションは明白である。これが生じた場合、開発者は、マウスボタンを離してよく、ノードはアクティブターゲットにより示される位置でスケジュールにスナップする。複数選択ドラッグ&ドロップのシナリオでは、表示されるターゲットは、すべての意味論的バリデーションを満たすターゲットであるべきである。
コンポジションという概念は、スケジュールまたは他のスケジュールおよびタスクのタスクに再帰的に含まれることを意味する。ワークフローデザイナを使用すると、開発者は、スケジュールをおよびタスクを作成し、その後、他のスケジュールおよびタスク内でそれらを呼び出す作業を簡単に行える。しかし、開発者が新しいスケジュールまたは新しいタスクのいずれかを作成する場合、必ず、Visual Studioは、ツールボックスを介してワークフローまたはタスクのコンパイルバージョンを(全ての型の)他のオーケストレーションエンジンプロジェクトから利用できるようにする。そのコンパイルされたワークフローまたはタスクを呼び出すには、開発者はそれをツールボックスからスケジュールにドラッグするが、これは他のアクティビティと全く同様である。スケジュールのインライン化では、新しい網羅的スケジュールにおいてこの新しいスケジュールまたはタスクを直接見ることができる。これは、網羅的スケジュールまたはタスクの内側の動作を見られる読み取り専用の確認機能である。
スケジュールまたはタスク内の複合アクティビティは、それ自体、展開または縮小できる。それぞれの展開または縮小の状態は保持される。したがって、外側のコンストラクト(パラレルまたはスコープなど)が縮小されているが、内側のコンストラクトが展開されていた場合、外側の展開で、展開されている内側はそのままである。これが読み取り専用ビューであるとすると、開発者は、インライン化されたスケジュール内に保持されているアクティビティを網羅的スケジュールにコピー/貼り付けし、ドラッグ&ドロップすることができる。既定では、開発者がスケジュールを作成する場合、これはスケジュールインライン化に関わる。しかし、「呼ばれる側」スケジュールライターは「呼び出し側」スケジュールがそのスケジュールの内側の動作を表示することを望まないシナリオがある。呼ばれる側のスケジュールのオーサリング中に、開発者は、そのスケジュールがインライン化できないことを示すことができる。「呼び出し側」開発者がこの属性付きスケジュールをインライン化しようとした場合、「The Author of this schedule does not allow schedule inlining」というメッセージが表示される。
テーマ
オーケストレーションエンジンデザイナは、ホスト環境を提供する異なるアプリケーションでホスティングすることができる。他のアプリケーションの内側でホスティングされる場合、オーケストレーションエンジンデザイナのルック&フィールをモーフィングし、ホスティングはアプリケーション内にブレンドすることができる。ユーザは、ユーザのニーズに応じて、Visual Studio開発環境の内側でホスティングされている場合にデザイナのビジュアルパラメータを変更できる。テーマサポートにより、ユーザは、デザイナの実装に影響を与えたり、デザイナのコードを修正することなく、オーケストレーションエンジンデザイナのビジュアルパラメータを変更できる。
テーマサポートには、2つの部分があり、1つは開発時のものであり、もう1つは使用時のものである。開発時に、デザイナライターがワークフローに関わるアクティビティに対するデザイナを作成する場合である。デザイナを開発している間、デザイナライターは、テーマサポートに加わることができるようにデザイナを作成する。これは、開発者がデザイナの内側の構成可能ビジュアル化情報を抽象してデザイナテーマクラスに送り、その後、テーマ属性を使用してデザイナに関連付ける。その後、開発者は、デザイナビジュアル化をレンダリングしながらデザイナテーマクラスからの情報を使用する。
ユーザがデザイナを使用する場合、ユーザは、テーマファイルを書くことによりデザイナをモーフィングすることができる。テーマファイルは、それぞれのデザイナで予期されるビジュアル化パラメータを個々に記述するデザイナテーマのコレクションである。テーマファイルは、ユーザ側で、XMLファイルを手編集するか、または既定のUIを通じて作成できる。
テーマを使用することで、開発者は、ワークフローアクティビティの表示をカスタマイズすることができる。それぞれのアクティビティは、「テーマ付け」可能なプロパティの特定の集合を表す対応するデザイナを持つ。テーマを提供することで、さらに、ビジュアル化カスタマイズの拡張性を実現することによりワークフローデザイナをカスタマイズまたは再利用することが可能になる。Visual Studio内では、開発者は、Toolsメニューへのナビゲート、Optionsの選択、Workflow Designerの選択、およびテーマの選択によりテーマが現在プロジェクトに適用されているものを構成することができる。
開発者は、新しいテーマを作成するか、または「Theme」ドロップダウンを使用して使用したいテーマを指定することができる。新しいテーマは、開発者が「Create a New Theme」を選択し、テーマファイルの名前を指定した場合に作成することができる。「Browse」ボタンを選択すると、File Dialogが呼び出され、テーマXMLファイルが検索される。Designerドロップダウンでは、開発者は、アクティビティのグループ(PrimitiveおよびComposite)、またはそれ自身テーマ付けされる特定のアクティビティを選択することができる。
テーマは、コアグループPrimitive(内部でActivityDesignerから派生する)およびComposite(内部でICompositeActivityDesignerから派生する)で適用できる。これらのツリーのそれぞれから継承するデザイナは、そのテーマを継承する。しかし、特定のアクティビティに対するデザイナは、それぞれ、個別にテーマ設定することができる。これが生じた場合、アクティビティデザイナの明示的テーマ設定は、継承されるビヘイビアよりも優先度が高い。例えば、ActivityDesignerテーマが青色のテキストフォント色を持つ場合、すべてのデザイナはこのフォント色を使用する。しかし、テーマは、特に、フォント色として赤色を使用するコード形状を呼び出した場合、すべてのアクティビティは、赤色を表示するコード形状を除き、青色のテキストフォント色を表示する。
テーマでは、プロセスビューおよびスケジュールを含むアクティビティのそれぞれをカスタマイズできる。アクティビティデザイナのほとんどは、ActivityDesignerおよびICompositeActivityDesigner(ActivityDesignerから派生する)という2つのクラスから派生する。これらは、テーマ設定されている要素およびその対応するピッカーである。プロセスビューでは、テーマ設定される要素は、Theme Style(Large/Medium/Small)、Show Smart Tag(Yes/No)、Show Scroll Indicators(Yes/No)、Show Drop Indicators(Yes/No)、Show Shadow (Yes/No)、Watermark(Yes/No)、Foreground Color(Color Picker)、Background Color(Color Picker)、Show Grid(Yes/No)、Draw Monochrome(Yes/No)、Show Grid(Yes/No)、Selection(例えば、Foreground ColorおよびPattern Color)、Font Family(Font Picker)、Font Style(Font Picker)、Draw Rounded(Yes/No)、Content Alignment(Near/Far/Center)、Show Content(Text、Icon、Both)、Show Border(Yes/No)、およびConnector(例えば、StartCapおよびEndCap)である。
個々のアクティビティデザイナについて、Foreground Color(Color Picker)、Background Color(Color Picker)、およびBorder(例えば、色とスタイル)をテーマ設定できる。個々の複合デザイナについては、Drop Shadow(Yes/No)およびWatermark(Yes/No)をテーマ設定できる。
印刷プレビュー
他のアプリケーションと同様に、オーケストレーションエンジンデザイナは、Print Preview(印刷プレビュー)機能を備える。この機能は、プロセス/ワークフロービューの視覚的レイアウトを変更し、現在選択されているプリンタが指定された場合にスケジュールを印刷する方法を反映する。概念的には、Print Previewは、既存のプロセス/ワークフロービュー上のもう1つのビューである。そのため、開発者は、それでも、慣れているすべてのスケジュール、アクティビティ、およびタスク操作を実行できる。Print Previewでは、開発者は、スケジュール操作が行われるときにリアルタイムで印刷の意味を理解することができる。プロセス/ワークフロービューは、全体として(SmartTagsを含む) 印刷される。開発者は、File Menuから「Print Preview」を選択するか、または垂直スクロールバーの一番上のアイコンをクリックすることにより印刷プレビューを呼び出すことができる。呼び出されると、既定のビューは、オリジナルの40%となる。
開発者は、さまざまなページレイアウトを指示し、余白、ヘッダ/フッタオプションなどの通常の文書機能を指定することができ、ワークフローを拡大縮小し、必要に応じて揃えることができる。サイズ変更不可能なPage Setupダイアログ内には2つのタブがある。第1のタブには、ページ特有の日付が示される。Paper Size、Paper Source、およびOrientationに対する値は、既定のプリンタから取り出される。余白は、既定では、すべての辺から1インチ(2.54cm)である。最後に、倍率の既定値は、通常サイズの100%に調整される。ページの中央揃えに既定値はない。Page Setupダイアログの第2のタブでは、HeaderおよびFooterオプションを扱う。余白に対する既定値は、0.5インチ(1.27cm)および中央揃えである。印刷されるページのヘッダおよびフッタを用意する他の多くのアプリケーションと同様、テキストのテンプレートを作成できる。既定のテンプレートオプションには、以下のものがある。
Figure 2006107478
これらのテンプレートオプションは、ヘッダとフッタの両方に利用できる。しかし、開発者は、「Custom」テキストボックスで独自のテキストを指定することができる。
アクセシビリティ&キーボードナビゲーション
オーケストレーションエンジンデザイナは、アクティビティレベルによりあるアクティビティの構成されたスケジュール設定済みスケジュールをナビゲートする機能を備える。以下のキーボードナビゲーションがサポートされる。
−開発者は、上、下、左、および右矢印キーを使用してスケジュールをトラバースすることができる。
−複合アクティビティは、「+」キーを使用して展開し、「−」を使用して縮小することができる。
−開発者は、ドラッグ&ドロップ実行中に、e−escapeキーを叩くことによりそのオペレーションをキャンセルすることができる。
−Enterキーを叩いても、アクティビティ上でダブルクリックすることと同じ効果が得られる。
UI永続性
デザイナは、ズーム、印刷プレビュー状態、スクロールバー位置、選択、および複合アクティビティの展開または縮小状態を含むアクティビティデザイナ特有の状態、スコープおよびスケジュールのワークフロー対例外対イベント状態、制約アクティビティグループ(CAG)編集またはプレビューモード、プレビューアクティビティの現在アクティブになっているアクティビティ(例えば、CAG、イベント、および例外の)、およびインライン化状態に対するUI構成を保存することができる。
XOMLビュー
スケジュールを作成するときに、開発者は、基本的に、ワークフローの編集可能なグラフィック表現(望まれている場合には必ずXMLとして操作することも可能な)およびコードビサイド(例えば、C#またはVisual Basic)の2つの別々のアイテムを操作している。この定義は、XMLまたはXOMLとして操作することができる。XOMLは、スケジュールのXML表現である。プロセス/ワークフローデザイナの目的は、開発者がこのXMLを素早く生成することを手助けすることである。
開発者は、機能豊富なグラフィックプロセス/ワークフロービューとスキーマベースのXMLビュー(XOMLビュー)を切り換えることができる。これを実行するために、開発者は、ワークフロー設計ウィンドウの左下隅に配置されている小さなボタンを使用するか、またはホットキーF7(XOML用)とShift−F7(プロセス/ワークフロービュー用)を使用してビューを切り換えることができる。XOMLエディタは、IntelliSense、カラー化、メソッドヒント、およびステートメントコンプリーションの機能を備える。開発者は、Controlキーを押しながら、スペースバーを同時に押すことによりIntellisenseを呼び出すことができる。標準C#/VBエディタと同様に、XomlビューはXoml定義のアウトラインを作成する機能も備える。これは、右クリックして、「Outling」コンテキストメニューを選択することにより使用することができる。
テーマ属性
テーマをアクティビティデザイナに関連付けるには、アクティビティデザイナをThemeAttributeで装飾する必要がある。この方法でデザイナライターはテーマ関連メタデータをデザイナに関連付けることができる。テーマインフラストラクチャでは、デザイナが作成されるときにこのメタデータをピックアップし、デザイナビジュアル化をレンダリングする必要が生じたときに必要に応じてデザイナに渡すことができる。以下に、テーマ属性をsendデザイナに関連付ける方法の実施例を示す。
Theme属性クラスは、デザイナに関連付けられたテーマオブジェクトの型およびテーマオブジェクトを初期化するイニシャライザXMLの2つのパラメータをとる。イニシャライザXMLは、オプションのパラメータである。
Figure 2006107478
デザイナテーマをデザイナに関連付けることに加えて、デザイナライターはデザイナからビジュアル化データを抽象する。デザイナライターは、DesignerTheme派生クラスを作成し、抽象されたデータをそのクラスに置く。その後、デザイナライターは、派生デザイナテーマクラスに、レンダリング、レイアウト作成などのオペレーションで使用されるパラメータを問い合わせる。DesignerThemeクラスは、すべてのデザイナテーマの派生元とする必要のある基本クラスである。このクラスは、テーマサポートに加わるためにすべてのデザイナが使用する基本情報を含む。DesignerThemeクラス内の基本データメンバは以下のとおりである。
Figure 2006107478
上記のメンバは、個々のデザイナとテーマとの関連付けを提供する。それぞれのデザイナがそれ自体のレンダリングのための追加情報を持つ必要のある場合がある。これは、DesignerThemeクラスからデザイナ特有のテーマクラスを派生させ、特定の情報をそのクラス内に置くことにより実行される。
ActivityDesignerThemeクラスは、Send、Receive、Delayなどの単純なデザイナのテーマを記述するために使用される。単純なデザイナは、それらの下に他のデザイナの階層を持たず、ActivityDesignerThemeクラスの情報に基づいてそれ自身をレンダリングすることができる。それぞれのデザイナは、自身のレンダリングのためActivityDesignerThemeクラスの初期化に使用される独自のイニシャライザXMLを持つ。抽象された情報を記述するためにActivityDesignerThemeクラスを使用する各種デザイナは、ActivityDesigner、CodeDesigner、CompensateDesigner、DelayDesigner、FaultDesigner、InvokeWebServiceDesigner、ReceiveDesigner、ReceiveRequestDesigner、ReceiveResponseDesigner、SendDesigner、SendRequestDesigner、SendResponseDesigner、SuspendDesigner、およびTerminateDesignerである。
以下にアクティビティデザイナクラスのメンバを示す。
Figure 2006107478
CompositeDesignerThemeクラスは、ParallelまたはSequenceなどの複合デザイナのビジュアル化情報を抽象するために使用される。このクラスは、Connectorsのレンダリングに関係する情報および複合デザイナ内のヘッダ/フッタを保持する。ActivityDesignerThemeクラスのメンバに加えて、CompositeDesignerThemeクラスは、以下のプロパティを含む。
Figure 2006107478
CompositeDesignerThemeが関連付けられている各種デザイナは、CompositeActivityDesigner、CompensationHandlerDesigner、ConditionalDesigner、ConditionedDesigner、EventDrivenDesigner、EventHandlerDesigner、ExceptionHandlerDesigner、CompositeScheduleDesigner、ListenDesigner、ParallelDesigner、ScopeDesigner、SequenceDesigner、GenericTaskDesigner、WhileDesignerである。
PreviewDesignerThemeは、CAG、ExceptionHandlersDesignerなどのデザイナに関連付けられており、これらはその中の子デザイナのコレクションをアイテムストリップの形で表示する。このクラスは、アイテムストリップをレンダリングするために使用されるデータだけでなく、それらのアイテムが表示されるプレビューウィンドウも含む。CompositeDesignerThemeクラスのメンバのほかに、PreviewDesignerThemeクラスは以下のプロパティを含む。
Figure 2006107478
PreviewDesignerThemeに関連付けられている各種デザイナは、ActivityPreviewDesigner、CAGDesigner、EventHandlersDesigner、およびExceptionHandlersDesignerである。
AmbientThemeクラスは、WorkflowViewに関連付けられており、WorkflowViewのレンダリングに関する情報だけを含むわけではない。このクラスに含まれる情報は、選択、スマートタグ、展開ボタンなどのすべてのデザイナに適用される大域的ビジュアル化オプションに関係する。これに加えて、グリッド、ワークフロー背景、ウォーターマークなど何かを描画することに関する情報もこのクラスに含まれる。
DesignerThemeクラスのメンバのほかに、ServiceRootDesignerThemeクラスは以下のプロパティを含む。
Figure 2006107478
テーマがデザイナに関連付けられた後、デザイナは、レイアウト、レンダリング、またはテーマパラメータが必要なその他のアクティビティを実行する場合にそれを使用する。GetDesignerThemeメソッドは、デザイナの型をパラメータとしてとる。このメソッドは、呼び出されると、Themeクラスがデザイナに関連付けられたDesignerTheme派生テーマクラスを返す。次に、デザイナは、DesignerTheme派生クラスのさまざまなパラメータにアクセスできるだけでなく、DesignerThemeクラスに関連付けられた資源を取得してデザイナをレンダリングすることもできる。テーマクラスは、現在のデザイナテーマ、そのテーマに関連付けられた資源、およびさらにはユーザがテーマを変更した場合のイベント発火を管理する役割を持つ。
Themeクラスは、DesignerThemesを管理するインフラストラクチャを含む。以下に、Themeクラスの機能を示す。
−DesignerThemesをシリアライズ/デシリアライズする。
−シリアライゼーションプロセスで発生したエラーを報告する。
−テーマが変化した場合にイベントを発火する。
−別のデザイナに関連付けられている、DesignerThemeクラスを管理する。
−テーマ資源を管理し、描画のため作成されたオブジェクトのキャッシュとして機能する。
−含まれるDesignerThemesにより要求された資源解決を実行する。
テーマクラスは、デザイナでテーマをサポートできるように、以下のプロパティを公開している。
Figure 2006107478
テーマクラスは、アクティビティデザイナをレンダリングするために使用されるデザイナテーマをすべて保持しており、そのため、資源およびテーマ情報を大域的に維持することができる。これらの資源はすべて、同じプロセスを持つデザイナの異なるインスタンスにまたがって共有される。このため、資源プールの漏れが防止されるだけでなく、デザイナがオブジェクトを作成し直さなくてもよいためパフォーマンスが高められる。
テーマクラスは、さらに、静的ThemeChangedイベントも公開する。すべてのワークフロービューは、このイベントを監視する。ユーザが現在のテーマを変更した場合、テーマクラスによりすべてのワークフロービューが監視しているThemeChangedイベントが発火する。その後、ワークフロービューは、IActivityDesigner.OnThemeChangedメソッドを呼び出すことにより、自分自身および含まれるデザイナを中継で送る。それぞれのデザイナは、このメソッドをオーバーライドし、テーマ変更イベントに対する応答としてカスタムアクションを実行することができる。
ユーザは、それぞれの個々のデザイナがそれ自身をレンダリングするために従わなければならないパラメータを記述する特定のテーマを書くことによりデザインサーフェスの表示をモーフィングすることができる。ユーザは、そのために、テーマファイルを書く。テーマファイルは、デザイナ毎にテーマパラメータを記述する個々のデザイナテーマセクションを含むXMLファイルである。ユーザは、テーマファイルを手作業で作成するか、または既定のUIを使用することができる。
Figure 2006107478
XMLファイルを手編集することは、テーマを作成する一手段である。テーマを作成する他の方法として、提供されているUIを使用する方法がある。Visual Studio内にあるデザイナを使用する場合、テーマをカスタマイズするUIは、Tools−>Options−>Workflow Designer−>Themesの下に表示される。テーマUIは再ホスティング可能である。オーケストレーションエンジンデザイナがVisual Studioの外部でホスティングされる場合、ユーザは自前のダイアログを書いて、テーマUIをホスティングすることができる。ユーザは、Visual Studioの外部でテーマUIを再ホスティングするために、ThemePageクラスを使用することができる。
テーマUIでは、テーマを作成する複数の手段を用意している。ユーザは、既存のテーマを選択するか、または既存のテーマを選択してそれらを修正し新しいテーマを作成することができる。ユーザは、テーマを修正した後、保存ボタンを選択することによりそのテーマを異なるテーマファイルとして保存することができる。テーマUIは、プロパティ構成およびデザイナプレビューの2つの異なるモードで動作する。ユーザは、プレビューモードボタンを使用することによりこれをめくってゆくことができる。
プロパティ構成モードでは、ユーザは個々のデザイナを選択できる。ドロップダウンからデザイナが選択された場合、デザイナに関連付けられたプロパティがプロパティブラウザに表示される。ユーザは、それらのプロパティをめくってゆき、デザイナの表示を修正することができる。個々のプロパティを修正した結果は、デザイナプレビューモードに入ることにより表示できる。デザイナプレビューモードでは、デザインサーフェスはダイアログ内にホスティングされる。一時的アクティビティツリーがメモリ内に作成され、個々のデザイナ上のテーマ変更の結果を示す。
オートスクロール
オートスクロール機能を使用すると、ユーザは、ドラッグ&ドロップオペレーションを実行しながら、またはオートパニングを実行しながらワークフローの任意の部分に素早くナビゲートすることができる。オートスクロール機能は、オートスクロールインジケータを追加することにより強化される。オートスクロールインジケータは、ユーザがオートスクロールの可能な方向を理解することができるようにする視覚的手掛かりである。オートスクロールインジケータ機能により、デザイナの使い勝手が向上する。
WorkflowViewは、オートスクロールインジケータを表示する必要がある場合にそのことを示す論理値を返すShowAutoScrollIndicatorsと呼ばれるプロパティをサポートする。WorkflowViewは、スクロールが可能な方向を示すビットマップを含む。オートパニングまたはドラッグ&ドロップイベントの場合、WorkflowViewはクライアント領域のペインティングを要求する。ペインティング要求に対する応答として、描画ロジックをオーバーライドすることによりオートスクロールインジケータを半透明に描画する。
ユーザは、ビューポートに入りきらないワークフローを持つことが多い(任意の時点においてワークフロービューの一部がユーザに見える)。このような場合、ワークフロービューは関連する水平および垂直スクロールバーを持つ。これは、ユーザがツールボックスから新しいオブジェクトをドラッグしようとして、可視でないワークフローの部分にドロップしたい、またはワークフロー内のアクティビティの順序を変更したい場合には、よくあることである。これは、小さなワークフローについてはクロールせずに可能であるが、大きなワークフローでは、ユーザがビューポートの外にオブジェクトをドロップしたい場合にデザイナをスクロールする必要がある。ワークフロービューに実装されているオートスクロール機能を使用すると、ユーザがマウスをドラッグし、オートスクロールゾーン上でホバリングすると、ワークフローをスクロールすることができる。以下に、これを実行する方法を例示する擬似コードを示す。
−すべてのドラッグ&ドロップメッセージについて
メッセージがドラッグホバーならば
ワークフロービューがビューポートに入りきらなければ
辺にそってワークフローの10%をとることによりオートスクロールゾーンを計算する
−マウスアクションの座標がオートスクロールゾーンおよびワークフロービュースクロール内に入るならば
−オートスクロールタイマーをトリガする
−オートスクロールゾーン内のマウス位置に基づいてスクロール位置を加減する
−さもなければ
−オートスクロールタイマーを停止する
コネクタ装飾のドラッグ&ドロップ
この機能により、ドラッグ&ドロップオペレーションの使い勝手が向上する。ユーザがコンポーネントのドラッグを開始すると、デザイナは、ドラッグされたコンポーネントのドロップを可能にするそれらのコネクタを自動的に区別する。カーソルがコネクタに十分近づくと、ドラッグされた画像がコネクタにスナップインする。ワークフロービューは、アクティビティ上に装飾を追加する装飾サービスを含む。装飾サービスにより、すべてのアクティビティの描画が実行された後、アクティビティは通常使用されるUIグリフを描画することができる。これにより、グリフはどれも他のアクティビティによって上書きされず、グリフに対し特別な処置が講じられることが保証される。現在、アクティビティはさまざまな種類のグリフをサポートし、これらは不十分な構成、選択、選択可能なコネクタ、ブレークポイントなどを含む。装飾サービスクラスは、ワークフロービューのプライベートヘルパークラスとして表示することができる。装飾サービスは、グリフがアクティブになったときにグリフを異なる形で表現する役割を持つ。グリフは、グリフ上でユーザが実行するマウスアクションに基づいてアクティブになりうるが、これらはマウスホバーまたはマウスクリックを含む。アクティブなグリフは、それがアクティブな場合に基づいて異なるアクションを実行でき、これはドロップダウンメニューの表示またはプロパティブラウザへのナビゲーションのトリガ、アクティビティ上にスマートタグアクショングリフを表示するバリデーションルーチンのトリガなどを含む。アクティビティ上にグリフを追加することに加えて、装飾サービスでは、さらに、IPropertyValueUlServiceを使用してプロパティブラウザ上にグリフを追加する。装飾サービスは、グリフに関連付けられているデザイナアクションをVisual Studio IDEのタスクリストに追加する役割を持つ。
作成後、装飾サービスは、どのアクティビティデザイナがグリフを表す必要を感じるかに基づいて異なるイベントの監視を開始する。これらのイベントは以下を含む。
IComponentChangeService
ComponentChanged:コンポーネントプロパティが変更された場合にトリガされる。
ComponentAdded:新しいコンポーネントが追加された場合にトリガされる。
ComponentRemoved:コンポーネントが削除された場合にトリガされる。
ISelectionService
SelectionChanged:デザイナのSelectionが変更された場合に発火する。
IPropertyValueUIService
AddPropertyValueUlHandler:プロパティブラウザ内で選択変更またはプロパティリフレッシュが生じたときに発火する。
ITypeProvider
TypesChanged:新しい型がタイプシステムに追加/削除された場合に発火する。
上記のイベントの1つがトリガされた場合には必ず、装飾サービスは次のアイドル状態のメッセージを待つ。アイドル状態のメッセージで、装飾サービスはアクティビティデザイナに、グリフに関連付けられているデザイナアクションを更新するよう要求し、表示可能なデザイナを無効化する。デザイナアクションの要求により、バックグラウンドバリデーションがトリガされる。更新されたデザイナアクションを取得した後、装飾サービスは、選択されたデザイナに関連付けられているアクションをタスクリストに入れ、さらに、IPropertyValueUIServiceでNotifyPropertyValueUIItemsChanged関数を呼び出すことによりプロパティブラウザに変更を通知し、これはさらに、プロパティがプロパティブラウザ内のプロパティ上でconfig.Iconを必要としていることを示す。このアイコンがクリックされると、そのプロパティに関連付けられているデザイナアクションがトリガされる。その後、装飾サービスはすべてのデザイナを通り、そのグリフを取得し、デザイナの上にグリフを描画する。マウスホバーまたはクリックがグリフのどれかの上で発生すると、装飾サービスはグリフをアクティブ化し、デザイナアクションを表示する。
アクティビティデザイナにより返されるグリフはすべて、DesignerGlyphと呼ばれる抽象クラスから派生する。このクラスは、グリフのそれぞれに関係するビヘイビアを定義する。以下に、DesignerGlyphクラスのクラス定義を示す。以下の表は、DesignerGlyphクラスのメソッドのそれぞれとその使用法について説明している。
Figure 2006107478
グリフは、関連付けられたDesignerActionsを持つ場合も持たない場合もある。デザイナアクションは、ユーザがグリフをアクティブ化した場合に実行される必要のあるユーザアクションの集合である。DesignerActionクラスは、ユーザアクションを示すために使用される。DesignerActionクラスは、メニューアイテムを表示するために使用されるDesignerVerbというクラスから派生する。DesignerActionは、装飾サービスによりタスクアイテムを追加する場合にも使用される。
以下に、さまざまな目的のためにデザイナにより現在使用されている各種のグリフを示す。
Figure 2006107478
現在のドラッグされたオブジェクトを受け入れることが可能なコネクタを示すアイコンが、装飾サービスを通じて描画される。IDesignerServiceはプロパティ「IComponent[] DraggedComponents」を公開するが、これにより、すべてのアクティビティデザイナは、ドラッグされたオブジェクトにアクセスし、すべてのコネクタと突き合わせてテストすることができる(一部のデザイナでは、それらのコネクタの部分集合だけでドロップできる)。パブリックオーバーライドDesignerGlyph[] Glyphsメソッドを通じてすべての装飾グリフに対するアクティビティが求められた場合、
−IDesignerServiceのDraggedComponentsプロパティにアクセスすることによりデザインサーフェスが現在ドラッグ&ドロップオペレーションの最中であるかチェックする
−すべてのコネクタについて、
−CanInsertActivities()を呼び出して、コネクタがドロップオペレーションを許容するか確認する
−DesignerHelpers.IsContextReadOnly()によりデザイナが読み取り専用サイトにないかチェックする(スケジュールを呼び出す)
−そのコネクタに対するConnectorDragDropGlyphのインスタンスを作成する
ドラッグされた画像とともにカーソルが、ドロップが有効になっている領域上をホバリングすると、ドラッグされた画像はコネクタの真ん中にスナップする。
−OnDragEnter()およびOnDragOver()イベントは、WorkflowDragEventArgsのインスタンスを第1のパラメータとして取得する
−WorkflowDragEventArgsは、ドラッグされたデザイナを所定の点にスナップしたいことをデザイナが示すようにできるプロパティpublic Point SnapInPoint{}を持つ。
−WorkflowViewコントロールは、ドラッグされた画像をデザイナが要求したかチェックし、
−画像の半透明モードを削除する
−デザイナ要求位置に画像を置く
−SequentialActivityDesignerは、OnDragEnter()およびOnDragOver()の両方のイベントをオーバーライドし、所有していれば現在のドロップターゲットの真ん中を示す。
パンニング/ズーミングツール
本発明は、ツールとして、Zoom In/Out(ズームレベルの増減、およびクリックした点の周りのビューの中央揃え)およびPan(クリックするとデザインサーフェスを「掴み」、ドラッグしてあちこち動かせる手)を含む。すべてのツールはマウスおよびキーボードイベントの処理を完全にオーバーライドするので、戦略デザインパターンは、すべてのイベントを処理する置き換え可能なIDesignerMessageFilterオブジェクトを作成する。インターフェイスIDesignerMessageFilterは以下のように定義される。
Figure 2006107478
これらの関数は、マウスイベントハンドラ、キーボードイベントハンドラ、およびメッセージフィルタおよびその状態に基づいてWorkflowViewカーソルの形状を変更するUpdateCursor()関数に分けられる。
ワークフロービュー自体は、デザイナメッセージフィルタの既定のビヘイビアを実装する。ズーム機能(Zoom InおよびZoom Out毎に1つ、ユーザはShiftキーを押してIn/Outモードを切り換えることができる)およびパニング機能に2つのメッセージフィルタが存在する。
XomlDocumentRootView
XomlWindowPaneによって作成されるコントロールは、XomlDocumentRootViewである。このコントロールは、垂直スクロールバーおよび水平スクロールバーを持つ。さらに、水平スクロールバーの左側と垂直スクロールバーの下側にタブボタンがある。水平スクロールバーのタブボタンは、複数のビューのホスティングを表示するために使用される。第1のタブでは、ワークフロービューであるsurface.GetView()によって返されるビューをホスティングし、第2のタブへは、Microsoft Xmlエディタをホスティングする。水平スクロールバー内のタブを変更すると、適切なビュー変更イベントが発火する。これはIViewCreationServiceを使用してビューを作成する。異なるビュー作成サービスをフックすることにより、さらにビューを追加することができる。以下に、IViewCreationServiceのインターフェイス定義を示す。
Figure 2006107478
このサービスの実装は以下を実行する。
Figure 2006107478
この方法で作成されたすべてのビューは、IDesignerViewから継承しなければならない。以下に、IDesignerViewのインターフェイス定義を示す。
Figure 2006107478
View Scope
これは、デザイナに追加した場合のスコープの既定のビューである。このオプションを選択すると、開発者はこのビューに戻ることができる。
View Exceptions
このオプションを選択すると、UIがインプレースで変更され、Scopeに関連付けられている例外が表示される。これは、Transaction TypeがLong Running(長時間実行)またはNone(なし)の場合に有効にされる。言い換えると、このメニューは、Transaction TypeがAtomic(アトミック)の場合には利用できないということである。
View Events
このオプションを選択すると、UIがインプレースで変更され、Scopeに関連付けられているイベントハンドラが表示される。
View Compensation
このオプションを選択すると、UIがインプレースで変更され、Scopeで定義されているCompensationが表示される。これはTransaction型プロパティがLong RunningまたはAtomicに設定されている場合に有効である。
その他のUI機能
ワークフローをより視覚的に目立たせるために、ワークフロー内に表示されるアクティビティのそれぞれにシャドウを追加する視覚的深さを設定できる。これは視覚的喚起力を加えるが、ワークフロー内のすべてのアクティビティに対しシャドウを描画しなければならないので、ユーザ対話操作をわずかにスローダウンさせる。視覚的深さは0から4までとすることができる。この数値に基づいて、シャドウ深さ(shadow depth)が決定される。視覚的深さが設定されたら、ワークフローを描画する毎に、メモリスナップショットを作成し、グレースケール変換をビットマップに適用する。その後、このグレースケールビットマップは、Graphicsオブジェクトへの視覚的深さを使用してユーザにより指定されたオフセットでレンダリングされる。その後、メモリスナップショットの背景を透明にし、それをグレースケールビットマップの上にコピーする。こうして、ワークフローに3D効果を与える。
ワークフロービューは、さまざまなレイアウトをサポートしており、ユーザには、ワークフローのさまざまな表現を提示できる。この機能は、さらに、ワークフローの印刷プレビューを表示するためにも使用される。ユーザは、印刷プレビューモードのときに、ワークフローを編集し、余白を設定し、ヘッダ/フッタを追加することができる。これにより、ユーザは、ワークフローの印刷方法をはっきり理解できる。ワークフロービューは、IWorkflowLayoutと呼ばれるインターフェイスを通じて複数のレイアウトをホスティングする。このインターフェイスにより、WorkflowViewは、さまざまなレイアウトを描画する際に使用される情報を取得することができ、またそれらのレイアウトで座標変換、拡大縮小、および描画などの特定のオペレーションを実行することができる。
以下に、新しいレイアウトを作成するために実装されるプロパティおよびメソッドを示す。
Figure 2006107478
デザイナは、既定のレイアウトおよび印刷プレビューレイアウトをサポートする。既定のレイアウトは、ワークフローの単純な表現である。このレイアウトでは、ワークフローは、ビューポート内の中央に揃えられ、レイアウトは決して、描画されるワークフローの表現を変えない。Print Previewレイアウトは、ページの上にワークフローを描画することによりワークフローの表現を著しく変える。印刷プレビューレイアウトは、印刷文書からのデータおよびページ設定データを取得して、ページサイズ、拡大縮小、および最大範囲を計算し、ヘッダ/フッタをレンダリングする。印刷プレビューレイアウトは、ワークフローをプリンタに出力する方法を示す。このモードでは、ユーザは余白を設定し、ヘッダ/フッタの表示のされ方を確認し、必要に応じてワークフローを拡大縮小し、位置揃えをすることができる。印刷プレビューレイアウトでは、さらに、ユーザはプレビューしながらワークフローを修正することができる。印刷プレビューレイアウトは、ワークフロービットマップの複数の断片をつなぎ合わせで作成し、異なる複数のページとしてレンダリングする。
ユーザがWorkflowView上でオブジェクトのドラッグを開始すると、ドラッグ&ドロップインジケータが表示される。ドラッグ&ドロップインジケータは、どのオブジェクトがドラッグ&ドロップオペレーションによりデータとして現在キャッシュされているかをユーザに視覚的に示す。ワークフロービューがドラッグエンターイベントを受け取ったら、ドラッグされたコンポーネントのデシリアライズおよびキャッシュを試みる。その後、ビューでは、一時的ビットマップを作成し、そのコンポーネントのアイコンおよび説明をその上に描画することによりメモリビットマップの形でドラッグされたコンポーネントの視覚的表現を作成する。次に、このメモリビットマップは、マウスカーソルとともに描画され、どのオブジェクトがドラッグされているかを示す。ドラッグオペレーションが終了すると、ワークフロービューはキャッシュされているビットマップおよびコンポーネントを破壊する。
ワークフロービューは、2種類の座標系をサポートする。物理座標系と呼ばれるクライアント座標系(Winformsコントロールでも使用する)および論理座標系。クライアント座標系では、コントロールの左上の点は0,0であり、XおよびY座標は、垂直および水平方向に増え、この陳述は、スクロールバーが存在しない場合のみ真である。スクロールバーが存在する場合、Windows(登録商標)コントロールの左上、つまり0,0は、スクロールバー位置である。クライアント座標系は、さらに、拡大率の影響も受ける。論理座標系では、すべてのオブジェクトは常に0,0からm,nにマッピングされ、この座標系は、スクロール位置または拡大率の影響を受けない。ワークフロー内で表されるすべてのアクティビティにより格納される座標は、論理座標の形式をとる。この方法で、アクティビティは、スクロール位置または拡大率の影響を受けない。
ワークフロービューは、論理座標とクライアント座標との間の座標の変換に使用される以下の関数の集合を持つ。点が変換される場合、本発明では、拡大率およびスクロール位置の両方を考慮するが、Sizeが変換される場合には、本発明では、Zoom率のみを考慮する。
論理座標から物理座標への変換:
Point TransformToPhysicalCoOrd(Point point, bool mapToLayout)
Size TransformToPhysicalSize(Size size)
Rectangle TransformToPhysicalViewPort(Rectangle logicalViewPort)
物理座標から論理座標への変換:
Point TransformToLogicalCoOrd(Point point, bool mapToLayout)
Size TransformToLogicalSize(Size size)
Rectangle TransformToLogicalViewPort(Rectangle physicalViewPort
作成した後、ワークフロービューは、IDesignerServiceと呼ばれるサービスをサービスコンテナに追加する。アクティビティデザイナおよび他のホストは、IDesignerServiceに対しクエリを実行し、ワークフロービューおよび下のWindows(登録商標)コントロールと通信する。以下に、IDesignerServiceの定義を示す。このインターフェイスでサポートしているプロパティ、メソッド、およびイベントは、2つの主要なカテゴリ、デザインサーフェスによりサポートされるUI機能、つまりZoom、VisualDepth、Printingなどおよびワークフローを適切にレンダリングするために公開されるWinformsコントロール機能に分けられる。
Figure 2006107478
ワークフロービューは、ワークフロー内のそれぞれのアクティビティデザイナの仮想ウィンドウコントロールのビヘイビアをシミュレートする。このビヘイビアは、アクティビティデザイナが実際のウィンドウコントロールでなくても、ワークフロービューはウィンドウメッセージをWindows(登録商標)コントロールと全く同じ方法で送ることを意味する。このために、すべてのマウスメッセージにおいて、ワークフロービューでは、ヒットテストを使用してマウスカーソルの下にあるデザイナを見つけ出してそれをバッファリングし、その後、エンター、ホバー、移動、および出るメッセージを適宜送る。デザイナがマウスカーソルの下にある状態および他の重要なマウス情報を保持するために、ワークフロービューではMouseEventDataと呼ばれるデータ構造体を使用する。MouseEventData構造体は、メッセージをアクティビティデザイナに送る経路を適宜決めるために使用される。
DesignerDataデータ構造体は、ワークフロービューにより、下にあるウィンドウコントロールに関係する情報をアクティビティインデザイナおよびレイアウトに伝達するために使用される。この情報は、文字列サイズを測定し、デザイナサイズを計算する際に非常に重要である。ViewportDataデータ構造体は、ワークフロービューにより、ビューポートに関連付けられた情報をアクティブなレイアウトに伝達するために使用される。この情報は、拡大縮小、平行移動などを含む。HittestDataデータ構造体は、ワークフロービューにより、アクティビティデザイナからヒットテスト関係情報を取得するために使用される。ヒットテストデータは、マウスがアクティビティデザイナのどの部分にヒットしたかを示す。RenderingHintデータ構造体は、デザイナにより、アクティビティデザイナをレンダリングするために使用される。レンダリングヒントには、色、フォント、アイコン、およびアクティビティデザイナを描画するために使用できるテキスト関係描画情報がある。
アルゴリズム例
描画アルゴリズムの例を以下に示す。
−メモリ内Bitmapを作成することによりメモリ装置コンテキスト上でワークフローをペイントする
−ビットマップ背景を塗りつぶす
−ルートアクティビティデザイナの描画を呼び出すことによりすべてのデザイナを描画する
−ルートアクティビティデザイナは、その中のすべてのデザイナ上で再帰的にDrawを呼び出す
−すべてのデザイナは、描画される前に可視領域ないにあるかどうかをチェックする
−装飾サービスの描画を呼び出すことにより装飾を描画する
−ユーザがビューポート上でマウスをドラッグした場合にドラッグ矩形を描画する
−If ユーザが視覚的深さを設定している場合
−視覚的深さオフセットでオリジナルの装置コンテキスト上にビットマップを描画する
−ビットマップを透明にする
−オフセットなしで上にビットマップを描画する
−Endif
−アクティブなレイアウト上で描画を呼び出す
−印刷プレビューについては、メインビットマップをつなぎ合わせて複数のページを描画する
−既定では、メインビットマップを直接描画する
−If ユーザがドラッグ&ドロップモードに入っている場合
−ドラッグされるコンポーネントのスナップショットを描画する
−Endif
−If 拡大鏡が表示されている場合
−拡大鏡の枠を描画する
−拡大領域を拡大されたビットマップ上にマッピングする
−拡大されたビットマップを拡大領域内に描画する
−Endif
レイアウトのアルゴリズムの例を以下に示す。
−ルートデザイナ上でOnLayoutSizeを呼び出す
−ルートデザイナおよび他の複合デザイナは、子デザイナ上でOnLayoutSizeを呼び出す
−複合デザイナは、子レイアウトに基づいてそのサイズを計算する
−ルートデザイナ上でOnLayoutPositionを呼び出す
−RootDesignerおよび他の複合デザイナは、子デザイナ上でOnLayoutPositionを呼び出す
−デザイナはその親の位置に基づいて位置を設定する
−アクティブなレイアウトのUpdateを呼び出す
−レイアウトは、レイアウトをレンダリングするために必要に応じてその中のデータ構造体を更新する
−ルートデザイナの位置を更新し、レイアウトにより要求されたとおり適宜ルートデザイナの位置を揃える
−ルートデザイナを使用して範囲を計算するアクティブなレイアウトの範囲に基づいてスクロールバーのスクロール範囲を更新する
イベント送出のアルゴリズムの例を以下に示す。
−For すべてのマウスイベントについて
−どのイベントが発生したかについてデザイナをチェックする
−IActivityDesignerインターフェイスを使用して出るイベントを前のほうのデザイナに送る
−IActivityDesignerインターフェイスを使用してどのイベントが発生したかについてエンター/ホバーイベントを現在のデザイナに送る
−現在のデザイナをバッファリングして、次のイベントを待つ
−Endfor
削除のアルゴリズムの例を以下に示す。
−ISelectionServiceを使用して現在の選択されているデザイナを取得する
−デザイナに関連付けられているすべての最上位アクティビティを取得する。これは、ユーザが複数選択を実行し、また親および子デザイナを選択してdeleteを押す場合があるためである。
−For すべての最上位アクティビティについて
−それぞれの最上位アクティビティの親デザイナを取得する
−If 子アクティビティを持つ親デザイナ上のCanRemoveActivityがtrueを返した場合
−子アクティビティを持つ親デザイナ上で、RemoveActivityを呼び出す
−Endif
−Endfor
−最後に削除されたアクティビティの親を取得し、それを選択する
ワークフローデザイナのキーボードおよびコマンドの経路選択
デザイナは、サービスIMenuCommandServiceをコマンド経路選択に使用する。このサービスを実装するのはホストの役目である。型CommandSetは、サポートされているコマンドの無構造のリストを含む(CommandSetItem−System.ComponentModel.Design.MenuCommandから派生する)。それぞれのコマンドは、CommandlD(グループIDおよびアイテムIDからなる)、コマンドを実行するためのハンドラ、およびそのステータスについてクエリを実行するハンドラ(有効、可視など)を含み、それらのコマンドは、作成後、IMenuCommandService.AddCommand()を使用してサービス内に投入される。UIキュー(キーボード、マウスオペレーション、メニューコマンド)は、ホスティングアプリケーション(VS、Zamm)により、または場合によってはワークフロービューにより、CommandIDに解釈される。例えば、最上位メニューアイテムが選択された場合に適切なコマンドを呼び出すのはホストの役目である。しかし、ワークフロービューがフォーカスが置かれている間マウスオペレーションおよびキーボードを処理する。さらに、個々のデザイナに関連付けられた特別なコマンドであるDesignerVerbsが、アクティビティデザイナ内で宣言され、IMenuCommandServiceにより自動的に収集される。
Figure 2006107478
Figure 2006107478
コマンドステータスは、選択が変更されると必ず評価される(ISelectionServiceを通じて追跡される)。常時現在のステータスを取得するために、CommandSetItemの代わりにImmidiateCommandSetItem (CommandSetItemから派生)を使用する。
印刷
クラスWorkflowPrintDocumentおよびIDesignerServiceインターフェイス上のパブリックプロパティPrintDocumentは印刷をサポートしている。WorkflowPrintDocument自体は、実際の描画を実行するためそれを作成したWorkflowViewへの参照を保持する。プリンタの解像度は画面解像度と異なるので、実際の印刷を開始する前に、印刷文書ではプリンタのグラフィックを使用してワークフローを再レイアウトし、すべてのページを印刷し、その後、WorkflowViewに、画面グラフィックを再び使用してレイアウトを実行するよう要求する。
アクティビティデザイナインターフェイス
IActivityDesignerインターフェイスは、ワークフローに参加する必要があるすべてのアクティビティデザイナにより実装される。これは、デザイナが他のデザイナおよびワークフロービューと対話するためのプロトコルである。ワークフロービューは、IActivityDesignerインターフェイスを探し、イベントのレンダリング、レイアウト、またはデザイナへの転送を行う。IActivityDesignerインターフェイスをサポートすることで、すべてのデザイナは、デザイナが実際にはウィンドウコントロールから派生しないとしてもウィンドウコントロールのように動作することができる。このインターフェイスを使用すると、さらに、ワークフロービューおよび装飾サービス、メニューコマンドサービスのような他のデザイナインフラストラクチャも、デザイナと情報をやり取りすることができる。IActivityDesignerインターフェイスから派生されたデザイナは、階層を持ち得ないが、階層を持つためには、デザイナは、ICompositeActivityDesignerインターフェイスを実装する必要がある。以下に、IActivityDesignerの定義を、プロパティおよびメソッドに関する詳細とともに示す。
Figure 2006107478
Figure 2006107478
ICompositeActivityDesigner:
ICompositeActivityDesignerは、階層を持ちうる、つまり子を持ちうるデザイナによって実装される。複合デザイナは、それ自身とその子すべてを保持する必要がある。ICompositeActivityDesignerインターフェイスを使用することで、複合デザイナは、その子に関する情報を公表し、子デザイナの追加および削除を行う機能を提供し、キーボードナビゲーションを有効にする。以下に、ICompositeActivityDesignerの定義を、プロパティおよびメソッドに関する詳細とともに示す。
Figure 2006107478
単純デザイナ
ActivityDesignerクラスは、デザイナの最も単純な実装を表す。ワークフロー内のアクティビティに関連付けられたすべてのデザイナは、ActivityDesignerから派生する。ActivityDesignerクラスは、IActivityDesignerインターフェイスから継承し、そのインターフェイスの既定の実装を提供する。ワークフロービューは、IActivityDesignerインターフェイスを使用してデザイナと対話する。ActivityDesignerクラスは、通常、デザイナの描画のため超軽量実装を必要とするデザイナによって継承される。これらのデザイナには、子または階層がない。アクティビティデザイナが備える機能としては、基本レイアウトロジック、レンダリングサポート(例えば、アイコン、説明、枠線、内部、および背景を描画することによる)、ヘルプテキストのレンダリング、すべてのデザイナにより必要とされる既定のグリフを返すこと、DesignerVerbsを介したコンテキストメニューの表示、設計時特有のプロパティのフィルタ処理、既定のイベント発生、既定のヒットテスト、バリデーションのトリガ、ツールチップの表示、およびキーボードナビゲーションへの参加がある。
public abstract class ActivityDesigner:ComponentDesigner, IActivityDesigner
Figure 2006107478
複合デザイナ
CompositeActivityDesignerは、階層を持つデザイナである(例えば、下に子がいる)。CompositeActivityDesignerは、それ自体のすべての態様だけでなくその子をも管理する役割を持つ。これは、さらに、イベントを転送するためにその子と情報のやり取りをする必要もある。CompositeActivityDesignerに含まれるアクティビティデザイナコレクションを修正する要求がある場合には必ず、アクティビティが削除される必要のある場所を指定するコンテキスト(ContextBase)を渡される。ContextBaseは各CompositeActivityDesigner派生クラスにより特殊化され、これにより、それらに特有のコンテキストを指定するようにできる。これの例として、SequentialActivityDesignerがあるが、これは、ConnectorContextと呼ばれるクラスをContextBaseから派生させてContextBaseを特殊化する。CompositeActivityDesignerクラスは、ICompositeActivityDesignerインターフェイスから派生し、それに対する既定の実装を提供する。CompositeActivityDesignerが備える機能は、デザイナの展開/縮小、ドラッグ&ドロップインジケータ、自己および子のレイアウト、自己および子の描画、子のヒットテスト、および階層からのアクティビティの挿入/削除を含む。
public abstract class CompositeActivityDesigner:ActivityDesigner, ICompositeActivityDesigner
Figure 2006107478
CompositeActivityDesignerは、抽象クラスであり、勝手に存在することはできないのでインスタンス化できない。Sequential、Parallel、およびCAデザイナは、このクラスのすべての特殊化である。
SequentialActivityDesigner
SequentialActivityDesignerクラスは、下に子を持つすべてのデザイナを表し、すべての子は連続して順序付けられる。子は、子の順序を修正するためにも使用されるコネクタと呼ばれるリンクにより接続される。SequentialActivityDesignerクラスは、CompositeActivityDesignerの特殊化であり、コネクタ起動およびエンドビットマップ描画、すべての子の順次レイアウトおよびそれらをリンクしているすべてのコネクタの更新、子同士をつなぐコネクタの描画、ドラッグ&ドロップが実行されたときのドロップ領域のハイライト表示、コネクタのヒットテスト、上向きおよび下向き矢印を使用する順次キーボードナビゲーション、およびコネクタのグリフを返す操作といった機能を備える。
internal abstract class SequentialActivityDesigner: CompositeActivityDesigner
Figure 2006107478
上記のデザイナはすべて、SequentialActivityDesignerの特殊化であり、すべて主に描画が異なる。これらのデザイナはすべて、ワークフロー内でそれ自体を表す特別な手段を持つが、すべて、SequentialActivityDesignerによって提供される共通機能を取り除いている。
ParallelActivityDesigner
ParallelActivityDesignerは、CompositeActivityDesignerのもう1つの特殊化であり、複数のSequentialActivityDesignersを含む。これらのSequentialActivityDesignersはそれぞれ、並列デザイナにおける分岐である。並列デザイナは、複数の順次デザイナのレイアウト、さらに分岐を追加するためのドラッグ&ドロップインジケータ、左および右矢印キーを使用することにより並列分岐間を横断するためのキーボードナビゲーション、および複数の並列分岐をリンクするための描画コネクタといった特殊化された機能を備える。
internal abstract class ParallelActivityDesigner: CompositeActivityDesigner
Figure 2006107478
Conditional、Listen、およびParallelデザイナは、追加描画ロジックがそれらに関連付けられているParallelActivityDesignerの特殊化である。
ActivityPreviewDesigner
ActivityPreviewDessignerは、順次デザイナであるが、コレクションバッグの形で複数のデザイナのコレクションを表示することができる。ActivityPreviewDesignerは、フィルムストリップのメタファーを使用してこのコレクションを表示する。特定のデザイナが選択された場合、その表現は、アクティビティプレビューデザイナがホスティングするプレビューウィンドウ内に表示される。ActivityPreviewDesignerは、編集モードとプレビューモードの2つのモードを持つ。プレビューモードでは、ユーザは選択されているデザイナを修正することはできない。このモードでは、ユーザは、スクロールしなくても、デザイナの表現全体を見ることができる。編集モードでは、デザイナを修正することができる。ActivityPreviewDesignerが備える機能は、アクティビティのコレクションを表示するためのプレビューストリップ、現在選択されているアクティビティのプレビュー、および選択されたデザイナの編集機能を含む。
internal abstract class ActivityPreviewDesigner: SequentialActivityDesigner
Figure 2006107478
Scope & Serviceデザイナ
ScopeデザイナおよびServiceデザイナは、特別なデザイナである。これらはそれぞれ、例外、イベント、およびそれらに関連付けられた補正を持つことができる。ScopeおよびScheduleは、さらに、ユーザコードファイル内でそれらに関連付けられたクラスも持ち、ユーザはそれらのクラス内のスコーピングを行うことができる。ScopeデザイナおよびServiceデザイナは、他のデザイナと異なる形で例示されており、ウォーターマークを表示し、またドロップシャドウを描画することによりハイライト表示する。
ScopeデザイナおよびServiceデザイナは、ユーザがビューを次々にめくってゆき例外、イベント、およびそれらに関連付けられている補正をさらけ出せるようにビューを変更することができる。ユーザがServiceまたはScopeアイコン上でホバリングした場合、ドロップダウンパレットが現れ、そこでユーザは例外、イベント、または補正ビューの1つを選ぶことができる。次に、デザイナビューがめくられ、その選択されたビューに含まれるアクティビティが表示される。ユーザは、任意の時点にビューのどれか1つに属するアクティビティのみを表示できる。ビューをめくる動作は、ScopeまたはScheduleに含まれる子アクティビティをフィルタ処理することにより実行される。ScopeおよびScheduleは、ExceptionHandlers、EventHandlers、およびCompensationのうちの高々1つをその子として持つ。デザイナは、ユーザが見ているビューに基づいて、それらの子を除去し、選択されたビュー内に表示できる子アクティビティのみを表示するという形で、複数のビューをサポートする効果を実現している。Scheduleデザイナは、通常、ワークフロービュー内のルートデザイナとして設定される。
internal class ScopeDesigner: SequentialActivityDesigner
internal class ServiceDesigner: ScopeDesigner
Figure 2006107478
ServiceRootDesigner
ServiceRootDesignerは、Designer Hostに含まれるRootコンポーネントに関連付けられる。これは、デザイナウィンドウペイン内でその後ホスティングされるワークフロービューを作成する必要がある。ServiceRootDesignerは、さらに、ツールボックスアイテムをダブルクリックすることによりワークフロー内にツールボックスアイテムを追加する機能を備えるIToolBoxUserインターフェイスもサポートする。
設計時ディスクリプタ
オーサリングオブジェクトモデルのそれぞれのアクティビティは、設計時にそのビヘイビアを記述するメタデータを持つ。これは、アクティビティ(デザイナ)だけでなくプロパティグリッドのビヘイビア(命名、説明、フィルタ処理、プロパティエディタなど)を関連付ける操作を含む。Types\Property\Event設計時ビヘイビアは、以下の属性のうちの0個以上を使用して記述される。
−SRCategoryAttribute−オーケストレーションエンジン属性。ローカライズされたカテゴリ名を与える。
−SRDescriptionAttribute−オーケストレーションエンジン属性。ローカライズされた説明を与える。
−EditorAttribute−UITypeEditorを提供する。
−TypeConverter−フィルタ処理、値リスト、および型の変換の機能を備える。
−BrowsableAttribute−設計時にメンバを表示\非表示にする。
SRCategoryおよびSRDescriptionは、資源名と文字列との間の単なるマッピングである。ほとんどのエディタ(UITypeEditor)は、ダイアログ(CorrelationSetsDialogのような)またはドロップダウンリストを処理するためのマネージャである。PropertyDescriptorは、設計時のプロパティを処理し、既定のTypeConverter、カスタムTypeConverter(上記のように属性として宣言されている)、またはTypeDescriptorのいずれかによりプロパティを渡される。
UI Type Editorsは、オーケストレーションエンジンComponentモデルにおけるさまざまなプロパティのためのエディタとなる。プロパティブラウザでは、それらを使用して、省略またはドロップダウンを表示し、エディタを起動する。
型コンバータ
型コンバータは、他の型へ/他の型からオブジェクトを変換するメソッドを備え、設計時にオブジェクトプロパティを表すPropertyDescriptorリストを提供し、プロパティグリッドのプロパティのドロップダウン内で使用される値を与えることが可能である。
以下に、オーケストレーションエンジンComponentモデルで実装されるTypeConvertersのいくつかを示す。
−DeclTypeConverter
すべてのアクティビティの型コンバータへの基本クラス。アクティビティオブジェクトを文字列に/文字列から変換するためCanConvertFrom()、CanConvertTo()、ConvertFrom()、ConvertTo()を実装する(プロパティグリッド内のアクティビティの名前を表示する、名前編集でアクティビティを作成できるようにする)。また、GetSite()でもサービスへのアクセスを提供する。
−HandlerDeclTypeConverter
イベントに対する型コンバータ。DeclTypeConverterから派生する。IEventBindingServiceを使用して互換性のあるハンドラを表示するGetStandardValues()を実装する。
−VariableDeclTypeConverter
変数(メッセージ、チャネル、相関関係など)用の型コンバータ。DeclTypeConverterから派生する。IFieldBindingServiceを使用して互換性のある変数フィールを表示するGetStandardValues()を実装する。さらに、型コンバータは、「Name」プロパティを除去し、ジェネリック型として現れる型プロパティの特別なpropertyDescriptorを設定する。
プロパティディスクリプタ
プロパティディスクリプタは、設計時サービスをアクティビティオブジェクトに提供する。これは、名前、説明、カテゴリ、型コンバータ情報だけでなく、プロパティ値を取得/設定する場合の追加機能も備える。既定では、TypeConverterは、PropertyDescriptorsをすべてのプロパティに用意する。しかし、TypeConverterは、その型の異なる設計時ビヘイビアを与えるためにそれらを削除、追加、またはラップすることができる。
以下に、オーサリングオブジェクトモデルで実装されるPropertyDescriptorsの一部を示す。
−DynamicPropertyDescriptor
オーサリングオブジェクトモデル内のすべてのプロパティディスクリプタへの基本クラス。既定のプロパティディスクリプタを囲むラッパを実装し、それらのメソッドすべてをそのラッパにデリゲートする。さらに、オブジェクトから直接的に(コンポーネントである場合)、またはlReferenceServiceを介して、オブジェクトサイトにアクセスできるようにする。
−VariableDeclPropertyDescriptor
すべての変数(メッセージ、チャネル、相関関係など)用のプロパティディスクリプタ。以下のようにコードビサイドフィールドを用意するためSetValue()をオーバーロードする。
−設定する変数とそのサイトを取得する。
−含むスコープのサイトを取得する。
−含むスコープのIFieldBindingServiceを取得する。それぞれのスコープは、フィールドの独自の集合が含まれるそれ独自のIFieldBindingServiceを持つ。
−サービスによりフィールド名の妥当性を確認する。
−デザイナトランザクションを開く。
−値を保存する。
−IFieldBindingService.CreateField()を呼び出して、フィールドをコードビサイドファイルに追加する。
−トランザクションをコミットする。
−HandlerDeclPropertyDescriptor
すべてのハンドラ用のプロパティディスクリプタ。以下のようにコードビサイドフィールドを用意するためSetValue()をオーバーロードする。
−設定するHandlerDeclarationとそのサイトを取得する。
−IEventBindingServiceを取得する。
−デザイナトランザクションを開く。
−LocalEventDescriptorを作成する。
−イベントのPropertyDescriptorを取得し(eventBindingService.GetEventproperty()を使用して)、それにHandlerDeclarationを設定する。
−HandlerDeclarationオブジェクトの「Name」プロパティを設定する。
−トランザクションをコミットする。
−ArrayElementPropertyDescriptor
コレクション内のアイテムを表すプロパティディスクリプタ。コレクションアイテム−例えば、Correlation Sets−はプロパティディスクリプタを持たないため(それらのプロパティではない)、ArrayElementPropertyDcscriptorでは、それらがプロパティであるかのようにディスクリプタをフェイクし、それにより、プロパティブラウザの内側にそれらを表示するようにできる。このプロパティディスクリプタは、上述のプロパティディスクリプタのどれかによりラップされるように設計された。
−LocalEventDescriptor
ハンドラ宣言を表すEventDescriptor。オーサリングオブジェクトモデル内のハンドラは、実際のイベントではなく、プロパティであるので、使用されるIEventBindingServiceに独自のEventDescriptorsを導入する。
ICustomTypeDescriptorの使用
ICustomTypeDescriptorは、コンポーネントに対しディスクリプタを設定するための代替え手段である。コンポーネント自体はインターフェイスを実装し、ディスクリプタを、型コンバータ、既定値などとして提供する。GenericActivity、InvokeWebServiceActivity、およびInvokeScheduleはこのインターフェイスを実装する。
IExtenderProviderの使用
これは、設計時プロパティをコンポーネントに導入するためのさらに他の手法である。拡張クラスRulePropertyProviderExtenderは、ルールプロパティをServiceDesignerに提供する。プロパティは、ProvidePropertyAttributeを介してエクステンダクラスを修飾し、その属性のゲッターおよびセッターを実装し、エクステンダクラスをコンポーネントのサイト(Schedule.Site)を通じてアクセス可能なIExtenderProviderServiceクラス(この場合は、RulePropertyProviderExtenderにより実装される)に追加することにより追加される。
拡張性のサポート
System.Workflow.ComponentModel.Design名前空間は、さまざまな再利用可能なクラスを用意しており、ユーザはそれを使って、独自のアクティビティデザイナを作成し、それらをオーケストレーションエンジンデザイナにプラグインとして追加する。以下に、ユーザが使用できるクラスの一覧を示す。
−ActivityDesigner:ActivityDesignerを使用すると、ユーザは、下に他のアクティビティの階層を持たない単純なアクティビティを追加できる。ユーザは、このデザイナから継承する必要があり、またビットマップ、説明、および描画をカスタマイズできる。
−SequentialActivityDesigner:SequentialActivityDesignerを使用すると、ユーザは、複数のアクティビティを含むことができるデザイナを書くことができる。これらのアクティビティはすべて、順次配列され、コネクタ線を使ってリンクされる。ユーザは、このクラスから派生させることができ、カスタム配色、説明、アイコンなどを用意できる。
−ParallelActivityDesigner:ParallelActivityDesignerを使用すると、ユーザは、並列様式で配列された、複数の複合アクティビティを持つことができるアクティビティデザイナを書くことができる。また、このクラスを使用することで、ユーザは、説明、アイコン、色などをカスタマイズできる。このクラスは、継承を通じて拡張できる。
−OrchestrationEngineToolboxItem:OrchestrationEngineToolboxItemを使用すると、ユーザは、カスタムツールボックスアイテムを作成することができる。このクラスでは、ユーザは、シリアライゼーションを制御できる。このクラスでは、アクティビティがデザイナの中に追加される場合にユーザがカスタムUIをポップアップするために使用するフックを用意している。ユーザは、継承を通じてこのクラスを再利用できる。ユーザは、ToolBoxItem属性を使用してツールボックスアイテムを用意する必要がある。
−TypeBrowserEditor:TypeBrowserEditorを使用すると、ユーザは、デザイナに用意されている型をブラウズすることができる。このクラスは、System.Type型のプロパティに関連付けることで使用される。ユーザは、UITypeEditor属性を使用して、このクラスをプロパティに関連付ける。
−TypeConverterクラス:オーケストレーションエンジンコンポーネントモデルは、独自の型コンバータをユーザ側で定義できるさまざまな型コンバータを備えている。型コンバータはすべて、継承を通じて拡張することにより使用することができる。
−DesignerGlyph:DesignerGlyphクラスは、ユーザがデザイナの上にカスタムグリフを描画する場合に使用できる。一番上のZ順で描画する必要がある視覚的グリフをいくつか表示したい場合がある。DesignerGlyphクラスは、このようなグリフを描画するために使用することができる。このクラスは、継承を通じて拡張することにより使用できる。
−DesignerAction:ユーザは、DesignerActionsをDesignerGlyphsに関連付けることができる。ユーザがDesignerGlyphsをクリックすると、アクションが表示される。カスタムデザイナアクションは、DesignerActionから継承することにより作成できる。
タスクおよび制御フロー複合アクティビティを含むワークフローの実施例を示す図である。 アクティビティ継承ツリーの実施例を示す図である。 コンポーネントモデルの実施例を示す図である。 ワークフローを作成するためにユーザと本発明との間で行われるやり取りを示すブロック図である。 インクワークフロー(inked workflow)の実施例を示す図である。 図5のインクワークフローから変換されたワークフローを示す図である。 ワークフローを作成するためにユーザと本発明との間で行われるやり取りを示す流れ図である。 タッチスクリーン実施形態におけるインクワークフローの認識を示す流れ図である。 ワークフローの指定にウィザードに依存する、ワークフローオーサリングするための高水準アプリケーションユーザインターフェイスを示す図である。 ワークフローデザイナの実施例を示す図である。 送信アクティビティが後に続く受信アクティビティを含むオーケストレーションプログラムを示す図である。 本発明を実装することができる1つの好適なコンピューティングシステム環境の一実施例を示すブロック図である。
符号の説明
402 ユーザ
404 ディスプレイまたは表示装置または表示領域
436 タッチスクリーン
406 ユーザインターフェイス選択装置
408 プロセッサ
410 コンピュータ可読媒体
412 レンダリングコンポーネント
414 インターフェイスコンポーネント
416 デザイナコンポーネント
418 バリデーションコンポーネント
420 レコグナイザコンポーネント
422 パレットコンポーネント
424 スキンコンポーネント
426 ワークフローコンポーネント
428 メモリ領域
430 アクティビティ
432 グラフィック要素
434 パレット要素
132 演算処理装置
134 システムメモリ
136 システムバス
144 オペレーティングシステム
146 アプリケーションプログラム
148 その他のプログラムモジュール
150 プログラムデータ
166 不揮発性メモリインターフェイス
170 オペレーティングシステム
172 アプリケーションプログラム
174 その他のプログラムモジュール
176 プログラムデータ
184 ユーザ入力インターフェイス
186 ネットワークインターフェイス
190 ビデオインターフェイス
192 リモートアプリケーションプログラム
196 ローカルエリアネットワーク
198 ワイドエリアネットワーク


Claims (20)

  1. アクティビティ(430)を含みビジネスプロセスをモデル化するワークフローをモデル化するためのシステムであって、
    複数のアクティビティ(430)を格納するためのメモリ領域(428)と、
    前記メモリ領域(428)に格納されている前記複数のアクティビティ(430)を表示するための表示領域(404)と、
    プロセッサ(408)であって、
    ユーザ(402)から前記アクティビティ(430)の選択を受け取るコンピュータ実行可能命令と、
    前記表示領域(404)内にアクティビティ(430)の前記受け取った選択を表示するコンピュータ実行可能命令と、
    前記ユーザ(402)から構造情報を受け取るコンピュータ実行可能命令と、
    ワークフローを作成するために前記受け取った構造情報に従って前記表示領域(404)内にアクティビティ(430)の前記表示される選択を配列するコンピュータ実行可能命令とを実行するように構成されたプロセッサ(408)を備えることを特徴とするシステム。
  2. さらに、ポインティング装置を備え、前記メモリ領域(428)は、前記ワークフローを作成するために配列されている複数のグラフィック要素(432)を格納し、前記複数のグラフィック要素(432)は前記表示領域(404)およびポインティング装置を介して前記ユーザ(402)から受け取られ、前記メモリ領域(428)はさらにそれぞれ前記複数のアクティビティ(430)のうちの少なくとも1つに対応する複数のパレット要素(434)を格納することを特徴とする請求項1に記載のシステム。
  3. 前記プロセッサ(408)は、さらに、
    前記メモリ領域(428)内に格納されている前記グラフィック要素(432)のそれぞれを前記複数のパレット要素(434)のうちの1つにマッピングするコンピュータ実行可能命令と、
    前記マッピングされたパレット要素に応じて前記ワークフローを作成するコンピュータ実行可能命令と、
    前記ワークフローを前記表示領域(404)に表示するコンピュータ実行可能命令とを実行するように構成されることを特徴とする請求項1または2に記載のシステム。
  4. さらに、前記複数のアクティビティ(430)を表示することと、前記アクティビティ(430)の前記選択を受け取ることと、前記ユーザ(402)から前記構造情報を受け取ることと、ワークフローを作成するために前記受け取った構造情報に従ってアクティビティ(430)の前記表示される選択を配列することのうちの1つまたは複数に対する手段を含むことを特徴とする請求項1乃至3のいずれかに記載のシステム。
  5. さらに、前記表示領域(404)を含む表示装置(404)と、前記プロセッサ(408)とともに動作可能なユーザインターフェイス選択装置(406)とを備えることを特徴とする請求項1乃至4のいずれかに記載のシステム。
  6. 前記プロセッサ(408)は、前記ユーザ(402)から前記複数のグラフィック要素(432)を受け取り、ワークフローをそれに応じて作成する手段を備え、前記表示領域(404)は、ユーザインターフェイスを備え、前記表示領域(404)は、アプリケーションプログラムの実行環境内で表示できるように適合されることを特徴とする請求項1乃至5のいずれかに記載のシステム。
  7. ディスプレイ(404)およびユーザインターフェイス選択装置(406)を備えるシステムにおいて、アクティビティを含みビジネスプロセスをモデル化するワークフローをモデル化するための方法であって、
    前記ディスプレイ(404)上に複数のアクティビティを表示することと、
    前記ユーザインターフェイス選択装置(406)を介してユーザ(402)から前記アクティビティ(430)の選択を受け取ることと、
    前記ディスプレイ(404)上にアクティビティ(430)の前記受け取った選択を表示することと、
    前記ユーザインターフェイス選択装置(406)を介して前記ユーザ(402)から構造情報を受け取ることと、
    ワークフローを作成するために前記受け取った構造情報に従って前記ディスプレイ(404)上にアクティビティ(430)の前記表示される選択を配列することとを含むことを特徴とするコンピュータ化された方法。
  8. さらに、複数のパレット要素(434)を定義することを含み、前記定義された複数のパレット要素(434)のそれぞれは前記複数のアクティビティ(430)のうちの少なくとも1つに対応することを特徴とする請求項7に記載のコンピュータ化された方法。
  9. さらに、前記ユーザインターフェイス選択装置(406)を介して前記ユーザ(402)からカスタマイズ情報を受け取ることと、前記受け取ったカスタマイズ情報に応じて前記表示される複数のアクティビティ(430)を調整することとを含むことを特徴とする請求項7または8に記載のコンピュータ化された方法。
  10. さらに、前記アクティビティ(430)の1つとの関連付けのため前記ユーザインターフェイス選択装置(406)を介して前記ユーザ(402)からビジネスロジックを受け取ることを含むことを特徴とする請求項7乃至9のいずれかに記載のコンピュータ化された方法。
  11. さらに、前記ユーザインターフェイス選択装置(406)を介して前記ユーザ(402)からユーザ定義アクティビティを受け取ることを含み、前記ユーザ定義アクティビティは、1つまたは複数の関連付けられた意味論を持ち、さらに、定義済みインターフェイス要件に適合しているか調べるために前記意味論を評価することを含み、前記ユーザ定義アクティビティを前記評価結果に応じて前記アクティビティのうちの1つとして格納することを含むことを特徴とする請求項7乃至10のいずれかに記載のコンピュータ化された方法。
  12. さらに、前記作成されたワークフローをユーザ指定言語に翻訳するコマンドを受け取ることを含むことを特徴とする請求項7乃至11のいずれかに記載のコンピュータ化された方法。
  13. さらに、タッチスクリーン(436)を介して前記ユーザ(402)から、 前記表示されているワークフローに対する変数、前記ワークフローに対するコメント、アクティビティの前記配列され、表示されている選択への訂正のうちの1つまたは複数を受け取ることを含むことを特徴とする請求項7乃至12のいずれかに記載のコンピュータ化された方法。
  14. ディスプレイ(404)およびユーザインターフェイス選択装置(406)を備えるシステムにおいて、アクティビティ(430)を含みビジネスプロセスをモデル化するワークフローをモデル化するためのコンピュータ実行可能コンポーネントを収めた1つまたは複数のコンピュータ可読媒体(410)であって、前記コンピュータ実行可能コンポーネントは、
    前記ディスプレイ(404)上に複数のアクティビティ(430)を表示するレンダリングコンポーネント(412)と、
    前記ユーザインターフェイス選択装置(406)を介してユーザ(402)から前記レンダリングコンポーネント(412)により表示される前記アクティビティ(430)の選択を受け取るためのインターフェイスコンポーネント(414)であって、前記レンダリングコンポーネント(412)はさらに前記インターフェイスコンポーネント(414)により受け取ったアクティビティ(430)の前記選択を前記ディスプレイ(404)上に表示し、前記インターフェイスコンポーネント(414)はさらに前記ユーザインターフェイス選択装置(406)を介して前記ユーザ(402)から構造情報を受け取るインターフェイスコンポーネント(414)と、
    ワークフローを作成するために前記受け取った構造情報に従って前記ディスプレイ(404)上にアクティビティ(430)の前記選択を配列するためのデザイナコンポーネント(416)を含むことを特徴とするコンピュータ可読媒体。
  15. さらに、複数のパレット要素(434)を定義するパレットコンポーネント(422)を含み、前記定義された複数のパレット要素(434)のそれぞれは前記複数のアクティビティ(430)のうちの少なくとも1つに対応し、前記インターフェイスコンポーネント(414)は、前記インターフェイス選択装置(406)を介して前記ユーザ(402)から複数のグラフィック要素(432)を受け取り、前記受け取った複数のグラフィック要素(432)は前記ディスプレイ(404)上に表示される前記アクティビティ(430)の選択に対応し、前記アクティビティ(430)の前記選択は前記ワークフロー作成するように配列されることを特徴とする請求項14に記載のコンピュータ可読媒体。
  16. さらに、前記インターフェイスコンポーネント(414)によって受け取った前記複数のグラフィック要素(432)のそれぞれを前記パレットコンポーネント(422)によって定義された前記パレット要素(434)の1つに関連付け、前記ワークフローを前記ディスプレイ(404)に表示するように前記関連付けられたパレット要素(434)を配列するレコグナイザコンポーネント(420)を含むことを特徴とする請求項14または15に記載のコンピュータ可読媒体。
  17. 前記インターフェイスコンポーネント(414)は、さらに、前記ユーザインターフェイス選択装置(406)を介して前記ユーザからユーザ定義アクティビティを受け取り、前記ユーザ定義アクティビティは1つまたは複数の意味論が関連付けられており、さらに定義済みインターフェイス要件に適合しているか調べるために前記意味論を評価するバリデーションコンポーネント(418)を含むことを特徴とする請求項14乃至16のいずれかに記載のコンピュータ可読媒体。
  18. 前記レンダリングコンポーネント(412)は、さらに、前記受け取ったユーザ定義アクティビティを前記バリデーションコンポーネント(418)の結果に応じて前記ディスプレイ(404)上に前記複数のアクティビティ(430)のうちの1つとして表示し、前記インターフェイスコンポーネント(414)は、さらに、前記アクティビティ(430)の1つに関連付けられたビジネスロジックを受け取り、前記レンダリングコンポーネント(412)、インターフェイスコンポーネント(414)、およびデザイナコンポーネント(416)は、アプリケーションプログラムの実行環境内で実行され、前記インターフェイスコンポーネント(414)は、グラフィカルユーザインターフェイスおよびアプリケーションプログラミングインターフェイスのうちの1つまたは複数を含むことを特徴とする請求項14乃至17のいずれかに記載のコンピュータ可読媒体。
  19. 前記ディスプレイ(404)は、タッチスクリーン(436)を備え、前記インターフェイスコンポーネント(414)は、前記ビジネスロジックを前記ワークフロー内の前記配列されたパレット要素の1つに対応する前記アクティビティ(430)の1つに関連付けることを特徴とする請求項14乃至18のいずれかに記載のコンピュータ可読媒体。
  20. さらに、ユーザ定義テーマを前記タッチスクリーン(436)上に表示される前記ワークフローに適用するためのスキンコンポーネント(424)を含み、さらに、前記レコグナイザコンポーネント(420)により配列された前記関連付けられたパレット要素に従って前記ワークフローを作成するためのワークフローコンポーネント(426)を含むことを特徴とする請求項14乃至19のいずれかに記載のコンピュータ可読媒体。

JP2005265378A 2004-10-01 2005-09-13 ワークフローを設計するための拡張可能フレームワーク Pending JP2006107478A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US61554904P 2004-10-01 2004-10-01
US11/046,967 US8170901B2 (en) 2004-10-01 2005-01-31 Extensible framework for designing workflows
US11/063,808 US20060074735A1 (en) 2004-10-01 2005-02-23 Ink-enabled workflow authoring

Publications (2)

Publication Number Publication Date
JP2006107478A true JP2006107478A (ja) 2006-04-20
JP2006107478A5 JP2006107478A5 (ja) 2008-10-02

Family

ID=35229823

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005265378A Pending JP2006107478A (ja) 2004-10-01 2005-09-13 ワークフローを設計するための拡張可能フレームワーク

Country Status (5)

Country Link
US (1) US20060074735A1 (ja)
EP (1) EP1643435B1 (ja)
JP (1) JP2006107478A (ja)
KR (1) KR20060087995A (ja)
CN (1) CN101013362B (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009535978A (ja) 2006-05-04 2009-10-01 マイクロソフト コーポレーション ホバーに応答した発呼
JP2014096166A (ja) * 2008-03-31 2014-05-22 Hitachi Ltd 情報システムトポロジー表示を提供するユーザーインターフェース

Families Citing this family (124)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7451403B1 (en) * 2002-12-20 2008-11-11 Rage Frameworks, Inc. System and method for developing user interfaces purely by modeling as meta data in software application
US8170901B2 (en) * 2004-10-01 2012-05-01 Microsoft Corporation Extensible framework for designing workflows
GB2423382A (en) 2005-01-27 2006-08-23 Microgen Plc Generating business process programs using a symbolic representation of operators in a graphical interface
US7925994B2 (en) * 2005-07-07 2011-04-12 Microsoft Corporation Task navigator including a user based navigation interface
US8225231B2 (en) 2005-08-30 2012-07-17 Microsoft Corporation Aggregation of PC settings
US10042615B2 (en) * 2005-09-29 2018-08-07 International Business Machines Corporation Process contributions in a method architecture
US8112394B2 (en) 2005-10-14 2012-02-07 Oracle International Corporation Long-lived data transactions
US7681133B2 (en) * 2005-10-14 2010-03-16 Oracle International Corporation Declarative task-based user interfaces
US8296727B2 (en) * 2005-10-14 2012-10-23 Oracle Corporation Sub-task mechanism for development of task-based user interfaces
US20070130547A1 (en) * 2005-12-01 2007-06-07 Navisense, Llc Method and system for touchless user interface control
US8578282B2 (en) * 2006-03-15 2013-11-05 Navisense Visual toolkit for a virtual user interface
US8024405B2 (en) * 2006-03-30 2011-09-20 Microsoft Corporation Declarative model for concurrency-control across lightweight threads
US8069439B2 (en) * 2006-03-30 2011-11-29 Microsoft Corporation Framework for modeling continuations in workflows
US7739135B2 (en) * 2006-03-30 2010-06-15 Microsoft Corporation Asynchronous fault handling in process-centric programs
US20070239505A1 (en) * 2006-03-30 2007-10-11 Microsoft Corporation Abstract execution model for a continuation-based meta-runtime
US8396736B2 (en) * 2006-04-21 2013-03-12 Process Assets, Llc Systems and methods for providing documentation having succinct communication with scalability
US8181150B2 (en) 2006-05-12 2012-05-15 The Mathworks, Inc. System and method for synchronized workflow management
US9715675B2 (en) * 2006-08-10 2017-07-25 Oracle International Corporation Event-driven customizable automated workflows for incident remediation
US9299039B1 (en) * 2006-08-23 2016-03-29 A9.Com, Inc. Managing task lists utilizing integrated information requests
US8433729B2 (en) * 2006-09-29 2013-04-30 Sap Ag Method and system for automatically generating a communication interface
KR100910336B1 (ko) 2006-10-19 2009-07-31 신동혁 논리 프로세스 및 물리 프로세스 모델을 맵핑한 비즈니스 프로세스 모델을 관리하기 위한 시스템 및 방법
US8086479B2 (en) * 2006-12-29 2011-12-27 Schlumberger Technology Corporation Oilfield management system and method
JP2008181248A (ja) * 2007-01-23 2008-08-07 Kyocera Mita Corp 表示制御装置及び表示制御プログラム
US7743076B2 (en) * 2007-01-26 2010-06-22 Microsoft Corporation Extensible action sequences coordinating independently created components
CN101657791A (zh) 2007-04-13 2010-02-24 汤姆逊许可证公司 支持高级媒体制作和分发的增强数据库方案
US9171282B2 (en) * 2007-10-22 2015-10-27 Oracle International Corporation Interactive complex event pattern builder and visualizer
US9449291B2 (en) * 2007-11-28 2016-09-20 Sap Se Subscriptions for routing incoming messages to process instances in a process execution engine
US8428983B2 (en) 2007-12-28 2013-04-23 International Business Machines Corporation Facilitating availability of information technology resources based on pattern system environments
US8341014B2 (en) * 2007-12-28 2012-12-25 International Business Machines Corporation Recovery segments for computer business applications
US20090171703A1 (en) * 2007-12-28 2009-07-02 International Business Machines Corporation Use of multi-level state assessment in computer business environments
KR100890861B1 (ko) * 2008-03-04 2009-03-27 정병수 3차원 응용프로그램 프레임워크를 생성하는 방법 및 그 3차원 응용프로그램 프레임워크를 기반으로 하는 응용프로그램 구현 방법
WO2009110725A2 (ko) * 2008-03-04 2009-09-11 주식회사 코드에스이 3차원 응용프로그램 프레임워크 구조 및 이를 기반으로 하는 응용프로그램 구현 방법과, 3차원 응용소프트웨어 프레임워크 기반의 자동 테스트 시스템 및 그 방법
US9563877B2 (en) * 2008-03-11 2017-02-07 Microsoft Technology Licensing, Llc Customizable controls provided by a messaging application for performing selected actions
WO2009143533A2 (en) * 2008-05-23 2009-11-26 Adapx, Inc. Systems and methods for using a digital palette to produce a digital document
TW201009688A (en) * 2008-08-20 2010-03-01 Clevest Solutions Inc Method and system of editing workflow logic and screens with a GUI tool
US8887061B2 (en) * 2008-09-26 2014-11-11 Microsoft Corporation Variable screen magnifier user interface
US8411046B2 (en) 2008-10-23 2013-04-02 Microsoft Corporation Column organization of content
US20100107100A1 (en) 2008-10-23 2010-04-29 Schneekloth Jason S Mobile Device Style Abstraction
US20100114619A1 (en) * 2008-10-30 2010-05-06 International Business Machines Corporation Customized transformation of free-form business concepts to semantically rich business models
US9424398B1 (en) * 2009-01-24 2016-08-23 Dionex Corporation Workflows for defining a sequence for an analytical instrument
US8175653B2 (en) 2009-03-30 2012-05-08 Microsoft Corporation Chromeless user interface
US8238876B2 (en) 2009-03-30 2012-08-07 Microsoft Corporation Notifications
US20100269032A1 (en) * 2009-04-15 2010-10-21 Microsoft Corporation Advanced text completion, such as for markup languages
US8836648B2 (en) 2009-05-27 2014-09-16 Microsoft Corporation Touch pull-in gesture
US8732596B2 (en) 2009-12-29 2014-05-20 Microgen Aptitude Limited Transformation of hierarchical data formats using graphical rules
US8140894B2 (en) * 2009-12-29 2012-03-20 Microgen Aptitude Limited Transaction regions in graphical computer-implemented methods of processing data
US8464229B2 (en) * 2009-12-29 2013-06-11 Microgen Aptitude Limited Creation of form-based software application in a graphical user interface (GUI) environment
US20110161371A1 (en) * 2009-12-29 2011-06-30 Microgen Plc Sql generation
CN101777155A (zh) * 2010-02-01 2010-07-14 山东浪潮齐鲁软件产业股份有限公司 一种跨应用工作流任务列表集成业务处理页面的方法
KR101188886B1 (ko) * 2010-10-22 2012-10-09 삼성에스디에스 주식회사 유전 정보 관리 시스템 및 방법
US20120159395A1 (en) 2010-12-20 2012-06-21 Microsoft Corporation Application-launching interface for multiple modes
US20120159383A1 (en) 2010-12-20 2012-06-21 Microsoft Corporation Customization of an immersive environment
US8689123B2 (en) 2010-12-23 2014-04-01 Microsoft Corporation Application reporting in an application-selectable user interface
US8612874B2 (en) 2010-12-23 2013-12-17 Microsoft Corporation Presenting an application change through a tile
US9423951B2 (en) 2010-12-31 2016-08-23 Microsoft Technology Licensing, Llc Content-based snap point
US9311061B2 (en) * 2011-02-10 2016-04-12 International Business Machines Corporation Designing task execution order based on location of the task icons within a graphical user interface
US9383917B2 (en) 2011-03-28 2016-07-05 Microsoft Technology Licensing, Llc Predictive tiling
US9158445B2 (en) 2011-05-27 2015-10-13 Microsoft Technology Licensing, Llc Managing an immersive interface in a multi-application immersive environment
US20120304132A1 (en) 2011-05-27 2012-11-29 Chaitanya Dev Sareen Switching back to a previously-interacted-with application
US9104307B2 (en) 2011-05-27 2015-08-11 Microsoft Technology Licensing, Llc Multi-application environment
US8893033B2 (en) 2011-05-27 2014-11-18 Microsoft Corporation Application notifications
US9658766B2 (en) 2011-05-27 2017-05-23 Microsoft Technology Licensing, Llc Edge gesture
US9104440B2 (en) 2011-05-27 2015-08-11 Microsoft Technology Licensing, Llc Multi-application environment
US8687023B2 (en) 2011-08-02 2014-04-01 Microsoft Corporation Cross-slide gesture to select and rearrange
US20130057587A1 (en) 2011-09-01 2013-03-07 Microsoft Corporation Arranging tiles
US9557909B2 (en) 2011-09-09 2017-01-31 Microsoft Technology Licensing, Llc Semantic zoom linguistic helpers
US8922575B2 (en) 2011-09-09 2014-12-30 Microsoft Corporation Tile cache
US10353566B2 (en) 2011-09-09 2019-07-16 Microsoft Technology Licensing, Llc Semantic zoom animations
US9146670B2 (en) 2011-09-10 2015-09-29 Microsoft Technology Licensing, Llc Progressively indicating new content in an application-selectable user interface
US8933952B2 (en) 2011-09-10 2015-01-13 Microsoft Corporation Pre-rendering new content for an application-selectable user interface
US9244802B2 (en) 2011-09-10 2016-01-26 Microsoft Technology Licensing, Llc Resource user interface
CN102279754B (zh) * 2011-09-19 2013-10-30 山东中创软件工程股份有限公司 一种业务处理执行语言流程部署方法
US20130152021A1 (en) * 2011-12-09 2013-06-13 Microsoft Corporation Stage and stage view within a workflow
US9395959B2 (en) 2011-12-09 2016-07-19 Microsoft Technology Licensing, Llc Integrated workflow visualization and editing
US9223472B2 (en) 2011-12-22 2015-12-29 Microsoft Technology Licensing, Llc Closing applications
US9128605B2 (en) 2012-02-16 2015-09-08 Microsoft Technology Licensing, Llc Thumbnail-image selection of applications
US11455287B1 (en) * 2012-08-01 2022-09-27 Tibco Software Inc. Systems and methods for analysis of data at disparate data sources
US9110765B2 (en) * 2012-10-17 2015-08-18 Sap Portals Israel Ltd Displaying different hierarchy levels of computer program source code
EP2948905A4 (en) * 2013-01-23 2016-08-03 Thomson Licensing ASSEMBLY PROCESSING IN WORKFLOW MODELING GUIDED BY ASSETS
US20150363096A1 (en) * 2013-01-31 2015-12-17 Hewlett-Packard Developement Company, L.P. Defining a design plan
US9450952B2 (en) 2013-05-29 2016-09-20 Microsoft Technology Licensing, Llc Live tiles without application-code execution
US9262239B2 (en) * 2013-05-10 2016-02-16 Adobe Systems Incorporated User-creatable custom workflows
CN103455369A (zh) * 2013-08-30 2013-12-18 西安电子科技大学 一种面向个人的任务分派与处理系统
GB201316948D0 (en) * 2013-09-24 2013-11-06 Cotham Technologies Ltd Methods and software for creating workflows
CN103645911B (zh) * 2013-11-01 2017-11-21 北京奇虎科技有限公司 高亮颜色的获取、修改方法及设备
US9912824B2 (en) * 2014-02-10 2018-03-06 Xerox Corporation Triggering workflows from a multifunction device
US9354922B2 (en) * 2014-04-02 2016-05-31 International Business Machines Corporation Metadata-driven workflows and integration with genomic data processing systems and techniques
WO2015149347A1 (en) 2014-04-04 2015-10-08 Microsoft Technology Licensing, Llc Expandable application representation
KR102107275B1 (ko) 2014-04-10 2020-05-06 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 컴퓨팅 디바이스에 대한 접이식 쉘 커버
EP3129847A4 (en) 2014-04-10 2017-04-19 Microsoft Technology Licensing, LLC Slider cover for computing device
US10592080B2 (en) 2014-07-31 2020-03-17 Microsoft Technology Licensing, Llc Assisted presentation of application windows
US10254942B2 (en) 2014-07-31 2019-04-09 Microsoft Technology Licensing, Llc Adaptive sizing and positioning of application windows
US10678412B2 (en) 2014-07-31 2020-06-09 Microsoft Technology Licensing, Llc Dynamic joint dividers for application windows
CN104199651A (zh) * 2014-08-26 2014-12-10 浪潮软件股份有限公司 一种图形化流程建模工具设计方法
US10642365B2 (en) 2014-09-09 2020-05-05 Microsoft Technology Licensing, Llc Parametric inertia and APIs
CN106662891B (zh) 2014-10-30 2019-10-11 微软技术许可有限责任公司 多配置输入设备
CN105808226A (zh) * 2014-12-31 2016-07-27 亚申科技研发中心(上海)有限公司 实验工作流的生成方法及系统
US20160306503A1 (en) * 2015-04-16 2016-10-20 Vmware, Inc. Workflow Guidance Widget with State-Indicating Buttons
EP3329366B1 (en) * 2015-07-31 2021-07-07 WiseTech Global Limited Systems and methods for executable content and executable content flow creation
US10915299B2 (en) * 2015-10-16 2021-02-09 Salesforce.Com, Inc. Automatically matching start criteria and completion criteria of a walkthrough for an application or online service
EP3226184A1 (en) 2016-03-30 2017-10-04 Tata Consultancy Services Limited Systems and methods for determining and rectifying events in processes
EP3519951A4 (en) * 2016-10-01 2020-07-01 Gunakar Private Limited SYSTEM FOR COORDINATING A LOGICAL SEQUENCE OF INSTRUCTIONS IN ELECTRONIC DEVICES USING VISUAL PROGRAMMING AND WIRELESS COMMUNICATION
KR101726663B1 (ko) 2016-11-09 2017-04-13 국방과학연구소 블록 다이어그램 환경에서의 모델 기반 설계 시 클라우드 개념을 이용한 각 모델 간 입출력 포트 연결 자동화 방법 및 시스템
US10445680B2 (en) * 2017-02-02 2019-10-15 Azuqua, Inc. Engine for modeling and executing custom business processes
US20180321830A1 (en) * 2017-05-03 2018-11-08 Espressive, Inc. Screen-based workflow configuration and execution platform
US10534337B2 (en) * 2017-05-04 2020-01-14 Servicenow, Inc. Flow engine for building automated flows within a cloud based developmental platform
US10747941B2 (en) * 2017-06-28 2020-08-18 General Electric Company Tag mapping process and pluggable framework for generating algorithm ensemble
US11550565B1 (en) 2017-07-21 2023-01-10 State Farm Mutual Automobile Insurance Company Method and system for optimizing dynamic user experience applications
US11423083B2 (en) 2017-10-27 2022-08-23 Ab Initio Technology Llc Transforming a specification into a persistent computer program
CN109933326B (zh) * 2017-12-15 2023-03-17 北京奇虎科技有限公司 改写代码的编译方法、装置及相应终端
US10534587B1 (en) * 2017-12-21 2020-01-14 Intuit Inc. Cross-platform, cross-application styling and theming infrastructure
US11157259B1 (en) 2017-12-22 2021-10-26 Intuit Inc. Semantic and standard user interface (UI) interoperability in dynamically generated cross-platform applications
CN110609822B (zh) * 2018-06-15 2023-02-28 伊姆西Ip控股有限责任公司 数据流处理方法、设备和计算机程序产品
US11087259B2 (en) * 2018-07-12 2021-08-10 Nintex UK Ltd. Business designer
US10817266B2 (en) * 2018-09-25 2020-10-27 Salesforce.Com, Inc. Converting a captured image to visual programming logic for an automation building tool
US10970052B2 (en) 2018-10-19 2021-04-06 Oracle International Corporation System and method for enhancing component based development models with auto-wiring
US10754626B2 (en) 2018-11-30 2020-08-25 Shopify Inc. Visual and code views in a process workflow user interface
US11294555B2 (en) * 2019-04-24 2022-04-05 Appian Corporation Intelligent manipulation of dynamic declarative interfaces
EP3748440B1 (en) * 2019-06-03 2023-11-08 ABB Schweiz AG Workflow of an apparatus
US11282118B2 (en) * 2019-09-17 2022-03-22 Salesforce.Com, Inc. Order management user interface
US11288611B2 (en) * 2020-07-22 2022-03-29 Servicenow, Inc. Multi-process workflow designer user interface
US11295260B2 (en) * 2020-07-22 2022-04-05 Servicenow, Inc. Multi-process workflow designer
US11435871B1 (en) * 2021-05-18 2022-09-06 Amazon Technologies, Inc. Workflow assembly tool and workflow model for runtime execution
US11656744B1 (en) * 2022-03-14 2023-05-23 Wolters Kluwer Technology BV Interactive tool for efficiently developing task flows

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05135121A (ja) * 1991-11-14 1993-06-01 Hitachi Software Eng Co Ltd ダイアグラム認識システム
JP2002259643A (ja) * 2001-03-02 2002-09-13 Hitachi Ltd ビジネスプロセス制御プログラム

Family Cites Families (99)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5301320A (en) * 1991-06-28 1994-04-05 Digital Equipment Corporation Workflow management and control system
AU6133594A (en) * 1993-02-08 1994-08-29 Action Technologies, Inc. Method and apparatus for managing business processes
DE69406462T2 (de) * 1993-11-02 1998-05-28 Taligent Inc Objekt-orientiertes graphisches system und dazu gehöriges verfahren
US5734837A (en) * 1994-01-14 1998-03-31 Action Technologies, Inc. Method and apparatus for building business process applications in terms of its workflows
US5634127A (en) * 1994-11-30 1997-05-27 International Business Machines Corporation Methods and apparatus for implementing a message driven processor in a client-server environment
US5774661A (en) * 1995-04-18 1998-06-30 Network Imaging Corporation Rule engine interface for a visual workflow builder
US5999911A (en) * 1995-06-02 1999-12-07 Mentor Graphics Corporation Method and system for managing workflow
DE19712946A1 (de) * 1996-05-30 1997-12-04 Ibm Methode zum Generieren einer Implementierung wiederverwendbarer Teile von Containern eines Workflow-Prozessmodells
US5930512A (en) * 1996-10-18 1999-07-27 International Business Machines Corporation Method and apparatus for building and running workflow process models using a hypertext markup language
US6016394A (en) * 1997-09-17 2000-01-18 Tenfold Corporation Method and system for database application software creation requiring minimal programming
US6807583B2 (en) * 1997-09-24 2004-10-19 Carleton University Method of determining causal connections between events recorded during process execution
US6621505B1 (en) * 1997-09-30 2003-09-16 Journee Software Corp. Dynamic process-based enterprise computing system and method
US6012066A (en) * 1997-10-01 2000-01-04 Vallon, Inc. Computerized work flow system
US6225998B1 (en) * 1997-12-02 2001-05-01 Aspect Communications Visual design of workflows for transaction processing
US6115646A (en) * 1997-12-18 2000-09-05 Nortel Networks Limited Dynamic and generic process automation system
US6020878A (en) * 1998-06-01 2000-02-01 Motorola, Inc. Selective call radio with hinged touchpad
US6567783B1 (en) * 1998-06-05 2003-05-20 I2 Technologies Us, Inc. Communication across one or more enterprise boundaries regarding the occurrence of a workflow event
US6397192B1 (en) * 1998-06-05 2002-05-28 I2 Technologies Us, Inc. Synchronizing one or more workflows using one or more synchronization-join activities that include synchronization logic
WO2000014618A2 (en) * 1998-08-24 2000-03-16 Fujitsu Limited Workflow system and method
US6606740B1 (en) * 1998-10-05 2003-08-12 American Management Systems, Inc. Development framework for case and workflow systems
US7133833B1 (en) * 1998-10-27 2006-11-07 Netscape Communications Corporation Lightweight directory access protocol workflow management system
US6678882B1 (en) * 1999-06-30 2004-01-13 Qwest Communications International Inc. Collaborative model for software systems with synchronization submodel with merge feature, automatic conflict resolution and isolation of potential changes for reuse
US6405364B1 (en) * 1999-08-31 2002-06-11 Accenture Llp Building techniques in a development architecture framework
EP1098244A3 (en) * 1999-11-02 2001-06-13 CANAL + Société Anonyme Graphical user interface
US7020697B1 (en) * 1999-10-01 2006-03-28 Accenture Llp Architectures for netcentric computing systems
US7096454B2 (en) * 2000-03-30 2006-08-22 Tyrsted Management Aps Method for gesture based modeling
US6768986B2 (en) * 2000-04-03 2004-07-27 Business Objects, S.A. Mapping of an RDBMS schema onto a multidimensional data model
US6964034B1 (en) * 2000-04-20 2005-11-08 International Business Machines Corporation Application development server and a mechanism for providing different views into the same constructs within a strongly encapsulated environment
US6918053B1 (en) * 2000-04-28 2005-07-12 Microsoft Corporation Compensation framework for long running transactions
US6845507B2 (en) * 2000-05-18 2005-01-18 Ss & C Technologies, Inc. Method and system for straight through processing
US20020032692A1 (en) * 2000-09-08 2002-03-14 Atsuhito Suzuki Workflow management method and workflow management system of controlling workflow process
US7428495B2 (en) * 2000-10-02 2008-09-23 International Projects Consultancy Services, Inc. Object based workflow system and method
US6604104B1 (en) * 2000-10-02 2003-08-05 Sbi Scient Inc. System and process for managing data within an operational data store
US6954747B1 (en) * 2000-11-14 2005-10-11 Microsoft Corporation Methods for comparing versions of a program
US6901405B1 (en) * 2000-12-20 2005-05-31 Microsoft Corporation Method for persisting a schedule and database schema
JP3702785B2 (ja) * 2000-12-27 2005-10-05 ヤマハ株式会社 楽音演奏装置、方法及び媒体
US7174534B2 (en) * 2001-01-22 2007-02-06 Symbol Technologies, Inc. Efficient system and method for running and analyzing multi-channel, multi-modal applications
US20020161859A1 (en) * 2001-02-20 2002-10-31 Willcox William J. Workflow engine and system
US7240324B2 (en) * 2001-02-28 2007-07-03 Hewlett-Packard Development Company, L.P. Event-based scheduling method and system for workflow activities
US20020147606A1 (en) * 2001-03-14 2002-10-10 Norbert Hoffmann Application development method
US7146577B2 (en) * 2001-03-27 2006-12-05 Ncr Corporation Signature capture terminal
US6816865B2 (en) * 2001-04-18 2004-11-09 International Business Machines Corporation Process for data driven application integration for B2B
US20020188644A1 (en) * 2001-06-08 2002-12-12 Verano Workflow automated task component manager
JP2003008805A (ja) * 2001-06-26 2003-01-10 Matsushita Electric Ind Co Ltd 電子黒板システム
US7069536B2 (en) * 2001-06-28 2006-06-27 International Business Machines Corporation Method, system, and program for executing a workflow
US6898604B1 (en) * 2001-06-29 2005-05-24 Microsoft Corporation XML serialization and deserialization
US20030018508A1 (en) * 2001-07-19 2003-01-23 Schwanke Robert W. Data-triggered workflow processes
US7222334B2 (en) * 2001-07-24 2007-05-22 Hewlett-Packard Development Comapny, L.P. Modeling tool for electronic services and associated methods and businesses
US20030097457A1 (en) * 2001-08-08 2003-05-22 Amitabh Saran Scalable multiprocessor architecture for business computer platforms
US6985939B2 (en) * 2001-09-19 2006-01-10 International Business Machines Corporation Building distributed software services as aggregations of other services
US6895573B2 (en) * 2001-10-26 2005-05-17 Resultmaker A/S Method for generating a workflow on a computer, and a computer system adapted for performing the method
US7389335B2 (en) * 2001-11-26 2008-06-17 Microsoft Corporation Workflow management based on an integrated view of resource identity
US20030177046A1 (en) * 2001-12-03 2003-09-18 John Socha-Leialoha Method and system for reusing components
US7408658B2 (en) * 2001-12-04 2008-08-05 Hewlett-Packard Development Company, L.P. Generation and usage of workflows for processing data on a printing device
US7089287B2 (en) * 2002-01-16 2006-08-08 Xerox Corporation Message-based system having embedded information management capabilities
US20030144891A1 (en) * 2002-01-26 2003-07-31 International Business Machines Corporation Supervising the processing status of activities within workflow management systems
DE10204310A1 (de) * 2002-02-01 2003-08-14 Correct Software Gmbh Verfahren zur Steuerung eines Computers
US7441197B2 (en) * 2002-02-26 2008-10-21 Global Asset Protection Services, Llc Risk management information interface system and associated methods
US7865867B2 (en) * 2002-03-08 2011-01-04 Agile Software Corporation System and method for managing and monitoring multiple workflows
US20030233374A1 (en) * 2002-03-14 2003-12-18 Ulrich Spinola Dynamic workflow process
DE10215653A1 (de) * 2002-04-09 2003-11-06 Bernhard Voslamber Verfahren und Anordung zur automatischen Erzeugung von Programmcodeabschnitten sowie ein entsprechendes Computerprogrammprodukt und ein entsprechendes computerlesbares Speichermedium
US6975914B2 (en) * 2002-04-15 2005-12-13 Invensys Systems, Inc. Methods and apparatus for process, factory-floor, environmental, computer aided manufacturing-based or other control system with unified messaging interface
US7519976B2 (en) * 2002-05-01 2009-04-14 Bea Systems, Inc. Collaborative business plug-in framework
US20040003353A1 (en) * 2002-05-14 2004-01-01 Joey Rivera Workflow integration system for automatic real time data management
US7107340B2 (en) * 2002-05-31 2006-09-12 Microsoft Corporation System and method for collecting and storing event data from distributed transactional applications
US7571187B2 (en) * 2002-05-31 2009-08-04 Microsoft Corporation Support for real-time queries concerning current state, data and history of a process
US7272816B2 (en) * 2002-07-31 2007-09-18 Sap Aktiengesellschaft Transformations between private and shared workflows
US7225425B2 (en) * 2002-08-29 2007-05-29 Sap Aktiengesellschaft Rapid application integration
US20040078105A1 (en) * 2002-09-03 2004-04-22 Charles Moon System and method for workflow process management
US7398525B2 (en) * 2002-10-21 2008-07-08 International Business Machines Corporation Resource scheduling in workflow management systems
US8056046B2 (en) * 2002-10-22 2011-11-08 The Boeing Company Integrated system-of-systems modeling environment and related methods
US7437703B2 (en) * 2002-10-25 2008-10-14 Sap Ag Enterprise multi-agent software system with services able to call multiple engines and scheduling capability
US7062537B2 (en) * 2002-11-25 2006-06-13 Microsoft Corporation Workflow services architecture
US20040148213A1 (en) * 2002-11-25 2004-07-29 Microsoft Corporation Automated workflow constraints
US7272820B2 (en) * 2002-12-12 2007-09-18 Extrapoles Pty Limited Graphical development of fully executable transactional workflow applications with adaptive high-performance capacity
US7885840B2 (en) * 2003-01-07 2011-02-08 Sap Aktiengesellschaft System and method of flexible workflow management
US7168077B2 (en) * 2003-01-31 2007-01-23 Handysoft Corporation System and method of executing and controlling workflow processes
US20040162741A1 (en) * 2003-02-07 2004-08-19 David Flaxer Method and apparatus for product lifecycle management in a distributed environment enabled by dynamic business process composition and execution by rule inference
CA2420479A1 (en) * 2003-02-13 2004-08-13 Ibm Canada Limited - Ibm Canada Limitee Flow debugging software and method
US20050066002A1 (en) * 2003-07-31 2005-03-24 Arnold Teres Workflow compatible healthcare information message communication system
US8645420B2 (en) * 2003-08-05 2014-02-04 Accenture Global Services Limited Methodology framework and delivery vehicle
US7693973B2 (en) * 2003-08-28 2010-04-06 International Business Machines Corporation Pluggable state meta-data processors based on meta information modeling in a service oriented architecture
CA2443454A1 (en) * 2003-09-11 2005-03-11 Teamplate Inc. Data binding method in workflow system
CA2442796A1 (en) * 2003-09-26 2005-03-26 Ibm Canada Limited - Ibm Canada Limitee Binding a workflow engine to a data model
US7093207B1 (en) * 2003-11-17 2006-08-15 Kla-Tencor Technologies Corporation Data analysis flow engine
US7519960B2 (en) * 2003-12-19 2009-04-14 International Business Machines Corporation Method and system for debugging business process flow
US7650344B2 (en) * 2004-02-09 2010-01-19 Coremetrics, Inc. System and method of managing software product-line customizations
US7424485B2 (en) * 2004-06-03 2008-09-09 Microsoft Corporation Method and apparatus for generating user interfaces based upon automation with full flexibility
US20060064335A1 (en) * 2004-08-17 2006-03-23 International Business Machines Corporation Method, system, and storage medium for performing business process modeling
US7464366B2 (en) * 2004-10-01 2008-12-09 Microsoft Corporation Programming interface for a componentized and extensible workflow model
US7451432B2 (en) * 2004-10-01 2008-11-11 Microsoft Corporation Transformation of componentized and extensible workflow to a declarative format
US7631291B2 (en) * 2004-10-01 2009-12-08 Microsoft Corporation Declarative representation for an extensible workflow model
US8478616B2 (en) * 2004-10-29 2013-07-02 FrontRange Solutions USA Inc. Business application development and execution environment
US20060112122A1 (en) * 2004-11-23 2006-05-25 International Business Machines Corporation Method, system, and storage medium for implementing business process modules
US7433887B2 (en) * 2004-12-29 2008-10-07 Microsoft Corporation Method and apparatus for metadata driven business logic processing
US7493594B2 (en) * 2005-03-14 2009-02-17 Research In Motion System and method for designing component based applications
US7747958B2 (en) * 2005-04-18 2010-06-29 Research In Motion Limited System and method for enabling assisted visual development of workflow for application tasks
US20060241954A1 (en) * 2005-04-22 2006-10-26 International Business Machines Corporation Method and system for adaptive action management for business solutions
US7983943B2 (en) * 2005-05-27 2011-07-19 Xerox Corporation Method and system for workflow process node synchronization

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05135121A (ja) * 1991-11-14 1993-06-01 Hitachi Software Eng Co Ltd ダイアグラム認識システム
JP2002259643A (ja) * 2001-03-02 2002-09-13 Hitachi Ltd ビジネスプロセス制御プログラム

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009535978A (ja) 2006-05-04 2009-10-01 マイクロソフト コーポレーション ホバーに応答した発呼
JP2014096166A (ja) * 2008-03-31 2014-05-22 Hitachi Ltd 情報システムトポロジー表示を提供するユーザーインターフェース
US9225610B2 (en) 2008-03-31 2015-12-29 Hitachi, Ltd. User interface providing information system topology presentation

Also Published As

Publication number Publication date
KR20060087995A (ko) 2006-08-03
EP1643435B1 (en) 2016-04-27
CN101013362A (zh) 2007-08-08
EP1643435A1 (en) 2006-04-05
CN101013362B (zh) 2010-05-05
US20060074735A1 (en) 2006-04-06

Similar Documents

Publication Publication Date Title
US8170901B2 (en) Extensible framework for designing workflows
EP1643435B1 (en) An extensible framework for designing workflows
JP4806240B2 (ja) コンポーネント化された拡張可能なワークフローモデル
JP5710852B2 (ja) 設計時および実行時にワークフローを継ぎ目なくオーサリングし編集するためのフレームワーク
JP5173128B2 (ja) フローベースおよび制約ベースのワークフローをオーサリングし、実行するための統一モデル
US7451432B2 (en) Transformation of componentized and extensible workflow to a declarative format
JP5021193B2 (ja) 拡張可能ワークフローモデルの宣言的表現
US6804686B1 (en) System and methodology for providing fixed UML layout for an object oriented class browser
US7840936B2 (en) Support of a platform-independent model including descriptions of modeling language entities
JP2006107479A (ja) ワークフロー領域内の分野横断的動作問題(cross−cuttingbehavioralconcerns)をモデル化するためのフレームワーク
US7434203B2 (en) Software logistics for pattern-based applications
US20070168384A1 (en) Mapping of designtime to runtime in a visual modeling language environment
US20120060141A1 (en) Integrated environment for software design and implementation
Wingrave et al. A natural, tiered and executable UIDL for 3D user interfaces based on Concept-Oriented Design
Liberty et al. Pro Windows 8.1 Development with XAML and C
Ráth et al. Automated model transformations in domain specific visual languages
Allen Self Handbook Documentation
Rose Using Rose
Allwood et al. A User Friendly, Type-Safe, Graphical Shell
White Rehosting the Workflow Designer

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080819

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080819

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20111101

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120201

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20120601