返回首页

简介
Windows Workflow Foundation中的关键技术之一在。NET框架版本3.0(以前称为WinFX)。有大量使用,如C#,VB.NET等语言在世界自然基金会的样本作为一个C的球迷,我试图构建一个示例使用的C / CLI。没有在C / CLI建筑应用的支持,使用Visual StudioWWF.Project类型的扩展名只出现在Visual C#。因此,对于构建应用程序,您需要做的手工几乎所有。这些都是重要的发展世界自然基金会时,要记住的要点在C / CLI中的应用。缺乏项目类型,迅速建立一个模板 不支持调试的XOML等缺乏设计的工作流创作的时间支持。
如果你愿意住在这些事情可以做,世界自然基金会在C / CLI应用程序的开发。可能有一些情况下,它可能是有益的做在C / CLI的发展。你有一些你想在C现有的代码基础工作流程启用。您可以创建一个C / CLI活动库和插件到工作流运行时。活动库中,您可以使用IJW功能的C / CLI调用本机代码。其次的C / CLI更快排出优化的IL代码,你甚至可以考虑工作流程的托管环境。开始在世界自然基金会的工作流程发展的先决条件。NET 3.0框架的Windows Workflow Foundation运行时组件的Visual Studio 2005中世界自然基金会的扩展。让我们来讨论工作流应用开发的一些关键概念我们深入研究代码之前。世界自然基金会是什么?
组成的工具,发动机和一个模型,可以被认为是世界自然基金会构建工作流应用程序。它不是一个最终用户的产品,它是一个软件开发工具。这逸岸之间的BizTalk Server和世界自然基金会的核心区别。而世界自然基金会(WWF)是一个运行时,开发人员的BizTalk服务器产品需要杠杆上。有许多行业公认的工作流框架背后的标准。WFMC是这样一个标准(www.wfmc.org)。 BPEL是另一回事。视窗工作流程的基础模式你有住高达如果你是严重的一个标准根据世界自然基金会的工作流开发。在世界自然基金会(WWF)工作流的定义包括活动。主要有两种类型的工作流程,在世界自然基金会。用于定义,业务流程的顺序工作流状态机用于人类的工作流程
工作流程,可长期运行。这种支持的形式来持久化服务等运行的许多方面可定制通过开发我们自己的的定制服务。如果你不喜欢的e.g持久性服务,你想编写一个访问的状态MDB,那么你可以写一个自定义持久性服务,将其插入工作流运行时。
一旦你已经决定的工作流类型的情景,第二点是发展构成工作流的活动。有框活动,您可以开发自定义活动。活动可单一或复合。复合活动本身包括个人的活动。工作流可以被看作是一个复合活动。这可以让你调用一个工作流的工作流。如果你想,这可能发生打电话请假流程中的一个财务过程。
制订工作流程,以在你buisnesses的模型过程的一个真正的好处是简化复杂的可视化建模和therby提供的能力,延长them.By使得它的声明和场景由expliict,工作流的定义创建的情况下正确的抽象。构建顺序工作流
{S0}
让我们构造一个简单的工作流程,只有两个组成活动。 THW的工作流模型构造与C#的顺序工作流控制台应用程序项目类型。在世界自然基金会(WWF),您可以创建工作流可以使用标记或强制用任何CLR语言。类似WPF中的XAML标记规范,并为设计来区分,它实际上是一个工作流定义,而比图形应用程序扩展的XOML。研究项目,并了解工作流运行时调用帮助我构建一个项目使用的C / CLI。如果您构建一个顺序工作流控制台应用程序项目C#中。有两个生成的主类。一个是流类这是来自SequentialWorkflowActivity。当您将从工具箱中的成员变量的下降CodeActivities是建立在这种类型CodeActivity的类。其次Actvities事件挂钩,这样,当运行时用于启动的工作流程和活动被触发,水槽函数被调用。第二个方面是调用工作流运行时和壳牌我们在使用标记构建的工作流创建一个实例。壳也开始由此产生的工作流实例。创建名为WorkflowApp.CPP一个C / CLI控制台应用程序。你会提供了一个主要功能,如预期。第一部分是构建工作流类。


//The workflow 

ref class Workflow1: SequentialWorkflowActivity

{

public:    

    Workflow1()

    {

        codeActivity1 = gcnew CodeActivity();

        codeActivity2 = gcnew CodeActivity();

        

        this->Activities->Add(codeActivity1);

        this->Activities->Add(codeActivity2);



        codeActivity1->ExecuteCode += gcnew EventHandler(

            this, &Workflow1::codeActivity1_ExecuteCode);

        codeActivity2->ExecuteCode += gcnew EventHandler(

            this, &Workflow1::codeActivity2_ExecuteCode);

    }

private:

    void codeActivity1_ExecuteCode(System::Object^ sender, 

                                   EventArgs^ e)

    {

        Console::Write("Hello");



    }

        

    void codeActivity2_ExecuteCode(System::Object^ sender, 

                                   EventArgs^ e)

    {

        Console::WriteLine("World");

    }



    CodeActivity^ codeActivity1;

    CodeActivity^ codeActivity2;



};

该代码是不言而喻的。工作流类由两活动类型CodeActivity。在构造函数中,我们创建和钩到水槽功能的ExecuteCode事件。工作流类从SequentialWorkflowActivity导出。现在来的主要功能。{C}
下一步将创建工作流实例启动它。为此,我们要创建一个工作流实例运行第一。您需要创建的运行时实例,只有一次在应用的生命周期。下一步,我们使用的工作流运行时的CreateWorkflow的功能创建我们的工作流程的一个实例。overloaded.You CreateWorkflow的功能在很大程度上可以创建它从一个类型,你可以创建一个XML标记在XAML格式等,在这里,我们使用typeid操作类型关联我们已经定义的工作流程。
当你运行这个开始,工作流程和每项活动逐一执行,你会得到预期的输出。请注意使用控制台:对最终结果的ReadLine是等待,使工作流可以完成执行。更严重的实施将使用事件对象和使用等待功能之一。

System::Threading::AutoResetEvent^ waitHandle = 

    gcnew System::Threading::AutoResetEvent(false); 

...



workflowInstance->Start();

waitHandle->WaitOne();

开发自定义活动
下一步,我们将看到如何开发自定义活动。对于这一点,你所要做的就是写从活动派生的类并重写执行虚拟fuction。该代码是简单明了。

ref class CustomActivity : System::Workflow::ComponentModel

    ::Activity

{

protected:

    virtual ActivityExecutionStatus Execute(

       ActivityExecutionContext^ executionContext) override  

    {

        Console::WriteLine("Custom activity executed");

        return ActivityExecutionStatus::Closed;

    }

};


注意返回ty​​pe.It类型ActivityExecutionStatus。如果一切都如预期,我们返回ActivityExecutionStatus::休息。但是,如果由于某种原因,我们要停止工作流程,我们可以提供一个返回状态ActivityExecutionStatus:取消停止工作流进一步执行。
为了堵塞所有你所要做的的是在自定义活动添加到工作流类。你不必钩事件接收器。结论
正如你可以看到在C / CLI的发展,是有点困难,因为你缺乏支持IDE和模板的代码生成。不过,如果你了解如何件适合togther,你可以在任何CLR兼容的语言开发的工作流应用程序。

回答

评论会员:Bjornar 时间:2011/12/07
的缩写,是WF的不是世界自然基金会,世界野生动物基金会
评论会员:Mattman206 时间:2011/12/07
或"世界摔跤联合会":P

巴特:你看看我,我是一个研究生。我30岁,我去年600美元。
玛吉:巴特,不要让GRAD学生的乐趣。他们刚刚取得了可怕的生活选择