1

単純なプロトタイプの場合、ワークフロー ファイルを表示し、実際にどのステップにいるかを示します。

ここでサンプルを見つけました: http://msdn.microsoft.com/en-us/library/ee624139.aspx

これは、私が必要とするほとんどのことを行います。

このサンプルでは、​​すべてのアクションが別のアクションを待機することはありません。そこで、非常にダミーのアクティビティを作成しました。

    public class WaitForNextCall :NativeActivity
{
    public const String WaitBookmark = "WaitingStep";


    #region Overrides of NativeActivity

    /// <summary>
    /// When implemented in a derived class, runs the activity’s execution logic.
    /// </summary>
    /// <param name="context">The execution context in which the activity executes.</param>
    protected override void Execute(NativeActivityContext context)
    {
        context.CreateBookmark(WaitBookmark);
    }

    protected override bool CanInduceIdle
    {
        get
        {
            return true;
        }
    }
    #endregion
}

これはうまくいくようです。そこから、ワークフローをコード内で直接作成していました。

            return new Sequence()
                   {
                       Activities =
                           {
                               new WaitForNextCall(){DisplayName = "Step one"},
                               new WaitForNextCall(){DisplayName = "Step Two"},
                               new WaitForNextCall(){DisplayName = "Step Three"},
                               new WaitForNextCall(){DisplayName = "Step Four"}
                           }
                   };

唯一の問題は、ワークフロー デザイナーに "Sequence" 要素しか表示されないことです。

そこで、まったく同じことを記述する xaml ファイルを作成し、次のようにロードします。

return ActivityXamlServices.Load("Workflows/WorkflowSample.xaml") as DynamicActivity;

しかし、私はこの例外を得ました:

    System.Xaml.XamlObjectWriterException occurred
  Message=Impossible de créer le type inconnu '{clr-MyTestNameSpace.UserInterface.WorkflowItems}WaitForNextCall'.
  Source=System.Xaml
  LineNumber=0
  LinePosition=0
  StackTrace:
       à System.Xaml.XamlObjectWriter.WriteStartObject(XamlType xamlType)
       à System.Xaml.XamlWriter.WriteNode(XamlReader reader)
       [...] 

ファイルが存在することを再確認しました(ファイルが正しく指定されていない場合、別のエラーメッセージが表示されます)。しかし、数行下で使用されている「WaitFornextCall」クラスが見つかりません。

私は少し絶望的です。ワークフローの基盤がどのように機能するかを理解しようとしていますが、今のところ少し難しいです:(

どんなアドバイスでも大歓迎です

編集:ファイルを読み取るためにこれを試しました。コンストラクターに例外はありませんが、理由がわかりません。使用している一部のライブラリ (ActiPro) がロード後に機能しなくなったようです:

        XamlReader reader = new XamlXmlReader("Workflows/WorkflowSample.xaml", new XamlXmlReaderSettings(){LocalAssembly =  System.Reflection.Assembly.GetExecutingAssembly()});

        return ActivityXamlServices.Load(reader);
4

2 に答える 2

2

解決策を見つけました!!!!

ええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええ

実際、問題は、ワークフローがカスタム アクティビティと同じプロジェクトにあったことです。Visual Studio は、デザイナーがこのアクティビティを見つけたアセンブリを示しませんが、ファイルを読み取ると、これは独立したリーダーであり、現在のアセンブリを認識しません。

したがって、2 つの異なるプロジェクトがあり、1 つはワークフローを含み、もう 1 つはアクティビティを含み、次に私のワークフローは、チャートを見つけることができるアセンブリを指定します。このように、簡単に WorkflowDesigner.Load("myWorkflowHere.xaml"); を実行できます。問題なく!

于 2011-04-14T10:35:42.130 に答える
0

"Workflows/WorkflowSample.xaml" は、以前のバージョンのコードに対してビルドされた可能性があります。

それを削除し、ソリューションを再構築してから、再作成してください。

于 2011-04-12T15:19:49.777 に答える