private void SaveFile(string[] fk_mds) { try { HttpFileCollection files = HttpContext.Current.Request.Files; if (files.Count > 0) { //检查文件扩展名字 HttpPostedFile postedFile = files[0]; var fileName = Path.GetFileName(Request.QueryString["filename"]); foreach (var fk_md in fk_mds) { var path = SystemConfig.PathOfDataUser + @"\FrmOfficeFiles\" + fk_md; if (fileName != "") { postedFile.SaveAs(path + "\\" + fileName); var en = new GEEntityExcelFrm(fk_md); en.RetrieveFromDBSources(); en.LastEditer = WebUser.Name; en.RDT = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); en.Update(); } } } } catch (Exception) { throw; } }
/// <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(); } } } }
protected void Page_Load(object sender, EventArgs e) { //WebUser.SignInOfGener(new BP.Port.Emp("fuhui")); UserName = WebUser.Name; if (string.IsNullOrEmpty(this.FK_MapData)) { divMenu.InnerHtml = "<h1 style='color:red'>必须传入参数FK_Mapdata!<h1>"; return; } fk_mapdatas = FK_MapData.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); //获得外部的标记。 string type = Request["action"]; if (string.IsNullOrEmpty(type)) { /** 第一次进来,的时候,没有标记。 */ //初始化它的解决方案. add by stone. 2015-01-25. 增加权限控制方案,以在不同的节点实现不同的控制. IsEdit = string.IsNullOrWhiteSpace(Request.QueryString["IsEdit"]) ? true : Request.QueryString["IsEdit"] == "1"; IsPrint = string.IsNullOrWhiteSpace(Request.QueryString["IsPrint"]) ? true : Request.QueryString["IsPrint"] == "1"; GenerateToolbarSlns(); } else { if (type.Equals("LoadFile")) { LoadFile(); return; } if (type.Equals("SaveFile")) { SaveFile(fk_mapdatas); SaveFieldInfos(fk_mapdatas); return; } throw new Exception("@没有处理的标记错误:" + type); } firsts = new Dictionary <string, bool>(); GEEntityExcelFrm en = null; FileInfo tmpFile = null; FileInfo excelFile = null; FrmFields frmFields = null; //检查数据文件是否存在?如果存在并打开不存在并copy模版。 var root = SystemConfig.PathOfDataUser + "\\FrmOfficeTemplate\\"; var rootInfo = new DirectoryInfo(root); var isFirst = false; if (!rootInfo.Exists) { rootInfo.Create(); } ReplaceParams = "["; ReplaceFields = "["; ReplaceDtlNos = "["; ReplaceDtls = "["; IsFirsts = "["; FK_MapDatas = "["; ReplaceFieldCtrls = "["; //根据excel表单no来处理各自的信息 var pk = 0; foreach (var fk_md in fk_mapdatas) { //创建excel数据实体. en = new GEEntityExcelFrm(fk_md); var files = rootInfo.GetFiles(fk_md + ".*"); // 判断是否有这个数据文件. if (files.Length == 0) { Response.Write("<h3>Excel表单模板文件不存在,请确认已经上传Excel表单模板,该模版的位于服务器:" + rootInfo.FullName + "</h3>"); Response.End(); return; } FK_MapDatas += "{\"Name\":\"" + en.ClassID + "\",\"Text\":\"" + en.EnDesc + "\"},"; // 检查数据目录文件是否存在? var pathDir = SystemConfig.PathOfDataUser + @"\FrmOfficeFiles\" + fk_md; if (!Directory.Exists(pathDir)) { Directory.CreateDirectory(pathDir); } // 判断who is pk pk = GetPK(fk_md); if (pk == 0) { return; } // 初始化数据文件. tmpFile = files[0]; excelFile = new FileInfo(pathDir + "\\" + pk + tmpFile.Extension); if (excelFile.Exists == false) { /*如果不存在就copy 一个副本。*/ File.Copy(tmpFile.FullName, excelFile.FullName); isFirst = true; } else { //edited by liuxc,2015-3-25,此处增加判断,如果模板文件与生成的数据文件的最后修改时间是一致的,表明此数据文件还没有经过修改,也标识为第一次,加载填充数据信息 isFirst = excelFile.LastWriteTime.Equals(tmpFile.LastWriteTime); } firsts.Add(fk_md, isFirst); IsFirsts += "{\"" + fk_md + "\":" + isFirst.ToString().ToLower() + "},"; //edited by liuxc,2015-1-30,如果在构造中使用传递OID的构造函数,则下面的Save时,第一次会插入不成功,此处是因为insert时判断OID不为0则认为是已经存在的记录,实际上此处还没有存在,所以使用下面的逻辑进行判断,如果没有该条记录,则插入新记录 en.OID = pk; if (en.IsExits == false) { en.InsertAsOID(pk); } else { en.Retrieve(); } //给实体赋值. en.FilePath = excelFile.FullName; en.RDT = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); en.LastEditer = WebUser.Name; en.SetPara(FK_Node.ToString(), true); en.ResetDefaultVal(); //接受外部参数数据。 string[] paras = this.RequestParas.Split('&'); foreach (string str in paras) { if (string.IsNullOrEmpty(str) || str.Contains("=") == false) { continue; } string[] kvs = str.Split('='); en.SetValByKey(kvs[0], kvs[1]); } en.Save(); //执行保存. //装载数据。 ReplaceParams += "{\"" + fk_md + "\":"; ReplaceFields += "{\"" + fk_md + "\":"; ReplaceDtlNos += "{\"" + fk_md + "\":"; ReplaceDtls += "{\"" + fk_md + "\":"; ReplaceFieldCtrls += "{\"" + fk_md + "\":["; this.LoadFrmData(fk_md, en); //字段控制 frmFields = new FrmFields(fk_md, FK_Node); foreach (FrmField frmField in frmFields) { ReplaceFieldCtrls += string.Format("{{\"{0}\":{{\"Name\":\"{1}\",\"UIVisible\":{2},\"UIIsEnable\":{3},\"IsNotNull\":{4},\"OldValue\":\"{5}\"}}}},", frmField.KeyOfEn, frmField.Name, frmField.UIVisible.ToString().ToLower(), frmField.UIIsEnable.ToString().ToLower(), frmField.IsNotNull.ToString().ToLower(), frmField.UIIsEnable ? "" : en.GetValStringByKey(frmField.KeyOfEn, "")); } ReplaceParams += "},"; ReplaceFields += "},"; ReplaceDtlNos += "},"; ReplaceDtls += "},"; ReplaceFieldCtrls = ReplaceFieldCtrls.TrimEnd(',') + "]},"; } ReplaceParams = ReplaceParams.TrimEnd(',') + "]"; ReplaceFields = ReplaceFields.TrimEnd(',') + "]"; ReplaceDtlNos = ReplaceDtlNos.TrimEnd(',') + "]"; ReplaceDtls = ReplaceDtls.TrimEnd(',') + "]"; IsFirsts = IsFirsts.TrimEnd(',') + "]"; FK_MapDatas = FK_MapDatas.TrimEnd(',') + "]"; ReplaceFieldCtrls = ReplaceFieldCtrls.TrimEnd(',') + "]"; //替换掉 word 里面的数据. fileName.Text = string.Format(@"\{0}\{1}{2}", fk_mapdatas[0], pk, excelFile.Extension); fileType.Text = excelFile.Extension.TrimStart('.'); }