Exemplo n.º 1
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('.');
        }
Exemplo n.º 2
0
        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(',') + "]";
        }