gpt4 book ai didi

workflow-foundation-4 - 使用参数计划从外部 XAML 加载的子 DynamicActivity

转载 作者:行者123 更新时间:2023-12-04 05:56:02 25 4
gpt4 key购买 nike

场景 :
我正在实现一个父事件,该事件从外部源(数据库)执行其他事件,遵循这个 Ron Jacobs post .

这种方法有效,但在我的情况下有一些问题,因为 WorkflowInvoker 没有得到父扩展:

  • 对 child 禁用跟踪
  • 我的自定义数据共享扩展程序不起作用
  • 扩展可以根据主机而改变,所以我不能简单地再次添加新的。

  • 潜在解决方案 :
    而不是调用子 XAML,我正在安排它(我相信它会解决我的问题,对吧?)。
    CacheMetadata :加载 DynamicActivity从外部来源并调用 metadata.AddChild(_childActivity); .

    然后执行:
        protected override void Execute(NativeActivityContext context)
    {
    context.ScheduleActivity(_childActivity, OnActivityComplete);
    }

    它奏效了!下一步是将 In、Out 和 InOut 参数传递给 child 。

    问题 : 如何安排从外部 XAML 加载的子 DynamicActivity 具有 InArgument、OutArgument 和 InOutArgument 值

    我正在做的事情,但只为 OutArguments 工作。在 CacheMetadata我调用了我的方法 _childActivity.BindArguments
        public static void BindArguments(this DynamicActivity activity, IDictionary<string, Argument> argumentsToBind)
    {
    if (argumentsToBind == null)
    return;

    Type genericPropType, valueType, sourceArgumentType, vbReferenceType;
    Argument sourceArgument;
    foreach (var destinyArgument in activity.Properties)
    {
    if (!argumentsToBind.TryGetValue(destinyArgument.Name, out sourceArgument))
    continue;

    genericPropType = destinyArgument.Type.GetGenericTypeDefinition();
    if (genericPropType == typeof(InArgument<>))
    {
    destinyArgument.Value = new InArgument<string>("It worked! But I need the value from context which is unavaliable since I'm inside CacheMetadata");
    }
    else
    {
    valueType = destinyArgument.Type.GetGenericArguments()[0];
    sourceArgumentType = genericPropType.MakeGenericType(valueType);

    if (sourceArgument != null)
    {
    vbReferenceType = typeof(VisualBasicReference<>).MakeGenericType(valueType);

    object vbReference = Activator.CreateInstance(vbReferenceType,
    GetExpressionText(sourceArgument, sourceArgumentType));

    object referenceArgument = Activator.CreateInstance(sourceArgumentType, vbReference);

    destinyArgument.Value = referenceArgument;
    }
    }
    }
    }

    所以 ,我也需要传递 InArguments 和 InOutArguments,但我需要来自上下文的值,这是不可用的,因为我在 CacheMetadata 中。

    我试图设置 DynamicActivityProperty.ValueExecute方法。但它也不起作用。

    之后,我创立了 this page这可能会帮助您理解我的情况。

    最佳答案

    您是否考虑过将消息传递给子工作流程,而不是执行所有这些操作?托管其他工作流的工作流不是一个得到很好支持的领域(正如您所发现的)。相反,工作流向其他工作流发送消息似乎是一种更好的方法。当然,您不能共享跟踪和扩展。我确实想出了一种方法来支持子工作流中的跟踪,但它使用私有(private)反射。

    关于workflow-foundation-4 - 使用参数计划从外部 XAML 加载的子 DynamicActivity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9501330/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com