/// <summary> /// 设置信息. /// </summary> /// <param name="keyVals"></param> public static void SetValToCookie(string keyVals) { if (BP.Sys.SystemConfig.IsBSsystem == false) { return; } HttpCookie hc = BP.Sys.Glo.Request.Cookies["CCS"]; if (hc != null) { BP.Sys.Glo.Request.Cookies.Remove("CCS"); } HttpCookie cookie = new HttpCookie("CCS"); cookie.Expires = DateTime.Now.AddMinutes(SystemConfig.SessionLostMinute); AtPara ap = new AtPara(keyVals); foreach (string key in ap.HisHT.Keys) { cookie.Values.Add(key, HttpUtility.UrlEncode(ap.GetValStrByKey(key))); } System.Web.HttpContext.Current.Response.AppendCookie(cookie); }
/// <summary> /// 执行发送 /// </summary> /// <param name="para"></param> public void DoSend(AtPara para) { Globals.ThisAddIn.DoSave(); object obj = Type.Missing; Globals.ThisAddIn.Application.ActiveDocument.Close(ref obj, ref obj, ref obj); }
public void DoDelete() { Prj prj = new Prj(this.FK_Prj); AtPara ap = new AtPara(prj.Files); string file = ap.GetValStrByKey(this.IDX.ToString()); File.Delete(file); this.WinClose(); }
public void DoDown() { Prj prj = new Prj(this.FK_Prj); AtPara ap = new AtPara(prj.Files); string file = ap.GetValStrByKey(this.IDX.ToString()); FileInfo fi = new FileInfo(file); BP.PubClass.DownloadFile(fi.FullName, fi.Name); this.WinClose(); }
/// <summary> /// UI的设置.Search. Card, Group信息. /// </summary> /// <param name="enName"></param> public UIConfig(Entity en) { this.HisEn = en; EnCfg cfg = new EnCfg(en.ToString()); string paraStr = cfg.UI; if (DataType.IsNullOrEmpty(paraStr) == true) { paraStr = "@UIRowStyleGlo=0@IsEnableDouclickGlo=1@IsEnableRefFunc=1@IsEnableFocusField=1@IsEnableOpenICON=1@FocusField=''@WinCardH=600@@WinCardW=800@ShowColumns="; } HisAP = new AtPara(paraStr); }
/// <summary> /// 打开流程 /// </summary> /// <param name="para"></param> public void DoOpenFlow(AtPara para) { string fk_flow = para.GetValStrByKey("FK_Flow"); int workid = para.GetValIntByKey("WorkID"); int fk_node = para.GetValIntByKey("FK_Node"); if (WebUser.WorkID == workid && WebUser.FK_Node == fk_node) { if (MessageBox.Show("当前流程已经打开,您想重新加载吗?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.No) { this.webBrowser1.GoBack(); return; } } string file = Glo.PathOfTInstall + workid + "@" + WebUser.No + ".doc"; if (File.Exists(file) == false) { try { FtpSupport.FtpConnection conn = Glo.HisFtpConn; if (conn.DirectoryExist("/DocFlow/" + fk_flow + "/" + workid)) { conn.SetCurrentDirectory("/DocFlow/" + fk_flow + "/" + workid); conn.GetFile(workid + ".doc", file, true, FileAttributes.Archive); conn.Close(); } else { throw new Exception("@没有找到文件,流程文件丢失错误。"); } } catch (Exception ex) { MessageBox.Show("@打开公文错误@技术信息:" + ex.Message + "@流程编号:" + WebUser.FK_Flow); return; } } WebUser.FK_Flow = fk_flow; WebUser.FK_Node = fk_node; WebUser.WorkID = workid; WebUser.RetrieveWFNode(WebUser.FK_Node); /*如果存在这个文件,就激活它。*/ WebUser.WriterIt(StartFlag.DoOpenFlow, fk_flow, fk_node, workid); this.OpenDoc(file, false); this.Close(); }
/// <summary> /// 获取当前用户是否具有导出数据的权限 /// <para>added by liuxc,2017-04-30</para> /// <remarks>注意:此权限数据保存于Sys_Regedit.Paras字段中,为@ExpEmpNos=liyan,liping,ligen格式</remarks> /// </summary> /// <param name="ensName">集合类全名,如BP.Port.Emps</param> /// <returns></returns> public static bool HaveRoleForExp(string ensName) { //获取可导入权限 UserRegedit ur = new UserRegedit("admin", ensName + "_SearchAttrs"); string impEmps = new AtPara(ur.Paras).GetValStrByKey("ExpEmpNos"); if (string.IsNullOrWhiteSpace(impEmps)) { return(true); } else { return(WebUser.No == "admin" || ("," + impEmps + ",").IndexOf("," + WebUser.No + ",") != -1); } }
public void DoOpenDoc(AtPara para) { string fk_flow = para.GetValStrByKey("FK_Flow"); int workid = para.GetValIntByKey("WorkID"); int fk_node = para.GetValIntByKey("FK_Node"); string file = Glo.PathOfTInstall + workid + "@" + WebUser.No + ".doc"; if (File.Exists(file) == false) { try { FtpSupport.FtpConnection conn = Glo.HisFtpConn; if (conn.DirectoryExist("/DocFlow/" + fk_flow + "/" + workid)) { conn.SetCurrentDirectory("/DocFlow/" + fk_flow + "/" + workid); conn.GetFile(workid + ".doc", file, true, FileAttributes.Archive); conn.Close(); } else { throw new Exception("@没有找到文件,流程错误。"); } } catch (Exception ex) { MessageBox.Show("@打开公文错误@技术信息:" + ex.Message + "@流程编号:" + WebUser.FK_Flow); return; } } WebUser.FK_Flow = fk_flow; WebUser.FK_Node = fk_node; WebUser.WorkID = workid; WebUser.RetrieveWFNode(WebUser.FK_Node); /*如果存在这个文件,就激活它。*/ WebUser.WriterIt(StartFlag.DoOpenDoc, fk_flow, fk_node, workid); this.OpenDoc(file, false); this.HisRibbon1.SetState(); this.Close(); }
public string SaveEn(string vals) { Entity en = null; try { AtPara ap = new AtPara(vals); string enName = ap.GetValStrByKey("EnName"); string pk = ap.GetValStrByKey("PKVal"); en = ClassFactory.GetEn(enName); en.ResetDefaultVal(); if (en == null) { throw new Exception("无效的类名:" + enName); } if (string.IsNullOrEmpty(pk) == false) { en.PKVal = pk; en.RetrieveFromDBSources(); } foreach (string key in ap.HisHT.Keys) { if (key == "PKVal") { continue; } en.SetValByKey(key, ap.HisHT[key].ToString().Replace('#', '@')); } en.Save(); return(en.PKVal as string); } catch (Exception ex) { if (en != null) { en.CheckPhysicsTable(); } return("Error:" + ex.Message); } }
/// <summary> /// 发起流程 /// </summary> /// <param name="para"></param> public void DoStartFlow(AtPara para) { string fk_flow = para.GetValStrByKey("FK_Flow"); string workid = para.GetValStrByKey("WorkID"); string file = Glo.PathOfTInstall + workid + "@" + WebUser.No + ".doc"; if (File.Exists(file) == false) { try { FtpSupport.FtpConnection conn = Glo.HisFtpConn; if (conn.DirectoryExist("/DocFlow/" + fk_flow + "/" + workid)) { conn.SetCurrentDirectory("/DocFlow/" + fk_flow + "/" + workid); if (conn.FileExist(WebUser.FK_Node + "@" + WebUser.No + ".doc")) { conn.GetFile(WebUser.FK_Node + "@" + WebUser.No + ".doc", file, true, FileAttributes.Archive); } else { file = null; } } else { file = null; } conn.Close(); } catch (Exception ex) { MessageBox.Show("@流程设计错误,没有为该流程维护公文模板。@技术信息:" + ex.Message + "@流程编号:" + WebUser.FK_Flow); return; } } WebUser.FK_Flow = fk_flow; WebUser.WorkID = int.Parse(workid); /*如果存在这个文件,就激活它。*/ WebUser.WriterIt(StartFlag.DoNewFlow, fk_flow, int.Parse(fk_flow + "01"), int.Parse(workid)); this.OpenDoc(file, false); this.Close(); }
protected void Page_Load(object sender, EventArgs e) { this.Title = "您好:" + WebUser.No + ";选择范围"; UserRegedit ur = new UserRegedit(); ur.MyPK = this.MyPK; if (ur.RetrieveFromDBSources() == 0) { ur.MyPK = this.MyPK; ur.FK_Emp = WebUser.No; ur.CfgKey = this.EnsName + "_SearchAttrs"; ur.Insert(); } Entity en = BP.DA.ClassFactory.GetEns(this.EnsName).GetNewEntity; Attr attr = en.EnMap.GetAttrByKey(this.AttrKey); string cfgVal = ur.MVals; if (string.IsNullOrEmpty(cfgVal)) { cfgVal = ""; } AtPara ap = new AtPara(cfgVal); cfgVal = ap.GetValStrByKey(this.AttrKey); if (string.IsNullOrEmpty(cfgVal)) { cfgVal = ""; } if (attr.IsEnum) { this.BindEnum(ur, attr, cfgVal); } else { this.BindEns(ur, attr, cfgVal); } }
void btn_Upload_Click(object sender, EventArgs e) { System.Web.UI.WebControls.FileUpload fu = this.Pub1.FindControl("file") as System.Web.UI.WebControls.FileUpload; if (fu.HasFile == false || fu.FileName.Length <= 2) { this.Alert("请选择上传的文件."); return; } Prj prj = new Prj(this.FK_Prj); AtPara ap = new AtPara(prj.Files); string file = ap.GetValStrByKey(this.IDX.ToString()); try { fu.SaveAs(file); } catch { string root = BP.SystemConfig.PathOfDataUser + "\\PrjData\\Templete\\" + this.FK_Prj; string rootData = BP.SystemConfig.PathOfDataUser + "\\PrjData\\Data\\" + this.FK_Prj; if (Directory.Exists(rootData) == false) { Directory.CreateDirectory(rootData); } string[] strs = System.IO.Directory.GetDirectories(root); foreach (string str in strs) { DirectoryInfo info = new DirectoryInfo(str); if (Directory.Exists(rootData + "\\" + info.Name) == false) { Directory.CreateDirectory(rootData + "\\" + info.Name); } } fu.SaveAs(file); } this.WinClose(); }
/// <summary> /// 按照模板生成公文 /// </summary> /// <param name="para"></param> public void DoStartFlowByTemple(AtPara para) { string fk_flow = para.GetValStrByKey("FK_Flow"); // 下载流程模板 FtpSupport.FtpConnection conn = Glo.HisFtpConn; string file = Glo.PathOfTInstall + fk_flow + "@" + DateTime.Now.ToString("MM月dd日hh时mm分ss秒") + ".doc"; try { conn.SetCurrentDirectory("/DocFlowTemplete/"); if (conn.FileExist(fk_flow + ".doc") == false) { throw new Exception("@没有为公文启动设置模板。"); } conn.GetFile(fk_flow + ".doc", file, true, FileAttributes.Archive); conn.Close(); } catch (Exception ex) { conn.Close(); file = null; MessageBox.Show("@异常信息:" + ex.Message + "\t\n@流程编号:" + WebUser.FK_Flow + "\t\n@可能的原因如下:1,设计人员没有正确的设置ftp服务器。 \t\n2,没有该流程的公文模板。"); } WebUser.WorkID = 0; WebUser.FK_Flow = fk_flow; WebUser.FK_Node = int.Parse(fk_flow + "01"); WebUser.RetrieveWFNode(WebUser.FK_Node); this.HisRibbon1.SetState(); WebUser.WriterIt(StartFlag.DoNewFlow, fk_flow, int.Parse(fk_flow + "01"), 0); this.OpenDoc(file, false); this.Close(); }
/// <summary> /// 填充数据 /// </summary> /// <param name="attrs"></param> /// <param name="pa"></param> public void BindAttrs(Attrs attrs, AtPara pa) { bool isReadonly = false; this.IsReadonly = false; this.IsShowDtl = false; this.Attributes["visibility"] = "hidden"; this.Add("<table width='100%' id='a1' border='1' cellpadding='0' cellspacing='0' style='border-collapse: collapse' bordercolor='#111111' >"); bool isLeft = true; object val = null; bool isAddTR = true; foreach (Attr attr in attrs) { if (attr.UIVisible == false) { continue; } if (attr.Key == "MyNum") { continue; } if (isLeft) { isAddTR = true; this.AddTR(); } val = pa.GetValStrByKey(attr.Key); if (attr.UIContralType == UIContralType.TB) { if (attr.MyFieldType == FieldType.RefText) { this.SetValByKey(attr.Key, val.ToString()); continue; } else if (attr.MyFieldType == FieldType.MultiValues) { /* 如果是多值的.*/ LB lb = new LB(attr); lb.Visible = true; lb.Height = 128; lb.SelectionMode = ListSelectionMode.Multiple; Entities ens = ClassFactory.GetEns(attr.UIBindKey); ens.RetrieveAll(); this.Controls.Add(lb); } else { if (attr.UIVisible == false) { TB tb = new TB(); tb.LoadMapAttr(attr); tb.ID = "TB_" + attr.Key; tb.Attributes["Visible"] = "false"; this.Controls.Add(tb); continue; } else { if (attr.UIHeight != 0) { TB area = new TB(); area.LoadMapAttr(attr); area.ID = "TB_" + attr.Key; area.Text = val.ToString(); area.Rows = 8; area.TextMode = TextBoxMode.MultiLine; area.Attributes["onchange"] += "Change('TB_" + attr.Key + "');"; if (isReadonly) { area.Enabled = false; } this.AddContral(attr.Desc, area); } else { TB tb = new TB(); tb.LoadMapAttr(attr); tb.ID = "TB_" + attr.Key; if (isReadonly) { tb.Enabled = false; } switch (attr.MyDataType) { case DataType.AppMoney: tb.Text = decimal.Parse(val.ToString()).ToString("0.00"); break; default: tb.Text = val.ToString(); break; } tb.Attributes["width"] = "100%"; tb.Attributes["onchange"] += "Change('TB_" + attr.Key + "');"; this.AddContral(attr.Desc, tb); } } } } else if (attr.UIContralType == UIContralType.CheckBok) { val = pa.GetValBoolenByKey(attr.Key); CheckBox cb = new CheckBox(); cb.Checked = (bool)val; if (isReadonly) { cb.Enabled = false; } else { cb.Enabled = attr.UIVisible; cb.Attributes["onmousedown"] = "Change('CB_" + attr.Key + "')"; } cb.ID = "CB_" + attr.Key; this.AddContral(attr.Desc, cb); } else if (attr.UIContralType == UIContralType.DDL) { if (isReadonly || !attr.UIIsReadonly) { /* 如果是 DDLIsEnable 的, 就要找到. */ if (attr.MyFieldType == FieldType.Enum) { /* 如果是 enum 类型 */ int enumKey = 0; try { enumKey = int.Parse(val.ToString()); } catch { throw new Exception("默认值错误:" + attr.Key + " = " + val.ToString()); } BP.Sys.SysEnum enEnum = new BP.Sys.SysEnum(attr.UIBindKey, "CH", enumKey); //DDL ddl = new DDL(attr,text,en.Lab,false); DDL ddl = new DDL(); ddl.Items.Add(new ListItem(enEnum.Lab, val.ToString())); ddl.Items[0].Selected = true; ddl.Enabled = false; ddl.ID = "DDL_" + attr.Key; this.AddContral(attr.Desc, ddl, true); } else { /* 如果是 ens 类型 */ Entities ens = ClassFactory.GetEns(attr.UIBindKey); Entity en1 = ens.GetNewEntity; en1.SetValByKey(attr.UIRefKeyValue, val.ToString()); string lab = ""; try { en1.Retrieve(); lab = en1.GetValStringByKey(attr.UIRefKeyText); } catch { if (SystemConfig.IsDebug == false) { lab = "" + val.ToString(); } else { lab = "" + val.ToString(); } } DDL ddl = new DDL(attr, val.ToString(), lab, false, this.Page.Request.ApplicationPath); ddl.ID = "DDL_" + attr.Key; this.AddContral(attr.Desc, ddl, true); } } else { /* 可以使用的情况. */ DDL ddl1 = new DDL(attr, val.ToString(), "enumLab", true, this.Page.Request.ApplicationPath); ddl1.ID = "DDL_" + attr.Key; ddl1.Attributes["onchange"] = "Change('DDL_" + attr.Key + "')"; this.AddContral(attr.Desc, ddl1, true); } } else if (attr.UIContralType == UIContralType.RadioBtn) { // Sys.SysEnums enums = new BP.Sys.SysEnums(attr.UIBindKey); // foreach(SysEnum en in enums) // { // return ; // } } if (isLeft == false) { isAddTR = false; this.AddTREnd(); } isLeft = !isLeft; } // 结束循环. //补充TR if (isAddTR == true) { this.AddTD(""); this.AddTD(""); this.AddTREnd(); } this.Add("</TABLE>"); }
public void TableMode() { this.Pub2.AddTable(); this.Pub2.AddTR(); this.Pub2.AddTDTitle("IDX"); this.Pub2.AddTDTitle("日期时间"); this.Pub2.AddTDTitle("从节点"); this.Pub2.AddTDTitle("人员"); this.Pub2.AddTDTitle("到节点"); this.Pub2.AddTDTitle("人员"); this.Pub2.AddTDTitle("活动"); this.Pub2.AddTDTitle("信息"); this.Pub2.AddTDTitle("表单"); this.Pub2.AddTDTitle("执行人"); this.Pub2.AddTREnd(); string sqlOfWhere1 = ""; string dbStr = BP.Sys.SystemConfig.AppCenterDBVarStr; Paras prs = new Paras(); if (this.FID == 0) { sqlOfWhere1 = " WHERE (FID=" + dbStr + "WorkID11 OR WorkID=" + dbStr + "WorkID12 ) "; prs.Add("WorkID11", this.WorkID); prs.Add("WorkID12", this.WorkID); } else { sqlOfWhere1 = " WHERE (FID=" + dbStr + "FID11 OR WorkID=" + dbStr + "FID12 ) "; prs.Add("FID11", this.FID); prs.Add("FID12", this.FID); } string sql = ""; sql = "SELECT MyPK,ActionType,ActionTypeText,FID,WorkID,NDFrom,NDFromT,NDTo,NDToT,EmpFrom,EmpFromT,EmpTo,EmpToT,RDT,WorkTimeSpan,Msg,NodeData,Exer,Tag FROM ND" + int.Parse(this.FK_Flow) + "Track " + sqlOfWhere1; prs.SQL = sql; DataTable dt = null; try { dt = DBAccess.RunSQLReturnTable(prs); } catch { // 处理track表. Track.CreateOrRepairTrackTable(this.FK_Flow); dt = DBAccess.RunSQLReturnTable(prs); } DataView dv = dt.DefaultView; dv.Sort = "RDT"; int idx = 1; foreach (DataRowView dr in dv) { ActionType at = (ActionType)int.Parse(dr[TrackAttr.ActionType].ToString()); if (at != ActionType.WorkCheck) { continue; } this.Pub2.AddTR(); this.Pub2.AddTDIdx(idx++); DateTime dtt = DataType.ParseSysDateTime2DateTime(dr[TrackAttr.RDT].ToString()); this.Pub2.AddTD(dtt.ToString("yyyy年MM月dd日HH:mm")); this.Pub2.AddTD(dr[TrackAttr.NDFromT].ToString()); this.Pub2.AddTD(dr[TrackAttr.EmpFromT].ToString()); this.Pub2.AddTD(dr[TrackAttr.NDToT].ToString()); this.Pub2.AddTD(dr[TrackAttr.EmpToT].ToString()); this.Pub2.AddTD("<img src='../../Img/Action/" + at.ToString() + ".png' class='ActionType' border=0/>" + BP.WF.Track.GetActionTypeT(at)); // 删除信息 string tag = dr[TrackAttr.Tag].ToString(); string msg = dr[TrackAttr.Msg].ToString(); switch (at) { case ActionType.CallChildenFlow: //被调用父流程吊起。 tag = dr[TrackAttr.Tag].ToString(); if (string.IsNullOrEmpty(tag) == false) { AtPara ap = new AtPara(tag); this.Pub2.AddTD("class=TD", "<a target=b" + ap.GetValStrByKey("PWorkID") + " href='Track.aspx?WorkID=" + ap.GetValStrByKey("PWorkID") + "&FK_Flow=" + ap.GetValStrByKey("PFlowNo") + "' >" + msg + "</a>"); } else { this.Pub2.AddTD("class=TD", msg); } break; case ActionType.StartChildenFlow: //吊起子流程。 tag = dr[TrackAttr.Tag].ToString(); if (string.IsNullOrEmpty(tag) == false) { AtPara ap = new AtPara(tag); this.Pub2.AddTD("class=TD", "<a target=b" + ap.GetValStrByKey("CWorkID") + " href='Track.aspx?WorkID=" + ap.GetValStrByKey("CWorkID") + "&FK_Flow=" + ap.GetValStrByKey("CFlowNo") + "' >" + msg + "</a>"); } else { this.Pub2.AddTD("class=TD", msg); } break; default: this.Pub2.AddTD(DataType.ParseText2Html(msg)); break; } this.Pub2.AddTD("<a href=\"javascript:WinOpen('" + BP.WF.Glo.CCFlowAppPath + "WF/WFRpt.aspx?WorkID=" + dr[TrackAttr.WorkID].ToString() + "&FK_Flow=" + this.FK_Flow + "&FK_Node=" + dr[TrackAttr.NDTo].ToString() + "&DoType=View&MyPK=" + dr[TrackAttr.MyPK].ToString() + "','" + dr[TrackAttr.MyPK].ToString() + "');\">表单</a>"); this.Pub2.AddTD(dr[TrackAttr.Exer].ToString()); this.Pub2.AddTREnd(); } this.Pub2.AddTableEnd(); if (this.CCID != null) { CCList cl = new CCList(); cl.MyPK = this.CCID; cl.RetrieveFromDBSources(); this.Pub2.AddFieldSet(cl.Title); this.Pub2.Add("抄送人:" + cl.Rec + ", 抄送日期:" + cl.RDT); this.Pub2.AddHR(); this.Pub2.Add(cl.DocHtml); this.Pub2.AddFieldSetEnd(); if (cl.HisSta == CCSta.UnRead) { cl.HisSta = CCSta.Read; cl.Update(); } } }
/// <summary> /// 执行事件,事件标记是 EventList. /// </summary> /// <param name="dotype">执行类型</param> /// <param name="en">数据实体</param> /// <param name="atPara">特殊的参数格式@key=value 方式.</param> /// <returns></returns> private string _DoEventNode(string dotype, Entity en, string atPara) { if (this.Count == 0) { return(null); } FrmEvent nev = this.GetEntityByKey(FrmEventAttr.FK_Event, dotype) as FrmEvent; if (nev == null || nev.HisDoType == EventDoType.Disable) { return(null); } #region 执行的是业务单元. if (nev.HisDoType == EventDoType.BuessUnit) { /* 获得业务单元,开始执行他 */ BuessUnitBase enBuesss = BP.Sys.Glo.GetBuessUnitEntityByEnName(nev.DoDoc); enBuesss.WorkID = Int64.Parse(en.PKVal.ToString()); return(enBuesss.DoIt()); } #endregion 执行的是业务单元. string doc = nev.DoDoc.Trim(); if ((doc == null || doc == "") && nev.HisDoType != EventDoType.SpecClass) //edited by liuxc,2016-01-16,执行DLL文件不需要判断doc为空 { return(null); } #region 处理执行内容 Attrs attrs = en.EnMap.Attrs; string MsgOK = ""; string MsgErr = ""; foreach (Attr attr in attrs) { if (doc.Contains("@" + attr.Key) == false) { break; } if (attr.MyDataType == DataType.AppString || attr.MyDataType == DataType.AppDateTime || attr.MyDataType == DataType.AppDate) { doc = doc.Replace("@" + attr.Key, "'" + en.GetValStrByKey(attr.Key) + "'"); } else { doc = doc.Replace("@" + attr.Key, en.GetValStrByKey(attr.Key)); } } doc = doc.Replace("~", "'"); doc = doc.Replace("@WebUser.No", BP.Web.WebUser.No); doc = doc.Replace("@WebUser.Name", BP.Web.WebUser.Name); doc = doc.Replace("@WebUser.FK_Dept", BP.Web.WebUser.FK_Dept); doc = doc.Replace("@FK_Node", nev.FK_MapData.Replace("ND", "")); doc = doc.Replace("@FK_MapData", nev.FK_MapData); doc = doc.Replace("@WorkID", en.GetValStrByKey("OID", "@WorkID")); //SDK表单上服务器地址,应用到使用ccflow的时候使用的是sdk表单,该表单会存储在其他的服务器上. doc = doc.Replace("@SDKFromServHost", SystemConfig.AppSettings["SDKFromServHost"]); if (doc.Contains("@") == true) { if (System.Web.HttpContext.Current != null) { /*如果是 bs 系统, 有可能参数来自于url ,就用url的参数替换它们 .*/ string url = BP.Sys.Glo.Request.RawUrl; if (url.IndexOf('?') != -1) { url = url.Substring(url.IndexOf('?')).TrimStart('?'); } string[] paras = url.Split('&'); foreach (string s in paras) { string[] mys = s.Split('='); if (doc.Contains("@" + mys[0]) == false) { continue; } doc = doc.Replace("@" + mys[0], mys[1]); } } } if (nev.HisDoType == EventDoType.URLOfSelf) { if (doc.Contains("?") == false) { doc += "?1=2"; } doc += "&UserNo=" + WebUser.No; doc += "&SID=" + WebUser.SID; doc += "&FK_Dept=" + WebUser.FK_Dept; // doc += "&FK_Unit=" + WebUser.FK_Unit; doc += "&OID=" + en.PKVal; if (SystemConfig.IsBSsystem) { /*是bs系统,并且是url参数执行类型.*/ string url = BP.Sys.Glo.Request.RawUrl; if (url.IndexOf('?') != -1) { url = url.Substring(url.IndexOf('?')).TrimStart('?'); } string[] paras = url.Split('&'); foreach (string s in paras) { string[] mys = s.Split('='); if (doc.Contains(mys[0] + "=")) { continue; } doc += "&" + s; } doc = doc.Replace("&?", "&"); } if (SystemConfig.IsBSsystem == false) { /*非bs模式下调用,比如在cs模式下调用它,它就取不到参数. */ } if (doc.StartsWith("http") == false) { /*如果没有绝对路径 */ if (SystemConfig.IsBSsystem) { /*在cs模式下自动获取*/ string host = BP.Sys.Glo.Request.Url.Host; if (doc.Contains("@AppPath")) { doc = doc.Replace("@AppPath", "http://" + host + BP.Sys.Glo.Request.ApplicationPath); } else { doc = "http://" + BP.Sys.Glo.Request.Url.Authority + doc; } } if (SystemConfig.IsBSsystem == false) { /*在cs模式下它的baseurl 从web.config中获取.*/ string cfgBaseUrl = SystemConfig.HostURL; if (DataType.IsNullOrEmpty(cfgBaseUrl)) { string err = "调用url失败:没有在web.config中配置BaseUrl,导致url事件不能被执行."; Log.DefaultLogWriteLineError(err); throw new Exception(err); } doc = cfgBaseUrl + doc; } } //增加上系统约定的参数. doc += "&EntityName=" + en.ToString() + "&EntityPK=" + en.PK + "&EntityPKVal=" + en.PKVal + "&FK_Event=" + nev.MyPK; } #endregion 处理执行内容 if (atPara != null && doc.Contains("@") == true) { AtPara ap = new AtPara(atPara); foreach (string s in ap.HisHT.Keys) { doc = doc.Replace("@" + s, ap.GetValStrByKey(s)); } } if (dotype == FrmEventList.FrmLoadBefore) { en.Retrieve(); /*如果不执行,就会造成实体的数据与查询的数据不一致.*/ } switch (nev.HisDoType) { case EventDoType.SP: case EventDoType.SQL: try { // 允许执行带有GO的sql. DBAccess.RunSQLs(doc); return(nev.MsgOK(en)); } catch (Exception ex) { throw new Exception(nev.MsgError(en) + " Error:" + ex.Message); } break; case EventDoType.URLOfSelf: string myURL = doc.Clone() as string; if (myURL.Contains("http") == false) { if (SystemConfig.IsBSsystem) { string host = BP.Sys.Glo.Request.Url.Host; if (myURL.Contains("@AppPath")) { myURL = myURL.Replace("@AppPath", "http://" + host + BP.Sys.Glo.Request.ApplicationPath); } else { myURL = "http://" + BP.Sys.Glo.Request.Url.Authority + myURL; } } else { string cfgBaseUrl = SystemConfig.HostURL; if (DataType.IsNullOrEmpty(cfgBaseUrl)) { string err = "调用url失败:没有在web.config中配置BaseUrl,导致url事件不能被执行."; Log.DefaultLogWriteLineError(err); throw new Exception(err); } myURL = cfgBaseUrl + myURL; } } myURL = myURL.Replace("@SDKFromServHost", SystemConfig.AppSettings["SDKFromServHost"]); if (myURL.Contains("&FID=") == false && en.Row.ContainsKey("FID") == true) { string str = en.Row["FID"].ToString(); myURL = myURL + "&FID=" + str; } if (myURL.Contains("&FK_Flow=") == false && en.Row.ContainsKey("FK_Flow") == true) { string str = en.Row["FK_Flow"].ToString(); myURL = myURL + "&FK_Flow=" + str; } if (myURL.Contains("&WorkID=") == false && en.Row.ContainsKey("WorkID") == true) { string str = en.Row["WorkID"].ToString(); myURL = myURL + "&WorkID=" + str; } try { Encoding encode = System.Text.Encoding.GetEncoding("gb2312"); string text = DataType.ReadURLContext(myURL, 600000, encode); if (text == null) { throw new Exception("@流程设计错误,执行的url错误:" + myURL + ", 返回为null, 请检查url设置是否正确。提示:您可以copy出来此url放到浏览器里看看是否被正确执行。"); } if (text != null && text.Length > 7 && text.Substring(0, 7).ToLower().Contains("err")) { throw new Exception(text); } if (text == null || text.Trim() == "") { return(null); } return(text); } catch (Exception ex) { throw new Exception("@" + nev.MsgError(en) + " Error:" + ex.Message); } break; case EventDoType.EventBase: //执行事件类. // 获取事件类. string evName = doc.Clone() as string; BP.Sys.EventBase ev = null; try { ev = BP.En.ClassFactory.GetEventBase(evName); } catch (Exception ex) { throw new Exception("@事件名称:" + evName + "拼写错误,或者系统不存在。说明:事件所在的类库必须是以BP.开头,并且类库的BP.xxx.dll。"); } //开始执行. try { #region 处理整理参数. Row r = en.Row; try { //系统参数. r.Add("FK_MapData", en.ClassID); } catch { r["FK_MapData"] = en.ClassID; } try { r.Add("EventType", nev.FK_Event); } catch { r["EventType"] = nev.FK_Event; } if (atPara != null) { AtPara ap = new AtPara(atPara); foreach (string s in ap.HisHT.Keys) { try { r.Add(s, ap.GetValStrByKey(s)); } catch { r[s] = ap.GetValStrByKey(s); } } } if (SystemConfig.IsBSsystem == true) { /*如果是bs系统, 就加入外部url的变量.*/ foreach (string key in BP.Sys.Glo.Request.QueryString) { string val = BP.Sys.Glo.Request.QueryString[key]; try { r.Add(key, val); } catch { r[key] = val; } } } #endregion 处理整理参数. ev.SysPara = r; ev.HisEn = en; ev.Do(); return(ev.SucessInfo); } catch (Exception ex) { throw new Exception("@执行事件(" + ev.Title + ")期间出现错误:" + ex.Message); } break; case EventDoType.WSOfSelf: //执行webservices.. 为石油修改. string[] strs = doc.Split('@'); string url = ""; string method = ""; Hashtable paras = new Hashtable(); foreach (string str in strs) { if (str.Contains("=") && str.Contains("Url")) { url = str.Split('=')[2]; continue; } if (str.Contains("=") && str.Contains("Method")) { method = str.Split('=')[2]; continue; } //处理参数. string[] paraKeys = str.Split(','); if (paraKeys[3] == "Int") { paras.Add(paraKeys[0], int.Parse(paraKeys[1])); } if (paraKeys[3] == "String") { paras.Add(paraKeys[0], paraKeys[1]); } if (paraKeys[3] == "Float") { paras.Add(paraKeys[0], float.Parse(paraKeys[1])); } if (paraKeys[3] == "Double") { paras.Add(paraKeys[0], double.Parse(paraKeys[1])); } } return(null); //开始执行webserives. break; case EventDoType.SpecClass: #region //执行dll文件中指定类的指定方法,added by liuxc,2016-01-16 string evdll = nev.MonthedDLL; string evclass = nev.MonthedClass; string evmethod = nev.MonthedName; string evparams = nev.MonthedParas; if (string.IsNullOrWhiteSpace(evdll) || !System.IO.File.Exists(evdll)) { throw new Exception("@DLL文件【MonthedDLL】“" + (evdll ?? string.Empty) + "”设置不正确,请重新设置!"); } Assembly abl = Assembly.LoadFrom(evdll); //判断类是否是静态类 Type type = abl.GetType(evclass, false); if (type == null) { throw new Exception(@"@DLL文件【MonthedDLL】“" + evdll + "”中的类名【MonthedClass】“" + (evclass ?? string.Empty) + "”设置不正确,未检索到此类,请重新设置!"); } //方法 if (string.IsNullOrWhiteSpace(evmethod)) { throw new Exception(@"@DLL文件【MonthedDLL】“" + evdll + "”中类【MonthedClass】“" + evclass + "”的方法名【MonthedName】不能为空,请重新设置!"); } MethodInfo md = null; //当前方法 ParameterInfo[] pis = null; //方法的参数集合 Dictionary <string, string> pss = new Dictionary <string, string>(); //参数名,参数值类型名称字典,如:Name,String string mdName = evmethod.Split('(')[0]; //方法名称 //获取method对象 if (mdName.Length == evmethod.Length - 2) { md = type.GetMethod(mdName); } else { string[] pssArr = null; //获取设置里的参数信息 foreach (string pstr in evmethod.Substring(mdName.Length + 1, evmethod.Length - mdName.Length - 2).Split(',')) { pssArr = pstr.Split(' '); pss.Add(pssArr[1], pssArr[0]); } //与设置里的参数信息对比,取得MethodInfo对象 foreach (MethodInfo m in type.GetMethods()) { if (m.Name != mdName) { continue; } pis = m.GetParameters(); bool isOK = true; int idx = 0; foreach (KeyValuePair <string, string> ps in pss) { if (pis[idx].Name != ps.Key || pis[idx].ParameterType.ToString() .Replace("System.IO.", "") .Replace("System.", "") .Replace("System.Collections.Generic.", "") .Replace("System.Collections.", "") != ps.Value) { isOK = false; break; } idx++; } if (isOK) { md = m; break; } } } if (md == null) { throw new Exception(@"@DLL文件【MonthedDLL】“" + evdll + "”中类【MonthedClass】“" + evclass + "”的方法名【MonthedName】“" + evmethod + "”设置不正确,未检索到此方法,请重新设置!"); } //处理参数 object[] pvs = new object[pss.Count]; //invoke,传递的paramaters参数,数组中的项顺序与方法参数顺序一致 if (pss.Count > 0) { if (string.IsNullOrWhiteSpace(evparams)) { throw new Exception(@"@DLL文件【MonthedDLL】“" + evdll + "”中类【MonthedClass】“" + evclass + "”的方法【MonthedName】“" + evmethod + "”的参数【MonthedParas】不能为空,请重新设置!"); } Dictionary <string, string> pds = new Dictionary <string, string>(); //MonthedParas中保存的参数信息集合,格式如:title,@Title int idx = 0; int pidx = -1; string[] pdsArr = evparams.Split(';'); string val; //将参数中的名称与值分开 foreach (string p in pdsArr) { pidx = p.IndexOf('='); if (pidx == -1) { continue; } pds.Add(p.Substring(0, pidx), p.Substring(pidx + 1)); } foreach (KeyValuePair <string, string> ps in pss) { if (!pds.ContainsKey(ps.Key)) { //设置中没有此参数的值信息,则将值赋为null pvs[idx] = null; } else { val = pds[ps.Key]; foreach (BP.En.Attr attr in en.EnMap.Attrs) { if (pds[ps.Key] == "`" + attr.Key + "`") { //表示此参数与该attr的值一致,类型也一致 pvs[idx] = en.Row[attr.Key]; break; } //替换@属性 val = val.Replace("`" + attr.Key + "`", (en.Row[attr.Key] ?? string.Empty).ToString()); } //转换参数类型,从字符串转换到参数的实际类型,NOTE:此处只列出了简单类型的转换,其他类型暂未考虑 switch (ps.Value) { case "String": pvs[idx] = val; break; case "Int32": pvs[idx] = int.Parse(val); break; case "Int64": pvs[idx] = long.Parse(val); break; case "Double": pvs[idx] = double.Parse(val); break; case "Single": pvs[idx] = float.Parse(val); break; case "Decimal": pvs[idx] = decimal.Parse(val); break; case "DateTime": pvs[idx] = DateTime.Parse(val); break; default: pvs[idx] = val; break; } } idx++; } } if (type.IsSealed && type.IsAbstract) { //静态类 return((md.Invoke(null, pvs) ?? string.Empty).ToString()); } //非静态类 //虚类必须被重写,不能直接使用 if (type.IsAbstract) { return(null); } //静态方法 if (md.IsStatic) { return((md.Invoke(null, pvs) ?? string.Empty).ToString()); } //非静态方法 return((md.Invoke(abl.CreateInstance(evclass), pvs) ?? string.Empty).ToString()); #endregion default: throw new Exception("@no such way." + nev.HisDoType.ToString()); } }
public QueryObject InitQueryObjectByEns(Entities ens, bool IsShowSearchKey, DTSearchWay dw, string dtKey, Attrs attrs, AttrsOfSearch attrsOfSearch, AttrSearchs searchAttrs) { QueryObject qo = new QueryObject(ens); #region 关键字 string keyVal = ""; //Attrs attrs = en.EnMap.Attrs; if (IsShowSearchKey) { TB keyTB = this.GetTBByID("TB_Key"); if (keyTB != null) { keyVal = keyTB.Text.Trim(); } else { UserRegedit ur = new UserRegedit(); //ur.MyPK = WebUser.No + ens.GetNewEntity.ClassID + "_SearchAttrs"; QueryObject urObj = new QueryObject(ur); urObj.AddWhere("MyPK", WebUser.No + ens.GetNewEntity.ClassID + "_SearchAttrs"); urObj.DoQuery(); keyVal = ur.SearchKey; } this.Page.Session["SKey"] = keyVal; } if (keyVal.Length >= 1) { Attr attrPK = new Attr(); foreach (Attr attr in attrs) { if (attr.IsPK) { attrPK = attr; break; } } int i = 0; foreach (Attr attr in attrs) { switch (attr.MyFieldType) { case FieldType.Enum: case FieldType.FK: case FieldType.PKFK: continue; default: break; } if (attr.MyDataType != DataType.AppString) { continue; } if (attr.MyFieldType == FieldType.RefText) { continue; } if (attr.Key == "FK_Dept") { continue; } i++; if (i == 1) { /* 第一次进来。 */ qo.addLeftBracket(); switch (SystemConfig.AppCenterDBType) { case BP.DA.DBType.Oracle: case BP.DA.DBType.Informix: qo.AddWhere(attr.Key, " LIKE ", " '%'||" + SystemConfig.AppCenterDBVarStr + "SKey||'%'"); break; case BP.DA.DBType.MySQL: qo.AddWhere(attr.Key, " LIKE ", "CONCAT('%'," + SystemConfig.AppCenterDBVarStr + "SKey,'%')"); break; default: qo.AddWhere(attr.Key, " LIKE ", " '%'+" + SystemConfig.AppCenterDBVarStr + "SKey+'%'"); break; } continue; } qo.addOr(); switch (SystemConfig.AppCenterDBType) { case BP.DA.DBType.Oracle: case BP.DA.DBType.Informix: qo.AddWhere(attr.Key, " LIKE ", "'%'||" + SystemConfig.AppCenterDBVarStr + "SKey||'%'"); break; case BP.DA.DBType.MySQL: qo.AddWhere(attr.Key, " LIKE ", "CONCAT('%'," + SystemConfig.AppCenterDBVarStr + "SKey,'%')"); break; default: qo.AddWhere(attr.Key, " LIKE ", "'%'+" + SystemConfig.AppCenterDBVarStr + "SKey+'%'"); break; } } qo.MyParas.Add("SKey", keyVal); qo.addRightBracket(); } else { qo.addLeftBracket(); qo.AddWhere("abc", "all"); qo.addRightBracket(); } #endregion #region 普通属性 string opkey = ""; // 操作符号。 foreach (AttrOfSearch attr in attrsOfSearch) { if (attr.IsHidden) { qo.addAnd(); qo.addLeftBracket(); qo.AddWhere(attr.RefAttrKey, attr.DefaultSymbol, attr.DefaultValRun); qo.addRightBracket(); continue; } if (attr.SymbolEnable == true) { opkey = this.GetDDLByKey("DDL_" + attr.Key).SelectedItemStringVal; if (opkey == "all") { continue; } } else { opkey = attr.DefaultSymbol; } qo.addAnd(); qo.addLeftBracket(); if (attr.DefaultVal.Length >= 8) { string date = "2005-09-01"; try { /* 就可能是年月日。 */ string y = this.GetDDLByKey("DDL_" + attr.Key + "_Year").SelectedItemStringVal; string m = this.GetDDLByKey("DDL_" + attr.Key + "_Month").SelectedItemStringVal; string d = this.GetDDLByKey("DDL_" + attr.Key + "_Day").SelectedItemStringVal; date = y + "-" + m + "-" + d; if (opkey == "<=") { DateTime dt = DataType.ParseSysDate2DateTime(date).AddDays(1); date = dt.ToString(DataType.SysDataFormat); } } catch { } qo.AddWhere(attr.RefAttrKey, opkey, date); } else { qo.AddWhere(attr.RefAttrKey, opkey, this.GetTBByID("TB_" + attr.Key).Text); } qo.addRightBracket(); } #endregion #region 外键 foreach (AttrSearch attr1 in searchAttrs) { Attr attr = attr1.HisAttr; if (attr.MyFieldType == FieldType.RefText) { continue; } DDL ddl = this.GetDDLByKey("DDL_" + attr.Key); if (ddl.Items.Count == 0) { continue; } string selectVal = ddl.SelectedItemStringVal; if (selectVal == "all") { continue; } if (selectVal == "mvals") { UserRegedit sUr = new UserRegedit(); sUr.MyPK = WebUser.No + this.EnsName + "_SearchAttrs"; sUr.RetrieveFromDBSources(); /* 如果是多选值 */ string cfgVal = sUr.MVals; AtPara ap = new AtPara(cfgVal); string instr = ap.GetValStrByKey(attr.Key); if (instr == null || instr == "") { if (attr.Key == "FK_Dept" || attr.Key == "FK_Unit") { if (attr.Key == "FK_Dept") { selectVal = WebUser.FK_Dept; ddl.SelectedIndex = 0; } //if (attr.Key == "FK_Unit") //{ // selectVal = WebUser.FK_Unit; // ddl.SelectedIndex = 0; //} } else { continue; } } else { instr = instr.Replace("..", "."); instr = instr.Replace(".", "','"); instr = instr.Substring(2); instr = instr.Substring(0, instr.Length - 2); qo.addAnd(); qo.addLeftBracket(); qo.AddWhereIn(attr.Key, "(" + instr + ")"); qo.addRightBracket(); continue; } } qo.addAnd(); qo.addLeftBracket(); if (attr.UIBindKey == "BP.Port.Depts" || attr.UIBindKey == "BP.Port.Units") //判断特殊情况。 { qo.AddWhere(attr.Key, " LIKE ", selectVal + "%"); } else { qo.AddWhere(attr.Key, selectVal); } //qo.AddWhere(attr.Key,this.GetDDLByKey("DDL_"+attr.Key).SelectedItemStringVal ) ; qo.addRightBracket(); } #endregion . if (dw != DTSearchWay.None) { string dtFrom = this.GetTBByID("TB_S_From").Text.Trim(); string dtTo = this.GetTBByID("TB_S_To").Text.Trim(); if (dw == DTSearchWay.ByDate) { qo.addAnd(); qo.addLeftBracket(); qo.SQL = dtKey + " >= '" + dtFrom + " 01:01'"; qo.addAnd(); qo.SQL = dtKey + " <= '" + dtTo + " 23:59'"; qo.addRightBracket(); //qo.AddWhere(dtKey, ">=", dtFrom+" 01:01"); //qo.addAnd(); //qo.AddWhere(dtKey, "<=", dtTo + " 23:59"); //qo.addRightBracket(); } if (dw == DTSearchWay.ByDateTime) { qo.addAnd(); qo.addLeftBracket(); qo.SQL = dtKey + " >= '" + dtFrom + "'"; qo.addAnd(); qo.SQL = dtKey + " <= '" + dtTo + "'"; qo.addRightBracket(); //qo.addAnd(); //qo.addLeftBracket(); //qo.AddWhere(dtKey, ">=", dtFrom); //qo.addAnd(); //qo.AddWhere(dtKey, "<=", dtTo); //qo.addRightBracket(); } } // throw new Exception(qo.SQL); return(qo); }
/// <summary> /// 时间轴 /// </summary> /// <returns></returns> public string TimeBase_Init() { DataSet ds = new DataSet(); //获取track. DataTable dt = BP.WF.Dev2Interface.DB_GenerTrackTable(this.FK_Flow, this.WorkID, this.FID); ds.Tables.Add(dt); #region 父子流程数据存储到这里. Hashtable ht = new Hashtable(); foreach (DataRow dr in dt.Rows) { ActionType at = (ActionType)int.Parse(dr[TrackAttr.ActionType].ToString()); string tag = dr[TrackAttr.Tag].ToString(); //标识. string mypk = dr[TrackAttr.MyPK].ToString(); //主键. string msg = ""; if (at == ActionType.CallChildenFlow) { //被调用父流程吊起。 if (DataType.IsNullOrEmpty(tag) == false) { AtPara ap = new AtPara(tag); GenerWorkFlow mygwf = new GenerWorkFlow(); mygwf.WorkID = ap.GetValInt64ByKey("PWorkID"); if (mygwf.RetrieveFromDBSources() == 1) { msg = "<p>操作员:{" + dr[TrackAttr.EmpFromT].ToString() + "}在当前节点上,被父流程{" + mygwf.FlowName + "},<a target=b" + ap.GetValStrByKey("PWorkID") + " href='Track.aspx?WorkID=" + ap.GetValStrByKey("PWorkID") + "&FK_Flow=" + ap.GetValStrByKey("PFlowNo") + "' >" + msg + "</a></p>"; } else { msg = "<p>操作员:{" + dr[TrackAttr.EmpFromT].ToString() + "}在当前节点上,被父流程调用{" + mygwf.FlowName + "},但是该流程被删除了.</p>" + tag; } msg = "<a target=b" + ap.GetValStrByKey("PWorkID") + " href='Track.aspx?WorkID=" + ap.GetValStrByKey("PWorkID") + "&FK_Flow=" + ap.GetValStrByKey("PFlowNo") + "' >" + msg + "</a>"; } //放入到ht里面. ht.Add(mypk, msg); } if (at == ActionType.StartChildenFlow) { if (DataType.IsNullOrEmpty(tag) == false) { if (tag.Contains("Sub")) { tag = tag.Replace("Sub", "C"); } AtPara ap = new AtPara(tag); GenerWorkFlow mygwf = new GenerWorkFlow(); mygwf.WorkID = ap.GetValInt64ByKey("CWorkID"); if (mygwf.RetrieveFromDBSources() == 1) { msg = "<p>操作员:{" + dr[TrackAttr.EmpFromT].ToString() + "}在当前节点上调用了子流程{" + mygwf.FlowName + "}, <a target=b" + ap.GetValStrByKey("CWorkID") + " href='Track.aspx?WorkID=" + ap.GetValStrByKey("CWorkID") + "&FK_Flow=" + ap.GetValStrByKey("CFlowNo") + "' >" + msg + "</a></p>"; msg += "<p>当前子流程状态:{" + mygwf.WFStateText + "},运转到:{" + mygwf.NodeName + "},最后处理人{" + mygwf.TodoEmps + "},最后处理时间{" + mygwf.RDT + "}。</p>"; } else { msg = "<p>操作员:{" + dr[TrackAttr.EmpFromT].ToString() + "}在当前节点上调用了子流程{" + mygwf.FlowName + "},但是该流程被删除了.</p>" + tag; } } //放入到ht里面. ht.Add(mypk, msg); } } #endregion //获取 WF_GenerWorkFlow GenerWorkFlow gwf = new GenerWorkFlow(); gwf.WorkID = this.WorkID; gwf.RetrieveFromDBSources(); ds.Tables.Add(gwf.ToDataTableField("WF_GenerWorkFlow")); if (gwf.WFState != WFState.Complete) { GenerWorkerLists gwls = new GenerWorkerLists(); gwls.Retrieve(GenerWorkerListAttr.WorkID, this.WorkID); ds.Tables.Add(gwls.ToDataTableField("WF_GenerWorkerList")); } //把节点审核配置信息. FrmWorkCheck fwc = new FrmWorkCheck(gwf.FK_Node); ds.Tables.Add(fwc.ToDataTableField("FrmWorkCheck")); //返回结果. return(BP.Tools.Json.DataSetToJson(ds, false)); }
public string Do(string doWhat, string para1, bool isLogin) { // 如果admin账户登陆时有错误发生,则返回错误信息 var result = LetAdminLogin("CH", isLogin); if (string.IsNullOrEmpty(result) == false) { return(result); } switch (doWhat) { case "GenerFlowTemplete": Flow temp = new BP.WF.Flow(para1); return(null); case "GetFlowSorts": //获取所有流程类型 DataTable dtSorts = null; try { dtSorts = BP.DA.DBAccess.RunSQLReturnTable("SELECT no,name FROM WF_FlowSort"); } catch (Exception ex) { return(Newtonsoft.Json.JsonConvert.SerializeObject(new { success = false, msg = ex.Message })); } return(Newtonsoft.Json.JsonConvert.SerializeObject(new { success = true, msg = string.Empty, data = dtSorts.Rows.Cast <DataRow>().Select(dr => new { Key = dr["no"].ToString(), Value = dr["name"].ToString() }) })); case "NewSameLevelFrmSort": //创建同级别的 表单树 目录. SysFormTree frmSort = null; try { var para = para1.Split(','); frmSort = new SysFormTree(para[0]); string sameNodeNo = frmSort.DoCreateSameLevelNode().No; frmSort = new SysFormTree(sameNodeNo); frmSort.Name = para[1]; frmSort.Update(); return(null); } catch (Exception ex) { return("Do Method NewFormSort Branch has a error , para:\t" + para1 + ex.Message); } case "NewSubLevelFrmSort": //创建子级别的 表单树 目录. SysFormTree frmSortSub = null; try { var para = para1.Split(','); frmSortSub = new SysFormTree(para[0]); string sameNodeNo = frmSortSub.DoCreateSubNode().No; frmSortSub = new SysFormTree(sameNodeNo); frmSortSub.Name = para[1]; frmSortSub.Update(); return(null); } catch (Exception ex) { return("Do Method NewSubLevelFrmSort Branch has a error , para:\t" + para1 + ex.Message); } case "NewSameLevelFlowSort": //创建同级别的 流程树 目录. FlowSort fs = null; try { var para = para1.Split(','); fs = new FlowSort(para[0]); string sameNodeNo = fs.DoCreateSameLevelNode().No; fs = new FlowSort(sameNodeNo); fs.Name = para[1]; fs.Update(); return (Newtonsoft.Json.JsonConvert.SerializeObject( new { success = true, msg = string.Empty, data = fs.No })); } catch (Exception ex) { BP.DA.Log.DefaultLogWriteLineError("Do Method NewSameLevelFlowSort Branch has a error , para:\t" + para1 + ex.Message); return(Newtonsoft.Json.JsonConvert.SerializeObject(new { success = false, msg = ex.Message })); } case "NewSubFlowSort": //创建子级别的 表单树 目录. try { var para = para1.Split(','); FlowSort fsSub = new FlowSort(para[0]); string subNodeNo = fsSub.DoCreateSubNode().No; FlowSort subFlowSort = new FlowSort(subNodeNo); subFlowSort.Name = para[1]; subFlowSort.Update(); return (Newtonsoft.Json.JsonConvert.SerializeObject( new { success = true, msg = string.Empty, data = subFlowSort.No })); } catch (Exception ex) { BP.DA.Log.DefaultLogWriteLineError("Do Method NewSubFlowSort Branch has a error , para:\t" + ex.Message); return(Newtonsoft.Json.JsonConvert.SerializeObject(new { success = false, msg = ex.Message })); } case "EditFlowSort": //编辑表单树. try { var para = para1.Split(','); fs = new FlowSort(para[0]); fs.Name = para[1]; fs.Save(); return (Newtonsoft.Json.JsonConvert.SerializeObject( new { success = true, msg = string.Empty, data = fs.No })); } catch (Exception ex) { BP.DA.Log.DefaultLogWriteLineError("Do Method EditFlowSort Branch has a error , para:\t" + para1 + ex.Message); return(Newtonsoft.Json.JsonConvert.SerializeObject(new { success = false, msg = ex.Message })); } case "NewFlow": //创建新流程. Flow fl = new Flow(); try { string[] ps = para1.Split(','); if (ps.Length != 5) { throw new Exception("@创建流程参数错误"); } string fk_floSort = ps[0]; //类别编号. string flowName = ps[1]; // 流程名称. DataStoreModel dataSaveModel = (DataStoreModel)int.Parse(ps[2]); //数据保存方式。 string pTable = ps[3]; // 物理表名。 string FlowMark = ps[4]; // 流程标记. fl.DoNewFlow(fk_floSort, flowName, dataSaveModel, pTable, FlowMark); return (Newtonsoft.Json.JsonConvert.SerializeObject( new { success = true, msg = string.Empty, data = new { no = fl.No, name = fl.Name } })); } catch (Exception ex) { BP.DA.Log.DefaultLogWriteLineError("Do Method NewFlow Branch has a error , para:\t" + para1 + ex.Message); return(Newtonsoft.Json.JsonConvert.SerializeObject(new { success = false, msg = ex.Message })); } case "DelFlow": //删除流程. try { return (Newtonsoft.Json.JsonConvert.SerializeObject( new { success = true, msg = WorkflowDefintionManager.DeleteFlowTemplete(para1) })); } catch (Exception ex) { return(Newtonsoft.Json.JsonConvert.SerializeObject(new { success = false, msg = ex.Message })); } case "DelFlowSort": try { FlowSort delfs = new FlowSort(); delfs.No = para1; delfs.Delete(); return(Newtonsoft.Json.JsonConvert.SerializeObject(new { success = true })); } catch (Exception ex) { BP.DA.Log.DefaultLogWriteLineError("Do Method DelFlowSort Branch has a error , para:\t" + para1 + ex.Message); return(Newtonsoft.Json.JsonConvert.SerializeObject(new { success = false, msg = ex.Message })); } case "DelNode": try { if (!string.IsNullOrEmpty(para1)) { BP.WF.Node delNode = new BP.WF.Node(int.Parse(para1)); delNode.Delete(); } else { throw new Exception("@参数错误:" + para1); } } catch (Exception ex) { return("err:" + ex.Message); } return(null); case "GetSettings": return(SystemConfig.AppSettings[para1]); case "SaveFlowFrm": //保存独立表单. Entity en = null; try { AtPara ap = new AtPara(para1); string enName = ap.GetValStrByKey("EnName"); string pk = ap.GetValStrByKey("PKVal"); en = ClassFactory.GetEn(enName); en.ResetDefaultVal(); if (en == null) { throw new Exception("无效的类名:" + enName); } if (string.IsNullOrEmpty(pk) == false) { en.PKVal = pk; en.RetrieveFromDBSources(); } foreach (string key in ap.HisHT.Keys) { if (key == "PKVal") { continue; } en.SetValByKey(key, ap.HisHT[key].ToString().Replace('^', '@')); } en.Save(); return(en.PKVal as string); } catch (Exception ex) { if (en != null) { en.CheckPhysicsTable(); } return("Error:" + ex.Message); } case "ChangeNodeType": var p = para1.Split(','); try { if (p.Length != 3) { throw new Exception("@修改节点类型参数错误"); } //var sql = "UPDATE WF_Node SET Icon='{0}' WHERE FK_Flow='{1}' AND NodeID='{2}'"; var sql = "UPDATE WF_Node SET RunModel={0} WHERE FK_Flow='{1}' AND NodeID={2}"; DBAccess.RunSQL(string.Format(sql, p[0], p[1], p[2])); return(Newtonsoft.Json.JsonConvert.SerializeObject(new { success = true })); } catch (Exception ex) { return(Newtonsoft.Json.JsonConvert.SerializeObject(new { success = false, msg = ex.Message })); } case "ChangeNodeIcon": p = para1.Split(','); try { if (p.Length != 3) { throw new Exception("@修改节点图标参数错误"); } var sql = "UPDATE WF_Node SET Icon='{0}' WHERE FK_Flow='{1}' AND NodeID={2}"; DBAccess.RunSQL(string.Format(sql, p[0], p[1], p[2])); return(Newtonsoft.Json.JsonConvert.SerializeObject(new { success = true })); } catch (Exception ex) { return(Newtonsoft.Json.JsonConvert.SerializeObject(new { success = false, msg = ex.Message })); } default: throw new Exception("@没有约定的执行标记:" + doWhat); } }
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { string url = e.Url.AbsoluteUri; this.statusStrip1.Text = url; string pageID = url.Substring(url.LastIndexOf('/') + 1); this.toolStripStatusLabel1.Text = url; if (pageID.IndexOf(".aspx") != -1) { pageID = pageID.Substring(0, pageID.IndexOf(".aspx")); url = url.Substring(url.IndexOf(".aspx")); url = url.Replace("?", "@"); url = url.Replace("&", "@"); url = url.Replace(".aspx", ""); var para = new AtPara(url); switch (pageID) { case "DoClient": try { switch (para.DoType) { case DoTypeConst.DoStartFlow: //发起流程 this.DoStartFlow(para); break; case DoTypeConst.DoStartFlowByTemple: //启动流程 this.DoStartFlowByTemple(para); break; case DoTypeConst.OpenFlow: //打开流程 this.DoOpenFlow(para); break; case DoTypeConst.OpenDoc: this.DoOpenDoc(para); break; case DoTypeConst.Send: //执行发送 this.DoSend(para); break; case DoTypeConst.UnSend: //发送完成后,用户真接在发送成功的界面上执行撤消发送,则执行此步 break; case DoTypeConst.DelFlow: //执行删除流程。 WebUser.FK_Flow = null; WebUser.FK_Node = 0; WebUser.WorkID = 0; this.Close(); break; default: break; } } catch (Exception ex) { MessageBox.Show("@错误:" + ex.Message + " PageID=" + pageID + " DoType=" + para.DoType, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); this.Close(); } break; default: break; } } }
public string Do(string doWhat, string para1, bool isLogin) { // 如果admin账户登陆时有错误发生,则返回错误信息 var result = LetAdminLogin("CH", isLogin); if (string.IsNullOrEmpty(result) == false) { return(result); } switch (doWhat) { case "GenerFlowTemplete": Flow temp = new BP.WF.Flow(para1); return(null); case "NewFrmSort": BP.Sys.FrmSort frmSort = null; try { frmSort = new FrmSort(); frmSort.No = "01"; frmSort.Name = para1; frmSort.No = frmSort.GenerNewNo; frmSort.Insert(); return(null); } catch (Exception ex) { return("Do Method NewFlowSort Branch has a error , para:\t" + para1 + ex.Message); } case "NewFlowSort": BP.WF.FlowSort fs = null; try { fs = new FlowSort(); fs.Name = para1; fs.No = fs.GenerNewNo; fs.Insert(); return(fs.No); } catch (Exception ex) { BP.DA.Log.DefaultLogWriteLineError("Do Method NewFlowSort Branch has a error , para:\t" + para1 + ex.Message); return(null); } case "EditFlowSort": try { var para = para1.Split(','); fs = new FlowSort(para[0]); fs.Name = para[1]; fs.Save(); return(fs.No); } catch (Exception ex) { BP.DA.Log.DefaultLogWriteLineError("Do Method EditFlowSort Branch has a error , para:\t" + para1 + ex.Message); return(null); } case "NewFlow": Flow fl = new Flow(); try { string[] ps = para1.Split(','); if (ps.Length != 5) { throw new Exception("@创建流程参数错误"); } string fk_floSort = ps[0]; string flowName = ps[1]; DataStoreModel dataSaveModel = (DataStoreModel)int.Parse(ps[2]); string pTable = ps[3]; string flowCode = ps[4]; fl.DoNewFlow(fk_floSort, flowName, dataSaveModel, pTable, flowCode); return(fl.No + ";" + fl.Name); } catch (Exception ex) { BP.DA.Log.DefaultLogWriteLineError("Do Method NewFlow Branch has a error , para:\t" + para1 + ex.Message); return(ex.Message); } case "DelFlow": BP.WF.Flow fl1 = new BP.WF.Flow(para1); try { fl1.DoDelete(); return(null); } catch (Exception ex) { BP.DA.Log.DefaultLogWriteLineError("Do Method DelFlow Branch has a error , para:\t" + para1 + ex.Message); return(ex.Message); } case "DelLable": BP.WF.LabNote ln = new BP.WF.LabNote(para1); try { ln.Delete(); } catch (Exception ex) { BP.DA.Log.DefaultLogWriteLineError("Do Method DelLable Branch has a error , para:\t" + para1 + ex.Message); } return(null); case "DelFlowSort": try { FlowSort delfs = new FlowSort(para1); delfs.Delete(); } catch (Exception ex) { BP.DA.Log.DefaultLogWriteLineError("Do Method DelFlowSort Branch has a error , para:\t" + para1 + ex.Message); } return(null); case "NewNode": try { BP.WF.Flow fl11 = new BP.WF.Flow(para1); BP.WF.Node node = new BP.WF.Node(); node.FK_Flow = ""; node.X = 0; node.Y = 0; node.Insert(); } catch (Exception ex) { BP.DA.Log.DefaultLogWriteLineError("Do Method NewNode Branch has a error , para:\t" + para1 + ex.Message); } return(null); case "DelNode": try { if (!string.IsNullOrEmpty(para1)) { BP.WF.Node delNode = new BP.WF.Node(int.Parse(para1)); delNode.Delete(); } } catch (Exception ex) { BP.DA.Log.DefaultLogWriteLineError("Do Method DelNode Branch has a error , para:\t" + para1 + ex.Message); } return(null); case "NewLab": BP.WF.LabNote lab = new BP.WF.LabNote();; try { lab.FK_Flow = para1; lab.MyPK = BP.DA.DBAccess.GenerOID().ToString(); lab.Insert(); } catch (Exception ex) { BP.DA.Log.DefaultLogWriteLineError("Do Method NewLab Branch has a error , para:\t" + para1 + ex.Message); } return(lab.MyPK); case "DelLab": try { BP.WF.LabNote dellab = new BP.WF.LabNote(); dellab.MyPK = para1; dellab.Delete(); } catch (Exception ex) { BP.DA.Log.DefaultLogWriteLineError("Do Method DelLab Branch has a error , para:\t" + para1 + ex.Message); } return(null); case "GetSettings": return(SystemConfig.AppSettings[para1]); case "GetFlows": string sqls = "SELECT NO,NAME FROM WF_FlowSort"; sqls += "@SELECT No,Name,FK_FlowSort FROM WF_Flow"; return(RunSQLReturnTableS(sqls)); case "SaveFlowFrm": Entity en = null; try { AtPara ap = new AtPara(para1); string enName = ap.GetValStrByKey("EnName"); string pk = ap.GetValStrByKey("PKVal"); en = ClassFactory.GetEn(enName); en.ResetDefaultVal(); if (en == null) { throw new Exception("无效的类名:" + enName); } if (string.IsNullOrEmpty(pk) == false) { en.PKVal = pk; en.RetrieveFromDBSources(); } foreach (string key in ap.HisHT.Keys) { if (key == "PKVal") { continue; } en.SetValByKey(key, ap.HisHT[key].ToString().Replace('^', '@')); } en.Save(); return(en.PKVal as string); } catch (Exception ex) { if (en != null) { en.CheckPhysicsTable(); } return("Error:" + ex.Message); } case "ReleaseToFTP": // 暂时注释,下次更新ftp功能时会得新编译 。 //var args = para1.Split(','); //var binaryData = Convert.FromBase64String(args[1]); //var imageFilePath = Server.MapPath(System.Web.HttpContext.Current.Request.ApplicationPath) + "/Temp/" + args[0] + ".jpg"; //if (File.Exists(imageFilePath)) //{ // File.Delete(imageFilePath); //} //System.IO.Directory.CreateDirectory( // Server.MapPath(System.Web.HttpContext.Current.Request.ApplicationPath) + "/Temp"); //var stream = new System.IO.FileStream(imageFilePath, FileMode.OpenOrCreate, FileAccess.ReadWrite); //stream.Write(binaryData, 0, binaryData.Length); //stream.Close(); //var xmlFilePath = FlowTemplete_Gener(args[0], true); //string remoteDr = "/" + ConfigurationSettings.AppSettings["UserIdentifier"];; //var ftp = new FtpConnection(); //try //{ // string ftpIP = ConfigurationSettings.AppSettings["FTPServerIP"]; // string email = ConfigurationSettings.AppSettings["FTPUserEmail"]; // Session session = new Session(); // session.Server = ftpIP; // session.Connect("anonymous", "*****@*****.**"); // ftp.Connect(ftpIP, "anonymous", email); // remoteDr = remoteDr; // if(!ftp.DirectoryExist(remoteDr)) // { // ftp.CreateDirectory(remoteDr); // } // ftp.SetCurrentDirectory(remoteDr); // ftp.PutFile(imageFilePath, remoteDr); // return string.Empty;//上传成功 //} //catch (Exception err) //{ // return err.Message;//上传失败 //} //finally //{ // ftp.Close(); //} return(string.Empty); default: throw null; } }
/// <summary> /// 绑定数据返回只读,不包含TB控件 /// </summary> /// <param name="attrs"></param> /// <param name="pa"></param> public void BindAttrsForHtml(Attrs attrs, AtPara pa) { this.Add("<table width='100%' id='a1' border='1' cellpadding='0' cellspacing='0' style='border-collapse: collapse' bordercolor='#111111' >"); bool isLeft = true; object val = null; bool isAddTR = true; foreach (Attr attr in attrs) { if (attr.UIVisible == false) { continue; } if (attr.Key == "MyNum") { continue; } if (isLeft) { isAddTR = true; this.AddTR(); } val = pa.GetValStrByKey(attr.Key); if (attr.UIContralType == UIContralType.TB) { if (attr.MyFieldType == FieldType.RefText) { //this.SetValByKey(attr.Key, val.ToString()); continue; } else if (attr.MyFieldType == FieldType.MultiValues) { /* 如果是多值的.*/ LB lb = new LB(attr); lb.Visible = true; lb.Height = 128; lb.SelectionMode = ListSelectionMode.Multiple; Entities ens = ClassFactory.GetEns(attr.UIBindKey); ens.RetrieveAll(); this.Controls.Add(lb); } else { if (attr.UIVisible == false) { continue; } else { switch (attr.MyDataType) { case DataType.AppMoney: val = decimal.Parse(val.ToString()).ToString("0.00"); break; default: val = val.ToString(); break; } this.Add("<td class='FDesc' nowrap width=1% > " + attr.Desc + "</td>"); this.Add("<td class='TD' nowrap width='30%'>"); this.Add(val.ToString()); this.Add("</td>"); } } } else if (attr.UIContralType == UIContralType.CheckBok) { CheckBox cb = new CheckBox(); if (attr.DefaultVal.ToString() == "1") { cb.Checked = true; } else { cb.Checked = false; } cb.ID = "CB_RD_" + attr.Key; this.AddContral(attr.Desc, cb); } else if (attr.UIContralType == UIContralType.DDL) { /* 如果是 DDLIsEnable 的, 就要找到. */ if (attr.MyFieldType == FieldType.Enum) { /* 如果是 enum 类型 */ int enumKey = 0; try { enumKey = int.Parse(val.ToString()); } catch { throw new Exception("默认值错误:" + attr.Key + " = " + val.ToString()); } BP.Sys.SysEnum enEnum = new BP.Sys.SysEnum(attr.UIBindKey, "CH", enumKey); this.Add("<td class='FDesc' nowrap width=1% > " + attr.Desc + "</td>"); this.Add("<td class='TD' nowrap width='30%'>"); this.Add(enEnum.Lab); this.Add("</td>"); } else { /* 如果是 ens 类型 */ Entities ens = ClassFactory.GetEns(attr.UIBindKey); Entity en1 = ens.GetNewEntity; en1.SetValByKey(attr.UIRefKeyValue, val.ToString()); string lab = ""; try { en1.Retrieve(); lab = en1.GetValStringByKey(attr.UIRefKeyText); } catch { if (SystemConfig.IsDebug == false) { lab = "" + val.ToString(); } else { lab = "" + val.ToString(); } } this.Add("<td class='FDesc' nowrap width=1% > " + attr.Desc + "</td>"); this.Add("<td class='TD' nowrap width='30%'>"); this.Add(lab); this.Add("</td>"); } } else if (attr.UIContralType == UIContralType.RadioBtn) { // Sys.SysEnums enums = new BP.Sys.SysEnums(attr.UIBindKey); // foreach(SysEnum en in enums) // { // return ; // } } if (isLeft == false) { isAddTR = false; this.AddTREnd(); } isLeft = !isLeft; } // 结束循环. //补充TR if (isAddTR == true) { this.AddTD(""); this.AddTD(""); this.AddTREnd(); } this.Add("</TABLE>"); }
/// <summary> /// 保存流程, 用 ~ 隔开。 /// </summary> /// <param name="flowNo">流程编号</param> /// <param name="nodes">节点信息,格式为:@NodeID=xxxx@X=xxx@Y=xxx@Name=xxxx@RunModel=1</param> /// <param name="dirs">方向信息,格式为: @Node=xxxx@ToNode=xxx@X=xxx@Y=xxx@Name=xxxx </param> /// <param name="labes">标签信息,格式为:@MyPK=xxxxx@Label=xxx@X=xxx@Y=xxxx</param> public static string SaveFlow(string fk_flow, string nodes, string dirs, string labes) { try { #region 处理方向. string sql = "DELETE FROM WF_Direction WHERE FK_Flow='" + fk_flow + "'"; DBAccess.RunSQL(sql); string[] mydirs = dirs.Split('~'); foreach (string dir in mydirs) { if (string.IsNullOrEmpty(dir)) { continue; } AtPara ap = new AtPara(dir); string dots = ap.GetValStrByKey("Dots").Replace('#', '@'); if (string.IsNullOrEmpty(dots) == true) { dots = ""; } Direction enDir = new Direction(); enDir.Node = ap.GetValIntByKey(DirectionAttr.Node); enDir.ToNode = ap.GetValIntByKey(DirectionAttr.ToNode); enDir.IsCanBack = ap.GetValBoolenByKey(DirectionAttr.IsCanBack); enDir.DirType = ap.GetValIntByKey(DirectionAttr.DirType); enDir.FK_Flow = fk_flow; enDir.Dots = dots; try { enDir.Insert(); } catch { // enDir.Update(); } } #endregion 处理方向. #region 保存节点 string[] nds = nodes.Split('~'); foreach (string nd in nds) { if (string.IsNullOrEmpty(nd)) { continue; } AtPara ap = new AtPara(nd); sql = "UPDATE WF_Node SET X=" + ap.GetValStrByKey("X") + ",Y=" + ap.GetValStrByKey("Y") + ", Name='" + ap.GetValStrByKey("Name") + "' WHERE NodeID=" + ap.GetValIntByKey("NodeID"); DBAccess.RunSQL(sql); } Flow.UpdateVer(fk_flow); #endregion 保存节点 #region 处理标签。 sql = "DELETE FROM WF_LabNote WHERE FK_Flow='" + fk_flow + "'"; DBAccess.RunSQL(sql); string[] mylabs = labes.Split('~'); foreach (string lab in mylabs) { if (string.IsNullOrEmpty(lab)) { continue; } AtPara ap = new AtPara(lab); LabNote ln = new LabNote(); ln.MyPK = BP.DA.DBAccess.GenerGUID(); // ap.GetValStrByKey("MyPK"); ln.FK_Flow = fk_flow; ln.Name = ap.GetValStrByKey("Label"); ln.X = ap.GetValIntByKey("X"); ln.Y = ap.GetValIntByKey("Y"); ln.Insert(); } #endregion 处理标签。 // 备份文件 //f1.WriteToXml(); } catch (Exception ex) { return(ex.Message); } return(null); }
protected void Page_Load(object sender, EventArgs e) { //以下判断没发现起到什么作用 if (BP.WF.Dev2Interface.Flow_IsCanViewTruck(this.FK_Flow, this.WorkID, this.FID) == false) { //string url = this.Request.RawUrl; ////url=url.Replace ////this.Response.Redirect(url,true); //string errorStr = "您没有权限查看该工作"; //errorStr += "<br>1,您非该流程的处理人."; //errorStr += "<br>2, 您不与该流程发起人是同一个部门。"; //return ; } if (this.DoType == "View") { this.BindTrack_ViewWork(); return; } if (this.DoType == "ViewSpecialWork") { this.BindTrack_ViewSpecialWork(); return; } //this.AddTable("class='Table' cellpadding='0' cellspacing='0' border='0' style='width: 100%'"); //this.AddTR(); //this.AddTDGroupTitle("style='text-align:center'", "序"); //this.AddTDGroupTitle("操作时间"); //this.AddTDGroupTitle("表单"); //moved by liuxc,2014-12-18,应zhangqingpeng要求将此列提前 //this.AddTDGroupTitle("从节点"); //this.AddTDGroupTitle("人员"); //this.AddTDGroupTitle("到节点"); //this.AddTDGroupTitle("人员"); //this.AddTDGroupTitle("到达时间"); //this.AddTDGroupTitle("用时"); //this.AddTDGroupTitle("活动"); //this.AddTDGroupTitle("信息"); //this.AddTDGroupTitle("执行人"); //this.AddTREnd(); //获取track. DataTable dt = BP.WF.Dev2Interface.DB_GenerTrack(this.FK_Flow, this.WorkID, this.FID).Tables["Track"]; DataView dv = dt.DefaultView; dv.Sort = "RDT"; GenerWorkFlow gwf = new GenerWorkFlow(); gwf.WorkID = this.WorkID; gwf.RetrieveFromDBSources(); string currNodeID = "0"; if (gwf.WFState != WFState.Complete) { currNodeID = gwf.FK_Node.ToString(); //获得当前运行到的节点如果流程完成则为O. } int idx = 1; string checkStr = ""; #region qin 改成时间轴的显示方式 15/7/15 如果不需要这种显示方式 string str = "";//拼接字符串 str += "<div style='width: 100%;height:400px;'><div class='content'>"; str += "<div class='wrapper'>"; str += "<div class='main'>"; str += "<h1 class='title'>"; str += "流程日志</h1>"; str += "<div class='year'>"; str += "<h2>"; str += "<a href='#'> 时间轴<i></i></a></h2>"; str += "<div class='list'>"; str += "<ul>"; #endregion qin 改成时间轴的显示方式 15/7/15 #region 开始循环添加数据 foreach (DataRowView dr in dv) { Int64 fid = int.Parse(dr["FID"].ToString()); if (fid != 0) { continue; } ActionType at = (ActionType)int.Parse(dr[TrackAttr.ActionType].ToString()); //如果是协作发送,就不输出他. edit 2016.02.20 . if (at == ActionType.TeampUp) { continue; } // 记录审核节点。 if (at == ActionType.WorkCheck) { checkStr = dr[TrackAttr.NDFrom].ToString(); //记录当前的审核节点id. } //审核信息过滤, if (at == ActionType.WorkCheck) { if (currNodeID == checkStr) { continue; } //如果当前节点与审核信息节点一致,就说明当前人员的审核意见已经保存,但是工作还没有发送,就不让他显示。 } if (at == ActionType.Forward) { if (checkStr == dr[TrackAttr.NDFrom].ToString()) { continue; } } str += "<li class='cls highlight' style=\"background: url('../../Img/Action/" + at.ToString() + ".png') no-repeat 235px 31px\">"; //this.AddTR(); //this.AddTDIdx(idx); DateTime dtt = DataType.ParseSysDateTime2DateTime(dr[TrackAttr.RDT].ToString()); // this.AddTD(dtt.ToString("yy年MM月dd日HH:mm"));</br> str += "<p class='date'>" + dtt.ToString("yy年MM月dd日") + " " + dtt.ToString("hh时mm分"); str += "</br>" + BP.DA.DataType.GetWeek((int)dtt.DayOfWeek); str += "</br>" + BP.WF.Glo.GenerUserImgHtml(dr[TrackAttr.EmpFrom].ToString(), dr[TrackAttr.EmpFromT].ToString()) + "</p>"; str += "<p class='intro'>" + dr[TrackAttr.NDFromT].ToString() + "</p>"; str += "<div class='more'>"; if (at == ActionType.Forward || at == ActionType.ForwardAskfor || at == ActionType.WorkCheck || at == ActionType.Order || at == ActionType.FlowOver || //added by liuxc,2014-12-3,正常结束结点也显示表单 at == ActionType.Skip) //added by liuxc,2015-7-13,自动跳转的也显示表单 { //this.AddTD("<a class='easyui-linkbutton' data-options=\"iconCls:'icon-sheet'\" href=\"javascript:WinOpen('" + BP.WF.Glo.CCFlowAppPath + "WF/WFRpt.aspx?WorkID=" + dr[TrackAttr.WorkID].ToString() + "&FK_Flow=" + this.FK_Flow + "&FK_Node=" + dr[TrackAttr.NDFrom].ToString() + "&DoType=View&MyPK=" + dr[TrackAttr.MyPK].ToString() + "','" + dr[TrackAttr.MyPK].ToString() + "');\">表单</a>"); str += "<p><a class='easyui-linkbutton' data-options=\"iconCls:'icon-sheet'\" href=\"javascript:WinOpen('" + BP.WF.Glo.CCFlowAppPath + "WF/WFRpt.aspx?WorkID=" + dr[TrackAttr.WorkID].ToString() + "&FK_Flow=" + this.FK_Flow + "&FK_Node=" + dr[TrackAttr.NDFrom].ToString() + "&DoType=View&MyPK=" + dr[TrackAttr.MyPK].ToString() + "','" + dr[TrackAttr.MyPK].ToString() + "');\">打开<img src='../../Img/Form.png'>表单</a>" + "</p>"; } if (at == ActionType.FlowOver || at == ActionType.CC || at == ActionType.UnSend) { str += "<p></p>"; str += "<p></p>"; } else { str += "<p>发送到节点:" + dr[TrackAttr.NDToT].ToString() + "</p>"; } //增加两列,到达时间、用时 added by liuxc,2014-12-4 if (idx > 1) { var toTime = Convert.ToDateTime(dv[idx - 1 - 1][TrackAttr.RDT].ToString()); str += "<p>到达时间:" + toTime.ToString("yy年MM月dd日HH:mm") + " 用时:" + DataType.GetSpanTime(toTime, dtt) + "</p>"; } // 删除信息. string tag = dr[TrackAttr.Tag].ToString(); if (tag != null) { tag = tag.Replace("~", "'"); } string msg = DataType.ParseText2Html(dr[TrackAttr.Msg].ToString()); switch (at) { case ActionType.CallChildenFlow: //被调用父流程吊起。 if (string.IsNullOrEmpty(tag) == false) { AtPara ap = new AtPara(tag); GenerWorkFlow mygwf = new GenerWorkFlow(); mygwf.WorkID = ap.GetValInt64ByKey("PWorkID"); if (mygwf.RetrieveFromDBSources() == 1) { msg = "<p>操作员:{" + dr[TrackAttr.EmpFromT].ToString() + "}在当前节点上,被父流程{" + mygwf.FlowName + "},<a target=b" + ap.GetValStrByKey("PWorkID") + " href='Track.aspx?WorkID=" + ap.GetValStrByKey("PWorkID") + "&FK_Flow=" + ap.GetValStrByKey("PFlowNo") + "' >" + msg + "</a></p>"; } else { msg = "<p>操作员:{" + dr[TrackAttr.EmpFromT].ToString() + "}在当前节点上,被父流程调用{" + mygwf.FlowName + "},但是该流程被删除了.</p>" + tag; } msg = "<a target=b" + ap.GetValStrByKey("PWorkID") + " href='Track.aspx?WorkID=" + ap.GetValStrByKey("PWorkID") + "&FK_Flow=" + ap.GetValStrByKey("PFlowNo") + "' >" + msg + "</a>"; } break; case ActionType.StartChildenFlow: //吊起子流程。 if (string.IsNullOrEmpty(tag) == false) { if (tag.Contains("Sub")) { tag = tag.Replace("Sub", "C"); } AtPara ap = new AtPara(tag); GenerWorkFlow mygwf = new GenerWorkFlow(); mygwf.WorkID = ap.GetValInt64ByKey("CWorkID"); if (mygwf.RetrieveFromDBSources() == 1) { msg = "<p>操作员:{" + dr[TrackAttr.EmpFromT].ToString() + "}在当前节点上调用了子流程{" + mygwf.FlowName + "}, <a target=b" + ap.GetValStrByKey("CWorkID") + " href='Track.aspx?WorkID=" + ap.GetValStrByKey("CWorkID") + "&FK_Flow=" + ap.GetValStrByKey("CFlowNo") + "' >" + msg + "</a></p>"; msg += "<p>当前子流程状态:{" + mygwf.WFStateText + "},运转到:{" + mygwf.NodeName + "},最后处理人{" + mygwf.TodoEmps + "},最后处理时间{" + mygwf.RDT + "}。</p>"; } else { msg = "<p>操作员:{" + dr[TrackAttr.EmpFromT].ToString() + "}在当前节点上调用了子流程{" + mygwf.FlowName + "},但是该流程被删除了.</p>" + tag; } } break; default: break; } msg = msg.Replace("\"", ""); str += "<p>" + msg + "</p>"; str += "</div>"; str += "</li>"; idx++; } //判断当前工作是否完成,如果没有完成,就输出当前人员的待办信息 ,读取信息。 if (gwf.WFState == WFState.Runing) { GenerWorkerLists gwls = new GenerWorkerLists(gwf.WorkID, gwf.FK_Node); Node nd = new Node(gwf.FK_Node); str += "<li class='cls highlight' style=\"background: url('../../Img/Action/Todolist.png') no-repeat 235px 31px\" >"; str += "<BR><BR><p class='date'>流程运行到: " + gwf.NodeName + "。"; if (gwf.TodoEmpsNum == 1) { string myemp = gwf.TodoEmps; myemp = myemp.Replace("(", ""); myemp = myemp.Replace(")", ""); string[] strs = myemp.Split(','); str += "<br>" + BP.WF.Glo.GenerUserImgHtml(strs[0], strs[1]) + "。</p>"; } else { // str += "<br>处理人员:(" + gwf.TodoEmps + ")计(" + gwf.TodoEmpsNum + ")个,。</p>"; } str += "<div></div><br><br>"; if (nd.HisNodeWorkType == NodeWorkType.WorkFL || nd.HisNodeWorkType == NodeWorkType.StartWorkFL || nd.HisNodeWorkType == NodeWorkType.WorkFHL) { str += "<div><ul>"; foreach (GenerWorkerList item in gwls) { if (gwls.Count == 0 || nd.TodolistModel == TodolistModel.QiangBan || nd.TodolistModel == TodolistModel.Sharing) { if (item.IsRead == false) { str += "<li><img src='../../Img/Dot.png' width='8px' >处理人:" + BP.WF.Glo.DealUserInfoShowModel(item.FK_Emp, item.FK_EmpText) + " <font style='color:#FFFFFF; background-color:#00CC66' >未读</font></li>"; } else { str += "<li><img src='../../Img/Dot.png' width='8px' >处理人:" + BP.WF.Glo.DealUserInfoShowModel(item.FK_Emp, item.FK_EmpText) + " <font style='color:#FFFFFF; background-color:#FF9966' ><strong>已读</strong></font></li>"; } break; } switch (nd.TodolistModel) { case TodolistModel.QiangBan: str += "<li><img src='../../Img/Dot.png' width='8px' >处理人:" + BP.WF.Glo.DealUserInfoShowModel(item.FK_Emp, item.FK_EmpText) + " <font style='color:#FFFFFF; background-color:#FF9966' ><strong>已读</strong></font></li>"; break; case TodolistModel.Order: if (item.IsPassInt == 1) { str += "<li><img src='../../Img/Dot.png' width='8px' >处理人:" + BP.WF.Glo.DealUserInfoShowModel(item.FK_Emp, item.FK_EmpText) + " <font style='color:#FFFFFF; background-color:#FF9966' ><strong>已处理</strong></font></li>"; } else { if (item.IsRead == false) { str += "<li><img src='../../Img/Dot.png' width='8px' >处理人:" + BP.WF.Glo.DealUserInfoShowModel(item.FK_Emp, item.FK_EmpText) + " <font style='color:#FFFFFF; background-color:#00CC66' >未读</font></li>"; } else { str += "<li><img src='../../Img/Dot.png' width='8px' >处理人:" + BP.WF.Glo.DealUserInfoShowModel(item.FK_Emp, item.FK_EmpText) + " <font style='color:#FFFFFF; background-color:#FF9966' ><strong>已读</strong></font></li>"; } } break; case TodolistModel.Sharing: str += "<li><img src='../../Img/Dot.png' width='8px' >处理人:" + BP.WF.Glo.DealUserInfoShowModel(item.FK_Emp, item.FK_EmpText) + " <font style='color:#FFFFFF; background-color:#FF9966' ><strong>已读</strong></font></li>"; break; case TodolistModel.Teamup: if (item.IsPassInt == 1) { str += "<li><img src='../../Img/Dot.png' width='8px' >处理人:" + BP.WF.Glo.DealUserInfoShowModel(item.FK_Emp, item.FK_EmpText) + " <font style='color:#FFFFFF; background-color:#999966' ><strong>已处理</strong></font></li>"; } else { if (item.IsRead == false) { str += "<li><img src='../../Img/Dot.png' width='8px' >处理人:" + BP.WF.Glo.DealUserInfoShowModel(item.FK_Emp, item.FK_EmpText) + " <font style='color:#FFFFFF; background-color:#00CC66' >未读</font></li>"; } else { str += "<li><img src='../../Img/Dot.png' width='8px' >处理人:" + BP.WF.Glo.DealUserInfoShowModel(item.FK_Emp, item.FK_EmpText) + " <font style='color:#FFFFFF; background-color:#FF9966' ><strong>已读</strong></font></li>"; } } break; default: break; } } } str += "</ul>"; str += "</div>"; str += "<br>"; str += "<br>"; str += "<br>"; str += "<br>"; str += "<br>"; str += "<br>"; str += "<br>"; str += "</li>"; ///* 运行中的状态. */ //str += "<li>"; //str += "<table>"; //str += "<caption>当前节点信息</caption>"; //str += "<tr>"; //str += "<th>停留节点</th>"; //str += "<th>处理人</th>"; //str += "<th>是否读取?</th>"; //str += "</tr>"; //foreach (GenerWorkerList item in gwls) //{ // str += "<tr>"; // str += "<td>" + item.FK_NodeText + "</td>"; // str += "<td>" + item.FK_EmpText + "</td>"; // if (item.IsRead) // str += "<td>已读</td>"; // else // str += "<td>未读</td>"; // str += "</tr>"; //} //str += "</table>"; //str += "</li>"; } //结束循环. //this.AddTableEnd(); #endregion if (this.CCID != null) { CCList cl = new CCList(); cl.MyPK = this.CCID; cl.RetrieveFromDBSources(); // this.AddFieldSet(cl.Title); // this.Add("抄送人:" + cl.Rec + ", 抄送日期:" + cl.RDT); // this.AddHR(); // this.Add(cl.DocHtml); // this.AddFieldSetEnd(); str += "<li class='cls highlight' style=\"background: url('./Img/Action/circle.png') no-repeat 235px 31px\">"; str += "<p class='date'> </p>"; str += "<p class='intro'>" + cl.Title + "</p>"; str += "<p class='version'> </p>"; str += "<div class='more'>"; str += "<p>抄送人:" + cl.Rec + "</p>"; str += "<p>抄送日期:" + cl.RDT + "</p>"; str += "</div>"; str += "</li>"; if (cl.HisSta == CCSta.UnRead) { cl.HisSta = CCSta.Read; cl.Update(); } } str += "</ul>"; str += "</div>"; str += "</div>"; str += "</div>"; str += "</div>"; str += "</div>"; str += "</div>"; //this.Clear(); HiddenField1.Value = str.ToString(); }
void btn_Click(object sender, EventArgs e) { UserRegedit ur = new UserRegedit(); ur.MyPK = this.MyPK; ur.RetrieveFromDBSources(); ur.FK_Emp = WebUser.No; ur.CfgKey = this.EnsName + "_SearchAttrs"; Entity en = BP.DA.ClassFactory.GetEns(this.EnsName).GetNewEntity; Attr attr = en.EnMap.GetAttrByKey(this.AttrKey); string cfgVal = ur.MVals; AtPara ap = new AtPara(cfgVal); string old_Val = ap.GetValStrByKey(this.AttrKey); string keys = "@" + this.AttrKey + "="; if (attr.IsEnum) { SysEnums ses = new SysEnums(attr.UIBindKey); foreach (SysEnum item in ses) { if (this.Pub1.GetCBByID("CB_" + item.IntKey).Checked == false) { continue; } keys += "." + item.IntKey + "."; } if (ur.MVals.Contains("@" + this.AttrKey)) { ur.MVals = ur.MVals.Replace("@" + this.AttrKey + "=" + old_Val, keys); } else { ur.MVals = ur.MVals + keys; } ur.DirectUpdate(); } else { if (attr.UIBindKey == "BP.Port.Depts") { DataTable dt; if (WebUser.No == "admin") { dt = DBAccess.RunSQLReturnTable("SELECT No,Name FROM Port_Dept "); } else { dt = DBAccess.RunSQLReturnTable("SELECT No,Name FROM Port_Dept WHERE No IN (SELECT FK_Dept FROM WF_DeptFlowSearch WHERE FK_Emp='" + WebUser.No + "' AND FK_Flow='" + this.FK_Flow + "')"); } foreach (DataRow dr in dt.Rows) { if (this.Pub1.GetCBByID("CB_" + dr[0].ToString()).Checked == false) { continue; } keys += "." + dr[0].ToString() + "."; } } else { Entities ens = BP.DA.ClassFactory.GetEns(attr.UIBindKey); ens.RetrieveAll(); foreach (Entity item in ens) { if (this.Pub1.GetCBByID("CB_" + item.GetValStrByKey(attr.UIRefKeyValue)).Checked == false) { continue; } keys += "." + item.GetValStrByKey(attr.UIRefKeyValue) + "."; } } if (ur.MVals.Contains("@" + this.AttrKey)) { ur.MVals = ur.MVals.Replace("@" + this.AttrKey + "=" + old_Val, keys); } else { ur.MVals = ur.MVals + keys; } ur.DirectUpdate(); } keys = keys.Replace("@" + this.AttrKey + "=", ""); this.WinClose(keys); }
/// <summary> /// 树节点管理 /// </summary> public string Do() { string doWhat = getUTF8ToString("doWhat"); string para1 = getUTF8ToString("para1"); // 如果admin账户登陆时有错误发生,则返回错误信息 var result = LetAdminLogin("CH", true); if (string.IsNullOrEmpty(result) == false) { return(result); } switch (doWhat) { case "GetFlowSorts": //获取所有流程类型 try { FlowSorts flowSorts = new FlowSorts(); flowSorts.RetrieveAll(FlowSortAttr.Idx); return(BP.Tools.Entitis2Json.ConvertEntitis2GenerTree(flowSorts, "0")); } catch (Exception ex) { return(Newtonsoft.Json.JsonConvert.SerializeObject(new { success = false, msg = ex.Message })); } case "NewSameLevelFrmSort": //创建同级别的 表单树 目录. SysFormTree frmSort = null; try { var para = para1.Split(','); frmSort = new SysFormTree(para[0]); string sameNodeNo = frmSort.DoCreateSameLevelNode().No; frmSort = new SysFormTree(sameNodeNo); frmSort.Name = para[1]; frmSort.Update(); return(null); } catch (Exception ex) { return("Do Method NewFormSort Branch has a error , para:\t" + para1 + ex.Message); } case "NewSubLevelFrmSort": //创建子级别的 表单树 目录. SysFormTree frmSortSub = null; try { var para = para1.Split(','); frmSortSub = new SysFormTree(para[0]); string sameNodeNo = frmSortSub.DoCreateSubNode().No; frmSortSub = new SysFormTree(sameNodeNo); frmSortSub.Name = para[1]; frmSortSub.Update(); return(null); } catch (Exception ex) { return("Do Method NewSubLevelFrmSort Branch has a error , para:\t" + para1 + ex.Message); } case "NewSameLevelFlowSort": //创建同级别的 流程树 目录. FlowSort fs = null; try { var para = para1.Split(','); fs = new FlowSort(para[0].Replace("F", "")); //传入的编号多出F符号,需要替换掉 string sameNodeNo = fs.DoCreateSameLevelNode().No; fs = new FlowSort(sameNodeNo); fs.Name = para[1]; fs.Update(); return (Newtonsoft.Json.JsonConvert.SerializeObject( new { success = true, msg = string.Empty, data = "F" + fs.No })); } catch (Exception ex) { BP.DA.Log.DefaultLogWriteLineError("Do Method NewSameLevelFlowSort Branch has a error , para:\t" + para1 + ex.Message); return(Newtonsoft.Json.JsonConvert.SerializeObject(new { success = false, msg = ex.Message })); } case "NewSubFlowSort": //创建子级别的 流程树 目录. try { var para = para1.Split(','); FlowSort fsSub = new FlowSort(para[0].Replace("F", ""));//传入的编号多出F符号,需要替换掉 string subNodeNo = fsSub.DoCreateSubNode().No; FlowSort subFlowSort = new FlowSort(subNodeNo); subFlowSort.Name = para[1]; subFlowSort.Update(); return (Newtonsoft.Json.JsonConvert.SerializeObject( new { success = true, msg = string.Empty, data = "F" + subFlowSort.No })); } catch (Exception ex) { BP.DA.Log.DefaultLogWriteLineError("Do Method NewSubFlowSort Branch has a error , para:\t" + ex.Message); return(Newtonsoft.Json.JsonConvert.SerializeObject(new { success = false, msg = ex.Message })); } case "EditFlowSort": //编辑表单树. try { var para = para1.Split(','); fs = new FlowSort(para[0].Replace("F", ""));//传入的编号多出F符号,需要替换掉 fs.Name = para[1]; fs.Save(); return (Newtonsoft.Json.JsonConvert.SerializeObject( new { success = true, msg = string.Empty, data = fs.No })); } catch (Exception ex) { BP.DA.Log.DefaultLogWriteLineError("Do Method EditFlowSort Branch has a error , para:\t" + para1 + ex.Message); return(Newtonsoft.Json.JsonConvert.SerializeObject(new { success = false, msg = ex.Message })); } case "NewFlow": //创建新流程. try { string[] ps = para1.Split(','); if (ps.Length != 6) { throw new Exception("@创建流程参数错误"); } string fk_floSort = ps[0]; //类别编号. fk_floSort = fk_floSort.Replace("F", ""); //传入的编号多出F符号,需要替换掉 string flowName = ps[1]; // 流程名称. DataStoreModel dataSaveModel = (DataStoreModel)int.Parse(ps[2]); //数据保存方式。 string pTable = ps[3]; // 物理表名。 string flowMark = ps[4]; // 流程标记. string flowVer = ps[5]; // 流程版本 string FK_Flow = BP.BPMN.Glo.NewFlow(fk_floSort, flowName, dataSaveModel, pTable, flowMark, flowVer); return (Newtonsoft.Json.JsonConvert.SerializeObject( new { success = true, msg = string.Empty, data = new { no = FK_Flow, name = flowName } })); } catch (Exception ex) { BP.DA.Log.DefaultLogWriteLineError("Do Method NewFlow Branch has a error , para:\t" + para1 + ex.Message); return(Newtonsoft.Json.JsonConvert.SerializeObject(new { success = false, msg = ex.Message })); } case "DelFlow": //删除流程. try { return(Newtonsoft.Json.JsonConvert.SerializeObject( new { success = true, msg = WorkflowDefintionManager.DeleteFlowTemplete(para1) })); } catch (Exception ex) { return(Newtonsoft.Json.JsonConvert.SerializeObject(new { success = false, msg = ex.Message })); } case "DelFlowSort": try { string FK_FlowSort = para1.Replace("F", ""); string forceDel = getUTF8ToString("force"); FlowSort delfs = new FlowSort(); delfs.No = FK_FlowSort; //强制删除,不需判断是否含有子项。 if (forceDel == "true") { delfs.DeleteFlowSortSubNode_Force(); delfs.Delete(); return(Newtonsoft.Json.JsonConvert.SerializeObject(new { success = true, reason = "" })); } //判断是否包含子类别 if (delfs.HisSubFlowSorts != null && delfs.HisSubFlowSorts.Count > 0) { return(Newtonsoft.Json.JsonConvert.SerializeObject(new { success = false, reason = "havesubsorts", msg = "此类别下包含子类别。" })); } //判断是否包含工作流程 if (delfs.HisFlows != null && delfs.HisFlows.Count > 0) { return(Newtonsoft.Json.JsonConvert.SerializeObject(new { success = false, reason = "haveflows", msg = "此类别下包含流程。" })); } //执行删除 delfs.Delete(); return(Newtonsoft.Json.JsonConvert.SerializeObject(new { success = true, reason = "" })); } catch (Exception ex) { BP.DA.Log.DefaultLogWriteLineError("Do Method DelFlowSort Branch has a error , para:\t" + para1 + ex.Message); return(Newtonsoft.Json.JsonConvert.SerializeObject(new { success = false, msg = ex.Message })); } case "DelNode": try { if (!string.IsNullOrEmpty(para1)) { BP.WF.Node delNode = new BP.WF.Node(int.Parse(para1)); delNode.Delete(); } else { throw new Exception("@参数错误:" + para1); } } catch (Exception ex) { return("err:" + ex.Message); } return(null); case "SetBUnit": try { if (!string.IsNullOrEmpty(para1)) { BP.WF.Node nd = new BP.WF.Node(int.Parse(para1)); nd.IsTask = !nd.IsBUnit; nd.Update(); } else { throw new Exception("@参数错误:" + para1); } } catch (Exception ex) { return("err:" + ex.Message); } return(null); case "GetSettings": return(SystemConfig.AppSettings[para1]); case "SaveFlowFrm": //保存流程表单. Entity en = null; try { AtPara ap = new AtPara(para1); string enName = ap.GetValStrByKey("EnName"); string pk = ap.GetValStrByKey("PKVal"); en = ClassFactory.GetEn(enName); en.ResetDefaultVal(); if (en == null) { throw new Exception("无效的类名:" + enName); } if (string.IsNullOrEmpty(pk) == false) { en.PKVal = pk; en.RetrieveFromDBSources(); } foreach (string key in ap.HisHT.Keys) { if (key == "PKVal") { continue; } en.SetValByKey(key, ap.HisHT[key].ToString().Replace('^', '@')); } en.Save(); return(en.PKVal as string); } catch (Exception ex) { if (en != null) { en.CheckPhysicsTable(); } return("Error:" + ex.Message); } case "ChangeNodeType": var p = para1.Split(','); try { if (p.Length != 3) { throw new Exception("@修改节点类型参数错误"); } //var sql = "UPDATE WF_Node SET Icon='{0}' WHERE FK_Flow='{1}' AND NodeID='{2}'"; var sql = "UPDATE WF_Node SET RunModel={0} WHERE FK_Flow='{1}' AND NodeID={2}"; DBAccess.RunSQL(string.Format(sql, p[0], p[1], p[2])); return(Newtonsoft.Json.JsonConvert.SerializeObject(new { success = true })); } catch (Exception ex) { return(Newtonsoft.Json.JsonConvert.SerializeObject(new { success = false, msg = ex.Message })); } case "ChangeNodeIcon": p = para1.Split(','); try { if (p.Length != 3) { throw new Exception("@修改节点图标参数错误"); } var sql = "UPDATE WF_Node SET Icon='{0}' WHERE FK_Flow='{1}' AND NodeID={2}"; DBAccess.RunSQL(string.Format(sql, p[0], p[1], p[2])); return(Newtonsoft.Json.JsonConvert.SerializeObject(new { success = true })); } catch (Exception ex) { return(Newtonsoft.Json.JsonConvert.SerializeObject(new { success = false, msg = ex.Message })); } default: throw new Exception("@没有约定的执行标记:" + doWhat); } }
protected void Page_Load(object sender, EventArgs e) { if (this.DoType == "View") { this.BindTrack_ViewWork(); return; } if (this.DoType == "ViewSpecialWork") { this.BindTrack_ViewSpecialWork(); return; } //this.AddTable("class='Table' cellpadding='0' cellspacing='0' border='0' style='width: 100%'"); //this.AddTR(); //this.AddTDGroupTitle("style='text-align:center'", "序"); //this.AddTDGroupTitle("操作时间"); //this.AddTDGroupTitle("表单"); //moved by liuxc,2014-12-18,应zhangqingpeng要求将此列提前 //this.AddTDGroupTitle("从节点"); //this.AddTDGroupTitle("人员"); //this.AddTDGroupTitle("到节点"); //this.AddTDGroupTitle("人员"); //this.AddTDGroupTitle("到达时间"); //this.AddTDGroupTitle("用时"); //this.AddTDGroupTitle("活动"); //this.AddTDGroupTitle("信息"); //this.AddTDGroupTitle("执行人"); //this.AddTREnd(); //获取track. DataTable dt = BP.WF.Dev2Interface.DB_GenerTrack(this.FK_Flow, this.WorkID, this.FID).Tables["Track"]; DataView dv = dt.DefaultView; dv.Sort = "RDT"; GenerWorkFlow gwf = new GenerWorkFlow(); gwf.WorkID = this.WorkID; gwf.RetrieveFromDBSources(); string currNodeID = "0"; if (gwf.WFState != WFState.Complete) { currNodeID = gwf.FK_Node.ToString(); //获得当前运行到的节点如果流程完成则为O. } int idx = 1; string checkStr = ""; #region qin 改成时间轴的显示方式 15/7/15 如果不需要这种显示方式 string str = "";//拼接字符串 str += "<div class='content'>"; str += "<div class='wrapper'>"; str += "<div class='main'>"; str += "<h1 class='title'>"; str += "ccflow流程日志</h1>"; str += "<div class='year'>"; str += "<h2>"; str += "<a href='#'>到达时间<i></i></a></h2>"; str += "<div class='list'>"; str += "<ul>"; #endregion qin 改成时间轴的显示方式 15/7/15 #region 开始循环添加数据 foreach (DataRowView dr in dv) { ActionType at = (ActionType)int.Parse(dr[TrackAttr.ActionType].ToString()); // 记录审核节点。 if (at == ActionType.WorkCheck) { checkStr = dr[TrackAttr.NDFrom].ToString(); //记录当前的审核节点id. } //审核信息过滤, if (at == ActionType.WorkCheck) { if (currNodeID == checkStr) { continue; } //如果当前节点与审核信息节点一致,就说明当前人员的审核意见已经保存,但是工作还没有发送,就不让他显示。 } if (at == ActionType.Forward) { if (checkStr == dr[TrackAttr.NDFrom].ToString()) { continue; } } str += "<li class='cls highlight' style=\"background: url('../../Img/Action/" + at.ToString() + ".png') no-repeat 235px 31px\">"; //this.AddTR(); //this.AddTDIdx(idx); DateTime dtt = DataType.ParseSysDateTime2DateTime(dr[TrackAttr.RDT].ToString()); // this.AddTD(dtt.ToString("yy年MM月dd日HH:mm"));</br> str += "<p class='date'>" + dtt.ToString("yy年MM月dd日") + " " + BP.DA.DataType.GetWeek((int)dtt.DayOfWeek); str += "</br>" + dtt.ToString("hh时mm分"); str += "</br>" + BP.WF.Glo.GenerUserImgHtml(dr[TrackAttr.EmpFrom].ToString(), dr[TrackAttr.EmpFromT].ToString()) + "</p>"; str += "<p class='intro'>" + dr[TrackAttr.NDFromT].ToString() + "</p>"; str += "<div class='more'>"; if (at == ActionType.Forward || at == ActionType.ForwardAskfor || at == ActionType.WorkCheck || at == ActionType.Order || at == ActionType.FlowOver || //added by liuxc,2014-12-3,正常结束结点也显示表单 at == ActionType.Skip) //added by liuxc,2015-7-13,自动跳转的也显示表单 { //this.AddTD("<a class='easyui-linkbutton' data-options=\"iconCls:'icon-sheet'\" href=\"javascript:WinOpen('" + BP.WF.Glo.CCFlowAppPath + "WF/WFRpt.aspx?WorkID=" + dr[TrackAttr.WorkID].ToString() + "&FK_Flow=" + this.FK_Flow + "&FK_Node=" + dr[TrackAttr.NDFrom].ToString() + "&DoType=View&MyPK=" + dr[TrackAttr.MyPK].ToString() + "','" + dr[TrackAttr.MyPK].ToString() + "');\">表单</a>"); str += "<p>" + "<a class='easyui-linkbutton' data-options=\"iconCls:'icon-sheet'\" href=\"javascript:WinOpen('" + BP.WF.Glo.CCFlowAppPath + "WF/WFRpt.aspx?WorkID=" + dr[TrackAttr.WorkID].ToString() + "&FK_Flow=" + this.FK_Flow + "&FK_Node=" + dr[TrackAttr.NDFrom].ToString() + "&DoType=View&MyPK=" + dr[TrackAttr.MyPK].ToString() + "','" + dr[TrackAttr.MyPK].ToString() + "');\">表单</a>" + "</p>"; } else { // this.AddTD(""); // str += "<p>" + "<a class='easyui-linkbutton' data-options=\"iconCls:'icon-sheet'\" >表单</a>" + "</p>"; } //this.AddTD(dr[TrackAttr.NDFromT].ToString()); //this.AddTD(BP.WF.Glo.GenerUserImgSmallerHtml(dr[TrackAttr.EmpFrom].ToString(), dr[TrackAttr.EmpFromT].ToString())); //this.AddTD("<img src='../../Img/Action/" + at.ToString() + ".png' class='ActionType' border=0/>" + BP.WF.Track.GetActionTypeT(at)); if (at == ActionType.FlowOver || at == ActionType.CC || at == ActionType.UnSend) { str += "<p></p>"; str += "<p></p>"; } else { str += "<p>到达节点:" + dr[TrackAttr.NDToT].ToString() + "</p>"; } //增加两列,到达时间、用时 added by liuxc,2014-12-4 if (idx > 1) { var toTime = Convert.ToDateTime(dv[idx - 1 - 1][TrackAttr.RDT].ToString()); str += "<p>到达时间:" + toTime.ToString("yy年MM月dd日HH:mm") + " 用时:" + DataType.GetSpanTime(toTime, dtt) + "</p>"; } // 删除信息. string tag = dr[TrackAttr.Tag].ToString(); if (tag != null) { tag = tag.Replace("~", "'"); } string msg = DataType.ParseText2Html(dr[TrackAttr.Msg].ToString()); switch (at) { case ActionType.CallChildenFlow: //被调用父流程吊起。 if (string.IsNullOrEmpty(tag) == false) { AtPara ap = new AtPara(tag); GenerWorkFlow mygwf = new GenerWorkFlow(); mygwf.WorkID = ap.GetValInt64ByKey("PWorkID"); if (mygwf.RetrieveFromDBSources() == 1) { msg = "<p>操作员:{" + dr[TrackAttr.EmpFromT].ToString() + "}在当前节点上,被父流程{" + mygwf.FlowName + "},<a target=b" + ap.GetValStrByKey("PWorkID") + " href='Track.aspx?WorkID=" + ap.GetValStrByKey("PWorkID") + "&FK_Flow=" + ap.GetValStrByKey("PFlowNo") + "' >" + msg + "</a></p>"; } else { msg = "<p>操作员:{" + dr[TrackAttr.EmpFromT].ToString() + "}在当前节点上,被父流程调用{" + mygwf.FlowName + "},但是该流程被删除了.</p>" + tag; } msg = "<a target=b" + ap.GetValStrByKey("PWorkID") + " href='Track.aspx?WorkID=" + ap.GetValStrByKey("PWorkID") + "&FK_Flow=" + ap.GetValStrByKey("PFlowNo") + "' >" + msg + "</a>"; } break; case ActionType.StartChildenFlow: //吊起子流程。 if (string.IsNullOrEmpty(tag) == false) { if (tag.Contains("Sub")) { tag = tag.Replace("Sub", "C"); } AtPara ap = new AtPara(tag); GenerWorkFlow mygwf = new GenerWorkFlow(); mygwf.WorkID = ap.GetValInt64ByKey("CWorkID"); if (mygwf.RetrieveFromDBSources() == 1) { msg = "<p>操作员:{" + dr[TrackAttr.EmpFromT].ToString() + "}在当前节点上调用了子流程{" + mygwf.FlowName + "}, <a target=b" + ap.GetValStrByKey("CWorkID") + " href='Track.aspx?WorkID=" + ap.GetValStrByKey("CWorkID") + "&FK_Flow=" + ap.GetValStrByKey("CFlowNo") + "' >" + msg + "</a></p>"; msg += "<p>当前子流程状态:{" + mygwf.WFStateText + "},运转到:{" + mygwf.NodeName + "},最后处理人{" + mygwf.TodoEmps + "},最后处理时间{" + mygwf.RDT + "}。</p>"; } else { msg = "<p>操作员:{" + dr[TrackAttr.EmpFromT].ToString() + "}在当前节点上调用了子流程{" + mygwf.FlowName + "},但是该流程被删除了.</p>" + tag; } } break; default: break; } msg = msg.Replace("\"", ""); str += "<p>" + msg + "</p>"; str += "</div>"; str += "</li>"; idx++; } //结束循环. //this.AddTableEnd(); #endregion if (this.CCID != null) { CCList cl = new CCList(); cl.MyPK = this.CCID; cl.RetrieveFromDBSources(); // this.AddFieldSet(cl.Title); // this.Add("抄送人:" + cl.Rec + ", 抄送日期:" + cl.RDT); // this.AddHR(); // this.Add(cl.DocHtml); // this.AddFieldSetEnd(); str += "<li class='cls highlight' style=\"background: url('./Img/Action/circle.png') no-repeat 235px 31px\">"; str += "<p class='date'> </p>"; str += "<p class='intro'>" + cl.Title + "</p>"; str += "<p class='version'> </p>"; str += "<div class='more'>"; str += "<p>抄送人:" + cl.Rec + "</p>"; str += "<p>抄送日期:" + cl.RDT + "</p>"; str += "</div>"; str += "</li>"; if (cl.HisSta == CCSta.UnRead) { cl.HisSta = CCSta.Read; cl.Update(); } } str += "</ul>"; str += "</div>"; str += "</div>"; str += "</div>"; str += "</div>"; str += "</div>"; //this.Clear(); HiddenField1.Value = str.ToString(); }
void btn_Click(object sender, EventArgs e) { UserRegedit ur = new UserRegedit(); ur.MyPK = this.MyPK; ur.RetrieveFromDBSources(); ur.FK_Emp = WebUser.No; ur.CfgKey = this.EnsName + "_SearchAttrs"; Entity en = BP.En.ClassFactory.GetEns(this.EnsName).GetNewEntity; Attr attr = en.EnMap.GetAttrByKey(this.AttrKey); string cfgVal = ur.MVals; AtPara ap = new AtPara(cfgVal); string old_Val = ap.GetValStrByKey(this.AttrKey); string keys = "@" + this.AttrKey + "="; if (attr.IsEnum) { SysEnums ses = new SysEnums(attr.UIBindKey); foreach (SysEnum item in ses) { if (this.Pub1.GetCBByID("CB_" + item.IntKey).Checked == false) { continue; } keys += "." + item.IntKey + "."; } if (ur.MVals.Contains("@" + this.AttrKey)) { ur.MVals = ur.MVals.Replace("@" + this.AttrKey + "=" + old_Val, keys); } else { ur.MVals = ur.MVals + keys; } ur.DirectUpdate(); } else { Entities ens = BP.En.ClassFactory.GetEns(attr.UIBindKey); ens.RetrieveAll(); foreach (Entity item in ens) { if (this.Pub1.GetCBByID("CB_" + item.GetValStrByKey(attr.UIRefKeyValue)).Checked == false) { continue; } keys += "." + item.GetValStrByKey(attr.UIRefKeyValue) + "."; } if (ur.MVals.Contains("@" + this.AttrKey)) { ur.MVals = ur.MVals.Replace("@" + this.AttrKey + "=" + old_Val, keys); } else { ur.MVals = ur.MVals + keys; } ur.DirectUpdate(); } keys = keys.Replace("@" + this.AttrKey + "=", ""); this.WinClose(keys); }
/// <summary> /// 执行事件 /// </summary> /// <param name="eventType">事件类型</param> /// <param name="en">实体参数</param> public string DoIt(string eventType, Node currNode, Entity en, string atPara) { //他的节点. this.HisNode = currNode; this.HisEn = en; #region 处理参数. Row r = en.Row; try { //系统参数. r.Add("FK_MapData", en.ClassID); } catch { r["FK_MapData"] = en.ClassID; } if (atPara != null) { AtPara ap = new AtPara(atPara); foreach (string s in ap.HisHT.Keys) { try { r.Add(s, ap.GetValStrByKey(s)); } catch { r[s] = ap.GetValStrByKey(s); } } } if (SystemConfig.IsBSsystem == true) { /*如果是bs系统, 就加入外部url的变量.*/ foreach (string key in System.Web.HttpContext.Current.Request.QueryString) { string val = System.Web.HttpContext.Current.Request.QueryString[key]; try { r.Add(key, val); } catch { r[key] = val; } } } this.SysPara = r; #endregion 处理参数. #region 执行事件. switch (eventType) { case EventListOfNode.SendWhen: return(this.SendWhen()); case EventListOfNode.SendSuccess: return(this.SendSuccess()); case EventListOfNode.SendError: return(this.SendError()); case EventListOfNode.ReturnBefore: return(this.ReturnBefore()); case EventListOfNode.ReturnAfter: return(this.ReturnAfter()); case EventListOfNode.UndoneBefore: return(this.UnSendBefore()); case EventListOfNode.UndoneAfter: return(this.UnSendAfter()); case EventListOfNode.SaveBefore: return(this.SaveBefore()); case EventListOfNode.SaveAfter: return(this.SaveAfter()); case EventListOfNode.FrmLoadBefore: return(this.FrmLoadBefore()); case EventListOfNode.FrmLoadAfter: return(this.FrmLoadAfter()); default: throw new Exception("@没有判断的事件类型:" + eventType); break; } #endregion 执行事件. return(null); }
public string DoSaveFlow(string fk_flow, string nodes, string dirs, string labes) { LetAdminLogin("CH", true); try { //处理方向。 string sql = "Delete FROM WF_Direction WHERE FK_Flow='" + fk_flow + "'"; DBAccess.RunSQL(sql); string[] mydirs = dirs.Split('~'); foreach (string dir in mydirs) { if (string.IsNullOrEmpty(dir)) { continue; } AtPara ap = new AtPara(dir); string dots = ap.GetValStrByKey("Dots").Replace('#', '@'); sql = "INSERT INTO WF_Direction (Node,ToNode,FK_Flow,DirType,IsCanBack,Dots,MyPK) VALUES (" + ap.GetValIntByKey("Node") + "," + ap.GetValIntByKey("ToNode") + ",'" + fk_flow + "'," + ap.GetValIntByKey("DirType") + "," + ap.GetValIntByKey("IsCanBack") + "," + (dots == string.Empty ? "null" : "'" + dots + "'") + ",'" + ap.GetValStrByKey("MyPK") + "')"; DBAccess.RunSQL(sql); } //处理节点。 Flow f1 = new Flow(fk_flow); string[] nds = nodes.Split('~'); foreach (string nd in nds) { if (string.IsNullOrEmpty(nd)) { continue; } AtPara ap = new AtPara(nd); Node mynode = new Node(ap.GetValIntByKey("NodeID")); if (mynode.NodeID == 0) { f1.Paras = string.Format("@StartNodeX={0}@StartNodeY={1}", ap.GetValStrByKey("X"), ap.GetValStrByKey("Y")); } else if (mynode.NodeID == 1) { f1.Paras += string.Format("@EndNodeX={0}@EndNodeY={1}", ap.GetValStrByKey("X"), ap.GetValStrByKey("Y")); } else { SetNodeProperties(mynode, ap.GetValStrByKey("Name"), ap.GetValIntByKey("X"), ap.GetValIntByKey("Y"), ap.GetValIntByKey("HisRunModel"));//NodeType mynode.DirectUpdate(); // mynode.Save(); } } f1.Save(); //处理标签。 string[] mylabs = labes.Split('~'); foreach (string lab in mylabs) { if (string.IsNullOrEmpty(lab)) { continue; } AtPara ap = new AtPara(lab); LabNote ln = new LabNote(); ln.MyPK = ap.GetValStrByKey("MyPK"); ln.FK_Flow = fk_flow; ln.Name = ap.GetValStrByKey("Label"); ln.X = ap.GetValIntByKey("X"); ln.Y = ap.GetValIntByKey("Y"); ln.Save(); } } catch (Exception ex) { return(ex.Message); } return(null); }