問題タブ [state-machine-workflow]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - イベントを Windows Workflow 4 ステート マシンに送信して状態を進めるにはどうすればよいですか?
Windows Workflow State Machine (.NET 4.5) の使用を検討していますが、方向性が必要です。
電話用のステート マシンを備えた WCF サービスがあります。状態が次のとおりであるとしましょう。
- 初期化済み
- リンギング
- 接続済み
- 忙しい
- 無回答
- 切断されました
可能な遷移は次のとおりです。
- 電話
- 接続
- 忙しい
- 無回答
- 切断する
このサービスは、呼び出し ID とイベント (「呼び出し」、「接続」、「切断」など) で呼び出されるメソッドを公開します。その呼び出し ID に対応する特定のステート マシン インスタンスをロードし、イベントを渡して、次の状態に移動できるようにする必要があります (または、現在の状態からの対応する遷移がない場合は状態を変更しません)。
たとえば、ステート マシンが Ringing 状態で「connect」を取得した場合、状態を Connected に移行したいのですが、「busy」になった場合は Busy 状態に移行します。ただし、「切断」イベントを取得した場合、ステート マシンは Ringing ステートのままにする必要があります。
ステートレスでこれを成功させましたが、Windows ワークフローで試してみたいと思います。
MSDN の例では、ステート マシンが外部のイベントによって駆動されることは実際には示されていません。
1) ステート マシンの状態に関係なく、ステート マシンに遷移を送信する良い方法は何ですか? 2) ある種の ID を指定して、特定のステート マシン インスタンス (つまり、状態と変数) をデータベース (必ずしも SQL Server ではない) にロード/保存する良い方法は何ですか?
c# - StateMachineStateTracker のインスタンスを読み込めません。たぶんWFでファイナルステイトに到達
まず、WorkFlow Foundation 4.5 はまったくの初心者です。Case エンティティで状態を管理するために WF エンジンを使用します。独自のステート マシンを構築する代わりに、WF を使用することにしました。主な理由は、顧客が大規模なプロセス フロー (それほど複雑ではない) を持っているためで、それを xaml で描画したいと考えていました。誰もがプロセスを実際に理解し、それについて話すのは簡単です。
問題は、最終状態である Final 状態への遷移により、StateMachineStateTracker インスタンスをロードすると null になることです。以下のこのコードは、すべての遷移に対して完全に機能し、ブックマークを再開した後にトラッカー インスタンスをロードして、新しい現在の状態を確認できます。
上記のコードは、WorkFlowApplication インスタンスをインスタンス化します。
protected bool Execute(Activity process, Case @case, string transition) { WorkflowApplicationInstance インスタンス = null; using (var store = new DisposableStore()) { インスタンス = WorkflowApplication.GetInstance(@case.InstanceId, store.Store);
上記のコードには、ある状態から次の状態への遷移 (文字列遷移) を作成する意図があり、新しい状態を Case クラスに設定する必要もあります。
最終状態の前の状態からこれを実行したい場合、これは失敗します。例外なし。出力ウィンドウにログインしません。何もない。ちょうどその行
var trackerInstance = StateMachineStateTracker.LoadInstance(@case.InstanceId, wfApp.WorkflowDefinition, _connectionString);
null を返します。これは、最終状態にあるインスタンスで StateMachineStateTracker をロードできないという事実によるものですか (実際に最終状態に達するかどうかは不明です)。
誰でも問題について手がかりを持っていますか? これは私たちが忘れてしまった基本的なことだと感じています。
wcf - ステート マシン ワークフローの OperationContext (WF 4.5)
だから私が苦労しているのは、次のシナリオです。
xamlx ワークフロー サービスに DI (Autofac) を統合しようとしています。
このようなサービスは単なる WCF ホステッド サービスであるため、Autofac の WCF 統合実装を見て、WorkflowServiceHost(Factory) で使用できるように適応させることができると考えました。
そして、私はこれを行うことができましたが (現在の OperationContext に IExtension を配置して WCF 要求の新しい LifetimeScope を開始する InstanceContextInitializer を追加します)、単純なシーケンシャル ワークフローで正常にテストしましたが、これはステート マシン ワークフローでは機能しません!
そのワークフローの最初の状態では機能しますが、次の状態に遷移した後、OperationContext はなくなります。
私の質問は、似たようなことをしている人はいますか? xamlx ステート マシン ワークフロー サービスへの WCF 要求ごとに有効期間スコープを設定するには?
今のところ、コンテナから解決されたオブジェクトを何らかの形で制御するには、Activity ごとにライフタイム スコープを使用する必要があると思います。
state-machine - 複数の状態を含む状態遷移を実装する方法
これまでのところ、単純なステート マシンを扱う場合、ある状態から別の状態に遷移するときに、コンテキストが他の状態を通過する必要がある状況はありませんでした。つまり、たとえば、Running 、 Shutdown、およびDisabledの状態を持つエンティティがあり、 RunningからDisabledへの移行は機能的にShutdown状態を通過します。
問題は、適切なステート マシンの実装に関して、2 つ以上のステートが関与するこの種の遷移をどのように行うべきかということです。
よろしくお願いします
c - 複雑な状態遷移: ベスト プラクティス
私は組み込みのものを扱っており、ハードウェアを管理するソフトウェア モジュールをいくつか持っています。このモジュールには状態があり、状態遷移は複雑です。イベントに応じて、モジュールは状態から状態A
へB
、またはおそらくへと移行しC
ます。ただし、何らかの状態を終了するときに、ハードウェアを正しい状態に保つために、ハードウェアでいくつかのアクションを実行する必要があります。
かなり単純なモジュールの場合、次のような関数がいくつかあります。
明らかに、関数内のすべての状態に必要なすべてのアクションを保持する必要があり_state_on_off()
ます。別の状態に移動する必要がある場合は、呼び出すだけで_state_set(new_state)
、状態遷移は方向に関係なくスムーズに進みます。必要なすべてのアクションが実行されます。
ただし、単純な状況でのみ機能します。MY_STATE__B
状態との間に何か共通点があり、状態が からにMY_STATE__C
変更されたり、元に戻ったりするときに、短縮されたデストラクション/コンストラクションのみを実行する必要がある場合はどうなるでしょうか? しかし、他の状態 (たとえば、) に移動するときは、完全な破棄を実行する必要があります。MY_STATE__B
MY_STATE__C
MY_STATE__A
頭に浮かぶのはサブステートです。したがって、1 つの状態MY_STATE__BC
と、およびのようなサブ状態がMY_BC_SUBSTATE__B
ありMY_BC_SUBSTATE__C
ます。もちろん、 のような独自の機能があり_state_bc_on_off()
ます。これでもすでに苦痛ですが、もっと複雑なことを想像してみてください。
では、そのようなことのベストプラクティスは何ですか?
c# - コード アクティビティからステート マシンの現在の状態を取得する方法
Receive Send Reply アクティビティの一部として返すことができるように、ステート マシンの現在の状態を取得する方法について助けが必要です。
したがって、状態をトリガーするWCFメソッドがあります public string GetResults(int id) ワークフローで現在の状態を取得し、文字列として返す必要があります
私はここを見てきましたが、これにより州を出力に記録できますが、コードからこれにアクセスするにはどうすればよいですか。
ありがとう
persistence - stateless4j ベースのステート マシンで状態と遷移を保持するにはどうすればよいですか?
Stateless4j APIに基づくワークフロー管理システムのステート マシンの実装に取り組んでいます。ただし、Stateless4j で状態と遷移を永続化する効果的な方法を見つけることができません。
ユースケースの一部として、ユーザーがワークフローに戻るまで 3 ~ 4 日以上状態を維持する必要があります。また、複数のワークフローを同時に実行します。
Stateless4j ベースのステート マシン実装で状態を永続化するためのベスト プラクティスについての洞察を共有していただけますか?