`
uule
  • 浏览: 6306749 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

.NET审批组建的开发

 
阅读更多


 选择“操作”会初始化对应的“下一环节处理”,
选择“下一环节处理”会初始化“备选责任人”

 

//public delegate void EventHandler(object sender, EventArgs e);

	public event EventHandler PreSubmit;

	// 提交前事件触发
	if (PreSubmit != null)
	{
	     EventArgs ea = new EventArgs();
	     PreSubmit(this, ea);
	}

 控件使用:

<!-- 注册用户组件 -->
<%@ Register src="../../AspUC/Dispose/Dispose.ascx" tagname="Dispose" tagprefix="uc1" %>


<div>
     <uc1:Dispose ID="Dispose1" runat="server" OnPreSubmit="SaveNetworkInfo"/>
</div>

 

Dispose.ascx:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Dispose.ascx.cs" Inherits="OSP.Web.AspUC.Dispose.Dispose" %>
<table style="table-layout:fixed;" id="opinionform">
    <tr>
        <td class="leftform">
            <table style=" table-layout:fixed;" >
                <tr>
                    <td>
                        <h2>处理意见</h2>
                    </td>
                </tr>
                <tr>
                    <td>
                        <asp:TextBox ID="Comment" runat="server" TextMode="MultiLine" Rows="8"></asp:TextBox>
                    </td>
                </tr>
                <tr>
                    <td>
                        <asp:LinkButton ID="LinkButton1" runat="server" onclick="LinkButton1_Click">保存常用意见</asp:LinkButton>
                        <asp:DropDownList ID="UsualComment" runat="server" 
                            onselectedindexchanged="UsualComment_SelectedIndexChanged" AutoPostBack="true">
                        </asp:DropDownList>
                        <asp:LinkButton ID="LinkButton2" runat="server" onclick="LinkButton2_Click">删除意见</asp:LinkButton>
                    </td>
                </tr>
            </table>
        </td>
        <td class="rightform">
            <table style="table-layout:fixed;" >
                <tr>
                    <td >
                    <h2>选择操作</h2>
                        
                    </td>
                </tr>
                <tr>
                    <td>
                        <asp:ListBox ID="Action" runat="server" Rows="4" 
                            onselectedindexchanged="Action_SelectedIndexChanged" AutoPostBack="true"></asp:ListBox>
                    </td>
                </tr>
                <tr>
                    <td >
                    <h2>下一环节处理(多选时请按ctrl键)</h2>
                        
                    </td>
                </tr>
                <tr>
                    <td>
                        <asp:ListBox ID="Activity" runat="server" Rows="4" SelectionMode="Multiple" onselectedindexchanged="Activity_SelectedIndexChanged" AutoPostBack="true"></asp:ListBox>
                    </td>
                </tr>
            </table>
        </td>
    </tr>
    <tr>
        <td colspan="2" class="bottomform">
            <table style="width:100%;">
                <tr>
                    <td colspan="3" >
                    <h2>选择执行人</h2>
                        
                    </td>
                </tr>
                <tr>
                    <td>
                    <h2>备选责任人</h2>
                        
                    </td>
                    <td>
                    </td>
                    <td>
                    <h2>已选责任人</h2>
                        
                    </td>
                </tr>
                <tr>
                    <td>
                        <asp:ListBox ID="OptUser1" runat="server" Rows="5"></asp:ListBox>
                    </td>
                    <td style="width:70px;">
                        <table style=" table-layout:fixed;">
                            <tr align="center">
                                <td>
                                    <asp:Button ID="Button1" runat="server" Text=">>" Width="50px" 
                                        onclick="Button1_Click" />
                                </td>
                            </tr>
                            <tr align="center">
                                <td>
                                    <asp:Button ID="Button2" runat="server" Text=">" Width="50px" 
                                        onclick="Button2_Click"/>
                                </td>
                            </tr>
                            <tr align="center">
                                <td>
                                    <asp:Button ID="Button3" runat="server" Text="<" Width="50px" 
                                        onclick="Button3_Click"/>
                                </td>
                            </tr>
                            <tr align="center">
                                <td>
                                    <asp:Button ID="Button4" runat="server" Text="<<" Width="50px" 
                                        onclick="Button4_Click"/>
                                </td>
                            </tr>
                        </table>
                    </td>
                    <td>
                        <asp:ListBox ID="OptUser2" runat="server" Rows="5"></asp:ListBox>
                    </td>
                </tr>
            </table>
        </td>
    </tr>
    <tr>
        <td colspan="2" align="center">
        <div class="button2">
            <asp:ImageButton ID="ImageButton2" runat="server" ImageUrl="~/themes/default/images/btn_submit.gif" Width="50" Height="20" onclick="ImageButton2_Click"/>
            <asp:ImageButton ID="ImageButton3" runat="server" ImageUrl="~/themes/default/images/btn_close.gif" Width="50" Height="20" OnClientClick="window.returnValue=0;window.close();"/>
            </div>
        </td>
    </tr>
</table>

 Dispose.ascx.cs:

//属性
namespace OSP.Web.AspUC.Dispose
{
    public partial class Dispose : System.Web.UI.UserControl
    {
        private BLL.WorkFlowBll workFlow = new BLL.WorkFlowBll();

        #region 暴露属性
        /// <summary>
        /// 提交前触发事件 外部设置
        /// </summary>
        public event EventHandler PreSubmit;

        /// <summary>
        /// 提交后触发事件 外部设置
        /// </summary>
        public event EventHandler PostSubmit;

        /// <summary>
        /// 环节参数:key=value;key=value... 外部设置
        /// </summary>
        public string ActivityParam;

        /// <summary>
        /// 流程参数:key=value;key=value... 外部设置
        /// </summary>
        public string ProcessParam;

        /// <summary>
        /// 下一环节名称 只读
        /// </summary>
        public string NextActivityName
        {
            get { return Activity.SelectedItem.Text; }
        }

        /// <summary>
        /// 下一环节元数据 只读
        /// </summary>
        public string NextActivityMetaData
        {
            get { return Activity.SelectedItem.Value; }
        }

        private decimal piid;

        public decimal ProcessInstanceId
        {
            get { return piid; }
        }
        #endregion
//页面加载
/// <summary>
        /// 页面加载
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                // 下一环节信息
                string fullname = Page.Request.QueryString["fn"];
                string sn = Page.Request.QueryString["sn"];
                string originator = Page.Request.QueryString["ou"];
                DataSet ds = null;
                
                if (string.IsNullOrEmpty(fullname))
                {
                    #region 流程过程审批
                    ds = workFlow.GetWorklistItem(sn, false);

                    // 操作初始化
                    DataTable dta = ds.Tables["Action"];
                    Action.DataTextField = "Name";
                    Action.DataValueField = "Name";
                    Action.DataSource = dta;
                    Action.DataBind();
                    #endregion
                }
                else
                {
                    #region 流程发起选人
                    ds = XMLUtil.ConvertDataSet(workFlow.getNextActivityInfo(originator, fullname));
                    Action.Items.Add(new ListItem("开始","开始"));
                    Action.SelectedIndex = 0;

                    DataTable dta = ds.Tables["NextActivity"];
                    if (dta != null && dta.Rows.Count > 0)
                    {
                        Activity.Items.Add(new ListItem(dta.Rows[0]["ActName"].ToString(), dta.Rows[0]["MetaData"].ToString()));
                        Activity.SelectedIndex = 0;

                        DataTable dtu = ds.Tables["AvailableUser"];
                        if (dtu != null && dtu.Rows.Count > 0)
                        {
                            foreach(DataRow dr in dtu.Rows)
                            {
                                OptUser1.Items.Add(new ListItem(dtu.Rows[0]["UserName"].ToString(), dtu.Rows[0]["LoginID"].ToString()));
                            }
                        }
                    }
                    #endregion
                }
                this.ViewState["ds"] = ds;

                // 常用意见信息
                DataSet dsoc = workFlow.getOftenComment();
                UsualComment.Items.Add(new ListItem("-- 请选择 --", "0"));
                UsualComment.SelectedIndex = 0;
                if (dsoc.Tables["OftenComment"] != null)
                {
                    foreach (DataRow dr in dsoc.Tables["OftenComment"].Rows)
                    {
                        UsualComment.Items.Add(new ListItem(dr["Comment"].ToString(), dr["CommentID"].ToString()));
                    }
                }
            }
        }

 

//控件联动事件
#region 控件联动事件
        /// <summary>
        /// 根据操作确定环节列表
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Action_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(Page.Request.QueryString["fn"]))
            {
                Activity.Items.Clear();
                DataSet ds = (DataSet)this.ViewState["ds"];
                if (Action.SelectedValue != null)
                {
                    DataRow[] dr = null;
                    if (ds.Tables["Action"] != null && (dr = ds.Tables["Action"].Select("Name='" + Action.SelectedValue + "'")).Length > 0)
                    {
                        dr = dr[0].GetChildRows(ds.Relations["Action_WFNextActivitys"]);
                        if (dr.Length > 0)
                        {
                            DataRow[] d = dr[0].GetChildRows(ds.Relations["WFNextActivitys_NextActivity"]);
                            foreach (DataRow dr2 in d)
                            {
                                Activity.Items.Add(new ListItem(dr2["ActName"].ToString(), dr2["MetaData"].ToString()));
                            }

                            OptUser1.DataSource = null;
                            OptUser2.DataSource = null;
                            OptUser1.DataBind();
                            OptUser2.DataBind();
                        }
                    }
                }
            }
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            foreach (ListItem li in OptUser1.Items)
            {
                OptUser2.Items.Add(li);
            }
            OptUser1.Items.Clear();
        }

        protected void Button2_Click(object sender, EventArgs e)
        {
            foreach (ListItem li in OptUser1.Items)
            {
                if (li.Selected)
                {
                    OptUser2.Items.Add(li);
                }
            }
            foreach (ListItem li in OptUser2.Items)
            {
                OptUser1.Items.Remove(li);
            }
            OptUser1.SelectedIndex = -1;
            OptUser2.SelectedIndex = -1;
        }

        protected void Button3_Click(object sender, EventArgs e)
        {
            foreach (ListItem li in OptUser2.Items)
            {
                if (li.Selected)
                {
                    OptUser1.Items.Add(li);
                }
            }
            foreach (ListItem li in OptUser1.Items)
            {
                OptUser2.Items.Remove(li);
            }
            OptUser1.SelectedIndex = -1;
            OptUser2.SelectedIndex = -1;
        }

        protected void Button4_Click(object sender, EventArgs e)
        {
            foreach (ListItem li in OptUser2.Items)
            {
                OptUser1.Items.Add(li);
            }
            OptUser2.Items.Clear();
        }

        protected void Activity_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(Page.Request.QueryString["fn"]))
            {
                OptUser1.Items.Clear();
                OptUser2.Items.Clear();
                DataSet ds = (DataSet)this.ViewState["ds"];
                if (Activity.SelectedValue != null)
                {
                    string sql = "MetaData='" + Activity.Items[Activity.SelectedIndex].Value + "'";
                    for (int i = Activity.SelectedIndex + 1; i < Activity.Items.Count; i++)
                    {
                        if (Activity.Items[i].Selected)
                        {
                            sql += "or MetaData='" + Activity.Items[i].Value + "'";
                        }
                    }

                    DataRow[] dr = null;
                    DataRow[] dr3 = null;
                    if (ds.Tables["NextActivity"] != null && (dr = ds.Tables["NextActivity"].Select(sql)).Length > 0)
                    {
                        Dictionary<string, string> dir = new Dictionary<string, string>();
                        for (int j = 0; j < dr.Length; j++)
                        {
                            dr3 = dr[j].GetChildRows(ds.Relations["NextActivity_AvailableUsers"]);
                            if (dr3.Length > 0)
                            {
                                DataRow[] d = dr3[0].GetChildRows(ds.Relations["AvailableUsers_AvailableUser"]);
                                foreach (DataRow dr2 in d)
                                {
                                    dir[dr2["LoginID"].ToString()] = dr2["UserName"].ToString();
                                }
                            }
                        }

                        foreach (string key in dir.Keys)
                        {
                            OptUser1.Items.Add(new ListItem(dir[key], key));
                        }

                    }

                }
            }
        }
        #endregion

 

//
/// <summary>
        /// 提交审批
        /// 提交前和后会触发相应事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ImageButton2_Click(object sender, ImageClickEventArgs e)
        {
            // 表单校验
            if (OptUser1.Items.Count > 0 && OptUser2.Items.Count < 1)
            {
                ScriptManager.RegisterStartupScript(this, this.GetType(), "showMsg", "showMsg('请选择责任人!');", true);
                return;
            }
            if (Action.SelectedIndex < 0)
            {
                ScriptManager.RegisterStartupScript(this, this.GetType(), "showMsg", "showMsg('请选择操作!');", true);
                return;
            }
            if (Activity.SelectedIndex < 0)
            {
                ScriptManager.RegisterStartupScript(this, this.GetType(), "showMsg", "showMsg('请选择环节!');", true);
                return;
            }

            // 提交前事件触发
            if (PreSubmit != null)
            {
                EventArgs ea = new EventArgs();
                PreSubmit(this, ea);
            }

            #region 提交审批
            // 下一环节信息
            string fullname = Page.Request.QueryString["fn"];
            string sn = Page.Request.QueryString["sn"];
            string originator = Page.Request.QueryString["ou"];
            string folio = Page.Request.QueryString["folio"];

            string msg = "";
            
            if (string.IsNullOrEmpty(fullname))
            {
                string activityParam = "Outcome=k2sql:" + Action.SelectedValue;
                if (!string.IsNullOrEmpty(ActivityParam))
                {
                    activityParam += (";" + ActivityParam);
                }
                string processParam = "";
                string userInfo = "";
                if (OptUser2.Items.Count > 0)
                {
                    userInfo = Activity.SelectedValue + "=k2sql:" + OptUser2.Items[0].Value;
                    for (int i = 1; i < OptUser2.Items.Count; i ++)
                    {
                        userInfo += ",k2sql:" + OptUser2.Items[i].Value;
                    }
                }
                processParam += userInfo;

                processParam += ";Route01=" + Activity.SelectedValue;
                

                if (!string.IsNullOrEmpty(ProcessParam))
                {
                    processParam += (";" + ProcessParam);
                }
                workFlow.finishWorkListItem(sn, Action.SelectedValue, activityParam, processParam, Comment.Text);
                msg = "审批成功!";
            }
            else
            {
                string processParam = "";
                string userInfo = "";
                if (OptUser2.Items.Count > 0)
                {
                    userInfo = Activity.SelectedValue + "=k2sql:" + OptUser2.Items[0].Value;
                    for (int i = 1; i < OptUser2.Items.Count; i++)
                    {
                        userInfo += ",k2sql:" + OptUser2.Items[i].Value;
                    }
                }
                processParam += userInfo;
                piid = Convert.ToDecimal(workFlow.startProcess(originator, fullname, folio, processParam));
                msg = "流程发起成功!";
            }
            #endregion

            // 提交后事件触发
            if (PostSubmit != null)
            {
                EventArgs ea = new EventArgs();
                PostSubmit(this, ea);
            }

            // 如果成功,关闭
            ScriptManager.RegisterStartupScript(this, this.GetType(), "showMsg", "showMsg('" + msg + "');window.returnValue=1;window.close();", true);

        }

        protected void LinkButton2_Click(object sender, EventArgs e)
        {
            workFlow.deleOftenComment(UsualComment.SelectedValue);
            UsualComment.Items.Remove(UsualComment.Items[UsualComment.SelectedIndex]);
            UsualComment.SelectedIndex = 0;
            Comment.Text = "";
        }

        protected void LinkButton1_Click(object sender, EventArgs e)
        {
            UsualComment.Items.Add(new ListItem(Comment.Text, workFlow.saveOftenComment(Comment.Text)));
            UsualComment.SelectedIndex = UsualComment.Items.Count - 1;
        }

        protected void UsualComment_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (UsualComment.SelectedIndex != 0)
            {
                Comment.Text = UsualComment.SelectedItem.Text;
            }
        }

 

"常用意见数据源":
DataSet dsoc

//GetOftenComment.xml

<?xml version="1.0" encoding="utf-8"?>

<OftenComments>
  <Result>0</Result>
  <IsOK>true</IsOK>
  <OftenComment>
    <CommentID>22684FA6DD0B49B6B248E932666E4CB4</CommentID>
    <Comment>............hahahah3333同意</Comment>
  </OftenComment>
  <OftenComment>
    <CommentID>B1226234D35B4F7D9581C72D0DB03355</CommentID>
    <Comment>............hahahah</Comment>
  </OftenComment>
  <OftenComment>
    <CommentID>BE11D9B4767C44D196ABFC6DFF6C5CE2</CommentID>
    <Comment>............hahahah3333</Comment>
  </OftenComment>
  <Action>Get</Action>
</OftenComments>

 ..

  • 大小: 12.3 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics