public FrmNewFlow() { InitializeComponent(); WSDesignerSoapClient da = Glo.GetDesignerServiceInstance(); da.RunSQLReturnTableAsync("SELECT no,name FROM WF_FlowSort "); da.RunSQLReturnTableCompleted += new EventHandler <RunSQLReturnTableCompletedEventArgs>(da_RunSQLReturnTableCompleted); DataTable dt = new DataTable(); dt.Columns.Add(new DataColumn("No")); dt.Columns.Add(new DataColumn("Name")); DataRow dr = dt.NewRow(); dr[0] = "0"; dr[1] = "数据轨迹模式"; dt.Rows.Add(dr); dr = dt.NewRow(); dr[0] = "1"; dr[1] = "数据合并模式"; dt.Rows.Add(dr); IList list = dt.GetBindableData(new Connector()); DDL_DataStoreModel.ItemsSource = list; DDL_DataStoreModel.DisplayMemberPath = dt.Columns[1].ColumnName; DDL_DataStoreModel.SelectedIndex = 0; }
private void Page_Loaded(object sender, RoutedEventArgs e) { var client = Glo.GetDesignerServiceInstance(); var sql = "select * from Sys_MapData"; client.RunSQLReturnTableCompleted += client_RunSQLReturnTableCompleted; client.RunSQLReturnTableAsync(sql, true); }
public static int RunSQL(string sql) { WSDesignerSoapClient client = Glo.GetDesignerServiceInstance(); client.RunSQLAsync(sql, true); client.RunSQLCompleted += new EventHandler <RunSQLCompletedEventArgs>(client_RunSQLCompleted); return(myResultInt); }
void da_InitFrmSort_RunSQLReturnTableCompleted(object sender, RunSQLReturnTableCompletedEventArgs e) { DataSet ds = new DataSet(); ds.FromXml(e.Result); this.comboBox1.Items.Clear(); Glo.Ctrl_DDL_BindDataTable(this.comboBox1, ds.Tables[0], currFK_FrmSort); }
private void TB_Name_LostFocus(object sender, RoutedEventArgs e) { string s = this.TB_Name.Text; var daPinYin = Glo.GetDesignerServiceInstance(); daPinYin.ParseStringToPinyinAsync(s); daPinYin.ParseStringToPinyinCompleted += new EventHandler <ParseStringToPinyinCompletedEventArgs>(daPinYin_ParseStringToPinyinCompleted); }
public FrmImp() { InitializeComponent(); WSDesignerSoapClient da_InitFrmSort = Glo.GetDesignerServiceInstance(); da_InitFrmSort.RunSQLReturnTableAsync("SELECT No,Name FROM Sys_FrmSort"); da_InitFrmSort.RunSQLReturnTableCompleted += new EventHandler <RunSQLReturnTableCompletedEventArgs>(da_InitFrmSort_RunSQLReturnTableCompleted); }
public static DataTable RunSQLReturnTable(string sql) { var client = Glo.GetDesignerServiceInstance(); client.RunSQLReturnTableAsync(sql, true); client.RunSQLReturnTableCompleted += new EventHandler <RunSQLReturnTableCompletedEventArgs>(client_RunSQLReturnTableCompleted); return(myResultDT); }
void daNew_RunSQLReturnTableSCompleted(object sender, RunSQLReturnTableSCompletedEventArgs e) { DataSet ds = new DataSet(); ds.FromXml(e.Result); DataTable dtSort = ds.Tables[0]; Glo.Ctrl_DDL_BindDataTable(this.DDL_FrmSort, dtSort, "01"); }
/// <summary> /// 如果FlowFormId不为空,说明是编辑页面,需要初始化控件的值 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ChildWindow_Loaded(object sender, RoutedEventArgs e) { if (!string.IsNullOrEmpty(FlowFormId)) { var sql = "select * from Sys_MapData"; var client = Glo.GetDesignerServiceInstance(); client.RunSQLReturnTableCompleted += new EventHandler <global::WF.WS.RunSQLReturnTableCompletedEventArgs>(client_RunSQLReturnTableCompleted); client.RunSQLReturnTableAsync(sql, true); } }
void RB_Checked(object sender, RoutedEventArgs e) { RadioButton rb = sender as RadioButton; string id = rb.Name.Replace("RB_", ""); var client = Glo.GetDesignerServiceInstance(); var sql = "SELECT * FROM Sys_MapData WHERE AppType=" + id; client.RunSQLReturnTableCompleted += new EventHandler <RunSQLReturnTableCompletedEventArgs>(client_RunSQLReturnTableCompleted); client.RunSQLReturnTableAsync(sql, true); }
private void OKButton_Click(object sender, RoutedEventArgs e) { var selectedItem = tabControl.SelectedItem as TabItem; if (null == selectedItem) { return; } if (selectedItem == tabStandardNew) { if (string.IsNullOrWhiteSpace(TB_FlowName.Text)) { MessageBox.Show("请输入流程名称", "提示", MessageBoxButton.OK); return; } if (null != CurrentDesinger) { var flowSortID = (DDL_FlowSort.SelectedItem as BindableObject).GetValue("NO"); var DataStoreModel = this.DDL_DataStoreModel.SelectedIndex; var ptable = this.TB_PTable.Text; var flowCode = this.TB_FlowCode.Text; CurrentDesinger.NewFlow(flowSortID, TB_FlowName.Text, DataStoreModel, ptable, flowCode); this.DialogResult = true; } } if (selectedItem == tabImportNew) { if (buffer == null || buffer.Length <= 0 || file == null || cbxFlowSortImport.SelectedIndex == -1) { MessageBox.Show("请选择模板文件", "提示", MessageBoxButton.OK); return; } //调用服务上传 try { loadingWindow.Show(); WSDesignerSoapClient daUpload = Glo.GetDesignerServiceInstance(); daUpload.UploadfileAsync(buffer, file.Name); daUpload.UploadfileCompleted += _Service_UploadfileCompleted; this.DialogResult = true; } catch (Exception ex) { this.DialogResult = false; MessageBox.Show(ex.Message, "错误", MessageBoxButton.OK); } } }
public void BindNew() { this.Title = "新建表单"; this.IsNew = true; this.TB_No.IsEnabled = true; string sqls = "SELECT No,Name FROM Sys_FrmSort"; WSDesignerSoapClient daNew = Glo.GetDesignerServiceInstance(); daNew.RunSQLReturnTableSAsync(sqls); daNew.RunSQLReturnTableSCompleted += new EventHandler <RunSQLReturnTableSCompletedEventArgs>(daNew_RunSQLReturnTableSCompleted); this.HisAppType = AppType.Application; }
public void BindFrm(string fk_mapdata) { this.IsNew = false; string sqls = "SELECT * FROM Sys_FrmSort "; sqls += "@SELECT * FROM Sys_MapData WHERE No='" + fk_mapdata + "'"; this.TB_No.IsEnabled = false; WSDesignerSoapClient daBindFrm = Glo.GetDesignerServiceInstance(); daBindFrm.RunSQLReturnTableSAsync(sqls); daBindFrm.RunSQLReturnTableSCompleted += new EventHandler <RunSQLReturnTableSCompletedEventArgs>(daBindFrm_RunSQLReturnTableSCompleted); }
private void DelButton_Click(object sender, RoutedEventArgs e) { if (MessageBox.Show("您确定要删除吗?", "ccflow提示", MessageBoxButton.OKCancel) == MessageBoxResult.Cancel) { return; } WSDesignerSoapClient delMap = Glo.GetDesignerServiceInstance(); delMap.DoTypeAsync("DelFrm", this.TB_No.Text, null, null, null, null); delMap.DoTypeCompleted += new EventHandler <DoTypeCompletedEventArgs>(delMap_DoTypeCompleted); }
/// <summary> /// 功能列表 /// </summary> /// <returns></returns> public string KeySearch_Query() { string keywords = this.GetRequestVal("TB_KWds"); //对输入的关键字进行验证 keywords = Glo.CheckKeyWord(keywords); if (Glo.CheckKeyWordInSql(keywords)) { return("@err:请输入正确字符!"); } Paras ps = new Paras(); ps.SQL = "SELECT A.FlowName,A.NodeName,A.FK_Flow,A.FK_Node,A.WorkID,A.FID,A.Title,A.StarterName,A.RDT,A.WFSta,A.Emps, A.TodoEmps, A.WFState " + " FROM WF_GenerWorkFlow A " + " WHERE (A.Title LIKE '%" + keywords + "%' " + " or A.Starter LIKE '%" + keywords + "%' " + " or A.StarterName LIKE '%" + keywords + "%') " + " AND (A.Emps LIKE '@%" + WebUser.No + "%' " + " or A.TodoEmps LIKE '%" + WebUser.No + "%') " + " AND A.WFState!=0 "; DataTable dt = DBAccess.RunSQLReturnTable(ps); dt.TableName = "WF_GenerWorkFlow"; if (SystemConfig.AppCenterDBType == DBType.Oracle) { dt.Columns["FLOWNAME"].ColumnName = "FlowName"; dt.Columns["FK_FLOW"].ColumnName = "FK_Flow"; dt.Columns["FK_NODE"].ColumnName = "FK_Node"; dt.Columns["NODENAME"].ColumnName = "NodeName"; dt.Columns["WORKID"].ColumnName = "WorkID"; dt.Columns["FID"].ColumnName = "FID"; dt.Columns["TITLE"].ColumnName = "Title"; dt.Columns["STARTERNAME"].ColumnName = "StarterName"; dt.Columns["WFSTA"].ColumnName = "WFSta"; dt.Columns["EMPS"].ColumnName = "Emps"; dt.Columns["TODOEMPS"].ColumnName = "TodoEmps"; //处理人. dt.Columns["WFSTATE"].ColumnName = "WFState"; //处理人. } if (dt != null) { dt.Columns.Add("TDTime"); foreach (DataRow dr in dt.Rows) { dr["TDTime"] = BP.WF.HttpHandler.CCMobile.GetTraceNewTime(dr["FK_Flow"].ToString(), int.Parse(dr["WorkID"].ToString()), int.Parse(dr["FID"].ToString())); } } return(BP.Tools.Json.ToJson(dt)); }
public void SaveEn() { string error = ""; if (string.IsNullOrEmpty(this.TB_No.Text.Trim())) { error += "编号不能为空."; } if (string.IsNullOrEmpty(this.TB_Name.Text.Trim())) { error += "名称不能为空."; } string strs = ""; strs += "@EnName=BP.Sys.MapData@PKVal=" + this.TB_No.Text; strs += "@No=" + this.TB_No.Text; strs += "@Name=" + this.TB_Name.Text; strs += "@PTable=" + this.TB_PTable.Text; strs += "@Tag=" + this.TB_URL.Text; ListBoxItem lb = this.DDL_FrmSort.SelectedItem as ListBoxItem; if (lb != null) { strs += "@FK_FrmSort=" + lb.Tag.ToString(); } lb = this.DDL_FrmType.SelectedItem as ListBoxItem; if (lb != null) { strs += "@FrmType=" + lb.Tag.ToString(); } lb = this.DDL_DBUrl.SelectedItem as ListBoxItem; if (lb != null) { strs += "@DBURL=" + lb.Tag.ToString(); } strs += "@AppType=" + (int)this.HisAppType; strs += "@Designer=" + this.TB_Designer.Text; strs += "@DesignerContact=" + this.TB_DesignerContact.Text; strs += "@DesignerUnit=" + this.TB_DesignerUnit.Text; WSDesignerSoapClient daSaveEn = Glo.GetDesignerServiceInstance(); daSaveEn.SaveEnAsync(strs); daSaveEn.SaveEnCompleted += new EventHandler <SaveEnCompletedEventArgs>(daSaveEn_SaveEnCompleted); }
private void OKButton_Click(object sender, RoutedEventArgs e) { this.Btn_Save.IsEnabled = false; if (this.IsNew) { WSDesignerSoapClient daCheckID = Glo.GetDesignerServiceInstance(); daCheckID.RunSQLReturnValIntAsync("SELECT count(*) FROM Sys_MapData WHERE No='" + this.TB_No.Text.Trim() + "'"); daCheckID.RunSQLReturnValIntCompleted += new EventHandler <RunSQLReturnValIntCompletedEventArgs>(daCheckID_RunSQLReturnValIntCompleted); } else { this.SaveEn(); } }
void _Service_UploadfileCompleted(object sender, UploadfileCompletedEventArgs e) { if (e.Result.Contains("Error:")) { loadingWindow.Close(); MessageBox.Show(e.Result, "Error", MessageBoxButton.OK); return; } WSDesignerSoapClient daLoadIt = Glo.GetDesignerServiceInstance(); daLoadIt.FlowTemplete_LoadAsync((cbxFlowSortImport.SelectedItem as BindableObject).GetValue("NO"), e.Result, true); daLoadIt.FlowTemplete_LoadCompleted += _service_FlowTemplete_LoadCompleted; }
public FrmLib() { this.MouseRightButtonDown += (sender, e) => { e.Handled = true; }; InitializeComponent(); var client = Glo.GetDesignerServiceInstance(); var sql = "SELECT * FROM Sys_MapData WHERE AppType=0"; client.RunSQLReturnTableCompleted += new EventHandler <RunSQLReturnTableCompletedEventArgs>(client_RunSQLReturnTableCompleted); client.RunSQLReturnTableAsync(sql, true); this.Grid1.LoadingRow += Grid_LoadingRow; this.Grid1.UnloadingRow += Grid_UnloadingRow; this.RB_0.Checked += new RoutedEventHandler(RB_Checked); this.RB_1.Checked += new RoutedEventHandler(RB_Checked); }
private void OKButton_Click(object sender, RoutedEventArgs e) { var selectedItem = tabControl.SelectedItem as TabItem; if (null == selectedItem) { return; } if (selectedItem == tabItem1) { if (buffer == null || buffer.Length <= 0 || file == null || this.comboBox1.SelectedIndex == -1) { MessageBox.Show("请选择模板文件,或者选择导入的类别。", "提示", MessageBoxButton.OK); return; } //调用服务上传 try { loadingWindow.Show(); WSDesignerSoapClient da = Glo.GetDesignerServiceInstance(); da.UploadfileCCFormAsync(buffer, file.Name, this.comboBox1.SelectedValue.ToString()); da.UploadfileCCFormCompleted += new EventHandler <UploadfileCCFormCompletedEventArgs>(da_UploadfileCCFormCompleted); } catch (Exception ex) { this.DialogResult = false; MessageBox.Show(ex.Message, "错误", MessageBoxButton.OK); } } if (selectedItem == tabItem2) { MessageBox.Show("此功能在施工中,敬请期待。或者访问http://templete.ccflow.org 流程与表单模板网下载到本机在导入。", "Sorry", MessageBoxButton.OK); } this.DialogResult = false; }
private void OKButton_Click(object sender, RoutedEventArgs e) { string pk = this.TB_No.Text; if (pk == "系统自动编号...") { pk = ""; } int frmType = this.DDL_FrmType.SelectedIndex; if (frmType == 0 || frmType == 1) { if (this.TB_PTable.Text.Trim().Length == 0) { MessageBox.Show("您需要输入物理表名"); return; } } else { if (this.TB_URL.Text.Trim().Length == 0) { MessageBox.Show("您需要输入 URL "); return; } } string strs = "@EnName=BP.BP.Frm@PKVal=" + pk + "@Name=" + this.TB_Name.Text; strs += "@PTable=" + this.TB_PTable.Text + "@FrmType=" + frmType; strs += "@FK_Flow=" + string.Empty; strs += "@URL=" + this.TB_URL.Text; strs += "@DBURL=" + this.DDL_DBUrl.SelectedIndex; var client = Glo.GetDesignerServiceInstance(); client.DoAsync("SaveFlowFrm", strs, true); client.DoCompleted += new EventHandler <global::WF.WS.DoCompletedEventArgs>(client_DoCompleted); }
private DataTable FindByWorkFlowModel() { this.town = town; DataTable dt = new DataTable(); dt.Columns.Add("No", typeof(string)); string sql; string FK_Emp; // 如果执行了两次发送,那前一次的轨迹就需要被删除,这里是为了避免错误。 ps = new Paras(); ps.Add("WorkID", this.WorkID); ps.Add("FK_Node", town.HisNode.NodeID); ps.SQL = "DELETE FROM WF_GenerWorkerlist WHERE WorkID=" + dbStr + "WorkID AND FK_Node =" + dbStr + "FK_Node"; DBAccess.RunSQL(ps); // 如果指定特定的人员处理。 if (string.IsNullOrEmpty(JumpToEmp) == false) { string[] emps = JumpToEmp.Split(','); foreach (string emp in emps) { if (string.IsNullOrEmpty(emp)) { continue; } DataRow dr = dt.NewRow(); dr[0] = emp; dt.Rows.Add(dr); } return(dt); } // 按上一节点发送人处理。 if (town.HisNode.HisDeliveryWay == DeliveryWay.ByPreviousNodeEmp) { DataRow dr = dt.NewRow(); dr[0] = BP.Web.WebUser.No; dt.Rows.Add(dr); return(dt); } //首先判断是否配置了获取下一步接受人员的sql. if (town.HisNode.HisDeliveryWay == DeliveryWay.BySQL || town.HisNode.HisDeliveryWay == DeliveryWay.BySQLAsSubThreadEmpsAndData) { if (town.HisNode.DeliveryParas.Length < 4) { throw new Exception("@您设置的当前节点按照SQL,决定下一步的接受人员,但是你没有设置sql."); } sql = town.HisNode.DeliveryParas; sql = sql.Clone().ToString(); sql = Glo.DealExp(sql, this.currWn.rptGe, null); if (sql.Contains("@")) { if (Glo.SendHTOfTemp != null) { foreach (string key in Glo.SendHTOfTemp.Keys) { sql = sql.Replace("@" + key, Glo.SendHTOfTemp[key].ToString()); } } } dt = DBAccess.RunSQLReturnTable(sql); if (dt.Rows.Count == 0 && town.HisNode.HisWhenNoWorker != WhenNoWorker.Skip) { throw new Exception("@没有找到可接受的工作人员。@技术信息:执行的sql没有发现人员:" + sql); } return(dt); } #region 照明细表,作为子线程的接收人. if (town.HisNode.HisDeliveryWay == DeliveryWay.ByDtlAsSubThreadEmps) { if (this.town.HisNode.HisRunModel != RunModel.SubThread) { throw new Exception("@您设置的节点接收人方式为:以分流点表单的明细表数据源确定子线程的接收人,但是当前节点非子线程节点。"); } BP.Sys.MapDtls dtls = new BP.Sys.MapDtls(this.currWn.HisNode.NodeFrmID); string msg = null; foreach (BP.Sys.MapDtl dtl in dtls) { try { ps = new Paras(); ps.SQL = "SELECT UserNo FROM " + dtl.PTable + " WHERE RefPK=" + dbStr + "OID ORDER BY OID"; ps.Add("OID", this.WorkID); dt = DBAccess.RunSQLReturnTable(ps); if (dt.Rows.Count == 0 && town.HisNode.HisWhenNoWorker != WhenNoWorker.Skip) { throw new Exception("@流程设计错误,到达的节点(" + town.HisNode.Name + ")在指定的节点中没有数据,无法找到子线程的工作人员。"); } return(dt); } catch (Exception ex) { msg += ex.Message; //if (dtls.Count == 1) // throw new Exception("@估计是流程设计错误,没有在分流节点的明细表中设置"); } } throw new Exception("@没有找到分流节点的明细表作为子线程的发起的数据源,流程设计错误,请确认分流节点表单中的明细表是否有UserNo约定的系统字段。" + msg); } #endregion 照明细表,作为子线程的接收人. #region 节点绑定的人员处理. if (town.HisNode.HisDeliveryWay == DeliveryWay.ByBindEmp) { ps = new Paras(); ps.Add("FK_Node", town.HisNode.NodeID); ps.SQL = "SELECT FK_Emp FROM WF_NodeEmp WHERE FK_Node=" + dbStr + "FK_Node ORDER BY FK_Emp"; dt = DBAccess.RunSQLReturnTable(ps); if (dt.Rows.Count == 0) { throw new Exception("@流程设计错误:下一个节点(" + town.HisNode.Name + ")没有绑定工作人员 . "); } return(dt); } #endregion 节点绑定的人员处理. #region 照选择的人员处理。 if (town.HisNode.HisDeliveryWay == DeliveryWay.BySelected || town.HisNode.HisDeliveryWay == DeliveryWay.ByFEE) { ps = new Paras(); ps.Add("FK_Node", this.town.HisNode.NodeID); ps.Add("WorkID", this.currWn.HisWork.OID); ps.SQL = "SELECT FK_Emp FROM WF_SelectAccper WHERE FK_Node=" + dbStr + "FK_Node AND WorkID=" + dbStr + "WorkID AND AccType=0 ORDER BY IDX"; dt = DBAccess.RunSQLReturnTable(ps); if (dt.Rows.Count == 0) { /*从上次发送设置的地方查询. */ SelectAccpers sas = new SelectAccpers(); int i = sas.QueryAccepterPriSetting(this.town.HisNode.NodeID); if (i == 0) { if (town.HisNode.HisDeliveryWay == DeliveryWay.BySelected) { throw new Exception("@请选择下一步骤工作(" + town.HisNode.Name + ")接受人员。"); } else { throw new Exception("@流程设计错误,请重写FEE,然后为节点(" + town.HisNode.Name + ")设置接受人员,详细请参考cc流程设计手册。"); } } //插入里面. foreach (SelectAccper item in sas) { DataRow dr = dt.NewRow(); dr[0] = item.FK_Emp; dt.Rows.Add(dr); } return(dt); } return(dt); } #endregion 照选择的人员处理。 #region 照指定节点的处理人计算。 if (town.HisNode.HisDeliveryWay == DeliveryWay.BySpecNodeEmp || town.HisNode.HisDeliveryWay == DeliveryWay.ByStarter) { /* 按指定节点岗位上的人员计算 */ string strs = town.HisNode.DeliveryParas; if (town.HisNode.HisDeliveryWay == DeliveryWay.ByStarter) { /*找开始节点的处理人员. */ strs = int.Parse(this.fl.No) + "01"; ps = new Paras(); ps.SQL = "SELECT FK_Emp FROM WF_GenerWorkerList WHERE WorkID=" + dbStr + "OID AND FK_Node=" + dbStr + "FK_Node AND IsPass=1 AND IsEnable=1 "; ps.Add("FK_Node", int.Parse(strs)); ps.Add("OID", this.WorkID); dt = DBAccess.RunSQLReturnTable(ps); if (dt.Rows.Count == 1) { return(dt); } else { /* 有可能当前节点就是第一个节点,那个时间还没有初始化数据,就返回当前人. */ DataRow dr = dt.NewRow(); dr[0] = BP.Web.WebUser.No; dt.Rows.Add(dr); return(dt); } } // 首先从本流程里去找。 strs = strs.Replace(";", ","); string[] nds = strs.Split(','); foreach (string nd in nds) { if (string.IsNullOrEmpty(nd)) { continue; } if (DataType.IsNumStr(nd) == false) { throw new Exception("流程设计错误:您设置的节点(" + town.HisNode.Name + ")的接收方式为按指定的节点岗位投递,但是您没有在访问规则设置中设置节点编号。"); } ps = new Paras(); ps.SQL = "SELECT FK_Emp FROM WF_GenerWorkerList WHERE WorkID=" + dbStr + "OID AND FK_Node=" + dbStr + "FK_Node AND IsPass=1 AND IsEnable=1 "; ps.Add("FK_Node", int.Parse(nd)); if (this.currWn.HisNode.HisRunModel == RunModel.SubThread) { ps.Add("OID", this.currWn.HisWork.FID); } else { ps.Add("OID", this.WorkID); } DataTable dt_ND = DBAccess.RunSQLReturnTable(ps); //添加到结果表 if (dt_ND.Rows.Count != 0) { foreach (DataRow row in dt_ND.Rows) { DataRow dr = dt.NewRow(); dr[0] = row[0].ToString(); dt.Rows.Add(dr); } //此节点已找到数据则不向下找,继续下个节点 continue; } //就要到轨迹表里查,因为有可能是跳过的节点. ps = new Paras(); ps.SQL = "SELECT " + TrackAttr.EmpFrom + " FROM ND" + int.Parse(fl.No) + "Track WHERE (ActionType=" + dbStr + "ActionType1 OR ActionType=" + dbStr + "ActionType2 OR ActionType=" + dbStr + "ActionType3 OR ActionType=" + dbStr + "ActionType4 OR ActionType=" + dbStr + "ActionType5) AND NDFrom=" + dbStr + "NDFrom AND WorkID=" + dbStr + "WorkID"; ps.Add("ActionType1", (int)ActionType.Skip); ps.Add("ActionType2", (int)ActionType.Forward); ps.Add("ActionType3", (int)ActionType.ForwardFL); ps.Add("ActionType4", (int)ActionType.ForwardHL); ps.Add("ActionType5", (int)ActionType.Start); ps.Add("NDFrom", int.Parse(nd)); ps.Add("WorkID", this.WorkID); dt_ND = DBAccess.RunSQLReturnTable(ps); if (dt_ND.Rows.Count != 0) { foreach (DataRow row in dt_ND.Rows) { DataRow dr = dt.NewRow(); dr[0] = row[0].ToString(); dt.Rows.Add(dr); } } } //本流程里没有有可能该节点是配置的父流程节点,也就是说子流程的一个节点与父流程指定的节点的工作人员一致. GenerWorkFlow gwf = new GenerWorkFlow(this.WorkID); if (gwf.PWorkID != 0) { foreach (string pnodeiD in nds) { if (string.IsNullOrEmpty(pnodeiD)) { continue; } Node nd = new Node(int.Parse(pnodeiD)); if (nd.FK_Flow != gwf.PFlowNo) { continue; // 如果不是父流程的节点,就不执行. } ps = new Paras(); ps.SQL = "SELECT FK_Emp FROM WF_GenerWorkerList WHERE WorkID=" + dbStr + "OID AND FK_Node=" + dbStr + "FK_Node AND IsPass=1 AND IsEnable=1 "; ps.Add("FK_Node", nd.NodeID); if (this.currWn.HisNode.HisRunModel == RunModel.SubThread) { ps.Add("OID", gwf.PFID); } else { ps.Add("OID", gwf.PWorkID); } DataTable dt_PWork = DBAccess.RunSQLReturnTable(ps); if (dt_PWork.Rows.Count != 0) { foreach (DataRow row in dt_PWork.Rows) { DataRow dr = dt.NewRow(); dr[0] = row[0].ToString(); dt.Rows.Add(dr); } //此节点已找到数据则不向下找,继续下个节点 continue; } //就要到轨迹表里查,因为有可能是跳过的节点. ps = new Paras(); ps.SQL = "SELECT " + TrackAttr.EmpFrom + " FROM ND" + int.Parse(fl.No) + "Track WHERE (ActionType=" + dbStr + "ActionType1 OR ActionType=" + dbStr + "ActionType2 OR ActionType=" + dbStr + "ActionType3 OR ActionType=" + dbStr + "ActionType4 OR ActionType=" + dbStr + "ActionType5) AND NDFrom=" + dbStr + "NDFrom AND WorkID=" + dbStr + "WorkID"; ps.Add("ActionType1", (int)ActionType.Start); ps.Add("ActionType2", (int)ActionType.Forward); ps.Add("ActionType3", (int)ActionType.ForwardFL); ps.Add("ActionType4", (int)ActionType.ForwardHL); ps.Add("ActionType5", (int)ActionType.Skip); ps.Add("NDFrom", nd.NodeID); if (this.currWn.HisNode.HisRunModel == RunModel.SubThread) { ps.Add("OID", gwf.PFID); } else { ps.Add("OID", gwf.PWorkID); } dt_PWork = DBAccess.RunSQLReturnTable(ps); if (dt_PWork.Rows.Count != 0) { foreach (DataRow row in dt_PWork.Rows) { DataRow dr = dt.NewRow(); dr[0] = row[0].ToString(); dt.Rows.Add(dr); } } } } //返回指定节点的处理人 if (dt.Rows.Count != 0) { return(dt); } throw new Exception("@流程设计错误,到达的节点(" + town.HisNode.Name + ")在指定的节点(" + strs + ")中没有数据,无法找到工作的人员。 @技术信息如下: 投递方式:BySpecNodeEmp sql=" + ps.SQLNoPara); } #endregion 照节点绑定的人员处理。 #region 照上一个节点表单指定字段的人员处理。 if (town.HisNode.HisDeliveryWay == DeliveryWay.ByPreviousNodeFormEmpsField) { // 检查接受人员规则,是否符合设计要求. string specEmpFields = town.HisNode.DeliveryParas; if (string.IsNullOrEmpty(specEmpFields)) { specEmpFields = "SysSendEmps"; } if (this.currWn.HisWork.EnMap.Attrs.Contains(specEmpFields) == false) { throw new Exception("@您设置的当前节点按照指定的人员,决定下一步的接受人员,但是你没有在节点表单中设置该表单" + specEmpFields + "字段。"); } //获取接受人并格式化接受人, string emps = this.currWn.HisWork.GetValStringByKey(specEmpFields); emps = emps.Replace(" ", ""); if (emps.Contains(",") && emps.Contains(";")) { /*如果包含,; 例如 zhangsan,张三;lisi,李四;*/ string[] myemps1 = emps.Split(';'); foreach (string str in myemps1) { if (string.IsNullOrEmpty(str)) { continue; } string[] ss = str.Split(','); DataRow dr = dt.NewRow(); dr[0] = ss[0]; dt.Rows.Add(dr); } if (dt.Rows.Count == 0) { throw new Exception("@输入的接受人员信息错误;[" + emps + "]。"); } else { return(dt); } } emps = emps.Replace(";", ","); emps = emps.Replace(";", ","); emps = emps.Replace(",", ","); emps = emps.Replace("、", ","); emps = emps.Replace("@", ","); if (string.IsNullOrEmpty(emps)) { throw new Exception("@没有在字段[" + this.currWn.HisWork.EnMap.Attrs.GetAttrByKey(specEmpFields).Desc + "]中指定接受人,工作无法向下发送。"); } // 把它加入接受人员列表中. string[] myemps = emps.Split(','); foreach (string s in myemps) { if (string.IsNullOrEmpty(s)) { continue; } //if (BP.DA.DBAccess.RunSQLReturnValInt("SELECT COUNT(NO) AS NUM FROM Port_Emp WHERE NO='" + s + "' or name='"+s+"'", 0) == 0) // continue; DataRow dr = dt.NewRow(); dr[0] = s; dt.Rows.Add(dr); } return(dt); } #endregion 照上一个节点表单指定字段的人员处理。 string prjNo = ""; FlowAppType flowAppType = this.currWn.HisNode.HisFlow.HisFlowAppType; sql = ""; if (this.currWn.HisNode.HisFlow.HisFlowAppType == FlowAppType.PRJ) { prjNo = ""; try { prjNo = this.currWn.HisWork.GetValStrByKey("PrjNo"); } catch (Exception ex) { throw new Exception("@当前流程是工程类流程,但是在节点表单中没有PrjNo字段(注意区分大小写),请确认。@异常信息:" + ex.Message); } } #region 部门与岗位的交集计算. if (town.HisNode.HisDeliveryWay == DeliveryWay.ByDeptAndStation) { //added by liuxc,2015.6.29. //区别集成与BPM模式 if (BP.WF.Glo.OSModel == OSModel.WorkFlow) { sql = "SELECT No FROM Port_Emp WHERE No IN "; sql += "(SELECT FK_Emp FROM Port_EmpDept WHERE FK_Dept IN "; sql += "( SELECT FK_Dept FROM WF_NodeDept WHERE FK_Node=" + dbStr + "FK_Node1)"; sql += ")"; sql += "AND No IN "; sql += "("; sql += "SELECT FK_Emp FROM " + BP.WF.Glo.EmpStation + " WHERE FK_Station IN "; sql += "( SELECT FK_Station FROM WF_NodeStation WHERE FK_Node=" + dbStr + "FK_Node2 )"; sql += ") ORDER BY No "; ps = new Paras(); ps.Add("FK_Node1", town.HisNode.NodeID); ps.Add("FK_Node2", town.HisNode.NodeID); ps.SQL = sql; dt = DBAccess.RunSQLReturnTable(ps); } else { sql = "SELECT pdes.FK_Emp AS No" + " FROM Port_DeptEmpStation pdes" + " INNER JOIN WF_NodeDept wnd ON wnd.FK_Dept = pdes.FK_Dept" + " AND wnd.FK_Node = " + town.HisNode.NodeID + " INNER JOIN WF_NodeStation wns ON wns.FK_Station = pdes.FK_Station" + " AND wns.FK_Node =" + town.HisNode.NodeID + " ORDER BY pdes.FK_Emp"; dt = DBAccess.RunSQLReturnTable(sql); } if (dt.Rows.Count > 0) { return(dt); } else { throw new Exception("@节点访问规则错误:节点(" + town.HisNode.NodeID + "," + town.HisNode.Name + "), 按照岗位与部门的交集确定接受人的范围错误,没有找到人员:SQL=" + sql); } } #endregion 部门与岗位的交集计算. #region 判断节点部门里面是否设置了部门,如果设置了,就按照它的部门处理。 if (town.HisNode.HisDeliveryWay == DeliveryWay.ByDept) { ps = new Paras(); ps.Add("FK_Node", this.town.HisNode.NodeID); ps.Add("WorkID", this.currWn.HisWork.OID); ps.SQL = "SELECT FK_Emp FROM WF_SelectAccper WHERE FK_Node=" + dbStr + "FK_Node AND WorkID=" + dbStr + "WorkID AND AccType=0 ORDER BY IDX"; dt = DBAccess.RunSQLReturnTable(ps); if (dt.Rows.Count > 0) { return(dt); } if (flowAppType == FlowAppType.Normal) { ps = new Paras(); ps.SQL = "SELECT No,Name FROM Port_Emp WHERE FK_Dept IN (SELECT FK_Dept FROM WF_NodeDept WHERE FK_Node=" + dbStr + "FK_Node1)"; ps.SQL += " OR "; ps.SQL += " No IN (SELECT FK_Emp FROM Port_EmpDept WHERE FK_Dept IN ( SELECT FK_Dept FROM WF_NodeDept WHERE FK_Node=" + dbStr + "FK_Node2 ) )"; ps.SQL += " ORDER BY No"; ps.Add("FK_Node1", town.HisNode.NodeID); ps.Add("FK_Node2", town.HisNode.NodeID); dt = DBAccess.RunSQLReturnTable(ps); if (dt.Rows.Count > 0 && town.HisNode.HisWhenNoWorker != WhenNoWorker.Skip) { return(dt); } else { //IsFindWorker = false; // ps.SQL = "SELECT No,Name FROM Port_Emp WHERE FK_Dept IN ( SELECT FK_Dept FROM WF_NodeDept WHERE FK_Node=" + dbStr + "FK_Node )"; throw new Exception("@按部门确定接受人的范围,没有找到人员."); } } if (flowAppType == FlowAppType.PRJ) { sql = "SELECT No FROM Port_Emp WHERE No IN "; sql += "(SELECT FK_Emp FROM Port_EmpDept WHERE FK_Dept IN "; sql += "( SELECT FK_Dept FROM WF_NodeDept WHERE FK_Node=" + dbStr + "FK_Node1)"; sql += ")"; sql += "AND NO IN "; sql += "("; sql += "SELECT FK_Emp FROM Prj_EmpPrjStation WHERE FK_Station IN "; sql += "( SELECT FK_Station FROM WF_NodeStation WHERE FK_Node=" + dbStr + "FK_Node2) AND FK_Prj=" + dbStr + "FK_Prj "; sql += ")"; sql += " ORDER BY No"; ps = new Paras(); ps.Add("FK_Node1", town.HisNode.NodeID); ps.Add("FK_Node2", town.HisNode.NodeID); ps.Add("FK_Prj", prjNo); ps.SQL = sql; dt = DBAccess.RunSQLReturnTable(ps); if (dt.Rows.Count == 0) { /* 如果项目组里没有工作人员就提交到公共部门里去找。*/ sql = "SELECT NO FROM Port_Emp WHERE NO IN "; sql += "(SELECT FK_Emp FROM Port_EmpDept WHERE FK_Dept IN "; sql += "( SELECT FK_Dept FROM WF_NodeDept WHERE FK_Node=" + dbStr + "FK_Node1)"; sql += ")"; sql += "AND NO IN "; sql += "("; sql += "SELECT FK_Emp FROM " + BP.WF.Glo.EmpStation + " WHERE FK_Station IN "; sql += "( SELECT FK_Station FROM WF_NodeStation WHERE FK_Node=" + dbStr + "FK_Node2)"; sql += ")"; sql += " ORDER BY No"; ps = new Paras(); ps.Add("FK_Node1", town.HisNode.NodeID); ps.Add("FK_Node2", town.HisNode.NodeID); ps.SQL = sql; } else { return(dt); } dt = DBAccess.RunSQLReturnTable(ps); if (dt.Rows.Count > 0) { return(dt); } } } #endregion 判断节点部门里面是否设置了部门,如果设置了,就按照它的部门处理。 #region 仅按岗位计算 if (town.HisNode.HisDeliveryWay == DeliveryWay.ByStationOnly) { sql = "SELECT A.FK_Emp FROM " + BP.WF.Glo.EmpStation + " A, WF_NodeStation B WHERE A.FK_Station=B.FK_Station AND B.FK_Node=" + dbStr + "FK_Node ORDER BY A.FK_Emp"; ps = new Paras(); ps.Add("FK_Node", town.HisNode.NodeID); ps.SQL = sql; dt = DBAccess.RunSQLReturnTable(ps); if (dt.Rows.Count > 0) { return(dt); } else { throw new Exception("@节点访问规则错误:节点(" + town.HisNode.NodeID + "," + town.HisNode.Name + "), 按节点岗位与人员部门集合两个纬度计算,没有找到人员:SQL=" + sql); } } #endregion #region 岗位计算(以部门集合为纬度). if (town.HisNode.HisDeliveryWay == DeliveryWay.ByStationAndEmpDept) { sql = "SELECT No FROM Port_Emp WHERE NO IN " + "(SELECT FK_Emp FROM " + BP.WF.Glo.EmpStation + " WHERE FK_Station IN (SELECT FK_Station FROM WF_NodeStation WHERE FK_Node=" + dbStr + "FK_Node) )" + " AND FK_Dept IN " + "(SELECT FK_Dept FROM Port_EmpDept WHERE FK_Emp =" + dbStr + "FK_Emp)"; sql += " ORDER BY No"; ps = new Paras(); ps.Add("FK_Node", town.HisNode.NodeID); ps.Add("FK_Emp", WebUser.No); ps.SQL = sql; //2012.7.16李健修改 //+" AND NO IN " //+ "(SELECT FK_Emp FROM Port_EmpDept WHERE FK_Emp = '" + WebUser.No + "')"; dt = DBAccess.RunSQLReturnTable(ps); if (dt.Rows.Count > 0) { return(dt); } else { throw new Exception("@节点访问规则错误:节点(" + town.HisNode.NodeID + "," + town.HisNode.Name + "), 按节点岗位与人员部门集合两个纬度计算,没有找到人员:SQL=" + sql); } } #endregion string empNo = WebUser.No; string empDept = WebUser.FK_Dept; #region 指定的节点的人员岗位,做为下一步骤的流程接受人。 if (town.HisNode.HisDeliveryWay == DeliveryWay.BySpecNodeEmpStation) { /* 按指定的节点的人员岗位 */ string fk_node = town.HisNode.DeliveryParas; if (DataType.IsNumStr(fk_node) == false) { throw new Exception("流程设计错误:您设置的节点(" + town.HisNode.Name + ")的接收方式为按指定的节点人员岗位投递,但是您没有在访问规则设置中设置节点编号。"); } ps = new Paras(); ps.SQL = "SELECT Rec,FK_Dept FROM ND" + fk_node + " WHERE OID=" + dbStr + "OID"; ps.Add("OID", this.WorkID); dt = DBAccess.RunSQLReturnTable(ps); if (dt.Rows.Count != 1) { throw new Exception("@流程设计错误,到达的节点(" + town.HisNode.Name + ")在指定的节点中没有数据,无法找到工作的人员。"); } empNo = dt.Rows[0][0].ToString(); empDept = dt.Rows[0][1].ToString(); } #endregion 指定的节点人员,做为下一步骤的流程接受人。 #region 最后判断 - 按照岗位来执行。 if (this.currWn.HisNode.IsStartNode == false) { ps = new Paras(); if (flowAppType == FlowAppType.Normal || flowAppType == FlowAppType.DocFlow) { // 如果当前的节点不是开始节点, 从轨迹里面查询。 sql = "SELECT DISTINCT FK_Emp FROM " + BP.WF.Glo.EmpStation + " WHERE FK_Station IN " + "(SELECT FK_Station FROM WF_NodeStation WHERE FK_Node=" + town.HisNode.NodeID + ") " + "AND FK_Emp IN (SELECT FK_Emp FROM WF_GenerWorkerlist WHERE WorkID=" + dbStr + "WorkID AND FK_Node IN (" + DataType.PraseAtToInSql(town.HisNode.GroupStaNDs, true) + ") )"; sql += " ORDER BY FK_Emp "; ps.SQL = sql; ps.Add("WorkID", this.WorkID); } if (flowAppType == FlowAppType.PRJ) { // 如果当前的节点不是开始节点, 从轨迹里面查询。 sql = "SELECT DISTINCT FK_Emp FROM Prj_EmpPrjStation WHERE FK_Station IN " + "(SELECT FK_Station FROM WF_NodeStation WHERE FK_Node=" + dbStr + "FK_Node ) AND FK_Prj=" + dbStr + "FK_Prj " + "AND FK_Emp IN (SELECT FK_Emp FROM WF_GenerWorkerlist WHERE WorkID=" + dbStr + "WorkID AND FK_Node IN (" + DataType.PraseAtToInSql(town.HisNode.GroupStaNDs, true) + ") )"; sql += " ORDER BY FK_Emp "; ps = new Paras(); ps.SQL = sql; ps.Add("FK_Node", town.HisNode.NodeID); ps.Add("FK_Prj", prjNo); ps.Add("WorkID", this.WorkID); dt = DBAccess.RunSQLReturnTable(ps); if (dt.Rows.Count == 0) { /* 如果项目组里没有工作人员就提交到公共部门里去找。*/ sql = "SELECT DISTINCT FK_Emp FROM " + BP.WF.Glo.EmpStation + " WHERE FK_Station IN " + "(SELECT FK_Station FROM WF_NodeStation WHERE FK_Node=" + dbStr + "FK_Node ) " + "AND FK_Emp IN (SELECT FK_Emp FROM WF_GenerWorkerlist WHERE WorkID=" + dbStr + "WorkID AND FK_Node IN (" + DataType.PraseAtToInSql(town.HisNode.GroupStaNDs, true) + ") )"; sql += " ORDER BY FK_Emp "; ps = new Paras(); ps.SQL = sql; ps.Add("FK_Node", town.HisNode.NodeID); ps.Add("WorkID", this.WorkID); } else { return(dt); } } dt = DBAccess.RunSQLReturnTable(ps); // 如果能够找到. if (dt.Rows.Count >= 1) { if (dt.Rows.Count == 1) { /*如果人员只有一个的情况,说明他可能要 */ } return(dt); } } /* 如果执行节点 与 接受节点岗位集合一致 */ if (this.currWn.HisNode.GroupStaNDs == town.HisNode.GroupStaNDs) { /* 说明,就把当前人员做为下一个节点处理人。*/ DataRow dr = dt.NewRow(); dr[0] = WebUser.No; dt.Rows.Add(dr); return(dt); } /* 如果执行节点 与 接受节点岗位集合不一致 */ if (this.currWn.HisNode.GroupStaNDs != town.HisNode.GroupStaNDs) { /* 没有查询到的情况下, 先按照本部门计算。*/ if (flowAppType == FlowAppType.Normal) { if (BP.WF.Glo.OSModel == OSModel.BPM) { sql = "SELECT FK_Emp as No FROM Port_DeptEmpStation A, WF_NodeStation B WHERE A.FK_Station=B.FK_Station AND B.FK_Node=" + dbStr + "FK_Node AND A.FK_Dept=" + dbStr + "FK_Dept"; } else { sql = "SELECT FK_Emp as No FROM Port_EmpStation A, WF_NodeStation B, Port_Emp C WHERE A.FK_Station=B.FK_Station AND A.FK_Emp=C.No AND B.FK_Node=" + dbStr + "FK_Node AND C.FK_Dept=" + dbStr + "FK_Dept"; } ps = new Paras(); ps.SQL = sql; ps.Add("FK_Node", town.HisNode.NodeID); ps.Add("FK_Dept", empDept); } if (flowAppType == FlowAppType.PRJ) { sql = "SELECT FK_Emp FROM Prj_EmpPrjStation WHERE FK_Prj=" + dbStr + "FK_Prj1 AND FK_Station IN (SELECT FK_Station FROM WF_NodeStation WHERE FK_Node=" + dbStr + "FK_Node)" + " AND FK_Prj=" + dbStr + "FK_Prj2 "; sql += " ORDER BY FK_Emp "; ps = new Paras(); ps.SQL = sql; ps.Add("FK_Prj1", prjNo); ps.Add("FK_Node", town.HisNode.NodeID); ps.Add("FK_Prj2", prjNo); dt = DBAccess.RunSQLReturnTable(ps); if (dt.Rows.Count == 0) { /* 如果项目组里没有工作人员就提交到公共部门里去找。 */ sql = "SELECT No FROM Port_Emp WHERE NO IN " + "(SELECT FK_Emp FROM " + BP.WF.Glo.EmpStation + " WHERE FK_Station IN (SELECT FK_Station FROM WF_NodeStation WHERE FK_Node=" + dbStr + "FK_Node))" + " AND NO IN " + "(SELECT FK_Emp FROM Port_EmpDept WHERE FK_Dept =" + dbStr + "FK_Dept)"; sql += " ORDER BY No "; ps = new Paras(); ps.SQL = sql; ps.Add("FK_Node", town.HisNode.NodeID); ps.Add("FK_Dept", empDept); // dt = DBAccess.RunSQLReturnTable(ps); } else { return(dt); } } dt = DBAccess.RunSQLReturnTable(ps); if (dt.Rows.Count == 0) { NodeStations nextStations = town.HisNode.NodeStations; if (nextStations.Count == 0) { throw new Exception("节点没有岗位:" + town.HisNode.NodeID + " " + town.HisNode.Name); } } else { bool isInit = false; foreach (DataRow dr in dt.Rows) { if (dr[0].ToString() == BP.Web.WebUser.No) { /* 如果岗位分组不一样,并且结果集合里还有当前的人员,就说明了出现了当前操作员,拥有本节点上的岗位也拥有下一个节点的工作岗位 * 导致:节点的分组不同,传递到同一个人身上。 */ isInit = true; } } #warning edit by peng, 用来确定不同岗位集合的传递包含同一个人的处理方式。 // if (isInit == false || isInit == true) return(dt); } } /*这里去掉了向下级别寻找的算法. */ /* 没有查询到的情况下, 按照最大匹配数 提高一个级别计算,递归算法未完成。 * 因为:以上已经做的岗位的判断,就没有必要在判断其它类型的节点处理了。 * */ string nowDeptID = empDept.Clone() as string; while (true) { BP.Port.Dept myDept = new BP.Port.Dept(nowDeptID); nowDeptID = myDept.ParentNo; if (nowDeptID == "-1" || nowDeptID.ToString() == "0") { break; /*一直找到了最高级仍然没有发现,就跳出来循环从当前操作员人部门向下找。*/ throw new Exception("@按岗位计算没有找到(" + town.HisNode.Name + ")接受人."); } //检查指定的部门下面是否有该人员. DataTable mydtTemp = this.Func_GenerWorkerList_DiGui(nowDeptID, empNo); if (mydtTemp == null) { /*如果父亲级没有,就找父级的平级. */ BP.Port.Depts myDepts = new BP.Port.Depts(); myDepts.Retrieve(BP.Port.DeptAttr.ParentNo, myDept.ParentNo); foreach (BP.Port.Dept item in myDepts) { if (item.No == nowDeptID) { continue; } mydtTemp = this.Func_GenerWorkerList_DiGui(item.No, empNo); if (mydtTemp == null) { continue; } else { return(mydtTemp); } } continue; /*如果平级也没有,就continue.*/ } else { return(mydtTemp); } } /*如果向上找没有找到,就考虑从本级部门上向下找。 */ nowDeptID = empDept.Clone() as string; BP.Port.Depts subDepts = new BP.Port.Depts(nowDeptID); //递归出来子部门下有该岗位的人员 DataTable mydt = Func_GenerWorkerList_DiGui_ByDepts(subDepts, empNo); if (mydt == null) { throw new Exception("@按岗位计算没有找到(" + town.HisNode.Name + ")接受人."); } return(mydt); #endregion 照岗位来执行。 }
void daBindFrm_RunSQLReturnTableSCompleted(object sender, RunSQLReturnTableSCompletedEventArgs e) { this.Btn_Del.IsEnabled = false; this.Btn_Save.IsEnabled = false; DataSet ds = new DataSet(); ds.FromXml(e.Result); DataTable dtSort = ds.Tables[0]; if (dtSort.Rows.Count == 0) { DataRow dr = dtSort.NewRow(); dr[0] = "01"; dr[1] = "默认类别"; dtSort.Rows.Add(dr); } if (this.IsNew) { Glo.Ctrl_DDL_BindDataTable(this.DDL_FrmSort, dtSort, "01"); this.HisAppType = AppType.Application; this.Btn_Del.IsEnabled = true; this.Btn_Save.IsEnabled = true; return; } DataTable dtMapdata = ds.Tables[1]; if (dtMapdata.Rows.Count == 0) { MessageBox.Show("数据已被删除,请刷新列表。"); this.DialogResult = false; return; } this.TB_No.Text = dtMapdata.Rows[0]["No"]; this.TB_Name.Text = dtMapdata.Rows[0]["Name"]; this.TB_PTable.Text = dtMapdata.Rows[0]["PTable"]; string tag = dtMapdata.Rows[0]["Tag"]; if (tag != null) { this.TB_URL.Text = tag; } this.TB_Designer.Text = dtMapdata.Rows[0]["Designer"]; this.TB_DesignerUnit.Text = dtMapdata.Rows[0]["DesignerUnit"]; this.TB_DesignerContact.Text = dtMapdata.Rows[0]["DesignerContact"]; // 应用类型。 this.HisAppType = (AppType)int.Parse(dtMapdata.Rows[0]["AppType"]); Glo.Ctrl_DDL_SetSelectVal(this.DDL_DBUrl, dtMapdata.Rows[0]["DBURL"]); Glo.Ctrl_DDL_SetSelectVal(this.DDL_FrmType, dtMapdata.Rows[0]["FrmType"]); Glo.Ctrl_DDL_BindDataTable(this.DDL_FrmSort, dtSort, dtMapdata.Rows[0]["FK_FrmSort"]); if (this.HisAppType == AppType.Application) { this.Btn_Del.IsEnabled = true; this.Btn_Save.IsEnabled = true; } }
/// <summary> /// 执行 /// </summary> /// <returns>返回执行结果</returns> public override object Do() { string err = ""; try { //删除现有的数据。 BP.DA.DBAccess.RunSQL("DELETE FROM WF_CH"); //查询全部的数据. BP.WF.Nodes nds = new Nodes(); nds.RetrieveAll(); foreach (Node nd in nds) { string sql = "SELECT * FROM ND" + int.Parse(nd.FK_Flow) + "TRACK WHERE NDFrom=" + nd.NodeID + " ORDER BY WorkID, RDT "; System.Data.DataTable dt = BP.DA.DBAccess.RunSQLReturnTable(sql); string priRDT = null; string sdt = null; foreach (DataRow dr in dt.Rows) { //向下发送. int atInt = (int)dr[BP.WF.TrackAttr.ActionType]; ActionType at = (ActionType)atInt; switch (at) { case ActionType.Forward: case ActionType.ForwardAskfor: case ActionType.ForwardFL: case ActionType.ForwardHL: break; default: continue; } //相关的变量. Int64 workid = Int64.Parse(dr[TrackAttr.WorkID].ToString()); Int64 fid = Int64.Parse(dr[TrackAttr.FID].ToString()); //当前的人员,如果不是就让其登录. string fk_emp = dr[BP.WF.TrackAttr.EmpFrom] as string; if (BP.Web.WebUser.No != fk_emp) { try { BP.WF.Dev2Interface.Port_Login(fk_emp); } catch (Exception ex) { err += "@人员错误:" + fk_emp + "可能该人员已经删除." + ex.Message; } } //标题. string title = BP.DA.DBAccess.RunSQLReturnStringIsNull("select title from wf_generworkflow where workid=" + workid, ""); //调用他. Glo.InitCH(nd.HisFlow, nd, workid, fid, title, priRDT, sdt, DataType.ParseSysDate2DateTime(dr[TrackAttr.RDT].ToString())); priRDT = dr[TrackAttr.RDT].ToString(); sdt = "无"; } } } catch (Exception ex) { return("生成考核失败:" + ex.StackTrace); } //登录. BP.WF.Dev2Interface.Port_Login("admin"); return("执行成功,有如下信息:" + err); }
public void PrintDoc(BillTemplate en) { Node nd = new Node(this.FK_Node); Work wk = nd.HisWork; wk.OID = this.WorkID; wk.Retrieve(); string msg = ""; string file = DataType.CurrentYear + "_" + WebUser.FK_Dept + "_" + en.No + "_" + this.WorkID + ".doc"; BP.Rpt.RTF.RTFEngine rtf = new BP.Rpt.RTF.RTFEngine(); // Works works; string[] paths; string path; try { #region 生成单据 rtf.HisEns.Clear(); rtf.EnsDataDtls.Clear(); rtf.AddEn(wk); rtf.ensStrs += ".ND" + wk.NodeID; ArrayList al = wk.GetDtlsDatasOfArrayList(); foreach (Entities ens in al) { rtf.AddDtlEns(ens); } BP.Sys.GEEntity ge = new BP.Sys.GEEntity("ND" + int.Parse(nd.FK_Flow) + "Rpt"); ge.Copy(wk); rtf.HisGEEntity = ge; paths = file.Split('_'); path = paths[0] + "/" + paths[1] + "/" + paths[2] + "/"; path = BP.WF.Glo.FlowFileBill + DataType.CurrentYear + "\\" + WebUser.FK_Dept + "\\" + en.No + "\\"; if (System.IO.Directory.Exists(path) == false) { System.IO.Directory.CreateDirectory(path); } // rtf.ensStrs = ".ND"; rtf.MakeDoc(en.Url + ".rtf", path, file, en.ReplaceVal, false); #endregion #region 转化成pdf. if (en.HisBillFileType == BillFileType.PDF) { string rtfPath = path + file; string pdfPath = rtfPath.Replace(".doc", ".pdf"); try { Glo.Rtf2PDF(rtfPath, pdfPath); file = file.Replace(".doc", ".pdf"); System.IO.File.Delete(rtfPath); file = file.Replace(".doc", ".pdf"); //System.IO.File.Delete(rtfPath); } catch (Exception ex) { msg += ex.Message; } } #endregion string url = this.Request.ApplicationPath + "/DataUser/Bill/" + DataType.CurrentYear + "/" + WebUser.FK_Dept + "/" + en.No + "/" + file; this.Response.Redirect(url, false); // BP.PubClass.OpenWordDocV2( path+file, en.Name); } catch (Exception ex) { BP.WF.DTS.InitBillDir dir = new BP.WF.DTS.InitBillDir(); dir.Do(); path = BP.WF.Glo.FlowFileBill + DataType.CurrentYear + "\\" + WebUser.FK_Dept + "\\" + en.No + "\\"; string msgErr = "@生成单据失败,请让管理员检查目录设置 [" + BP.WF.Glo.FlowFileBill + "]。@Err:" + ex.Message + " @File=" + file + " @Path:" + path; throw new Exception(msgErr + "@其它信息:" + ex.Message); } }
/// <summary> /// 执行 /// </summary> /// <returns>返回执行结果</returns> public override object Do() { //string sql = "SELECT * FROM WF_EmpWorks WHERE FK_Node IN (SELECT NodeID FROM WF_Node WHERE OutTimeDeal >0 ) AND SDT <='" + DataType.CurrentData + "' ORDER BY FK_Emp"; //改成小于号SDT <'" + DataType.CurrentData string sql = "SELECT * FROM WF_EmpWorks WHERE FK_Node IN (SELECT NodeID FROM WF_Node WHERE OutTimeDeal >0 ) AND SDT <'" + DataType.CurrentData + "' ORDER BY FK_Emp"; //string sql = "SELECT * FROM WF_EmpWorks WHERE FK_Node IN (SELECT NodeID FROM WF_Node WHERE OutTimeDeal >0 ) AND SDT <='2013-12-30' ORDER BY FK_Emp"; DataTable dt = DBAccess.RunSQLReturnTable(sql); string msg = ""; string dealWorkIDs = ""; foreach (DataRow dr in dt.Rows) { string FK_Emp = dr["FK_Emp"].ToString(); string fk_flow = dr["FK_Flow"].ToString(); int fk_node = int.Parse(dr["FK_Node"].ToString()); Int64 workid = Int64.Parse(dr["WorkID"].ToString()); Int64 fid = Int64.Parse(dr["FID"].ToString()); // 方式两个人同时处理一件工作, 一个人处理后,另外一个人还可以处理的情况. if (dealWorkIDs.Contains("," + workid + ",")) { continue; } dealWorkIDs += "," + workid + ","; if (WebUser.No != FK_Emp) { Emp emp = new Emp(FK_Emp); BP.Web.WebUser.SignInOfGener(emp); } BP.WF.Template.NodeExt nd = new BP.WF.Template.NodeExt(); nd.NodeID = fk_node; nd.Retrieve(); // 首先判断是否有启动的表达式, 它是是否自动执行的总阀门。 if (DataType.IsNullOrEmpty(nd.DoOutTimeCond) == false) { Node nodeN = new Node(nd.NodeID); Work wk = nodeN.HisWork; wk.OID = workid; wk.Retrieve(); string exp = nd.DoOutTimeCond.Clone() as string; if (Glo.ExeExp(exp, wk) == false) { continue; // 不能通过条件的设置. } } switch (nd.HisOutTimeDeal) { case OutTimeDeal.None: break; case OutTimeDeal.AutoTurntoNextStep: //自动转到下一步骤. if (DataType.IsNullOrEmpty(nd.DoOutTime)) { /*如果是空的,没有特定的点允许,就让其它向下执行。*/ msg += BP.WF.Dev2Interface.Node_SendWork(fk_flow, workid).ToMsgOfText(); } else { int nextNode = Dev2Interface.Node_GetNextStepNode(fk_flow, workid); if (nd.DoOutTime.Contains(nextNode.ToString())) /*如果包含了当前点的ID,就让它执行下去.*/ { msg += BP.WF.Dev2Interface.Node_SendWork(fk_flow, workid).ToMsgOfText(); } } break; case OutTimeDeal.AutoJumpToSpecNode: //自动的跳转下一个节点. if (DataType.IsNullOrEmpty(nd.DoOutTime)) { throw new Exception("@设置错误,没有设置要跳转的下一步节点."); } int nextNodeID = int.Parse(nd.DoOutTime); msg += BP.WF.Dev2Interface.Node_SendWork(fk_flow, workid, null, null, nextNodeID, null).ToMsgOfText(); break; case OutTimeDeal.AutoShiftToSpecUser: //移交给指定的人员. msg += BP.WF.Dev2Interface.Node_Shift(workid, nd.DoOutTime, "来自ccflow的自动消息:(" + BP.Web.WebUser.Name + ")工作未按时处理(" + nd.Name + "),现在移交给您。"); break; case OutTimeDeal.SendMsgToSpecUser: //向指定的人员发消息. BP.WF.Dev2Interface.Port_SendMsg(nd.DoOutTime, "来自ccflow的自动消息:(" + BP.Web.WebUser.Name + ")工作未按时处理(" + nd.Name + ")", "感谢您选择ccflow.", "SpecEmp" + workid); break; case OutTimeDeal.DeleteFlow: //删除流程. msg += BP.WF.Dev2Interface.Flow_DoDeleteFlowByReal(fk_flow, workid, true); break; case OutTimeDeal.RunSQL: msg += BP.DA.DBAccess.RunSQL(nd.DoOutTime); break; default: throw new Exception("@错误没有判断的超时处理方式." + nd.HisOutTimeDeal); } } Emp emp1 = new Emp("admin"); BP.Web.WebUser.SignInOfGener(emp1); return(msg); }
void btn_Click(object sender, EventArgs e) { Button btn = (Button)sender; if (btn.ID == "Btn_Cancel") { string url = "../MyFlow.aspx?FK_Flow=" + this.FK_Flow + "&FK_Node=" + this.FK_Node + "&WorkID=" + this.WorkID + "&FID=" + this.FID; this.Response.Redirect(url, true); return; } #region 计算出来到达的节点. //获得当前节点到达的节点. Nodes nds = new Nodes(); if (this.ToNodes != null) { /*解决跳转问题.*/ string[] mytoNodes = this.ToNodes.Split(','); foreach (string str in mytoNodes) { if (string.IsNullOrEmpty(str) == true) { continue; } nds.AddEntity(new Node(int.Parse(str))); } } else { nds = BP.WF.Dev2Interface.WorkOpt_GetToNodes(this.FK_Flow, this.FK_Node, this.WorkID, this.FID); } // 首先到非异表单去找. string toNodes = ""; foreach (Node mynd in nds) { if (mynd.HisRunModel == RunModel.SubThread && mynd.HisSubThreadType == SubThreadType.UnSameSheet) { continue; //如果是子线程节点. } if (mynd.NodeID == 0) { continue; } BP.Web.Controls.RadioBtn rb = this.Pub1.GetRadioBtnByID("RB_" + mynd.NodeID); if (rb.Checked == false) { continue; } toNodes = mynd.NodeID.ToString(); break; } if (toNodes == "") { // 如果在非异表单没有找到,就到异表单集合去找。 检查是否具有异表单的子线程. bool isHave = false; foreach (Node mynd in nds) { if (mynd.NodeID == 0) { isHave = true; } } if (isHave) { /*增加异表单的子线程*/ foreach (Node mynd in nds) { if (mynd.HisSubThreadType != SubThreadType.UnSameSheet) { continue; } CheckBox cb = this.Pub1.GetCBByID("CB_" + mynd.NodeID); if (cb == null) { continue; } if (cb.Checked == true) { toNodes += "," + mynd.NodeID; } } } } #endregion 计算出来选择的到达节点. if (toNodes == "") { this.Pub1.AddFieldSetRed("发送出现错误", "您没有选择到达的节点。"); return; } // 执行发送. string msg = ""; Node nd = new Node(this.FK_Node); Work wk = nd.HisWork; wk.OID = this.WorkID; wk.Retrieve(); try { string toNodeStr = int.Parse(FK_Flow) + "01"; //如果为开始节点 if (toNodeStr == toNodes) { //把参数更新到数据库里面. GenerWorkFlow gwf = new GenerWorkFlow(); gwf.WorkID = this.WorkID; gwf.RetrieveFromDBSources(); gwf.Paras_ToNodes = toNodes; gwf.Save(); WorkNode firstwn = new WorkNode(wk, nd); Node toNode = new Node(toNodeStr); msg = firstwn.NodeSend(toNode, gwf.Starter).ToMsgOfHtml(); } else { msg = BP.WF.Dev2Interface.WorkOpt_SendToNodes(this.FK_Flow, this.FK_Node, this.WorkID, this.FID, toNodes).ToMsgOfHtml(); } } catch (Exception ex) { this.Pub1.AddFieldSetRed("发送出现错误", ex.Message); return; } #region 处理通用的发送成功后的业务逻辑方法,此方法可能会抛出异常. try { //处理通用的发送成功后的业务逻辑方法,此方法可能会抛出异常. Glo.DealBuinessAfterSendWork(this.FK_Flow, this.WorkID, this.DoFunc, WorkIDs, this.CFlowNo, 0, null); } catch (Exception ex) { this.ToMsg(msg, ex.Message); return; } #endregion 处理通用的发送成功后的业务逻辑方法,此方法可能会抛出异常. /*处理转向问题.*/ switch (nd.HisTurnToDeal) { case TurnToDeal.SpecUrl: string myurl = nd.TurnToDealDoc.Clone().ToString(); if (myurl.Contains("&") == false) { myurl += "?1=1"; } myurl = BP.WF.Glo.DealExp(myurl, wk, null); myurl += "&FromFlow=" + this.FK_Flow + "&FromNode=" + this.FK_Node + "&PWorkID=" + this.WorkID + "&UserNo=" + WebUser.No + "&SID=" + WebUser.SID; this.Response.Redirect(myurl, true); return; case TurnToDeal.TurnToByCond: TurnTos tts = new TurnTos(this.FK_Flow); if (tts.Count == 0) { throw new Exception("@您没有设置节点完成后的转向条件。"); } foreach (TurnTo tt in tts) { tt.HisWork = wk; if (tt.IsPassed == true) { string url = tt.TurnToURL.Clone().ToString(); if (url.Contains("&") == false) { url += "?1=1"; } url = BP.WF.Glo.DealExp(url, wk, null); url += "&PFlowNo=" + this.FK_Flow + "&FromNode=" + this.FK_Node + "&PWorkID=" + this.WorkID + "&UserNo=" + WebUser.No + "&SID=" + WebUser.SID; this.Response.Redirect(url, true); return; } } #warning 为上海修改了如果找不到路径就让它按系统的信息提示。 this.ToMsg(msg, "info"); //throw new Exception("您定义的转向条件不成立,没有出口。"); break; default: this.ToMsg(msg, "info"); break; } return; }