/// <summary> /// 创建WorkID /// </summary> /// <param name="flowNo">流程编号</param> /// <param name="ht">表单参数,可以为null。</param> /// <param name="workDtls">明细表参数,可以为null。</param> /// <param name="starter">流程的发起人</param> /// <param name="title">创建工作时的标题,如果为null,就按设置的规则生成。</param> /// <param name="parentWorkID">父流程的WorkID,如果没有父流程就传入为0.</param> /// <param name="parentFlowNo">父流程的流程编号,如果没有父流程就传入为null.</param> /// <returns>为开始节点创建工作后产生的WorkID.</returns> public static Int64 Node_CreateBlankWork(string flowNo, Hashtable ht, DataSet workDtls, string guestNo, string title, Int64 parentWorkID, string parentFlowNo, int parentNodeID, string parentEmp) { //转化成编号. flowNo = TurnFlowMarkToFlowNo(flowNo); //转化成编号 parentFlowNo = TurnFlowMarkToFlowNo(parentFlowNo); string dbstr = SystemConfig.AppCenterDBVarStr; Flow fl = new Flow(flowNo); Node nd = new Node(fl.StartNodeID); Emp empStarter = new Emp(BP.Web.WebUser.No); //把一些其他的参数也增加里面去,传递给ccflow. Hashtable htPara = new Hashtable(); if (parentWorkID != 0) { htPara.Add(StartFlowParaNameList.PWorkID, parentWorkID); } if (parentFlowNo != null) { htPara.Add(StartFlowParaNameList.PFlowNo, parentFlowNo); } if (parentNodeID != 0) { htPara.Add(StartFlowParaNameList.PNodeID, parentNodeID); } if (parentEmp != null) { htPara.Add(StartFlowParaNameList.PEmp, parentEmp); } Work wk = fl.NewWork(empStarter, htPara); Int64 workID = wk.OID; #region 给各个属性-赋值 if (ht != null) { foreach (string str in ht.Keys) { wk.SetValByKey(str, ht[str]); } } wk.OID = workID; if (workDtls != null) { //保存从表 foreach (DataTable dt in workDtls.Tables) { foreach (MapDtl dtl in wk.HisMapDtls) { if (dt.TableName != dtl.No) { continue; } //获取dtls GEDtls daDtls = new GEDtls(dtl.No); daDtls.Delete(GEDtlAttr.RefPK, wk.OID); // 清除现有的数据. GEDtl daDtl = daDtls.GetNewEntity as GEDtl; daDtl.RefPK = wk.OID.ToString(); // 为从表复制数据. foreach (DataRow dr in dt.Rows) { daDtl.ResetDefaultVal(); daDtl.RefPK = wk.OID.ToString(); //明细列. foreach (DataColumn dc in dt.Columns) { //设置属性. daDtl.SetValByKey(dc.ColumnName, dr[dc.ColumnName]); } daDtl.InsertAsOID(DBAccess.GenerOID("Dtl")); //插入数据. } } } } #endregion 赋值 Paras ps = new Paras(); // 执行对报表的数据表WFState状态的更新,让它为runing的状态. if (string.IsNullOrEmpty(title) == false) { if (fl.TitleRole != "@OutPara") { fl.TitleRole = "@OutPara"; fl.Update(); } ps = new Paras(); ps.SQL = "UPDATE " + fl.PTable + " SET WFState=" + dbstr + "WFState,Title=" + dbstr + "Title WHERE OID=" + dbstr + "OID"; ps.Add(GERptAttr.WFState, (int)WFState.Blank); ps.Add(GERptAttr.Title, title); ps.Add(GERptAttr.OID, wk.OID); DBAccess.RunSQL(ps); } else { ps = new Paras(); ps.SQL = "UPDATE " + fl.PTable + " SET WFState=" + dbstr + "WFState,FK_Dept=" + dbstr + "FK_Dept,Title=" + dbstr + "Title WHERE OID=" + dbstr + "OID"; ps.Add(GERptAttr.WFState, (int)WFState.Blank); ps.Add(GERptAttr.FK_Dept, empStarter.FK_Dept); ps.Add(GERptAttr.Title, WorkNode.GenerTitle(fl, wk)); ps.Add(GERptAttr.OID, wk.OID); DBAccess.RunSQL(ps); } // 删除有可能产生的垃圾数据,比如上一次没有发送成功,导致数据没有清除. ps = new Paras(); ps.SQL = "DELETE FROM WF_GenerWorkFlow WHERE WorkID=" + dbstr + "WorkID1 OR FID=" + dbstr + "WorkID2"; ps.Add("WorkID1", wk.OID); ps.Add("WorkID2", wk.OID); DBAccess.RunSQL(ps); ps = new Paras(); ps.SQL = "DELETE FROM WF_GenerWorkerList WHERE WorkID=" + dbstr + "WorkID1 OR FID=" + dbstr + "WorkID2"; ps.Add("WorkID1", wk.OID); ps.Add("WorkID2", wk.OID); DBAccess.RunSQL(ps); // 设置流程信息 if (parentWorkID != 0) { BP.WF.Dev2Interface.SetParentInfo(flowNo, workID, parentFlowNo, parentWorkID, parentNodeID, parentEmp); } return(wk.OID); }
/// <summary> /// 保存从word中提取的数据 /// <param name="fk_mds">excel表单的编号</param> /// </summary> private void SaveFieldInfos(string[] fk_mds) { foreach (var fk_md in fk_mds) { var mes = new MapExts(fk_md); if (mes.Count == 0) { return; } var item = mes.GetEntityByKey(MapExtAttr.ExtType, MapExtXmlList.PageLoadFull) as MapExt; if (item == null) { return; } var fieldCount = 0; var prefix = "field_" + fk_md; foreach (var key in Request.Form.AllKeys) { var idx = 0; if (key.StartsWith(prefix) && key.Length > prefix.Length && int.TryParse(key.Substring(prefix.Length), out idx)) { fieldCount++; } } var fieldsJson = string.Empty; for (var i = 0; i < fieldCount; i++) { fieldsJson += Request[prefix + i]; } //var fieldsJson = Request["field"]; var fields = LitJson.JsonMapper.ToObject <List <ReplaceField> >(HttpUtility.UrlDecode(fieldsJson)); //更新主表数据 var en = new GEEntityExcelFrm(fk_md); var pk = en.OID = GetPK(fk_md); if (en.RetrieveFromDBSources() == 0) { throw new Exception("OID=" + pk + "的数据在" + fk_md + "中不存在,请检查!"); } //此处因为weboffice在上传的接口中,只有上传成功与失败的返回值,没有具体的返回信息参数,所以未做异常处理 foreach (var field in fields) { en.SetValByKey(field.key, field.value); } en.LastEditer = WebUser.Name; en.RDT = DataType.CurrentDataTime; en.Update(); //todo:更新明细表数据,此处逻辑可能还有待商榷 var mdtls = new MapDtls(fk_md); if (mdtls.Count == 0) { return; } var dtlsCount = 0; prefix = "dtls_" + fk_md; foreach (var key in Request.Form.AllKeys) { var idx = 0; if (key.StartsWith(prefix) && key.Length > prefix.Length && int.TryParse(key.Substring(prefix.Length), out idx)) { dtlsCount++; } } var dtlsJson = string.Empty; for (var i = 0; i < dtlsCount; i++) { dtlsJson += Request[prefix + i]; } //var dtlsJson = Request["dtls"]; var dtls = LitJson.JsonMapper.ToObject <List <ReplaceDtlTable> >(HttpUtility.UrlDecode(dtlsJson)); GEDtls gedtls = null; GEDtl gedtl = null; ReplaceDtlTable wdtl = null; foreach (MapDtl mdtl in mdtls) { wdtl = dtls.FirstOrDefault(o => o.dtlno == mdtl.No); if (wdtl == null || wdtl.dtl.Count == 0) { continue; } //此处不是真正意义上的更新,因为不知道明细表的主键,只能将原明细表中的数据删除掉,然后再重新插入新的数据 gedtls = new GEDtls(mdtl.No); gedtls.Delete(GEDtlAttr.RefPK, en.PKVal); foreach (var d in wdtl.dtl) { gedtl = gedtls.GetNewEntity as GEDtl; foreach (var cell in d.cells) { gedtl.SetValByKey(cell.key, cell.value); } gedtl.RefPK = en.PKVal.ToString(); gedtl.RDT = DataType.CurrentDataTime; gedtl.Rec = WebUser.No; gedtl.Insert(); } } } }
/// <summary> /// 创建WorkID /// </summary> /// <param name="flowNo">流程编号</param> /// <param name="ht">表单参数,可以为null。</param> /// <param name="workDtls">明细表参数,可以为null。</param> /// <param name="starter">流程的发起人</param> /// <param name="title">创建工作时的标题,如果为null,就按设置的规则生成。</param> /// <param name="parentWorkID">父流程的WorkID,如果没有父流程就传入为0.</param> /// <param name="parentFlowNo">父流程的流程编号,如果没有父流程就传入为null.</param> /// <returns>为开始节点创建工作后产生的WorkID.</returns> public static Int64 Node_CreateBlankWork(string flowNo, Hashtable ht, DataSet workDtls, string guestNo, string title, Int64 parentWorkID, string parentFlowNo, int parentNodeID, string parentEmp) { //if (BP.Web.WebUser.No != "Guest") // throw new Exception("@必须是Guest登陆才能发起."); string dbstr = SystemConfig.AppCenterDBVarStr; Flow fl = new Flow(flowNo); Node nd = new Node(fl.StartNodeID); //把一些其他的参数也增加里面去,传递给ccflow. Hashtable htPara = new Hashtable(); if (parentWorkID != 0) { htPara.Add(StartFlowParaNameList.PWorkID, parentWorkID); } if (parentFlowNo != null) { htPara.Add(StartFlowParaNameList.PFlowNo, parentFlowNo); } if (parentNodeID != 0) { htPara.Add(StartFlowParaNameList.PNodeID, parentNodeID); } if (parentEmp != null) { htPara.Add(StartFlowParaNameList.PEmp, parentEmp); } Emp empStarter = new Emp(BP.Web.WebUser.No); Work wk = fl.NewWork(empStarter, htPara); Int64 workID = wk.OID; #region 给各个属性-赋值 if (ht != null) { foreach (string str in ht.Keys) { wk.SetValByKey(str, ht[str]); } } wk.OID = workID; if (workDtls != null) { //保存从表 foreach (DataTable dt in workDtls.Tables) { foreach (MapDtl dtl in wk.HisMapDtls) { if (dt.TableName != dtl.No) { continue; } //获取dtls GEDtls daDtls = new GEDtls(dtl.No); daDtls.Delete(GEDtlAttr.RefPK, wk.OID); // 清除现有的数据. GEDtl daDtl = daDtls.GetNewEntity as GEDtl; daDtl.RefPK = wk.OID.ToString(); // 为从表复制数据. foreach (DataRow dr in dt.Rows) { daDtl.ResetDefaultVal(); daDtl.RefPK = wk.OID.ToString(); //明细列. foreach (DataColumn dc in dt.Columns) { //设置属性. daDtl.SetValByKey(dc.ColumnName, dr[dc.ColumnName]); } daDtl.InsertAsOID(DBAccess.GenerOID("Dtl")); //插入数据. } } } } #endregion 赋值 Paras ps = new Paras(); // 执行对报表的数据表WFState状态的更新,让它为runing的状态. if (DataType.IsNullOrEmpty(title) == false) { ps = new Paras(); ps.SQL = "UPDATE " + fl.PTable + " SET WFState=" + dbstr + "WFState,Title=" + dbstr + "Title WHERE OID=" + dbstr + "OID"; ps.Add(GERptAttr.WFState, (int)WFState.Blank); ps.Add(GERptAttr.Title, title); ps.Add(GERptAttr.OID, wk.OID); DBAccess.RunSQL(ps); } else { ps = new Paras(); ps.SQL = "UPDATE " + fl.PTable + " SET WFState=" + dbstr + "WFState,FK_Dept=" + dbstr + "FK_Dept,Title=" + dbstr + "Title WHERE OID=" + dbstr + "OID"; ps.Add(GERptAttr.WFState, (int)WFState.Blank); ps.Add(GERptAttr.FK_Dept, empStarter.FK_Dept); ps.Add(GERptAttr.Title, BP.WF.WorkFlowBuessRole.GenerTitle(fl, wk)); ps.Add(GERptAttr.OID, wk.OID); DBAccess.RunSQL(ps); } // 删除有可能产生的垃圾数据,比如上一次没有发送成功,导致数据没有清除. ps = new Paras(); ps.SQL = "DELETE FROM WF_GenerWorkFlow WHERE WorkID=" + dbstr + "WorkID1 OR FID=" + dbstr + "WorkID2"; ps.Add("WorkID1", wk.OID); ps.Add("WorkID2", wk.OID); DBAccess.RunSQL(ps); ps = new Paras(); ps.SQL = "DELETE FROM WF_GenerWorkerList WHERE WorkID=" + dbstr + "WorkID1 OR FID=" + dbstr + "WorkID2"; ps.Add("WorkID1", wk.OID); ps.Add("WorkID2", wk.OID); DBAccess.RunSQL(ps); // 设置流程信息 if (parentWorkID != 0) { BP.WF.Dev2Interface.SetParentInfo(flowNo, workID, parentWorkID); } #region 处理generworkid // 设置父流程信息. GenerWorkFlow gwf = new GenerWorkFlow(); gwf.WorkID = wk.OID; int i = gwf.RetrieveFromDBSources(); //将流程信息提前写入wf_GenerWorkFlow,避免查询不到 gwf.FlowName = fl.Name; gwf.FK_Flow = flowNo; gwf.FK_FlowSort = fl.FK_FlowSort; gwf.SysType = fl.SysType; gwf.FK_Dept = WebUser.FK_Dept; gwf.DeptName = WebUser.FK_DeptName; gwf.FK_Node = fl.StartNodeID; gwf.NodeName = nd.Name; gwf.WFState = WFState.Runing; if (DataType.IsNullOrEmpty(title)) { gwf.Title = BP.WF.WorkFlowBuessRole.GenerTitle(fl, wk); } else { gwf.Title = title; } gwf.Starter = WebUser.No; gwf.StarterName = WebUser.Name; gwf.RDT = DataType.CurrentDataTimess; gwf.PWorkID = parentWorkID; // gwf.PFID = parentFID; gwf.PFlowNo = parentFlowNo; gwf.PNodeID = parentNodeID; if (i == 0) { gwf.Insert(); } else { gwf.Update(); } //插入待办. GenerWorkerList gwl = new GenerWorkerList(); gwl.WorkID = wk.OID; gwl.FK_Node = nd.NodeID; gwl.FK_Emp = WebUser.No; i = gwl.RetrieveFromDBSources(); gwl.FK_EmpText = WebUser.Name; gwl.FK_NodeText = nd.Name; gwl.FID = 0; gwl.FK_Flow = fl.No; gwl.FK_Dept = WebUser.FK_Dept; gwl.FK_DeptT = WebUser.FK_DeptName; gwl.SDT = "无"; gwl.DTOfWarning = DataType.CurrentDataTime; gwl.IsEnable = true; gwl.IsPass = false; gwl.PRI = gwf.PRI; if (i == 0) { gwl.Insert(); } else { gwl.Update(); } #endregion return(wk.OID); }
public void LoadFrmData(MapAttrs mattrs, Entity en) { var mes = new MapExts(this.FK_MapData); var dictParams = new ReplaceFieldList(); var fields = new List <string>(); dictParams.Add("No", WebUser.No, "string"); dictParams.Add("Name", WebUser.Name, "string"); dictParams.Add("FK_Dept", WebUser.FK_Dept, "string"); dictParams.Add("FK_DeptName", WebUser.FK_DeptName, "string"); if (mes.Count == 0) { ReplaceParams = GenerateParamsJsonString(dictParams); ReplaceFields = "[]"; ReplaceDtlNos = "[]"; ReplaceDtls = "[]"; return; } MapExt item = mes.GetEntityByKey(MapExtAttr.ExtType, MapExtXmlList.PageLoadFull) as MapExt; if (item == null) { ReplaceParams = GenerateParamsJsonString(dictParams); ReplaceFields = "[]"; ReplaceDtlNos = "[]"; ReplaceDtls = "[]"; return; } DataTable dt = null; MapAttr mattr = null; string sql = item.Tag; if (string.IsNullOrEmpty(sql) == false) { /* 如果有填充主表的sql */ #region 处理sql变量 sql = sql.Replace("@WebUser.No", WebUser.No); sql = sql.Replace("@WebUser.Name", WebUser.Name); sql = sql.Replace("@WebUser.FK_Dept", WebUser.FK_Dept); sql = sql.Replace("@WebUser.FK_DeptName", WebUser.FK_DeptName); foreach (MapAttr attr in mattrs) { if (sql.Contains("@")) { sql = sql.Replace("@" + attr.KeyOfEn, en.GetValStrByKey(attr.KeyOfEn)); } else { break; } } #endregion 处理sql变量 if (string.IsNullOrEmpty(sql) == false) { if (sql.Contains("@")) { throw new Exception("设置的sql有错误可能有没有替换的变量:" + sql); } dt = DBAccess.RunSQLReturnTable(sql); if (dt.Rows.Count == 1) { DataRow dr = dt.Rows[0]; foreach (DataColumn dc in dt.Columns) { en.SetValByKey(dc.ColumnName, dr[dc.ColumnName].ToString()); mattr = mattrs.GetEntityByKey(MapAttrAttr.KeyOfEn, dc.ColumnName) as MapAttr; dictParams.Add(dc.ColumnName, dr[dc.ColumnName].ToString(), mattr != null && mattr.IsSigan ? "sign" : "string"); fields.Add(dc.ColumnName); } } } } if (IsFirst) { ReplaceParams = GenerateParamsJsonString(dictParams); } else { ReplaceParams = "[]"; } ReplaceFields = GenerateFieldsJsonString(fields); if (string.IsNullOrEmpty(item.Tag1) || item.Tag1.Length < 15) { ReplaceDtls = "[]"; ReplaceDtlNos = "[]"; return; } ReplaceDtls = "["; ReplaceDtlNos = "["; MapDtls dtls = new MapDtls(this.FK_MapData); // 填充从表. foreach (MapDtl dtl in dtls) { ReplaceDtlNos += "\"" + dtl.No + "\","; if (!IsFirst) { continue; } string[] sqls = item.Tag1.Split('*'); foreach (string mysql in sqls) { if (string.IsNullOrEmpty(mysql)) { continue; } if (mysql.Contains(dtl.No + "=") == false) { continue; } #region 处理sql. sql = mysql; sql = sql.Replace(dtl.No + "=", ""); sql = sql.Replace("@WebUser.No", WebUser.No); sql = sql.Replace("@WebUser.Name", WebUser.Name); sql = sql.Replace("@WebUser.FK_Dept", WebUser.FK_Dept); sql = sql.Replace("@WebUser.FK_DeptName", WebUser.FK_DeptName); foreach (MapAttr attr in mattrs) { if (sql.Contains("@")) { sql = sql.Replace("@" + attr.KeyOfEn, en.GetValStrByKey(attr.KeyOfEn)); } else { break; } } #endregion 处理sql. if (string.IsNullOrEmpty(sql)) { continue; } if (sql.Contains("@")) { throw new Exception("设置的sql有错误可能有没有替换的变量:" + sql); } GEDtls gedtls = new GEDtls(dtl.No); try { gedtls.Delete(GEDtlAttr.RefPK, en.PKVal); } catch { gedtls.GetNewEntity.CheckPhysicsTable(); } dt = DBAccess.RunSQLReturnTable(sql); //dictDtls.Add(dtl.No, dt); ReplaceDtls += "{\"dtlno\":\"" + dtl.No + "\",\"dtl\":["; var idx = 1; foreach (DataRow dr in dt.Rows) { ReplaceDtls += "{\"rowid\":" + (idx++) + ",\"cells\":["; GEDtl gedtl = gedtls.GetNewEntity as GEDtl; foreach (DataColumn dc in dt.Columns) { gedtl.SetValByKey(dc.ColumnName, dr[dc.ColumnName].ToString()); mattr = dtl.MapAttrs.GetEntityByKey(MapAttrAttr.KeyOfEn, dc.ColumnName) as MapAttr; ReplaceDtls += "{\"key\":\"" + dc.ColumnName + "\",\"value\":\"" + dr[dc.ColumnName] + "\",\"type\":\"" + (mattr != null && mattr.IsSigan ? "sign" : "string") + "\"},"; } ReplaceDtls = ReplaceDtls.TrimEnd(',') + "]},"; gedtl.RefPK = en.PKVal.ToString(); gedtl.RDT = DataType.CurrentDataTime; gedtl.Rec = WebUser.No; gedtl.Insert(); } ReplaceDtls = ReplaceDtls.TrimEnd(',') + "]}"; } } ReplaceDtls = ReplaceDtls.TrimEnd(',') + "]"; ReplaceDtlNos = ReplaceDtlNos.TrimEnd(',') + "]"; }