/// <summary> /// 获取流程所有元素 /// </summary> /// <returns>json data</returns> private string Flow_AllElements_ResponseJson() { try { BP.WF.Flow flow = new BP.WF.Flow(); flow.No = this.FK_Flow; flow.RetrieveFromDBSources(); if (flow.DType == 0) { //获取所有节点 string sqls = "SELECT NODEID,NAME,X,Y,RUNMODEL FROM WF_NODE WHERE FK_FLOW='" + this.FK_Flow + "';" + Environment.NewLine + "SELECT NODE,TONODE FROM WF_DIRECTION WHERE FK_FLOW='" + this.FK_Flow + "';" + Environment.NewLine + "SELECT MYPK,NAME,X,Y FROM WF_LABNOTE WHERE FK_FLOW='" + this.FK_Flow + "';"; DataSet ds = DBAccess.RunSQLReturnDataSet(sqls); ds.Tables[0].TableName = "Nodes"; ds.Tables[1].TableName = "Direction"; ds.Tables[2].TableName = "LabNote"; return(Newtonsoft.Json.JsonConvert.SerializeObject(new { success = true, msg = "", data = Newtonsoft.Json.JsonConvert.SerializeObject(ds) })); } return(Newtonsoft.Json.JsonConvert.SerializeObject(new { success = false, msg = "", data = new { } })); } catch (Exception ex) { return(Newtonsoft.Json.JsonConvert.SerializeObject(new { success = false, msg = ex.Message, data = new { } })); } }
/// <summary> /// 创建一个流程. /// </summary> /// <param name="flowSort">流程类别</param> /// <returns>string</returns> public static string NewFlow(string flowSort, string flowName, BP.WF.Template.DataStoreModel dsm, string ptable, string flowMark, string flowVer) { //执行保存. BP.WF.Flow fl = new BP.WF.Flow(); fl.DType = CCBPM_DType.CCBPM; string flowNo = fl.DoNewFlow(flowSort, flowName, dsm, ptable, flowMark); fl.No = flowNo; fl.Retrieve(); //如果为CCFlow模式则不进行写入Json串 if (flowVer == "0") { return(flowNo); } //创建连线 Direction drToNode = new Direction(); drToNode.FK_Flow = flowNo; drToNode.Node = int.Parse(int.Parse(flowNo) + "01"); drToNode.ToNode = int.Parse(int.Parse(flowNo) + "02"); drToNode.Insert(); //执行一次流程检查, 为了节省效率,把检查去掉了. fl.DoCheck(); return(flowNo); }
public string GetCompleateWork(string userNo, string[][] queryParams, int?page, int?pageSize) { UserLogin(userNo); string sql = string.Format("select * from WF_GenerWorkFlow where WFState in({0}) and Emps like '%{1}%'", "'" + (int)BP.WF.WFState.Complete + "'", "@" + userNo); DataTable table = BP.DA.DBAccess.RunSQLReturnTable(sql); table.Columns.Add("TitleUrl"); table.Columns.Add("FlowEmps"); table.Columns.Add("FlowEnderRDT"); string url = ""; foreach (DataRow row in table.Rows) { url = BP.Sys.SystemConfig.AppSettings["BaseUrl"] + "/WF/WFRpt.aspx?WorkID=" + row["WorkID"] + "&FK_Flow=" + row["FK_Flow"] + "&FK_Node=" + row["FK_Node"] + "&UserNo=" + userNo; row["TitleUrl"] = url; string emps = row["Emps"] + ""; foreach (string single in emps.Split('@')) { if (!string.IsNullOrEmpty(single)) { try { row["FlowEmps"] += new BP.Port.Emp(single).Name + ";"; } catch (Exception ex) { row["FlowEmps"] += single + ";"; } } } BP.WF.Flow flow = new BP.WF.Flow(row["FK_Flow"] + ""); BP.WF.Data.GERpt rpt = flow.HisGERpt; rpt.OID = Int64.Parse(row["WorkID"] + ""); int count = rpt.RetrieveFromDBSources(); if (count > 0) { row["FlowEnderRDT"] = rpt.FlowEnderRDT; } } DataTable filterTable = FilterTable(queryParams, table); DataTable finalTable = PageTable(page, pageSize, table); string xml = WriteTableToXml(finalTable, filterTable.Rows.Count); return(xml); }
protected void Button1_Click(object sender, EventArgs e) { if (FU_Upload.HasFile) { string StrsavePath = Server.MapPath("..//..//..//dataUser//FlowFile"); //路径 StrsavePath = StrsavePath + "//" + FU_Upload.FileName; FU_Upload.SaveAs(StrsavePath); //保存文件 BP.WF.Flow flow = new BP.WF.Flow(this.Request.QueryString["FK_Flow"]); int SpecifiedNumber = 0; BP.WF.ImpFlowTempleteModel model = BP.WF.ImpFlowTempleteModel.AsNewFlow; //作为新流程导入(由ccbpm自动生成新的流程编号) if (Import_1.Checked) { model = BP.WF.ImpFlowTempleteModel.AsNewFlow; } //作为新流程导入(使用流程模版里面的流程编号,如果该编号已经存在系统则会提示错误) if (Import_2.Checked) { model = BP.WF.ImpFlowTempleteModel.AsTempleteFlowNo; } //作为新流程导入(使用流程模版里面的流程编号,如果该编号已经存在系统则会覆盖此流程) if (Import_3.Checked) { model = BP.WF.ImpFlowTempleteModel.OvrewaiteCurrFlowNo; } //导入并覆盖当前的流程 if (Import_4.Checked) { String StrSpecifiedNumber = this.SpecifiedNumber.Text; if (StrSpecifiedNumber == null) { this.Alert("请输入指定流程编号。"); return; } SpecifiedNumber = Convert.ToInt32(StrSpecifiedNumber); model = BP.WF.ImpFlowTempleteModel.AsSpecFlowNo; } //执行导入 flow = BP.WF.Flow.DoLoadFlowTemplate(flow.FK_FlowSort, StrsavePath, model, SpecifiedNumber); if (flow.No != "") { this.Alert("导入成功"); } else { this.Alert("导入失败"); } } else { this.Alert("请您选择上传的文件 文件格式为xml"); } }
/// <summary> /// 检查流程 /// </summary> /// <param name="workflowNo">流程编号</param> /// <returns>检查结果</returns> public ActionResult Check(string workflowNo) { try { var fl1 = new BP.WF.Flow(workflowNo); var msg = fl1.DoCheck(); return(Json(new { success = true, msg = msg })); } catch (Exception ex) { return(Json(new { success = false, msg = ex.Message })); } }
protected void Page_Load(object sender, EventArgs e) { //获取以当前FK_Node为起点所能到达的所有结点方向信息 //added by liuxc,2014.11.29 var sql = new StringBuilder(); FrmSubFlow sf = new FrmSubFlow("ND" + this.FK_Node); if (sf.SFActiveFlows.Length <= 2) { // this.Alert("您没有设置要启动的子流程,所以您不能设置触发子流程的条件。"); this.WinCloseWithMsg("在节点【" + sf.NodeID + " " + sf.Name + "】上您没有设置要启动的子流程,所以您不能设置触发子流程的条件。"); return; } BP.WF.Flows fls = new BP.WF.Flows(); string[] strs = sf.SFActiveFlows.Split(','); foreach (string str in strs) { if (string.IsNullOrEmpty(str)) { continue; } BP.WF.Flow fl = new BP.WF.Flow(str); fls.AddEntity(fl); } //sql.AppendLine("SELECT wd.Node,"); //sql.AppendLine(" wn2.Name AS NodeName,"); //sql.AppendLine(" wd.ToNode,"); //sql.AppendLine(" wn.Name AS ToNodeName,"); //sql.AppendLine(" wd.DirType"); //sql.AppendLine("FROM WF_Direction wd"); //sql.AppendLine(" INNER JOIN WF_Node wn"); //sql.AppendLine(" ON wn.NodeID = wd.ToNode"); //sql.AppendLine(" INNER JOIN WF_Node wn2"); //sql.AppendLine(" ON wn2.NodeID = wd.Node"); //sql.AppendLine("WHERE wd.Node = " + FK_Node); rptLines.DataSource = fls.ToDataTableField(); // DBAccess.RunSQLReturnTable(sql.ToString()); rptLines.DataBind(); }
/// <summary> /// 新建节点 /// </summary> /// <param name="flowNo">流程编号</param> /// <param name="nodeName">节点名称</param> /// <param name="x">x值</param> /// <param name="y">y值</param> /// <returns>操作结果</returns> public ActionResult AddNode(string flowNo, string nodeName = "新建节点", int x = 10, int y = 10) { var fl = new BP.WF.Flow(flowNo); try { BP.WF.Node nf = fl.DoNewNode(x, y); nf.Name = nodeName; nf.HisRunModel = BP.WF.RunModel.Ordinary; nf.HisDeliveryWay = BP.WF.DeliveryWay.ByStationOnly; nf.Save(); return(Json(new { success = true, msg = "新建节点成功" })); } catch { return(Json(new { success = false, msg = "新建节点失败" })); } }
/// <summary> /// 创建一个流程模版 /// </summary> /// <param name="flowSort">流程类别</param> /// <param name="flowName">名称</param> /// <param name="dsm">存储方式</param> /// <param name="ptable">物理量</param> /// <param name="flowMark">标记</param> /// <param name="flowVer">版本</param> /// <returns>创建的流程编号</returns> public static string NewFlow(string flowSort, string flowName, BP.WF.Template.DataStoreModel dsm, string ptable, string flowMark, string flowVer) { //执行保存. BP.WF.Flow fl = new BP.WF.Flow(); string flowNo = fl.DoNewFlow(flowSort, flowName, dsm, ptable, flowMark); fl.No = flowNo; fl.Retrieve(); FlowExt flowExt = new FlowExt(flowNo); flowExt.DesignerNo = BP.Web.WebUser.No; flowExt.DesignerName = BP.Web.WebUser.Name; flowExt.DesignTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); flowExt.DirectSave(); //如果为CCFlow模式则不进行写入Json串 if (flowVer == "0") { return(flowNo); } //创建连线 Direction drToNode = new Direction(); drToNode.FK_Flow = flowNo; drToNode.Node = int.Parse(int.Parse(flowNo) + "01"); drToNode.ToNode = int.Parse(int.Parse(flowNo) + "02"); drToNode.Insert(); //执行一次流程检查, 为了节省效率,把检查去掉了. fl.DoCheck(); return(flowNo); }
public void DTS_Flow(BP.WF.Flow fl) { #region 读取数据. BP.Sys.MapExt me = new MapExt(); me.MyPK = "ND" + int.Parse(fl.No) + "01" + "_" + MapExtXmlList.StartFlow; int i = me.RetrieveFromDBSources(); if (i == 0) { BP.DA.Log.DefaultLogWriteLineError("没有为流程(" + fl.Name + ")的开始节点设置发起数据,请参考说明书解决."); return; } if (string.IsNullOrEmpty(me.Tag)) { BP.DA.Log.DefaultLogWriteLineError("没有为流程(" + fl.Name + ")的开始节点设置发起数据,请参考说明书解决."); return; } // 获取从表数据. DataSet ds = new DataSet(); string[] dtlSQLs = me.Tag1.Split('*'); foreach (string sql in dtlSQLs) { if (string.IsNullOrEmpty(sql)) { continue; } string[] tempStrs = sql.Split('='); string dtlName = tempStrs[0]; DataTable dtlTable = BP.DA.DBAccess.RunSQLReturnTable(sql.Replace(dtlName + "=", "")); dtlTable.TableName = dtlName; ds.Tables.Add(dtlTable); } #endregion 读取数据. #region 检查数据源是否正确. string errMsg = ""; // 获取主表数据. DataTable dtMain = BP.DA.DBAccess.RunSQLReturnTable(me.Tag); if (dtMain.Rows.Count == 0) { BP.DA.Log.DefaultLogWriteLineError("流程(" + fl.Name + ")此时无任务."); return; } if (dtMain.Columns.Contains("Starter") == false) { errMsg += "@配值的主表中没有Starter列."; } if (dtMain.Columns.Contains("MainPK") == false) { errMsg += "@配值的主表中没有MainPK列."; } if (errMsg.Length > 2) { BP.DA.Log.DefaultLogWriteLineError("流程(" + fl.Name + ")的开始节点设置发起数据,不完整." + errMsg); return; } #endregion 检查数据源是否正确. #region 处理流程发起. string nodeTable = "ND" + int.Parse(fl.No) + "01"; int idx = 0; foreach (DataRow dr in dtMain.Rows) { idx++; string mainPK = dr["MainPK"].ToString(); string sql = "SELECT OID FROM " + nodeTable + " WHERE MainPK='" + mainPK + "'"; if (DBAccess.RunSQLReturnTable(sql).Rows.Count != 0) { continue; /*说明已经调度过了*/ } string starter = dr["Starter"].ToString(); if (WebUser.No != starter) { BP.Web.WebUser.Exit(); BP.Port.Emp emp = new BP.Port.Emp(); emp.No = starter; if (emp.RetrieveFromDBSources() == 0) { BP.DA.Log.DefaultLogWriteLineInfo("@数据驱动方式发起流程(" + fl.Name + ")设置的发起人员:" + emp.No + "不存在。"); continue; } WebUser.SignInOfGener(emp); } #region 给值. //System.Collections.Hashtable ht = new Hashtable(); Work wk = fl.NewWork(); string err = ""; #region 检查用户拼写的sql是否正确? foreach (DataColumn dc in dtMain.Columns) { string f = dc.ColumnName.ToLower(); switch (f) { case "starter": case "mainpk": case "refmainpk": case "tonode": break; default: bool isHave = false; foreach (Attr attr in wk.EnMap.Attrs) { if (attr.Key.ToLower() == f) { isHave = true; break; } } if (isHave == false) { err += " " + f + " "; } break; } } if (string.IsNullOrEmpty(err) == false) { throw new Exception("您设置的字段:" + err + "不存在开始节点的表单中,设置的sql:" + me.Tag); } #endregion 检查用户拼写的sql是否正确? foreach (DataColumn dc in dtMain.Columns) { wk.SetValByKey(dc.ColumnName, dr[dc.ColumnName].ToString()); } if (ds.Tables.Count != 0) { // MapData md = new MapData(nodeTable); MapDtls dtls = new MapDtls(nodeTable); foreach (MapDtl dtl in dtls) { foreach (DataTable dt in ds.Tables) { if (dt.TableName != dtl.No) { continue; } //删除原来的数据。 GEDtl dtlEn = dtl.HisGEDtl; dtlEn.Delete(GEDtlAttr.RefPK, wk.OID.ToString()); // 执行数据插入。 foreach (DataRow drDtl in dt.Rows) { if (drDtl["RefMainPK"].ToString() != mainPK) { continue; } dtlEn = dtl.HisGEDtl; foreach (DataColumn dc in dt.Columns) { dtlEn.SetValByKey(dc.ColumnName, drDtl[dc.ColumnName].ToString()); } dtlEn.RefPK = wk.OID.ToString(); dtlEn.OID = 0; dtlEn.Insert(); } } } } #endregion 给值. int toNodeID = 0; try { toNodeID = int.Parse(dr["ToNode"].ToString()); } catch { /*有可能在4.5以前的版本中没有tonode这个约定.*/ } // 处理发送信息. // Node nd =new Node(); string msg = ""; try { if (toNodeID == 0) { WorkNode wn = new WorkNode(wk, fl.HisStartNode); msg = wn.NodeSend().ToMsgOfText(); } if (toNodeID == fl.StartNodeID) { /* 发起后让它停留在开始节点上,就是为开始节点创建一个待办。*/ Int64 workID = BP.WF.Dev2Interface.Node_CreateBlankWork(fl.No, null, null, WebUser.No, null); if (workID != wk.OID) { throw new Exception("@异常信息:不应该不一致的workid."); } else { wk.Update(); } msg = "已经为(" + WebUser.No + ") 创建了开始工作节点. "; } BP.DA.Log.DefaultLogWriteLineInfo(msg); } catch (Exception ex) { BP.DA.Log.DefaultLogWriteLineWarning("@" + fl.Name + ",第" + idx + "条,发起人员:" + WebUser.No + "-" + WebUser.Name + "发起时出现错误.\r\n" + ex.Message); } } #endregion 处理流程发起. }
/// <summary> /// 触发模式 /// </summary> /// <param name="fl"></param> public void InsertModel(BP.WF.Flow fl) { }
/// <summary> /// 获取下一步骤的所有节点 /// </summary> /// <param name="workflowNo">流程编号</param> /// <param name="NodeID">从节点</param> /// <param name="WorkID">工作ID</param> /// <param name="FID">父工作ID</param> /// <param name="paramPairs">参数</param> /// <returns>节点列表</returns> public ActionResult WorkOpt_GetToNodes(int WorkID, int NodeID, int FID, List <KeyValuePair <string, string> > wfParams = null, int singleSelect = 1) { BP.WF.Dev2Interface.Port_Login(ApplicationUser.Current.Name, "dd2f628c-3f38-4c8c-aa83-1a52ebf6a45a"); var work = NH.Session.QueryOver <WF_GenerWorkFlow>().Where(x => x.WorkID == WorkID).List().FirstOrDefault(); wfParams = wfParams == null ? new List <KeyValuePair <string, string> >() : wfParams; var nodeEntity = NH.Session.Get <WF_Node>(NodeID); var dic = wfParams.ToDictionary(x => x.Key, x => x.Value); var ht = new Hashtable(dic); BP.WF.Glo.SendHTOfTemp = ht; var result = BP.WF.Dev2Interface.WorkOpt_GetToNodes(work.FK_Flow, NodeID, WorkID, FID);// NodeService.WorkOpt_GetToNodes(workflowNo, NODEID, WORKID, FID); //result = result.Where(x => x.NodeID != 0).ToList(); var data = new List <dynamic>(); //var trackList = FlowService.DB_GenerTrack(workflowNo, WORKID, 0).ToList(); var userList = NH.Session.QueryOver <Auth_User>().List().ToList(); foreach (BP.WF.Node item in result) { dynamic parent = new ExpandoObject(); parent.FK_NODE = ""; parent.value = item.NodeID.ToString(); parent.text = item.Name; parent.RUNMODEL = item.HisRunModel; var flow = new BP.WF.Flow(work.FK_Flow); var workNode = new BP.WF.WorkNode(WorkID, NodeID); var toNode = new BP.WF.WorkNode(WorkID, item.NodeID); FindWorker fw = new FindWorker(); var dt = fw.DoIt(flow, workNode, toNode); // var select = new BP.WF.Template.Selector(item.NodeID); //var wk = item.HisWork; //wk.OID = WORKID; //wk.Retrieve(); //var ds = select.GenerDataSet(item.NodeID, null); var children = new List <ExpandoObject>(); foreach (DataRow dr in dt.Rows) { var user = userList.Where(x => x.Name == dr["No"].ToString()).FirstOrDefault(); if (user == null) { continue; } dynamic child = new ExpandoObject(); child.value = dr["No"].ToString(); child.text = user.RealName; child.NODEID = item.NodeID; children.Add(child); } parent.children = children; //var empList = new List<dynamic>(); //var toNodeEntity = NH.Session.Get<WF_NODE>(item.NodeID.ToString()); //if (toNodeEntity.DELIVERYWAY == 8) //{ // //指定某个环节的处理人 // empList = QueryService.GetData(string.Format("SELECT DISTINCT {0} AS FK_NODE, T.FK_EMP AS NO ,T.FK_EMPTEXT AS NAME FROM WF_GENERWORKERLIST t WHERE ( t.workid={1} or t.workid={2} ) AND T.FK_NODE={3}", item.NodeID, WORKID, FID, toNodeEntity.DELIVERYPARAS), null, null, true).ToList(); //} //else //{ // if (nodeEntity.HISDEPTSTRS == "1") // { // var userName = CurrentUser.UserName; // empList = QueryService.GetData(string.Format("SELECT DISTINCT TO_CHAR(NT.FK_NODE) AS FK_NODE,E.NO,E.NAME||(CASE WHEN EMP.AUTHOR IS NOT NULL THEN '(由【'||AUTHOR.NAME||'】代理)' ELSE '' END) AS NAME,E.EMPNO FROM WF_NODESTATION NT INNER JOIN PORT_EMPSTATION ES ON NT.FK_STATION=ES.FK_STATION INNER JOIN PORT_EMP E ON E.NO=ES.FK_EMP INNER JOIN PORT_EMPDEPT EP ON EP.FK_EMP=E.NO LEFT OUTER JOIN WF_EMP EMP ON EMP.NO=E.NO LEFT OUTER JOIN PORT_EMP AUTHOR ON AUTHOR.NO=EMP.AUTHOR WHERE NT.FK_NODE='{0}' AND EP.FK_DEPT IN (SELECT FK_DEPT FROM PORT_EMPDEPT WHERE FK_EMP='{1}') ORDER BY E.EMPNO", item.NodeID, CurrentUser.UserName), null, null, true).ToList(); // } // else // { // empList = QueryService.GetData(string.Format("SELECT DISTINCT TO_CHAR(NT.FK_NODE) AS FK_NODE,E.NO,E.NAME||(CASE WHEN EMP.AUTHOR IS NOT NULL THEN '(由【'||AUTHOR.NAME||'】代理)' ELSE '' END) AS NAME,E.EMPNO FROM WF_NODESTATION NT INNER JOIN PORT_EMPSTATION ES ON NT.FK_STATION=ES.FK_STATION INNER JOIN PORT_EMP E ON E.NO=ES.FK_EMP LEFT OUTER JOIN WF_EMP EMP ON EMP.NO=E.NO LEFT OUTER JOIN PORT_EMP AUTHOR ON AUTHOR.NO=EMP.AUTHOR WHERE NT.FK_NODE='{0}' ORDER BY E.EMPNO", item.NodeID), null, null, true).ToList(); // } //} //var test = new ExpandoObject(); //foreach (Dictionary<string, object> emp in empList) //{ // emp.Add("RUNMODEL", item.HisRunModel); //} //data.AddRange(empList); data.Add(parent); } return(Json_Get(data)); }
protected void Page_Load(object sender, EventArgs e) { // BP.Sys.MapData.GenerSpanHeight(null, 2); BP.WF.Flow fl = new BP.WF.Flow(this.FK_Flow); string sql = "SELECT Title FROM " + fl.PTable + " WHERE OID=" + this.WorkID; if (this.FID != 0) { sql = "SELECT Title FROM " + fl.PTable + " WHERE OID=" + this.FID; } string title = BP.DA.DBAccess.RunSQLReturnStringIsNull(sql, null); if (title == null) { this.Pub1.AddFieldSet("错误", "系统出现异常,请联系管理员。"); } this.Title = "工作抄送"; this.Pub1.AddTable("width='100%' border=1"); this.Pub1.AddCaptionLeft("请选择或者输入人员(多个人员用逗号隔开),然后点发送按钮..."); this.Pub1.AddTR(); //this.Pub1.AddTDTitle("接受人:"); this.Pub1.Add("<TD style='text-align:center;' width='20%' valign='middle'><h5>接受人:</h5></TD>"); HiddenField hidden = new HiddenField(); hidden.ID = "HID_SelectedEmps"; TextBox tb = new TextBox(); tb.ID = "TB_Accepter"; tb.Width = 500; Pub1.AddTDBegin("width='530'"); Pub1.Add(tb); Pub1.Add(hidden); Pub1.AddTDEnd(); Button mybtn = new Button(); mybtn.CssClass = "Btn"; mybtn.Text = "选择接受人"; mybtn.OnClientClick += "javascript:ShowIt(" + tb.ClientID + "," + hidden.ClientID + ");"; this.Pub1.AddTD(mybtn); this.Pub1.AddTREnd(); this.Pub1.AddTR(); //this.Pub1.AddTDTitle("标题:"); this.Pub1.Add("<TD style='text-align:center;' valign='middle'><h5>标题:</h5></TD>"); tb = new TextBox(); tb.ID = "TB_Title"; tb.Width = 500; tb.Text = title; this.Pub1.AddTD(" colspan=2", tb); //this.Pub1.AddTD(); this.Pub1.AddTREnd(); this.Pub1.AddTR(); //this.Pub1.AddTDTitle("消<BR>息<BR>内<br>容"); this.Pub1.Add("<TD style='text-align:center;' valign='middle'><h5>消<BR><BR>息<BR><BR>内<br><BR>容</h5></TD>"); tb = new TextBox(); tb.ID = "TB_Doc"; tb.Width = 500; tb.TextMode = TextBoxMode.MultiLine; tb.Rows = 12; this.Pub1.AddTD(" colspan=2", tb); this.Pub1.AddTREnd(); this.Pub1.AddTR(); this.Pub1.AddTD(""); Button btn = new Button(); btn.CssClass = "Btn"; btn.ID = "btn"; btn.Click += new EventHandler(btn_Click); btn.Text = "执行抄送"; this.Pub1.AddTD(" colspan=2", btn); //this.Pub1.AddTD(""); this.Pub1.AddTREnd(); this.Pub1.AddTableEnd(); }
public string GetEmpStartHistory(string userNo, string fk_flow, string[][] queryParams, int?page, int?pageSize) { UserLogin(userNo); BP.WF.Flow startFlow = new BP.WF.Flow(fk_flow); string sql = "SELECT * FROM " + startFlow.PTable + " WHERE FlowStarter='" + userNo + "' and WFState not in (" + (int)BP.WF.WFState.Blank + "," + (int)BP.WF.WFState.Draft + ")"; DataTable table = startFlow.RunSQLReturnTable(sql); table.Columns.Add("TitleUrl"); table.Columns.Add("WFStateText"); var url = ""; foreach (DataRow row in table.Rows) { url = BP.Sys.SystemConfig.AppSettings["BaseUrl"] + "/WF/WFRpt.aspx?WorkID=" + row["OID"] + "&FK_Flow=" + fk_flow + "&FID=" + row["FID"] + "&UserNo=" + userNo; row["TitleUrl"] = url; string text = ""; switch (row["WFState"] + "") { case "2": text = "运行中"; break; case "3": text = "已完成"; break; case "4": text = "挂起"; break; case "5": text = "退回"; break; case "6": text = "移交"; break; case "7": text = "删除(逻辑)"; break; case "8": text = "加签"; break; case "9": text = "冻结"; break; case "10": text = "批处理"; break; case "11": text = "加签回复"; break; default: break; } row["WFStateText"] = text; } DataTable filterTable = FilterTable(queryParams, table); DataTable finalTable = PageTable(page, pageSize, table); string xml = WriteTableToXml(finalTable, filterTable.Rows.Count); return(xml); }
protected void Page_Load(object sender, EventArgs e) { this.Title = "流程报表定义"; switch (this.DoType) { case "Reset": BP.WF.Flow fl = new BP.WF.Flow(this.FK_Flow); fl.CheckRptOfReset(); this.Response.Redirect("WFRpt.aspx?FK_MapData=" + this.FK_MapData, true); return; default: break; } Cash.Map_Cash.Remove(this.FK_MapData); MapData md = new MapData(this.FK_MapData); MapAttrs mattrs = new MapAttrs(md.No); int count = mattrs.Count; if (mattrs.Count == 0) { BP.WF.Flow f = new BP.WF.Flow(this.FK_Flow); f.CheckRpt(); this.Response.Redirect(this.Request.RawUrl, true); return; } if (gfs.Count == 1) { GroupField mygf = (GroupField)gfs[0]; if (mygf.Lab != md.Name) { mygf.Lab = md.Name; mygf.Update(); } } this.Pub1.AddB(this.Title + " <a href=\"javascript:GroupFieldNew('" + md.No + "')\">字段分组</a>"); // this.Pub1.AddB("-<a href=\"javascript:WinOpen('/WF/Comm/Search.aspx?EnsName=" + this.MyPK + "')\">查询预览</a>"); // this.Pub1.AddB("-<a href=\"javascript:WinOpen('/WF/Comm/Group.aspx?EnsName=" + this.MyPK + "')\">分析预览</a>"); if (this.FK_MapData.Contains("RptDtl") == false) { this.Pub1.AddB("-<a href=\"javascript:DoReset('" + this.FK_Flow + "','" + this.FK_MapData + "')\">重设字段</a>"); /* 说明是主表:判断它是否有从表。*/ string sql = "SELECT COUNT(No) FROM Sys_MapDtl WHERE No LIKE 'ND" + int.Parse(this.FK_Flow) + "%'"; if (BP.DA.DBAccess.RunSQLReturnValInt(sql) >= 1) { // this.Pub1.AddB("-<a href=\"javascript:AddDtl('" + md.No + "')\">插入从表</a>"); //sql = "SELECT No FROM Sys_MapData WHERE No LIKE '" + this.MyPK + "Dtl%'"; //DataTable dt = BP.DA.DBAccess.RunSQLReturnTable(sql); //switch (dt.Rows.Count) //{ // case 0: // break; // case 1: // this.Pub1.AddB("-<a href='WFRpt.aspx?MyPK=" + dt.Rows[0][0].ToString() + "'>明细报表设计</a>"); // break; // default: // this.Pub1.AddB("-<a href='WFRpt.aspx?DoType=DeDtl&MyPK=" + this.MyPK + "'>明细报表设计</a>"); // break; //} } } else { this.Pub1.AddB("-<a href=\"WFRpt.aspx?MyPK=ND" + int.Parse(this.FK_Flow) + "Rpt\">" + "返回" + "</a>"); } this.Pub1.AddHR(); this.Pub1.AddTable("width='100%'"); /* * 根据 GroupField 循环出现菜单。 */ foreach (GroupField gf in gfs) { string gfAttr = " onmouseover=GFOnMouseOver('" + gf.OID + "','" + rowIdx + "') onmouseout=GFOnMouseOut()"; currGF = gf; this.Pub1.AddTR(gfAttr); if (gfs.Count == 1) { this.Pub1.AddTD("colspan=4 class=GroupField valign='top' align:left style='height: 24px;align:left' ", "<div style='text-align:left; float:left'> <a href=\"javascript:GroupField('" + this.FK_MapData + "','" + gf.OID + "')\" >" + gf.Lab + "</a></div><div style='text-align:right; float:right'></div>"); } else { this.Pub1.AddTD("colspan=4 class=GroupField valign='top' align:left style='height: 24px;align:left' onclick=\"GroupBarClick('" + gf.Idx + "')\" ", "<div style='text-align:left; float:left'><img src='../Style/Min.gif' alert='Min' id='Img" + gf.Idx + "' border=0 /> <a href=\"javascript:GroupField('" + this.FK_MapData + "','" + gf.OID + "')\" >" + gf.Lab + "</a></div><div style='text-align:right; float:right'> <a href=\"javascript:GFDoUp('" + gf.OID + "')\" ><img src='./WF/Img/Btn/Up.gif' class='Arrow' border=0/></a> <a href=\"javascript:GFDoDown('" + gf.OID + "')\" ><img src='./WF/Img/Btn/Down.gif' class='Arrow' border=0/></a></div>"); } this.Pub1.AddTREnd(); int i = -1; int idx = -1; isLeftNext = true; rowIdx = 0; foreach (MapAttr attr in mattrs) { gfAttr = " onmouseover=GFOnMouseOver('" + gf.OID + "','" + rowIdx + "') onmouseout=GFOnMouseOut()"; if (attr.GroupID == 0) { attr.GroupID = gf.OID; attr.Update(); } if (attr.GroupID != gf.OID) { if (gf.Idx == 0 && attr.GroupID == 0) { } else { continue; } } if (attr.HisAttr.IsRefAttr || attr.UIVisible == false) { continue; } if (isLeftNext) { if (gfs.Count == 0) { this.InsertObjects(false); } else { this.InsertObjects(true); } } // 显示的顺序号. idx++; if (attr.IsBigDoc && attr.UIIsLine) { if (isLeftNext == false) { this.Pub1.AddTD(); this.Pub1.AddTD(); this.Pub1.AddTREnd(); } rowIdx++; this.Pub1.AddTR(" ID='" + currGF.Idx + "_" + rowIdx + "' " + gfAttr); this.Pub1.Add("<TD class=FDesc colspan=4 width='100%' >"); this.Pub1.Add(this.GenerLab(attr, idx, 0, count)); TextBox mytbLine = new TextBox(); mytbLine.ID = "TB_" + attr.KeyOfEn; mytbLine.TextMode = TextBoxMode.MultiLine; mytbLine.Rows = 8; mytbLine.Attributes["style"] = "width:100%;padding: 0px;margin: 0px;"; mytbLine.Enabled = attr.UIIsEnable; if (mytbLine.Enabled == false) { mytbLine.Attributes["class"] = "TBReadonly"; } this.Pub1.Add(mytbLine); this.Pub1.AddTDEnd(); this.Pub1.AddTREnd(); isLeftNext = true; continue; } if (attr.IsBigDoc) { if (isLeftNext) { rowIdx++; this.Pub1.AddTR(" ID='" + currGF.Idx + "_" + rowIdx + "' " + gfAttr); } this.Pub1.Add("<TD class=FDesc colspan=2 width='50%' >"); this.Pub1.Add(this.GenerLab(attr, idx, 0, count)); TextBox mytbLine = new TextBox(); mytbLine.TextMode = TextBoxMode.MultiLine; mytbLine.Rows = 8; mytbLine.Attributes["style"] = "width:100%;padding: 0px;margin: 0px;"; mytbLine.ID = "TB_" + attr.KeyOfEn; mytbLine.Enabled = attr.UIIsEnable; if (mytbLine.Enabled == false) { mytbLine.Attributes["class"] = "TBReadonly"; } this.Pub1.Add(mytbLine); this.Pub1.AddTDEnd(); if (isLeftNext == false) { this.Pub1.AddTREnd(); } isLeftNext = !isLeftNext; continue; } //计算 colspanOfCtl . int colspanOfCtl = 1; if (attr.UIIsLine) { colspanOfCtl = 3; } if (attr.UIIsLine) { if (isLeftNext == false) { this.Pub1.AddTD(); this.Pub1.AddTD(); this.Pub1.AddTREnd(); } isLeftNext = true; } if (isLeftNext) { rowIdx++; this.Pub1.AddTR(" ID='" + currGF.Idx + "_" + rowIdx + "' " + gfAttr); } TB tb = new TB(); tb.Attributes["width"] = "100%"; tb.Columns = 60; tb.ID = "TB_" + attr.KeyOfEn; #region add contrals. switch (attr.LGType) { case FieldTypeS.Normal: tb.Enabled = attr.UIIsEnable; switch (attr.MyDataType) { case BP.DA.DataType.AppString: this.Pub1.AddTDDesc(this.GenerLab(attr, idx, i, count)); tb.ShowType = TBType.TB; tb.Text = attr.DefVal; if (colspanOfCtl == 3) { this.Pub1.AddTD(" width=80% colspan=" + colspanOfCtl, tb); } else { if (attr.IsSigan) { this.Pub1.AddTD("colspan=" + colspanOfCtl, "<img src='/DataUser/Siganture/" + WebUser.No + ".jpg' border=0 onerror=\"this.src='/DataUser/Siganture/UnName.jpg'\"/>"); } else { this.Pub1.AddTD("width='40%' colspan=" + colspanOfCtl, tb); } } break; case BP.DA.DataType.AppDate: this.Pub1.AddTDDesc(this.GenerLab(attr, idx, i, count)); tb.ShowType = TBType.Date; tb.Text = attr.DefVal; if (attr.UIIsEnable) { tb.Attributes["onfocus"] = "WdatePicker();"; } this.Pub1.AddTD("width='40%' colspan=" + colspanOfCtl, tb); break; case BP.DA.DataType.AppDateTime: this.Pub1.AddTDDesc(this.GenerLab(attr, idx, i, count)); tb.ShowType = TBType.DateTime; tb.Text = attr.DefVal; if (attr.UIIsEnable) { tb.Attributes["onfocus"] = "WdatePicker({dateFmt:'yyyy-MM-dd HH:mm'});"; } this.Pub1.AddTD("width='40%' colspan=" + colspanOfCtl, tb); break; case BP.DA.DataType.AppBoolean: if (attr.UIIsLine) { this.Pub1.AddTDDesc(this.GenerLab(attr, idx, i, count)); } else { this.Pub1.AddTDDesc(this.GenerLab(attr, idx, i, count)); } CheckBox cb = new CheckBox(); cb.Text = attr.Name; cb.Checked = attr.DefValOfBool; cb.Enabled = attr.UIIsEnable; this.Pub1.AddTD("width='40%' colspan=" + colspanOfCtl, cb); break; case BP.DA.DataType.AppDouble: case BP.DA.DataType.AppFloat: case BP.DA.DataType.AppInt: this.Pub1.AddTDDesc(this.GenerLab(attr, idx, i, count)); tb.ShowType = TBType.Num; tb.Text = attr.DefVal; this.Pub1.AddTD("width='40%' colspan=" + colspanOfCtl, tb); break; case BP.DA.DataType.AppMoney: case BP.DA.DataType.AppRate: this.Pub1.AddTDDesc(this.GenerLab(attr, idx, i, count)); tb.ShowType = TBType.Moneny; tb.Text = attr.DefVal; this.Pub1.AddTD("width='40%' colspan=" + colspanOfCtl, tb); break; default: break; } tb.Attributes["width"] = "100%"; switch (attr.MyDataType) { case BP.DA.DataType.AppString: case BP.DA.DataType.AppDateTime: case BP.DA.DataType.AppDate: if (tb.Enabled) { tb.Attributes["class"] = "TB"; } else { tb.Attributes["class"] = "TBReadonly"; } break; default: if (tb.Enabled) { tb.Attributes["class"] = "TBNum"; } else { tb.Attributes["class"] = "TBNumReadonly"; } break; } break; case FieldTypeS.Enum: this.Pub1.AddTDDesc(this.GenerLab(attr, idx, i, count)); DDL ddle = new DDL(); ddle.ID = "DDL_" + attr.KeyOfEn; ddle.BindSysEnum(attr.KeyOfEn); ddle.SetSelectItem(attr.DefVal); ddle.Enabled = attr.UIIsEnable; this.Pub1.AddTD("colspan=" + colspanOfCtl, ddle); break; case FieldTypeS.FK: this.Pub1.AddTDDesc(this.GenerLab(attr, idx, i, count)); DDL ddl1 = new DDL(); ddl1.ID = "DDL_" + attr.KeyOfEn; try { EntitiesNoName ens = attr.HisEntitiesNoName; ens.RetrieveAll(); ddl1.BindEntities(ens); ddl1.SetSelectItem(attr.DefVal); } catch { } ddl1.Enabled = attr.UIIsEnable; this.Pub1.AddTD("colspan=" + colspanOfCtl, ddl1); break; default: break; } #endregion add contrals. if (colspanOfCtl == 3) { isLeftNext = true; this.Pub1.AddTREnd(); continue; } if (isLeftNext == false) { isLeftNext = true; this.Pub1.AddTREnd(); continue; } isLeftNext = false; } // 最后处理补充上它。 if (isLeftNext == false) { this.Pub1.AddTD(); this.Pub1.AddTD(); this.Pub1.AddTREnd(); } this.InsertObjects(false); } this.Pub1.AddTableEnd(); #region 处理异常情况。 foreach (MapDtl dtl in dtls) { if (dtl.IsUse == false) { dtl.RowIdx = 0; dtl.GroupID = 0; dtl.Update(); // this.Response.Redirect(this.Request.RawUrl, true); } } #endregion 处理异常情况。 #region 处理iFrom 的自适应的问题。 string js = "\t\n<script type='text/javascript' >"; foreach (MapDtl dtl in dtls) { js += "\t\n window.setInterval(\"ReinitIframe('F" + dtl.No + "','TD" + dtl.No + "')\", 200);"; } js += "\t\n</script>"; this.Pub1.Add(js); #endregion 处理iFrom 的自适应的问题。 #region 处理隐藏字段。 string msg = ""; // +++++++ 编辑隐藏字段 +++++++++ <br>"; foreach (MapAttr attr in mattrs) { if (attr.UIVisible) { continue; } switch (attr.KeyOfEn) { case "OID": case "FID": case "FK_NY": case "Emps": case "FK_Dept": case "WFState": case "RDT": case "MyNum": case "Rec": case "CDT": continue; default: break; } msg += "<a href=\"javascript:Edit('" + this.FK_MapData + "','" + attr.MyPK + "','" + attr.MyDataType + "');\">" + attr.Name + "</a> "; } if (msg.Length > 10) { this.Pub1.AddFieldSet("编辑隐藏字段"); this.Pub1.Add(msg); this.Pub1.Add("<br>说明:隐藏字段是不显示在表单里面,多用于属性的计算、方向条件的设置,报表的体现。"); this.Pub1.AddFieldSetEnd(); } #endregion 处理隐藏字段。 #region 查询条件定义 this.Pub1.AddFieldSet("查询条件定义" + " - <a href=\"javascript:WinOpen('../Rpt/Search.aspx?FK_Flow=" + this.FK_Flow + "')\">查询预览</a>-<a href=\"javascript:WinOpen('/WF/Comm/Group.aspx?EnsName=" + this.MyPK + "')\">分析预览</a>"); foreach (MapAttr mattr in mattrs) { if (mattr.UIContralType != UIContralType.DDL) { continue; } CheckBox cb = new CheckBox(); cb.ID = "CB_F_" + mattr.KeyOfEn; if (md.RptSearchKeys.Contains("@" + mattr.KeyOfEn)) { cb.Checked = true; } cb.Text = mattr.Name; this.Pub1.Add(cb); } this.Pub1.AddHR(); Button btn = new Button(); btn.CssClass = "Btn"; btn.Text = "保存"; btn.ID = "Btn_Save"; btn.Click += new EventHandler(btn_Click); this.Pub1.Add(btn); this.Pub1.AddFieldSetEnd(); #endregion }
protected void Button1_Click(object sender, EventArgs e) { try { string guid = this.Request.QueryString["GUID"]; BP.WF.CloudWS.WSSoapClient ccflowCloud = BP.WF.Cloud.Glo.GetSoap(); DataTable dt = ccflowCloud.GetFlowTemplateByGuid(guid); byte[] bytes = ccflowCloud.GetFlowXML(true, guid); string path = BP.Sys.SystemConfig.PathOfDataUser + "CloundFlow\\Public"; if (!System.IO.Directory.Exists(path)) { System.IO.Directory.CreateDirectory(path); } string xmlStr = System.Text.Encoding.UTF8.GetString(bytes); System.Xml.XmlDocument xml = new System.Xml.XmlDocument(); xml.LoadXml(xmlStr); string fileName = dt.Rows[0]["NAME"].ToString() + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xml"; fileName = fileName.Replace("/", "、"); xml.Save(path + "\\" + fileName); path = BP.Sys.SystemConfig.PathOfDataUser + "CloundFlow\\Public\\" + fileName; int SpecifiedNumber = 0; BP.WF.ImpFlowTempleteModel model = BP.WF.ImpFlowTempleteModel.AsNewFlow; //作为新流程导入(由ccbpm自动生成新的流程编号) if (this.RB_Import_1.Checked) { model = BP.WF.ImpFlowTempleteModel.AsNewFlow; } //作为新流程导入(使用流程模版里面的流程编号,如果该编号已经存在系统则会提示错误) if (this.RB_Import_2.Checked) { model = BP.WF.ImpFlowTempleteModel.AsTempleteFlowNo; } //作为新流程导入(使用流程模版里面的流程编号,如果该编号已经存在系统则会覆盖此流程) if (this.RB_Import_3.Checked) { model = BP.WF.ImpFlowTempleteModel.OvrewaiteCurrFlowNo; } //导入并覆盖当前的流程 if (this.RB_Import_4.Checked) { String StrSpecifiedNumber = this.SpecifiedNumber.Text; if (StrSpecifiedNumber == null) { this.Alert("请输入指定流程编号。"); return; } SpecifiedNumber = Convert.ToInt32(StrSpecifiedNumber); model = BP.WF.ImpFlowTempleteModel.AsSpecFlowNo; } //执行导入 BP.WF.Flow flow = BP.WF.Flow.DoLoadFlowTemplate(this.DropDownList1.SelectedValue, path, model, SpecifiedNumber); if (flow.No != "") { //调用客户端脚本, 是否在设计器中打开流程 ClientScript.RegisterClientScriptBlock(this.GetType(), "msg", "<script>openFlow('" + flow.DType + "','" + flow.Name + "','" + flow.No + "','" + WebUser.No + "','" + WebUser.SID + "');</script>"); //导入成功禁用导入按钮 this.Button1.Enabled = false; } else { this.Alert("导入失败"); } } catch (Exception ex) { this.Response.Write("导入失败:" + ex.Message); } }
protected void Page_Load(object sender, EventArgs e) { BP.WF.Flow fl = new BP.WF.Flow(this.FK_Flow); string sql = "SELECT Title FROM " + fl.PTable + " WHERE OID=" + this.WorkID; string title = BP.DA.DBAccess.RunSQLReturnStringIsNull(sql, null); if (title == null) { this.Pub1.AddFieldSet("错误", "系统出现异常,请联系管理员。"); } this.Title = "工作抄送"; this.Pub1.AddTable("width='100%' border=1"); this.Pub1.AddCaptionLeft("请选择或者输入人员(多个人员用逗号隔开),然后点发送按钮..."); this.Pub1.AddTR(); this.Pub1.AddTDTitle("接受人:"); TextBox tb = new TextBox(); tb.ID = "TB_Accepter"; tb.Width = 500; this.Pub1.AddTD(tb); Button mybtn = new Button(); mybtn.CssClass = "Btn"; mybtn.Text = "选择接受人"; mybtn.OnClientClick += "javascript:ShowIt(" + tb.ClientID + ");"; this.Pub1.AddTD(mybtn); this.Pub1.AddTREnd(); this.Pub1.AddTR(); this.Pub1.AddTDTitle("标题:"); tb = new TextBox(); tb.ID = "TB_Title"; tb.Width = 500; tb.Text = title; this.Pub1.AddTD(tb); this.Pub1.AddTD(); this.Pub1.AddTREnd(); this.Pub1.AddTR(); this.Pub1.AddTDTitle("消<BR>息<BR>内<br>容"); tb = new TextBox(); tb.ID = "TB_Doc"; tb.Width = 500; tb.TextMode = TextBoxMode.MultiLine; tb.Rows = 12; this.Pub1.AddTD("width='90%' colspan=2", tb); this.Pub1.AddTREnd(); this.Pub1.AddTR(); this.Pub1.AddTD(""); Button btn = new Button(); btn.CssClass = "Btn"; btn.ID = "btn"; btn.Click += new EventHandler(btn_Click); btn.Text = "执行抄送"; this.Pub1.AddTD(btn); this.Pub1.AddTD(""); this.Pub1.AddTREnd(); this.Pub1.AddTableEnd(); }