第八章 启动与执行业务流程(一)

本文介绍了一个业务流程管理系统中如何进一步细化已定义的业务流程,包括任务分配、权限设置等内容。通过使用特定的Web程序实现对业务流程定义的完善,确保流程能够顺利执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

8.1 对业务过程定义的细化  

    经过前七章所讨论的各项准备工作,定义和执行审批业务流程的条件已基本具备。在执行一项审批业务之前,首先是使用工作流图形工具定义业务过程。

    回忆一下第五章讨论的业务过程图形的定义过程:如图8.1所示,首先在工作流图形界面绘制业务过程,包括代表业务环节的任务节点与代表过程走向的迁移(有向线段)等,在绘制过程中,右键点击任务节点可以编辑任务名称。

    在过程图形绘制完成后可以点击菜单命令保存业务过程。在输入业务名称、选择业务办理过程中要编辑和处理的业务数据表之后,点击“保存流程”按钮,系统将分别保存业务名称、关联的各节点任务名称以及迁移走向等到过程定义表、任务定义表以及迁移表中。

 

图8.1 定义业务过程

 

    分析以上过程可以看出,业务流程的定义并不完整,如各任务环节由谁完成、不同任务对业务数据的编辑浏览权限等还没有定义。因此,在发起和执行业务之前还需要进一步细化业务过程定义。下面将讨论的程序就是要完成对业务过程的细化。当然,这部分细化工作也完全可以在工作流定义工具中统一完成。

    细化业务过程定义的各Web程序如图8.2所示。在完成各任务节点的细化定义,并设置业务过程定义为“已完成”之后,业务过程的定义才真正结束,至此就可以发起和执行具体的审批业务了。

 

图8.2 细化业务过程定义

8.1.1 UpdateProcessDefinition.aspx文件代码

    ......

    <form id="Form1" method="post" runat="server">
      <table cellSpacing="0" cellPadding="0" width="100%" align="center" border="0">
        <tr><td style="FONT-SIZE: 16px" align="center">业务流程定义</td></tr>
        <tr height="50">
          <td align="right"><span id="Message" style="FONT-SIZE: 11pt; FONT-FAMILY: Arial"

              runat="server" MaintainState="false"></span>&nbsp;</td>
        </tr>
        <tr>
           <td><asp:datagrid id="DataGrid1" runat="server" AllowPaging="True" Width="100%"

                    DataKeyField="ProcessID" HeaderStyle-HorizontalAlign="Center"

                     >
                 <ItemStyle Font-Size="13px" HorizontalAlign="Center" Height="28px"

                      VerticalAlign="Bottom"></ItemStyle>
                 <HeaderStyle Font-Size="16px" HorizontalAlign="Center" Height="30px"

                      VerticalAlign="Middle" BackColor="#EEEEEE"></HeaderStyle>
                 <Columns>
                   <asp:HyperLinkColumn DataNavigateUrlField="ProcessID"

                        DataNavigateUrlFormatString="UpdateTaskDefinitionList.aspx?id={0}"

                         DataTextField="ProcessID" HeaderText="业务流程编号">

                   </asp:HyperLinkColumn>
                   <asp:BoundColumn DataField="ProcessName" HeaderText="业务流程名称">

                   </asp:BoundColumn>
                   <asp:BoundColumn DataField="Alias" ReadOnly="True" HeaderText="关联业务表">

                   </asp:BoundColumn>
                   <asp:BoundColumn DataField="task_name" ReadOnly="True"

                         HeaderText="开始任务名称"></asp:BoundColumn>
                   <asp:TemplateColumn HeaderText="是否已完成任务定义">
                     <ItemTemplate>
                       <asp:Label id="Label1" runat="server">
                           <%# DataBinder.eval_r(Container.DataItem,"completeddefine") %>
                       </asp:Label>
                     </ItemTemplate>
                     <EditItemTemplate>
                       <asp:DropDownList id="DropDownList1" runat="server">
                         <asp:ListItem Value="N">未完成</asp:ListItem>
                         <asp:ListItem Value="Y">已完成</asp:ListItem>
                       </asp:DropDownList>
                     </EditItemTemplate>
                   </asp:TemplateColumn>
                   <asp:EditCommandColumn ButtonType="LinkButton" UpdateText="更新"

                         CancelText="取消" EditText="编辑"></asp:EditCommandColumn>
                   <asp:ButtonColumn Text="删除" CommandName="Delete"></asp:ButtonColumn>
                 </Columns>
                 <PagerStyle Font-Size="9pt" HorizontalAlign="Right" ForeColor="#3366FF"

                       Mode="NumericPages"></PagerStyle>
              </asp:datagrid></td>
           </tr>
        </table>
    </form>

    ......

    UpdateProcessDefinition.aspx.cs文件代码

    ......

    using System.Text.RegularExpressions;

    using DataAccess;
    using WFEngine;

    namespace workflow.admin
    {
       public class UpdateProcessDefinition : System.Web.UI.Page
       {
          protected System.Web.UI.WebControls.DataGrid DataGrid1;
          protected System.Web.UI.HtmlControls.HtmlGenericControl Message;
 
          private void Page_Load(object sender, System.EventArgs e)
          {
            if(! IsPostBack)
            {
               //验证用户是否登录
               if(Session["userid"] == null)
                    Response.Redirect("./Message.aspx");
               BindGrid();
            }
            Message.InnerHtml="";
          }

          void BindGrid()
          {
             ProcessDefinitionClass processdef=new ProcessDefinitionClass();

             //获取图形定义工具所定义的业务过程
             DataSet ds=processdef.GetCompleteProcessDefinitions();
             DataGrid1.DataSource=ds;
             DataGrid1.DataBind();
          }

          private void DataGrid1_EditCommand(object source,

                System.Web.UI.WebControls.DataGridCommandEventArgs e)
          {
             DataGrid1.EditItemIndex=e.Item.ItemIndex;
             BindGrid();
          }

          private void DataGrid1_CancelCommand(object source,

                System.Web.UI.WebControls.DataGridCommandEventArgs e)
          {
             DataGrid1.EditItemIndex=-1;
             BindGrid();
          }

          private void DataGrid1_UpdateCommand(object source,

                System.Web.UI.WebControls.DataGridCommandEventArgs e)
          {
             TextBox tx=(TextBox)e.Item.Cells[1].Controls[0];
             if(tx.Text.Trim() == "")
             {
                Message.InnerHtml="流程名称不能为空!";
                return;
             }
             string processName=tx.Text.Trim();
             string processID=DataGrid1.DataKeys[e.Item.ItemIndex].ToString();
             string defcompleted=

                     ((DropDownList)e.Item.FindControl("DropDownList1")).SelectedValue;
             ProcessDefinitionClass processdef=new ProcessDefinitionClass();
             if(! processdef.UpdateProcessDefinition(processName,defcompleted,processID))
             {
                Message.InnerHtml=processdef.ProcessErrDes;
                return;
             }
             DataGrid1.EditItemIndex=-1;
             BindGrid();
          }

          private void DataGrid1_PageIndexChanged(object source,

                System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
          {
              DataGrid1.CurrentPageIndex = e.NewPageIndex;
              BindGrid();
          }

          private void DataGrid1_ItemDataBound(object sender,

                System.Web.UI.WebControls.DataGridItemEventArgs e)
          {
             if(e.Item.ItemType == ListItemType.Item

                   ||e.Item.ItemType == ListItemType.AlternatingItem)
             {
                LinkButton btn = (LinkButton)(e.Item.Cells[6].Controls[0]);
                btn.Attributes.Add("onClick","JavaScript:return confirm('确定删除吗?')");
             }
             if(e.Item.ItemType == ListItemType.EditItem)
             {
                DropDownList defcompleted=(DropDownList)e.Item.FindControl("DropDownList1");

                //根据业务过程定义表的字段值(过程定义是否完成)设置控件的默认值
                if(DataBinder.eval_r(e.Item.DataItem,"DefineCompleted")!= DBNull.Value)
                    defcompleted.SelectedValue=

                         Convert.ToString(DataBinder.eval_r(e.Item.DataItem,"DefineCompleted"));
                defcompleted.Visible=true;
             }
          }

          private void DataGrid1_DeleteCommand(object source,

                System.Web.UI.WebControls.DataGridCommandEventArgs e)
          {
            string processID=DataGrid1.DataKeys[e.Item.ItemIndex].ToString();
            ProcessInstanceClass processIns=new ProcessInstanceClass();
            if(processIns.IsProcessInstantiated(processID))
            {
              Response.Write("<script>window.alert('流程已经被实例化,不可删除!') </script>");
              return;
            }
            ProcessDefinitionClass process=new ProcessDefinitionClass();

            //删除业务流程以及关联的节点、迁移定义记录
            if(! process.DeleteProcessDefinition(processID))
            {
              Response.Write("<script>window.alert('删除流程失败!') </script>");
              return;
            }
          }
       }
    }

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值