【问题标题】:Question on workflow Bookmarks关于工作流书签的问题
【发布时间】:2011-10-29 17:34:55
【问题描述】:

我想知道如何在工作流书签中传递多个输入参数。我有这个代码

   public sealed class CodeActivity1 : NativeActivity<String>
{
    [RequiredArgument]
    public InArgument<string> BookmarkName { get; set; }

    protected override void Execute(NativeActivityContext context)
    {

        context.CreateBookmark(BookmarkName.Get(context),
            new BookmarkCallback(OnResumeBookmark));
    }

    // NativeActivity derived activities that do asynchronous operations by calling 
    // one of the CreateBookmark overloads defined on System.Activities.NativeActivityContext 

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

    public void OnResumeBookmark(NativeActivityContext context, Bookmark bookmark, object obj)
    {
        Result.Set(context, (string)obj);
    }
}

当我像 app.ResumeBookmark("Test", "inputTest"); 一样恢复它时。但是,如果我有例如 2 个输出参数,例如

        public InArgument<string> BookmarkName { get; set; }
        public OutArgument<string> Test1 {get; set;}
        public OutArgument<string> Test2 {get; set;}

如何使用 app.ResumeBookmark() 调用此书签?并从外部设置 2 个 OutArguments?像 app.ResumeBookmark("Test","Inputtest1","Inputtest2")? 谢谢你的时间

【问题讨论】:

    标签: c# workflow workflow-foundation workflow-foundation-4 workflow-activity


    【解决方案1】:

    您可以尝试以下方法:

        public void OnResumeBookmark(NativeActivityContext context, Bookmark bookmark, object obj)    {        
            Test t = obj as Text;
            context.SetValue(this.Test1, t.S1);    
            context.SetValue(this.Test2, t.S2);    
        }
    

    【讨论】:

    • 如果我有一个 DateTime 类型的 Test3,public OutArgument Test3 { get;放; },我正在尝试使用 Test3.Set(context, ((NewDates)obj).StartDate) 将其投射到内部,并且出现错误无法将“System.String”类型的对象转换为“NewDates”类型。请记住,NewDates.StartDate 也是 DateTime 类型。你能帮我吗?
    【解决方案2】:

    您可以将所需的任何对象传递给 ResumeBookmark() 调用。因此,只需创建一个具有三个属性的类并使用该类的一个实例。

    【讨论】:

    • 嗯好的,但是我怎样才能访问 Activity 中的这个对象才能访问实例的成员呢?
    • 它是作为对象传递给 OnResumeBookmark() 的最后一个参数。只需将其转换为正确的类型即可。
    • 如果有一个包含 2 个成员字符串 S1 和 S2 的类 Test。我将它传递到活动 app.ResumeBookmark(Test); 中。在 Activity 内部,我如何设置 OutArgument Test1 的值为 S1?。
    • Test1.Set(context, ((Test)obj).S1);
    • 如果我有一个 DateTime 类型的 Test3,public OutArgument Test3 { get;放; },我正在尝试使用 Test3.Set(context, ((NewDates)obj).StartDate) 将其投射到内部,并且出现错误无法将“System.String”类型的对象转换为“NewDates”类型。请记住,NewDates.StartDate 也是 DateTime 类型。你能帮我吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多