K2 blackpearl 流程开发(二)

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

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

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

  1. LeaveProcess\Startflow.aspx:请假流程发起界面
  2. LeaveProcess\Audit.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. }  
using SourceCode.Workflow.Client;
using SourceCode.Workflow.Management;
//以上dll请在解决方案里面引用

namespace K2Web
{
    public class K2Util
    {
        public K2Util() { }

        public Connection GetK2Connection()
        {
            Connection k2con = new Connection();
            // Connect to Workflow Server 
            k2con.Open("SZ-JIANGWX:5252");
            return k2con;
        }

        public WorkflowManagementServer GetK2WorkflowMgr()
        {
            WorkflowManagementServer wms = new WorkflowManagementServer("SZ-JIANGWX", 5555);
            wms.Open();
            return wms;
        }
    }
}

 

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 = @"K2Workflow\LeaveProcess";//发布的流程名称  
  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.      }  
   //提交按钮事件处理程序
        protected void btnSave_Click(object sender, EventArgs e)
        {
            K2Util k2 = new K2Util();
            Connection k2con = k2.GetK2Connection();//打开链接

            string flowname = @"K2Workflow\LeaveProcess";//发布的流程名称
            ProcessInstance pi = k2con.CreateProcessInstance(flowname);
            //流程数据赋值
            pi.DataFields["请假人"].Value = txtOriginator.Text;
            pi.DataFields["请假天数"].Value = txtDays.Text;
            pi.DataFields["请假原因"].Value = txtReason.Text;
            //设置流程标志 我这里是 发起人姓名+流程名称+发起时间
            pi.Folio = txtOriginator.Text+"LeaveProcess" + DateTime.Now.ToString("yyyyMMddHHmm");
            //启动流程
            k2con.StartProcessInstance(pi);
            k2con.Close();//关闭链接
        }

 


3.流程审批界面 Audit.aspx

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

  1. <table style="width: 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>  
   <table style="width: 50%;">
            <tr>
                <td align="right">
                    请假人:
                </td>
                <td align="left">
                    <asp:Label ID="txtOriginator" runat="server"></asp:Label>
                </td>
            </tr>
            <tr>
                <td align="right">
                    请假天数:
                </td>
                <td align="left">
                    <asp:Label ID="txtDays" runat="server"></asp:Label>天
                </td>
            </tr>
            <tr>
                <td align="right">
                    请假原因:
                </td>
                <td align="left">
                    <asp:Label ID="txtReason" runat="server"></asp:Label>
                </td>
            </tr>
              <tr>
                <td align="right">
                    审批意见:
                </td>
                <td align="left">
                    <asp:TextBox ID="txtManager" runat="server"></asp:TextBox>
                </td>
            </tr>
            
            <tr>
                <td align="right">
                    <asp:DropDownList ID="dopAction" runat="server">
                    </asp:DropDownList>
                </td>
                <td>
                    <asp:Button ID="btnSave" runat="server" Text="提交" OnClick="btnSave_Click" />
                </td>
            </tr>
        </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.        }  
 protected void Page_Load(object sender, EventArgs e)
        {
            K2Util k2 = new K2Util();
            Connection k2con = k2.GetK2Connection();
            //根据SN号获取流程
            string sn = Request.QueryString["SN"];
            WorklistItem wi = k2con.OpenWorklistItem(sn);
            ProcessInstance pi = wi.ProcessInstance;
            //获取流程数据
            txtOriginator.Text = pi.DataFields["请假人"].Value.ToString();
            txtDays.Text = pi.DataFields["请假天数"].Value.ToString();
            txtReason.Text = pi.DataFields["请假原因"].Value.ToString();
            //加载活动Action列表
            dopAction.DataSource = wi.Actions;
            dopAction.DataTextField = "Name";
            dopAction.DataBind();

            k2con.Close();
        }

        protected void btnSave_Click(object sender, EventArgs e)
        {
            K2Util k2 = new K2Util();
            Connection k2con = k2.GetK2Connection();

            //根据SN获取流程
            string sn = Request.QueryString["SN"];
            WorklistItem wi = k2con.OpenWorklistItem(sn);
            ProcessInstance pi = wi.ProcessInstance;

            //设置审批意见
            pi.DataFields["经理审批意见"].Value = txtManager.Text.Trim();
            //执行Action操作
            wi.Actions[dopAction.Text].Execute();
            //提交按钮灰掉
            btnSave.Enabled = false;
            k2con.Close();
        }

 

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>  
<body>
    <form id="form1" runat="server">
    <h3>
        K2 flow list:</h3>
    <div style="margin-left: 100px">
        <a href="DemoProcess/start.aspx" target="_blank">DemoProcess</a>
        <br />
        <a href="LeaveProcess/Startflow.aspx" target="_blank">LeaveProcess</a>
    </div>
    <div>
        <h3>
            <a href="MyWorklist.aspx" target="_blank">MyWorklist</a></h3>
    </div>
    </form>
</body>

 

5.我的待办页面  MyWorklist.aspx

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

  1. <table style="width: 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>  
  <table style="width: 95%">
            <tr>
                <th>
                    Folio
                </th>
                <th>
                    SerialNumber
                </th>
                <th>
                    ProcessName
                </th>
                <th>
                    ActivityName
                </th>
                <th>
                    EventName
                </th>
                <th>
                    StartDate
                </th>
            </tr>
            <asp:Repeater ID="Mylist" runat="server">
                <ItemTemplate>
                    <tr>
                        <td>
                            <%#DataBinder.Eval(Container.DataItem, "Folio").ToString()%>
                        </td>
                        <td>
                            <%#DataBinder.Eval(Container.DataItem, "SerialNumber").ToString()%>
                        </td>
                        <td>
                            <%#DataBinder.Eval(Container.DataItem, "ProcessName").ToString()%>
                        </td>
                        <td>
                            <%#DataBinder.Eval(Container.DataItem, "ActivityName").ToString()%>
                        </td>
                        <td>
                            <%#DataBinder.Eval(Container.DataItem, "EventName").ToString()%>
                        </td>
                        <td>
                            <%#DataBinder.Eval(Container.DataItem, "StartDate", "{0:yyyy-MM-dd HH:mm}")%>
                        </td>
                    </tr>
                </ItemTemplate>
            </asp:Repeater>
        </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.      }  
   protected void Page_Load(object sender, EventArgs e)
        {
            Connection k2con = new Connection();
            // Connect to Workflow Server 
            k2con.Open("SZ-JIANGWX:5252");
            //获取当前登录用户的待办列表
            Worklist wl = k2con.OpenWorklist();
            //create a data table 
            DataTable dt = new DataTable();
            //add some columns 
            dt.Columns.Add("Folio");
            dt.Columns.Add("SerialNumber");
            dt.Columns.Add("ProcessName");
            dt.Columns.Add("ActivityName");
            dt.Columns.Add("EventName");
            dt.Columns.Add("StartDate");

            foreach (WorklistItem wli in wl)
            {
                //create a new row, with columns defined 
                DataRow dr = dt.NewRow();
                //add values from worklist + sub-objects 
                dr["SerialNumber"] = wli.SerialNumber;
                dr["ProcessName"] = "<a href=" + wli.Data.ToString() + " target='_blank'>" + wli.ProcessInstance.FullName + "</a>";
                dr["ActivityName"] = wli.ActivityInstanceDestination.Name;
                dr["EventName"] = wli.EventInstance.Name;
                dr["StartDate"] = wli.EventInstance.StartDate.ToString();
                dr["Folio"] = wli.ProcessInstance.Folio;
                //add the data row to the data table 
                dt.Rows.Add(dr);
            }

            //bind data table to grid 
            Mylist.DataSource = dt;
            Mylist.DataBind();
            k2con.Close();
        }

 

 

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/

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值