代码之家  ›  专栏  ›  技术社区  ›  Jeff LaFay

如何编写包含“body block”的自定义工作流4代码活动?

  •  3
  • Jeff LaFay  · 技术社区  · 15 年前

    这有可能吗?我知道这是给微软的,因为他们有WF活动包,但我不知道是怎么做到的。如果没有太多的麻烦和/或耗时的话,能用身体模块来插入其他活动、按钮等,那就太好了。

    3 回复  |  直到 15 年前
        1
  •  3
  •   Will    15 年前

    如果你遵循一些规则就足够容易了。下面是一个有孩子的NativeActivity示例:

    [Designer(typeof(MyActivityDesigner)), ContentProperty("Child")]
    public sealed class MyActivity : 
        NativeActivity, IActivityTemplateFactory
    {
        // this "activity delegate" holds our child activity
        public ActivityAction Child { get; set; }
    
        // may be necessary to do this
        protected override void 
            CacheMetadata(NativeActivityMetadata metadata)
        {
            metadata.AddDelegate(Child);
        }
    
        protected override void 
            Execute(NativeActivityContext context)
        {
            // do some work here, then
            context.ScheduleAction(Child);
        }
    
        // better to use a template factory than a constructor to do this!
        Activity IActivityTemplateFactory
            .Create(System.Windows.DependencyObject target)
        {
            return new MyActivity
            {
                // HAVE to have this set, or it fails in the designer!
                Child = new ActivityAction()
            };
        }
    }
    

    注意:我们使用活动委托类型来容纳我们的孩子。其次,我们实现IActivityTemplateFactory来为设计器配置活动。这样做总是比在构造函数中设置内容更好/更稳定。我们将绑定到委托的属性,因此必须设置一个实例;否则绑定将失败。

    当我们执行时,你所要做的就是在适当的时候安排你的孩子并返回。当然,你不应该阻止。

    然后,在设计器中,您将绑定到这样的孩子:

    <sap:WorkflowItemPresenter
        HintText="Add children here!"
        Item="{Binding Path=ModelItem.Child.Handler}" />
    
        2
  •  2
  •   Gobie74    15 年前

    bruce bukovics的.net 4书中的pro-wf:windows工作流也有很多例子。你可能想看看。

        3
  •  0
  •   Maurice    15 年前

    您需要从NativeActivity开始,而不是从CodeActivity开始。NativeActivity允许您通过其执行上下文来安排子活动。NativeActivity没有模板,您只需创建一个类并从NativeActivity派生。