返回首页

{S0}本文的目的 显示,快速浏览,工作流程的基础和突出的基本知识我们应该知道在创建第一个有用的工作流应用程序, 突出的设计指导方针,以创建可重用的工作流应用程序。最后,品味的是通用的,任何有用的工作流程,通过一个示例项目文档工作流系统,从客户端应用程序管理应用程序使用数据库。工作流程的基础上,简要:我们可以看到,工作流程的基础上,仅仅作为一种工作的活动,可以收集通过特定目的的条件和规则。Workflow Foundation是不是如果循环块的其他块,如果它是实现这个简单的算法,将花费我们很多没有任何好处。使用底线工作流程的基础,简化了一个复杂的算法来简单的可视化编辑的,维护的工作流程,取代我的老设计,工作流程: 我用命令模式,在我的工作很多,作为一个请求封装在单个对象称为命令,即初始化参数,然后执行方法将被调用来检索结果,或做的具体任务,但我始终有一个共享的属性,信息和资源的问题,或者其他命令的结果(S),有些命令是等待,直到其他命令完成后,和其他人将开始从他人的终点,为了解决这个问题,我总是用一个调停人在大多数情况下是的CommandManager类,它有一个命令的集合,知道所有的执行顺序命令,并分享所有的参数,通过容器的范围,并在每个命令已命令经理的引用,因此,它可以访问所有其他命令的所有属性,很容易的,或设置任何其他命令或出客户端应用程序的财产。最后使设计好,我总是从CommandBase继承的所有命令抽象类给我合同的所有命令,这样的CommandManager执行和初始化所有儿童的命令。有趣的是,每次我尝试创建命令对象,我发现自己犯了同样的通用模式,并想知道是否有什么办法可以形象化为更好地利用这些库?有一次,我看到的顺序工作流活动的第一次,我说:"啊哈"这正是我想要的,命令(活动),有一个容器命令经理(SequentialWorkflowActivity),和所有的命令具有相同的接口或基类 (活动),和所有的命令可以得到命令经理的联络数据顺序工作流最后可视化快速发展的每一个东西,它是更好的可维护性一个伟大的东西。我印象中的工作流程的基础?确保每一个工作流程中的基础件事给我留下深刻的印象,但添加服务的理念(S)在运行时,然后使用这项服务,在工作流程中,通过引用服务使用WorkflowRuntime的对象,或通过特殊的公共方法G​​etService喜欢的CallExternalMethodActivity,HandleExternalEventActivity活动,它是奇妙的想法,因为简单,可以单独所有的抽象类和接口到单独的程序,然后使工作流程和核心应用参考大会,所以你增加了工作流程的可重用性的水平,因为工作流程编码对接口(S),但你可以在运行时注册任何具体的类,实现这个接口,可以整合推出精彩的供应商模式,在与2。NET奇妙的工作流程,通过在web.config中注册工作流程中的任何服务的基础,节(这个话题超出了这个简单的项目),一旦你了解如何使用,在工作​​流程的自定义服务,您将了解所有其他服务,包括"盒子"像WorkflowPersistenceService这样的服务,WorkflowSchedulerService,TrackingService,..基础知识,你应该知道,在开发,第一个实际应用,正如我所说,用一堆"的if else"语句的工作流程,不是个好主意所有,你应该知道你应该知道的有关工作流的最低限度的信息如何将参数传递到工作流程和检索参数,之后的工作流程?完成。??如何创建一个自定义活动,工作的具体任务。??内的工作流程如何使用定制的服务,这个服务和消费。??如何通过从主机应用程序的工作流程或工作流应用程序的数据通过工作流处理。我认为这是最起码的,你应该知道创建一个先进的工作有用的工作流应用程序的工作流程,您可能需要到现在,?使用WorkflowPersistenceService,并加载和卸载到数据库,??事务的范围内使用数据的一致性。??创建故障处理程序,在内部的工作流程发生错误情况下。苏,是有很大关系提及,工作流程,特别是如果你使用Asp.NET应用程序的工作流程 在web服务,或者你认为更新完成后,工作流简单的Windows窗体或在特定事件。但是,这并不是本文的目的。设计指导方针与工作流程的基础工作我尝试申请对象的工作流程,我已经写了我的技能,在使用前面向对象编程,使用工作流,但是我发现它是相当困难的使用工作流,我的代码没有任何准备,完全像我第一次尝试使用单位测试,测试"没有可测试的"应用程序我发现,我要通过依赖注入我的代码可测试构造函数注入和mockobjects现在使用的工作流程,你必须改变你的方式,在发展中国家,因此,而不是使用100%面向对象编程,你应该从具体对象行为服务类,使您的代码将更多的面向服务准备之前,你的代码,使用工作流的步骤: 基本3步骤1)独立的服务对象行为。2)提取这些服务接口(用户voisual stodio 5重构),因此所有您的服务,实现服务接口3)这些接口分开,单独大会考虑这个简单的例子假设你总是使用一类名为客户,这些属性编号,姓名,地址,这些方法添加(),更新(),删除(),连接(),注册(),注销(),..要使用工作流,你应该分开这个对象的状态和Identitylike,如ID,名称地址和移动的行为(方法,事件,..)的CustomerService实施ICustomerService。在这种情况下,您可以使用与你编写的代码很容易的工作流程。在源样本, 你会看到文档对象从IDocumentService,既继承他们用于描述整个文件的过程样板工程简介解决方案样本是公共对象的3个基本项目和其他2个项目接口。应用程序的想法是用户将与他的客户端应用程序创建一个文件,用户还可以更新他的文件,只要打开沙爹。然后用户将投入到工作流程的文件,然后根据文件属性,工作流会选择管理员(S),即授权批准这个文件,并将数据保存到数据库,并会等待,直到管理员完成循环。管理员(样本将无密码)登录屏幕后,将看到所有等着他的文件, 然后,他将批准或拒绝文档,因此,文件将被标记为核准或再次打开状态的用户,可以更新的文件,或者把它删除或重新再次提交的工作流程, 客户端应用程序示例{S1}创建文档内的主要形式

   private void btnCreateDocument_Click(object sender, EventArgs e)

        {

            if (ValidateForm())

            {

                Document _document = new Document();

                _document.Category = (Category)this.cmbCategory.SelectedItem;

                _document.Title = this.txtTitle.Text.Trim();

                _document.Description = this.txtDescription.Text.Trim();

                _document.Depositor = User.CurrentUser.UserName;

                _service.CreateDocument(_document);

                ConfirmSuccess();

            }

            else {

                MessageBox.Show("Please complete, the form's fields", "Validation, Error", MessageBoxButtons.OK

                           , MessageBoxIcon.Error);

            }

        }

IDocument服务类图文档数据库关系图文件服务类图的{C}管理中的应用程序{五}
        private void approveToolStripMenuItem_Click(object sender, EventArgs e)

        {

            _documentID = int.Parse(dgrdDocuments.CurrentRow.Cells["ID"].Value.ToString());

            DialogResult result = MessageBox.Show("Are you sure that you want to Approve this document", "confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

            Document doc = null;

            if (result == DialogResult.Yes)

            {

                doc = _service.GetDocumentByID(this._documentID);

                if (doc.Status != DocumentBaseLibrary.Status.InWorkflow)

                {

                    MessageBox.Show(string.Format("This document {0} is not in Workflow state", doc), "Error", MessageBoxButtons.OK

                        , MessageBoxIcon.Error);

                    return;

                }



                Approve(doc);

            }

        }

          private void Approve(Document doc)

        {

           DocumentWorkflowItem wfItem=_service.GetWorkflowItem(doc);

           

           // Get the type of the workflow

           Type type = typeof(DocumentWorkflow.DocumentWorkflow);



           // Start the workflow instance

           Guid id = wfItem.WorkflowID;

           try

           {

               WorkflowInstance inst = theWorkflowRuntime.GetWorkflow(id);

               inst.Load();

               this._service.RaiseApproveDocumentWorkflow(wfItem);

               

           }

           catch(Exception ex)

           {

               MessageBox.Show("The Document cannot be loaded. " + ex.ToString(),

                   "Administration", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

           }

        }

结论工作流程的基础上,采取完全关闭所有的复杂性负担应用程序规则和决策但是,以达到最大的可重用性,你必须准备通过创建服务的代码,独立抽象单独的服务 集会| Refky Wahib

回答

评论会员:游客 时间:2011/12/14
亲爱的RefkyWahib评论您的项目开发之一云请不要假设你的读者是在主题的所有专家,你的来信。能否请您说明运行示例所需的所有步骤,尤其是那些与数据库相关的吗?预先感谢。我也说同样的事情。请不要认为或假设所有读者评为程序员。你的人提交代码必须做的是想对初学者。请写在这样一种方式,所有的人可以按照你写的。第一需求。然后创建数据库的详细信息。如何启动项目,通过expaining创建这个项目的步骤。那么如何工作的。人会熟悉新的主题只能由他/她创建或复制相同的代码,调试,改变他的需求。请帮助。我认为这段代码是一个良好的开端。但甚至没有Dowloaded项目工作。所以,请帮助我们。其实我是狩猎世界自然基金会(WWF)的一个良好的工作样本。这使我这么dissapointing。能否请您告诉我们如何得到它的工作。你写下面给出的另一个任务的项目。我需要输入我的许可申请。然后,它已通过项目经理。PMS批准后,它传递给人力资源。如果下午拒绝了,我收到了邮件。再次对人力资源也一样。如果这两个批准邮件一个应该被发送到员工和下午和人力资源。请创建项目的帮助。和发送miilions它所有的解释与阅读该项目可十万亿其他样本够多了。森K.马修
papapsi
评论会员:游客 时间:2011/12/14
喜你需要做的是创建一个空数据库documentDB和workflowDB。然后,按照下列顺序运行SQL脚本(对documentDB数据库):_tbls.sql;_stps.sql和_views.sql您还需要改变两个项目中的app.config文件,确保他们引用您的SQLServer实例。我认为这是一个惊人的的例子,希望你看着办吧。SLS
tp2006
评论会员:游客 时间:2011/12/14
您好Refke,能否请你告诉我哪里是工作流DB?有4个文件的名称查询SqlPersistenceService_LogicSqlPersistenceService_SchemaTracking_LogicTracking_Schema在windows/framework/v3.0/sql/en...我创建了一个新鲜名称工作流程DBDB跑了上述4个脚本文件。它给我说的用户名"statepersistent的错误......"不列入存在,当我运行3个脚本和用户名"轨道......"不列入存在,当我运行的第一脚本。能否请你告诉我如何摆脱这个错误,以及如何建立工作流程DB?,djad|ElGuroProgramador:
您好,

与用户的工具,我已经创建了一个文件。
该文件创建成功,我可以看到在"工作流视图"。
状态"InWorkflow",类"购买"

现在我改变管理PRG 列表是空的。 工作流的工程?
帮助表示感谢。
您的应用程序是一个良好的示范与WF工作
评论会员:chuzon 时间:2011/12/14
我遇到了同样的错误可以每个人的答案
评论会员:?qasemt 时间:2011/12/14
您好
为什么UR应用程序歌厅这个错误
在61行frmMain的- GT; wr.StartRuntime()
"找不到存储过程'RetrieveNonblockingInstanceStateIds'。"

.................................................. ..........................{ BR}
评论会员:会员3232398 时间:2011/12/14
你需要指向正确的持久性数据库名称
在我而言,我刚跑下的脚本:
C:\ WINDOWS \ Microsoft.NET \框架\ V3.0 \ Windows Workflow Foundation的\ SQL \ EN

,以下是我给的连接字符串: 的connectionString ="数据源=(本地);初始目录= WorkflowPersistence; Trusted_Connection =真正的"
的ProviderName ="System.Data.SqlClient的"/ GT;

希望有所帮助。

约8年,我一直在微软技术领域。从传统的ASP,C#,ASP.NET VB,VC的ATL中,BizTalk,SHAREPOINT工作。 Curretnly工作作为净顾问@芝加哥
评论会员:。sameh_serag 时间:2011/12/14
请不要假设你的读者是在主题的所有专家,你的来信。
能否请您说明运行示例所需的所有步骤,尤其是那些与数据库相关的吗?
预先感谢。
评论会员:巴特Meirens 时间:2011/12/14
如果我创建一个文档,提交OT的工作流程,拒绝它,重新提交,并尝试批准,我得到这个异​​常:"工作流项,应= 1"

这是因为这种地位"InWorkflow"的文件ID的所有记录返回,包括已经拒绝

USP_Select_Document_Workflow为了克服这个问题,可以修改,所以它仅返回一个记录:

ALTER PROCEDURE [DBO]。[USP_Select_Document_Workflow]


@ document_id INT = NULL



SET ROWCOUNT的1
选择TRANSACTION_ID,document_id,document_approval_user,document_is_group,document_workflow_id,document_status LAST_UPDATE_DATE
从tbl_document_workflow
其中(document_status = N'InWorkflow")及(document_id document_id = @)
ORDER BY的TRANSACTION_ID倒序
SET ROWCOUNT 0

除此之外,你的文章是一个很好的参考,开始探索工作流持久性。

- 巴特
评论会员:SteveKean 时间:2011/12/14
生锈的创建从SQL DB和TXT文件。那么,在Visual Studio中管理项目创建的documentDB documentDB.mdf

然后双击并运行document_ *. SQL

然而,执行document_stps.sql抛出:

消息207,级别16,状态1,程序USP_Inser_Document,第23行
无效的列名称"document_category"。
消息207,级别16,状态1,程序USP_Inser_Document,44行
无效的列名称"document_category"。
消息207,级别16,状态1,程序USP_SELECT_LIST_tbl_document,6号线
无效的列名称"document_category"。
消息207,级别16,状态1,过程USP_Select_ALL_Document_Workflow_For_User,14号线
无效的列名称"document_category"。
消息207,级别16,状态1,过程USP_Select_ALL_Document_Workflow_For_User,行25
无效的列名称"document_category"。
消息207,级别16,状态1,过程USP_Select_Document_By_Deposetor_Status,10号线
无效的列名称"document_category"。
消息207,级别16,状态1,过程USP_Select_Document_By_ID,第12行
无效的列名称"document_category"。
消息207,级别16,状态1,过程USP_Select_InWorkflow_Document_Workflow_For_User,13号线
无效的列名称"document_category"。
消息207,级别16,状态1,过程USP_Select_InWorkflow_Document_Workflow_For_User,第24行
无效的列名称"document_category"。
消息207,级别16,状态1,程序USP_Update_Document,第28行
无效的列名称"document_category"。


的ASP / XML / VB / COM开发转向ASP / ADO / .NET'N C#爱好者

沙特阿拉伯宰赫兰
评论会员:SteveKean 时间:2011/12/14
OK,改名document_cate ...到document_category了过去的3个脚​​本。

WorkflowDB:运行*. SQL C:\ WINDOWS \ Microsoft.NET \框架\ V3.0 \ Windows Workflow Foundation的\ SQL \ EN对一个干净的workflowDB的文件... {七}


的ASP / XML / VB / COM开发转向ASP / ADO / .NET'N C#爱好者

宰赫兰,沙特阿拉伯
评论会员:RefkyWahib 时间:2011/12/14
你应该先运行存储过程脚本的创建表的脚本,

运行document_tbls.sql



运行document_stps.sql
我并没有提到它,因为它是很清楚的,

如果别人有任何问题,关于创建DB
我会修改文章,将增加本节。


*. TXT不是SQL脚本

它是数据样本,你可以把它手动

或创建自己的数据,或只是复制和粘贴在任何DataGrid的工具


Refky Wahib
高级程序员,学习和创新
中心
评论会员:Geovanny桑塔纳 时间:2011/12/14
当我点击登录页面上执行所有脚本后..
这是给我下面的错误

找不到存储过程'RetrieveNonblockingInstanceStateIds"

有没有名为RetrieveNonblockingInstanceStateIds目前在你的脚本程序。
Manish中号Meshram
评论会员:RefkyWahib 时间:2011/12/14
我给这个错误时,编译的解决方案:

"System.Reflection.TargetInvocationException",而调用的验证器
"System.Workflow.ComponentModel.Compiler.CompositeActivityValidator'
活动"DocumentWorkflow":
调用的目标发生了异常。

请帮助我。



Geovanny桑塔纳
软件开发
评论会员:Geovanny桑塔纳 时间:2011/12/14
亲爱的Geovanny
我没有看到这个特定的错误,在此工作流的应用程序示例

但我有关similer错误,
的一些想法对我来说,它看起来一样,版本不兼容。NET库,这个错误

首先,你应该检查是否可以运行任何其他的样品或没有?
你应该打开不同的项目从微软http://msdn2.microsoft.com/en-us/library/ms741723.aspx
介绍的样品
因为可能你目前的版本还不稳定,或没有正确配置
或不正确的升级

我面临几个困难,因为我已经升级,从B NET3释放,但没有升级的Visual Studio工作流程延伸释放以及,,所以我会给你我的环境,你看看你是否有相同的环境

1)你应该有。NET3候选发布在您的计算机安装

2)确保您使用正确的版本的Visual Studio扩展的Windows Workflow

你应该看到没有任何错误
工作流设计器
3)我用的SQL Server 2000

所以检查这些东西,作为第一步
好运



Refky Wahib
高级程序员,学习和创新
中心"
评论会员:xanth 时间:2011/12/14
感谢。没有错误。
评论会员:xanth 时间:2011/12/14
的workflowDB在哪里?
评论会员:RefkyWahib 时间:2011/12/14
C:\ WINDOWS \ Microsoft.NET \框架\ V3.0 \ Windows Workflow Foundation的\ SQL \ EN
评论会员:Trbos斯托 时间:2011/12/14

好运

Refky Wahib
高级程序员,学习和创新
中心
评论会员:NickHD 时间:2011/12/14
使用的工具,以使工作流程图表的名称是什么?
评论会员:RefkyWahib 时间:2011/12/14
,我相信。