2012-03-20 12 views
1

Ocean Workstep派生クラスが一度プロダクションにリリースされると(クライアントによって使用される)、その名前、名前空間、アセンブリ名は、将来の更新のために効果的にロックされるようです下位互換性)。Ocean Workstepの派生クラスのリファクタリング/名前の変更

Petrelプロジェクトを保存すると、バイナリファイルClasses.ptd内にワークステップ参照がフルタイプ名(名前空間、クラス、強力なアセンブリ名)として保存されます。ロード中に、正確なタイプ名(アセンブリバージョンが無視されるように思われる)を解決できない場合、ワークステップはワークフローエディタで「ワークステップが使用できません」と表示されます。

私たちが遭遇した他のバイナリシリアル化の例では、PetrelはPetrelSystem.ProjectSerializationServiceで登録されたSerializationBinderを使用しますが、Workstepインスタンスではそうではありません。

Workstepクラス/名前空間/アセンブリの名前変更を容易にする他の方法はありますか?

なぜこの動作が文書化されていないのですか?私たちは何か誤解しましたか?

答えて

3

この問題は実際にOcean 2012.1 APIで修正されます。ワークステップ参照にバージョン番号は含まれなくなります。ワークステップとプロセスシリアル化の両方がクリーンアップされます。バージョン番号は直列化されず(非直列化では使用されません)、型名の代わりにUniqueIdを使用できます。

ここには、対象に関する2012.1海洋リリースノートの抜粋があります。

プロセスおよびワークステップ固有のID 名前空間:海を介して作成Slb.Ocean.Petrel.Workflow

プロセスとworksteps今まで適切な識別子を持っていませんでした。それらは、例えば: - プラグインアセンブリのバージョン番号が増加した(例えば、新しいプラグインのインストール)場合など、識別子が変更できるバージョン番号を含むフルタイプ名によって識別されました。 - プロセス/ワークステップクラスを新しいアセンブリに移動しました。 - プロセス/ workstepクラスの名前空間が変更されました。 これは、お気に入りツリーのプロセス名の代わりに「リンク切れ」が表示されたり、ワークフローエディタで「作業段階が利用できない」と表示されるなど、Petrelに問題が発生する可能性があります。

これを解決するために、Oceanはプロセスおよびワークステップ識別子からバージョン番号を削除し、カスタムプロセスおよびワークステップのユーザー定義識別子をサポートする新しいAPIを提供しています。オーシャンを通じて作成されたプロセス/ワークステップは、一意の識別子を実装する必要があります。 workstepsの一意の識別子を定義するためにWorkstep.UniqueId - プロセス の一意の識別子を定義するためにProcess.UniqueId - :

を参照してください。 新しいAPIは、既にシリアライズされたプロセス/ワークステップの下位互換性のサポートと、シリアライゼーションロジックのいくつかの変更を提供します。レガシープロジェクトが開かれているとき、古いスタイルのIDは、デシリアライズ中に自動的に新しいIDに置き換えられます。

よろしく、 Gaelle

+0

どうもありがとう - 非常に便利! –

関連する問題