• K2 blackpearl 流程开发(二)


    转:http://blog.csdn.net/gxiangzi/article/details/8444590

    本来想一篇文章把流程开发介绍完的,后来发现实在是太多了,只好分成两部分了。上一篇很简单的介绍了下k2流程的设计和配置,希望大家的流程都已经发布成功了微笑。这部分接着上面讲,主要说一下k2流程api的使用。

    我们要在k2web中新建一下几个页面:

    1. LeaveProcessStartflow.aspx:请假流程发起界面
    2. LeaveProcessAudit.aspx:请假流程审批界面
    3. index.aspx:流程列表界面
    4. MyWorklist.aspx:我的待办流程列表界面

    1.首先贴一下流程处理的公共类,很简单就是打开k2的链接:

    1. using SourceCode.Workflow.Client;  
    2. using SourceCode.Workflow.Management;  
    3. //以上dll请在解决方案里面引用  
    4.   
    5. namespace K2Web  
    6. {  
    7.     public class K2Util  
    8.     {  
    9.         public K2Util() { }  
    10.   
    11.         public Connection GetK2Connection()  
    12.         {  
    13.             Connection k2con = new Connection();  
    14.             // Connect to Workflow Server   
    15.             k2con.Open("SZ-JIANGWX:5252");  
    16.             return k2con;  
    17.         }  
    18.   
    19.         public WorkflowManagementServer GetK2WorkflowMgr()  
    20.         {  
    21.             WorkflowManagementServer wms = new WorkflowManagementServer("SZ-JIANGWX", 5555);  
    22.             wms.Open();  
    23.             return wms;  
    24.         }  
    25.     }  
    26. }  

    2.流程发起界面 Startflow.aspx

       前台界面我就不贴了,拉三个textbox分别是我们请假流程的三个参数,后面贴一下后台主要代码。

    1. //提交按钮事件处理程序  
    2.      protected void btnSave_Click(object sender, EventArgs e)  
    3.      {  
    4.          K2Util k2 = new K2Util();  
    5.          Connection k2con = k2.GetK2Connection();//打开链接  
    6.   
    7.          string flowname = @"K2WorkflowLeaveProcess";//发布的流程名称  
    8.          ProcessInstance pi = k2con.CreateProcessInstance(flowname);  
    9.          //流程数据赋值  
    10.          pi.DataFields["请假人"].Value = txtOriginator.Text;  
    11.          pi.DataFields["请假天数"].Value = txtDays.Text;  
    12.          pi.DataFields["请假原因"].Value = txtReason.Text;  
    13.          //设置流程标志 我这里是 发起人姓名+流程名称+发起时间  
    14.          pi.Folio = txtOriginator.Text+"LeaveProcess" + DateTime.Now.ToString("yyyyMMddHHmm");  
    15.          //启动流程  
    16.          k2con.StartProcessInstance(pi);  
    17.          k2con.Close();//关闭链接  
    18.      }  


    3.流程审批界面 Audit.aspx

        前台界面没有太大变化,发起界面的三个textbox换成了label用以展示数据,此外另外加了一个dropdownlist,用以加载审批活动的  Action列表。前台代码如下:

    1. <table style=" 50%;">  
    2.          <tr>  
    3.              <td align="right">  
    4.                  请假人:  
    5.              </td>  
    6.              <td align="left">  
    7.                  <asp:Label ID="txtOriginator" runat="server"></asp:Label>  
    8.              </td>  
    9.          </tr>  
    10.          <tr>  
    11.              <td align="right">  
    12.                  请假天数:  
    13.              </td>  
    14.              <td align="left">  
    15.                  <asp:Label ID="txtDays" runat="server"></asp:Label>天  
    16.              </td>  
    17.          </tr>  
    18.          <tr>  
    19.              <td align="right">  
    20.                  请假原因:  
    21.              </td>  
    22.              <td align="left">  
    23.                  <asp:Label ID="txtReason" runat="server"></asp:Label>  
    24.              </td>  
    25.          </tr>  
    26.            <tr>  
    27.              <td align="right">  
    28.                  审批意见:  
    29.              </td>  
    30.              <td align="left">  
    31.                  <asp:TextBox ID="txtManager" runat="server"></asp:TextBox>  
    32.              </td>  
    33.          </tr>  
    34.            
    35.          <tr>  
    36.              <td align="right">  
    37.                  <asp:DropDownList ID="dopAction" runat="server">  
    38.                  </asp:DropDownList>  
    39.              </td>  
    40.              <td>  
    41.                  <asp:Button ID="btnSave" runat="server" Text="提交" OnClick="btnSave_Click" />  
    42.              </td>  
    43.          </tr>  
    44.      </table>  


    后台代码: 

    1. protected void Page_Load(object sender, EventArgs e)  
    2.        {  
    3.            K2Util k2 = new K2Util();  
    4.            Connection k2con = k2.GetK2Connection();  
    5.            //根据SN号获取流程  
    6.            string sn = Request.QueryString["SN"];  
    7.            WorklistItem wi = k2con.OpenWorklistItem(sn);  
    8.            ProcessInstance pi = wi.ProcessInstance;  
    9.            //获取流程数据  
    10.            txtOriginator.Text = pi.DataFields["请假人"].Value.ToString();  
    11.            txtDays.Text = pi.DataFields["请假天数"].Value.ToString();  
    12.            txtReason.Text = pi.DataFields["请假原因"].Value.ToString();  
    13.            //加载活动Action列表  
    14.            dopAction.DataSource = wi.Actions;  
    15.            dopAction.DataTextField = "Name";  
    16.            dopAction.DataBind();  
    17.   
    18.            k2con.Close();  
    19.        }  
    20.   
    21.        protected void btnSave_Click(object sender, EventArgs e)  
    22.        {  
    23.            K2Util k2 = new K2Util();  
    24.            Connection k2con = k2.GetK2Connection();  
    25.   
    26.            //根据SN获取流程  
    27.            string sn = Request.QueryString["SN"];  
    28.            WorklistItem wi = k2con.OpenWorklistItem(sn);  
    29.            ProcessInstance pi = wi.ProcessInstance;  
    30.   
    31.            //设置审批意见  
    32.            pi.DataFields["经理审批意见"].Value = txtManager.Text.Trim();  
    33.            //执行Action操作  
    34.            wi.Actions[dopAction.Text].Execute();  
    35.            //提交按钮灰掉  
    36.            btnSave.Enabled = false;  
    37.            k2con.Close();  
    38.        }  

    4.流程列表界面 index.aspx

        用户进入的向导页面,只有一些html代码。

    1. <body>  
    2.     <form id="form1" runat="server">  
    3.     <h3>  
    4.         K2 flow list:</h3>  
    5.     <div style="margin-left: 100px">  
    6.         <a href="DemoProcess/start.aspx" target="_blank">DemoProcess</a>  
    7.         <br />  
    8.         <a href="LeaveProcess/Startflow.aspx" target="_blank">LeaveProcess</a>  
    9.     </div>  
    10.     <div>  
    11.         <h3>  
    12.             <a href="MyWorklist.aspx" target="_blank">MyWorklist</a></h3>  
    13.     </div>  
    14.     </form>  
    15. </body>  

    5.我的待办页面  MyWorklist.aspx

       此页面展示当前登录用户的待办列表,前台是一个repeater,单击流程名称进入审批页面,前台代码如下:

    1. <table style=" 95%">  
    2.           <tr>  
    3.               <th>  
    4.                   Folio  
    5.               </th>  
    6.               <th>  
    7.                   SerialNumber  
    8.               </th>  
    9.               <th>  
    10.                   ProcessName  
    11.               </th>  
    12.               <th>  
    13.                   ActivityName  
    14.               </th>  
    15.               <th>  
    16.                   EventName  
    17.               </th>  
    18.               <th>  
    19.                   StartDate  
    20.               </th>  
    21.           </tr>  
    22.           <asp:Repeater ID="Mylist" runat="server">  
    23.               <ItemTemplate>  
    24.                   <tr>  
    25.                       <td>  
    26.                           <%#DataBinder.Eval(Container.DataItem, "Folio").ToString()%>  
    27.                       </td>  
    28.                       <td>  
    29.                           <%#DataBinder.Eval(Container.DataItem, "SerialNumber").ToString()%>  
    30.                       </td>  
    31.                       <td>  
    32.                           <%#DataBinder.Eval(Container.DataItem, "ProcessName").ToString()%>  
    33.                       </td>  
    34.                       <td>  
    35.                           <%#DataBinder.Eval(Container.DataItem, "ActivityName").ToString()%>  
    36.                       </td>  
    37.                       <td>  
    38.                           <%#DataBinder.Eval(Container.DataItem, "EventName").ToString()%>  
    39.                       </td>  
    40.                       <td>  
    41.                           <%#DataBinder.Eval(Container.DataItem, "StartDate", "{0:yyyy-MM-dd HH:mm}")%>  
    42.                       </td>  
    43.                   </tr>  
    44.               </ItemTemplate>  
    45.           </asp:Repeater>  
    46.       </table>  


    后台加载数据的代码:

    1. protected void Page_Load(object sender, EventArgs e)  
    2.      {  
    3.          Connection k2con = new Connection();  
    4.          // Connect to Workflow Server   
    5.          k2con.Open("SZ-JIANGWX:5252");  
    6.          //获取当前登录用户的待办列表  
    7.          Worklist wl = k2con.OpenWorklist();  
    8.          //create a data table   
    9.          DataTable dt = new DataTable();  
    10.          //add some columns   
    11.          dt.Columns.Add("Folio");  
    12.          dt.Columns.Add("SerialNumber");  
    13.          dt.Columns.Add("ProcessName");  
    14.          dt.Columns.Add("ActivityName");  
    15.          dt.Columns.Add("EventName");  
    16.          dt.Columns.Add("StartDate");  
    17.   
    18.          foreach (WorklistItem wli in wl)  
    19.          {  
    20.              //create a new row, with columns defined   
    21.              DataRow dr = dt.NewRow();  
    22.              //add values from worklist + sub-objects   
    23.              dr["SerialNumber"] = wli.SerialNumber;  
    24.              dr["ProcessName"] = "<a href=" + wli.Data.ToString() + " target='_blank'>" + wli.ProcessInstance.FullName + "</a>";  
    25.              dr["ActivityName"] = wli.ActivityInstanceDestination.Name;  
    26.              dr["EventName"] = wli.EventInstance.Name;  
    27.              dr["StartDate"] = wli.EventInstance.StartDate.ToString();  
    28.              dr["Folio"] = wli.ProcessInstance.Folio;  
    29.              //add the data row to the data table   
    30.              dt.Rows.Add(dr);  
    31.          }  
    32.   
    33.          //bind data table to grid   
    34.          Mylist.DataSource = dt;  
    35.          Mylist.DataBind();  
    36.          k2con.Close();  
    37.      }  

    6.运行流程:index进入startflow页面,startflow填写数据发起流程,index页面进入myworklist页面,myworklist页面单击待办列表进入审批页面。

    7.这些api都是最常用的几个api,时间所限只能简单写成这样,最起码最简单的一个k2流程可以跑起来了,哈哈,下面推荐一些k2的学习链接和书。

    电子书:K2_Blackpearl_产品白皮书.pdf   k2产品的基础介绍

                   Wrox.Professional.K2.blackpearl.Feb.2009.eBook-DDU.pdf    wrox出版的k2教程书,经典书,详细介绍了k2的开发知识,我正在看此书。

    学习链接:http://www.cnblogs.com/kaixuanpisces/category/149223.html

                      http://www.cnblogs.com/hqbird/archive/2010/06/23/1763665.html

                     http://www.cnblogs.com/dannyli/

                     http://www.cnblogs.com/shanyou/

                     http://www.k2underground.com/

  • 相关阅读:
    SQL Server 之 在与SQLServer建立连接时出现与网络相关的或特定于实例的错误
    T-SQL 之 概述
    HTML 之 Web页面表单form中只有一个input的text元素,按回车默认提交
    CollatingOfData 之 JsonHelper
    JavaScript 之 弹出窗口总结
    JavaScript 之 页面跳转及Frame动态加载
    XML 之 与Json或String的相互转换
    UML 之 类图(Class Dragram)
    Asp.Net 之 调用分享接口
    echo print() print_r() var_dump()的区别
  • 原文地址:https://www.cnblogs.com/jackljf/p/4768617.html
Copyright © 2020-2023  润新知