Пример #1
0
        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;
            }
        }
Пример #2
0
        /// <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();
                    }
                }
            }
        }
Пример #3
0
        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('.');
        }