我创建了一个Native活动,我需要在Bookmark Resume调用上调用另一个活动。我的第一个活动名称是“Apply”,第二个活动叫做“Approve”。在Apply中,我创建了一个属性,如下所示。
public Approve Approve
{
get;
set;
}
然后我已经注册了CacheMetadata,如下所示。
metadata.AddImplementationChild(this.Approve);
base.CacheMetadata(metadata);
然后是“OnResumeBookmark”方法,我正在安排它。
this.Approve = new Approve();
this.Approve.ID = context.GetValue(this.ID);
OutArgument<string> res = this.Approve.Result;
context.ScheduleActivity(this.Approve);
但是当它运行时,它会给我以下错误。
在处理元数据时,提供的活动不是此工作流定义的一部分。名为“Approve”的有问题的活动由名为“Apply”的活动提供。
你能帮我解决一下吗?
答案 0 :(得分:0)
活动开发有两种方法:
您的问题似乎正在处理私人实施策略,但我会在下面提供以下两种方式的示例代码。
私人执行方式
在此方法中,Apply
活动负责设置有关Approve
子活动的所有内容。我们使用WF ID
对象连接Variable<string>
属性。另外,我们告知WF运行时Approve
活动可以安排Apply
活动,就像您在代码示例中一样。
public class Approve : CodeActivity
{
public InArgument<string> Something
{
get; set;
}
protected override void Execute(CodeActivityContext context)
{
var message = string.Format("Approval of {0} in process... please wait.", this.Something.Get(context));
Console.WriteLine(message);
}
}
public class Apply : NativeActivity
{
private readonly Approve approve;
private readonly Variable<string> thingToApproveVar;
public Apply()
{
this.thingToApproveVar = new Variable<string>();
this.approve = new Approve();
this.approve.Something = new InArgument<string>(this.thingToApproveVar);
}
protected override void CacheMetadata(NativeActivityMetadata metadata)
{
metadata.AddImplementationVariable(this.thingToApproveVar);
metadata.AddImplementationChild(this.approve);
}
protected override void Execute(NativeActivityContext context)
{
Console.WriteLine("Approving...");
this.thingToApproveVar.Set(context, "Hello");
context.ScheduleActivity(this.approve, this.OnApprovalCompleted);
}
private void OnApprovalCompleted(NativeActivityContext activityContext, ActivityInstance instance)
{
Console.WriteLine("Apply succeeded!");
}
}
公共实施方式
开发活动的第二种方法是定义Apply
活动,以便只安排Approve
活动。 CacheMetadata
方法需要对此进行轻微调整,方法是使用AddChild
方法而不是AddImplementationChild
方法。
public class Apply : NativeActivity
{
public Apply()
{
}
public Approve Approve { get; set; }
protected override void CacheMetadata(NativeActivityMetadata metadata)
{
metadata.AddChild(this.Approve);
}
protected override void Execute(NativeActivityContext context)
{
context.ScheduleActivity(this.Approve, this.OnApprovalCompleted);
}
private void OnApprovalCompleted(NativeActivityContext activityContext, ActivityInstance instance)
{
Console.WriteLine("Apply succeeded!");
}
}
要执行&#34;公共实施方式&#34;,它将如下所示:
class Program
{
static void Main(string[] args)
{
WorkflowInvoker.Invoke(new Sequence()
{
Activities =
{
new Apply()
{
Approve = new Approve()
{
Something = "Hello World!"
}
}
}
});
}
}