Example #1
0
        protected override string doOwnAction()
        {
            List <String> statements = getRealStatement();

            if (statements[0] == "")
            {
                try
                {
                    dRange.doInsert();

                    return("OK");
                }
                catch (Exception)
                {
                    return("FAILED");
                }
            }
            else
            {
                try
                {
                    dRange.ExecuteSql(statements);
                }
                catch (Exception e)
                {
                    AlertUtil.Show("error", e.ToString());
                }
            }
            dRange.Refresh();
            return("OK");
        }
Example #2
0
 //初始化接口
 public virtual void init(ActionCfg cfg, XApp app)
 {
     this.cfg        = cfg;
     this.ActionName = cfg.ActionName;
     try
     {
         this.actionSeq = int.Parse(cfg.ActSeq);
     }
     catch
     {
         AlertUtil.Show("error", String.Format("Action {0} Seq设置异常,设置值为{1}", ActionName, cfg.ActSeq));
     }
     try
     {
         if (cfg.SRange.Length > 0)
         {
             sRange = app.getRangeByName(cfg.SRange);
         }
         if (cfg.DRange.Length > 0)
         {
             dRange = app.getRangeByName(cfg.DRange);
         }
     }
     catch (Exception)
     {
         MessageBox.Show("Action:" + ActionName + "的sRange、dRange配置错误!");
         return;
     }
 }
Example #3
0
        public override void fill(DataTable dt)
        {
            selectedRows = new Dictionary <int, int>();
            drawRows     = new Dictionary <int, int>();
            Range range = getRange();

            if (dt == null)
            {
                AlertUtil.Show("error", "查询结果为空,请确认查询语句");
                return;
            }
            Cell data1stcell = range[0, 0];

            string[,] arrtmp = new string[range.RowCount, dt.Columns.Count];
            range.Worksheet.Import(arrtmp, data1stcell.RowIndex, data1stcell.ColumnIndex);
            range.FillColor = Color.White;
            range.Worksheet.Import(dt, false, data1stcell.RowIndex, data1stcell.ColumnIndex);
            this.data.setData(dt);
            range.Borders.SetAllBorders(Color.Black, BorderLineStyle.None);

            /*for (int i = 0; i < range.RowCount; i++)
             * {
             *  setRowBorderNone(i);
             * }*/
            this.isFilled = true;
            doResize(dt.Rows.Count + 1);
            getRange().FillColor = Color.White;
        }
Example #4
0
        //查询功能,通过查询SQL可判定该对象具有的功能权限
        public String search(String Sql)
        {
            avaliableList.Clear();//清空功能列表
            try
            {
                conn = DBUtil.getConnection(ServerName);
                conn.Open();
                DBTrans = conn.BeginTransaction();
                conn.Close();
                da = DBUtil.getDbDataAdapter(ServerName, Sql, "", conn);//根据查询语句,初始化适配器
                DataSet ds = new DataSet();
                da.Fill(ds);
                dt = ds.Tables[0];
                avaliableList.Add("R");//根据适配器设定可用功能列表
                if (da.UpdateCommand != null)
                {
                    avaliableList.Add("U");
                }
                if (da.InsertCommand != null)
                {
                    avaliableList.Add("C");
                }
                if (da.DeleteCommand != null)
                {
                    avaliableList.Add("D");
                }
            }
            catch (Exception e)
            {
                AlertUtil.Show("err", e.ToString());
            }

            return("OK");
        }
Example #5
0
        //更新数据功能
        public String update()
        {
            String ans = "OK";

            if (conn.State != ConnectionState.Open)
            {
                conn.Open();
            }
            DBTrans = conn.BeginTransaction();
            da.UpdateCommand.Transaction = DBTrans;
            try
            {
                da.Update(dt.GetChanges());
                dt.AcceptChanges();
                DBTrans.Commit();
                ans = "OK";
            }
            catch (Exception e)
            {
                DBTrans.Rollback();
                Console.WriteLine(e.ToString());
                AlertUtil.Show("DataUpdateError", e.ToString());
                ans = "FAILED";
            }
            finally
            {
                conn.Close();
            }
            return(ans);
        }
Example #6
0
        //如果执行存储过程(执行存储过程不修改本地数据对象,可用来执行任意SQL语句)
        public String Execute(List <String> sqls)
        {
            String ans = "OK";

            if (conn.State != ConnectionState.Open)
            {
                conn.Open();
            }
            DBTrans = conn.BeginTransaction();
            DbCommand cmd = DBUtil.getCommand(sqls[0], ServerName, conn);

            cmd.Transaction = DBTrans;
            try
            {
                foreach (String sql in sqls)
                {
                    cmd.CommandText = sql;
                    cmd.ExecuteNonQuery();
                }
                DBTrans.Commit();
            }
            catch (Exception e)
            {
                AlertUtil.Show("error", e.ToString());
                ans = "FAILED";
                DBTrans.Rollback();
            }
            finally
            {
                conn.Close();
            }
            return(ans);
        }
Example #7
0
        //读取Data配置
        public static List <DataCfg> readData(Table dataCfgTable)
        {
            List <DataCfg> datas = new List <DataCfg>();

            for (int i = 1; i < dataCfgTable.Range.RowCount; i++)
            {
                if (dataCfgTable.Range[i, 0].DisplayText.Length == 0)
                {
                    break;
                }
                DataCfg data = new DataCfg();
                //DataName	ObjectName	ObjectType	DBName	ServerName	BaseSQLStatement	RangeName	CRUDP	SVK	InitStatement
                data.TableTitle       = dataCfgTable.Range[i, 0].DisplayText;
                data.TableDesc        = dataCfgTable.Range[i, 1].DisplayText;
                data.CRUDP            = dataCfgTable.Range[i, 2].DisplayText;
                data.SVK              = dataCfgTable.Range[i, 3].DisplayText;
                data.RangeName        = dataCfgTable.Range[i, 4].DisplayText;
                data.DBName           = dataCfgTable.Range[i, 5].DisplayText;
                data.ServerName       = dataCfgTable.Range[i, 6].DisplayText;
                data.DefalutStatement = dataCfgTable.Range[i, 7].GetReferenceA1();
                if ((data.ServerName == null || data.ServerName.Length < 2) && data.RangeName.Split('_')[0] == "TB")
                {
                    Console.WriteLine("区域:" + data.TableTitle + "服务器类型配置错误,当前配置为:" + data.ServerName);
                    return(null);
                }
                if (data.RangeName.Length == 0)
                {
                    AlertUtil.Show("error", String.Format("Data:{0} 未配置Range,此Data将不被系统使用!", data.TableTitle));
                    continue;
                }
                datas.Add(data);
            }
            return(datas);
        }
Example #8
0
 //初始化RANGE
 private void initRange()
 {
     foreach (DataCfg cfg in cfgdata.datas)           //遍历RANGE配置
     {
         XRange range = XRangeFactory.getXRange(cfg); //工厂模式,根据配置生成实际FORM/RANGE/TABLE 对象
         try
         {
             range.init(cfg, book);         //range 初始化
             ranges.Add(range.Name, range); //将 range 放入集合,后续可根据range名获取range
             if (range.getRange() == null)  //如果对应的工作表中range区域 不存在,则报错,并将系统状态设置为Designer状态
             {
                 AlertUtil.Show("error", "Range对应命名区域不存在或配置异常,RangeId:" + cfg.RangeName + " 即将进入Designer模式");
                 statu = SysStatu.Designer;
             }
         }
         catch (Exception e)
         {
             Console.WriteLine(e.ToString());
             MessageBox.Show("Range对应命名区域不存在或配置异异常,RangeId:" + cfg.RangeName + "\n" + e.ToString());
             this.statu = SysStatu.RangeError;
             return;
         }
     }
     if (ranges.Count == 0)
     {
         this.statu = SysStatu.Designer;
         AlertUtil.Show("info", "未查询到有效DATA,进入设计模式!");
     }
 }
Example #9
0
 //状态变化
 private void ChangeToStatu(SysStatu newstatu)
 {
     //labels["lbl_User"].Text = app.statu.ToString();
     if (currentXRange != null && newstatu != app.statu)
     {
         currentXRange.ResetSelected();
     }
     app.statu = newstatu;
     AlertUtil.Show("状态变更", "状态变更为" + newstatu);
     ChangeButtonsStatu();
 }
Example #10
0
        public override void doResize(int rowcount)
        {
            if (rowcount == 1)
            {
                rowcount = 2;
            }
            if (!isFilled)
            {
                AlertUtil.Show("错误!", "Table" + Name + "需先查询才能Update");
                return;
            }
            Range range    = this.table.Range;
            Range newrange = RangeUtil.rangeResize(range, rowcount);

            changeDefinedRange(newrange);
        }
Example #11
0
        public String execute(XSheetUser user)
        {
            StartNotify();
            String ans = "OK";

            foreach (char item in cfg.CRUDP)
            {
                /*if (!user.getPrivilege(rsheet).Contains(item))
                 * {
                 *  ans = "No privilege!";
                 *  return ans;
                 * }*/
            }
            if (actions.Count <= 0)
            {
                AlertUtil.Show("error", String.Format("Command :{0} 中未找到对应的Action,Command无法执行", this.CommandName));
            }
            else
            {
                actions = actions.OrderBy(o => o.Key).ToDictionary(o => o.Key, p => p.Value);
                int i = 0;
                while (i <= actions.Keys.Max())
                {
                    if (actions.Keys.Contains(i))
                    {
                        actions[i].dRange.getRange().Worksheet.Calculate();
                        ans = actions[i].doAction();
                        i   = actions[i].getNextIndex(ans, i);
                    }
                    else
                    {
                        i++;
                    }
                }
            }

            /*foreach (KeyValuePair<int, XAction> kv in actions)
             * {
             *  kv.Value.dRange.getRange().Worksheet.Calculate();
             * }*/
            FinishNotify();
            return(ans);
        }
Example #12
0
        //读取配置文件中的配置表格
        private Table getCfgTable(String tableName)
        {
            Table table = null;

            try
            {
                table = cfgtables[tableName];
                if (table.Range == null)
                {
                    AlertUtil.Show("error", "名称为" + tableName + "的EXCEL Table区域配置异常,请确认配置");
                    return(null);
                }
            }
            catch (Exception)
            {
                AlertUtil.Show("warning", "未找到名称为" + tableName + "的EXCEL Table区域,请确认配置");
            }
            return(table);
        }
Example #13
0
        //根据名称获取SHEET
        public XRSheet getRSheetByName(String name)
        {
            XRSheet rsheet = null;

            try
            {
                rsheet = rsheets[name];
            }
            catch (Exception)
            {
                rsheet = new XRSheet(book.Worksheets.ActiveWorksheet);
                AlertUtil.Show("error", "Sheet:" + name + "未注册!请检查配置!");
                statu = SysStatu.Designer;
                if (rsheet.sheetName != name)
                {
                    return(null);
                }
                rsheets.Add(rsheet.sheet.Name, rsheet);
            }
            return(rsheet);
        }
Example #14
0
        private Range getRowRangeByIndex(int rowNum)
        {
            int   rowindex = -1;
            Range rangetmp = getRange();

            for (int i = 0; i < rangetmp.RowCount; i++)
            {
                int tmp;
                try
                {
                    if (rangetmp[i, 0].Tag != null && int.TryParse(rangetmp[i, 0].Tag.ToString(), out tmp))
                    {
                        if (tmp == rowNum)
                        {
                            rowindex = i;
                            break;
                        }
                    }
                }
                catch (Exception e)
                {
                    AlertUtil.Show("error", e.ToString());
                }
            }
            if (rowindex >= 0)
            {
                int   factindex = getRange().TopRowIndex + rowindex;
                int   lcolindex = getRange().LeftColumnIndex;
                int   rcolindex = getRange().RightColumnIndex;
                Range range     = getRange().Worksheet.Range.FromLTRB(lcolindex, factindex, rcolindex, factindex);
                return(range);
            }
            else
            {
                return(null);
            }
        }
Example #15
0
        public override void fill(DataTable dt)
        {
            Range range       = getRange();
            Cell  data1stcell = get1stDataCell(range);

            string[,] arrtmp = new string[range.RowCount, range.ColumnCount];
            try
            {
                range.Worksheet.Import(arrtmp, data1stcell.RowIndex, data1stcell.ColumnIndex);
                range.Worksheet.Import(dt, false, data1stcell.RowIndex, data1stcell.ColumnIndex);
                data.setData(dt);
                //range.Borders.SetAllBorders(Color.Black, BorderLineStyle.None);

                /*for (int i = 0; i < range.RowCount; i++)
                 * {
                 *  setRowBorderNone(i);
                 * }*/
                doResize(dt.Rows.Count);
            }
            catch (Exception e)
            {
                AlertUtil.Show("error", e.ToString());
            }
        }
Example #16
0
 public override void onUpdateSelect()
 {
     AlertUtil.Show("XRangeRG Warning!", "Range区域不允许onUpdateSelect");
     return;
 }
Example #17
0
 public override String ExecuteSql(List <String> Sqls)
 {
     AlertUtil.Show("XRangeRG Warning!", "Range区域不允许单独执行SQL");
     return("OK");
 }
Example #18
0
        public override String doInsert()
        {
            DataTable dt       = data.getDataTable();
            int       dcount   = getDataTable().Rows.Count;
            int       maxcount = getRange().RowCount;
            Boolean   Okflag   = true;

            for (int i = dcount; i < maxcount; i++)
            {
                DataRow templet = dt.Rows[0];
                DataRow row     = dt.NewRow();
                if (getRowRange(i)[0].Value.ToString().Length < 1)
                {
                    break;
                }
                for (int j = 0; j < dt.Columns.Count; j++)
                {
                    string strRange = getRowRange(i)[j].Value.ToString();
                    Type   t        = templet[j].GetType();
                    if (strRange.Length == 0)
                    {
                        continue;
                    }
                    if (t.Name == "Decimal")
                    {
                        try
                        {
                            Decimal num = Convert.ToDecimal(strRange);
                            row[j] = (object)num;
                        }
                        catch (Exception)
                        {
                            AlertUtil.Show("error", String.Format("输入参数第{0}列与表数据类型不匹配", (j + 1).ToString()));
                            Okflag = false;
                        }
                    }
                    else if (t.Name == "Int32")
                    {
                        try
                        {
                            Int32 num = Convert.ToInt32(strRange);
                            row[j] = (object)num;
                        }
                        catch (Exception)
                        {
                            AlertUtil.Show("error", String.Format("输入参数第{0}列与表数据类型不匹配,需要类型为{1}", (j + 1).ToString(), t.Name));
                            Okflag = false;
                        }
                    }
                    else
                    {
                        try
                        {
                            row[j] = strRange;
                        }
                        catch (Exception)
                        {
                            AlertUtil.Show("error", String.Format("输入参数第{0}列与表数据类型不匹配或参数类型未定义,需要类型为{1}", (j + 1).ToString(), t.Name));
                            Okflag = false;
                        }
                    }
                }
                dt.Rows.Add(row);
            }
            data.setData(dt);
            return(Okflag?data.insert():"Failed");
        }
Example #19
0
        public virtual List <String> getRealStatement(String sheetName, String statement)
        {
            //return getRange().Worksheet.Workbook.Worksheets["Config"].Range[cfg.InitStatement][0].DisplayText;
            String tableName             = null;
            List <List <String> > lists  = new List <List <string> >();
            List <String>         result = new List <string>();

            if (statement.Length > 0)
            {
                rsheet.app.getSheetByName(sheetName).Calculate();
                statement = rsheet.app.getSheetByName(sheetName)[statement][0].DisplayText;
                Regex           reg     = new Regex("@#(.+?)#@");
                MatchCollection matches = reg.Matches(statement);

                if (matches.Count > 0)
                {
                    foreach (Match match in matches)
                    {
                        String[] strParams = match.Groups[1].Value.Split('$');
                        if (tableName == null)
                        {
                            tableName = strParams[0];
                        }
                        else if (tableName != strParams[0])
                        {
                            AlertUtil.Show("禁止参数来源于多张表", "监测到当前命令参数存在" + tableName + "," + strParams + ",请检查Action配置");
                            return(null);
                        }
                        int col = -1;
                        try
                        {
                            col = int.Parse(strParams[1]);
                        }
                        catch (Exception e)
                        {
                            AlertUtil.Show("error", e.ToString());
                            return(null);
                        }
                        List <String> values = null;
                        if (strParams.Count() == 3 && strParams[2].ToUpper() == "DATA")
                        {
                            values = getValueByTableCol(tableName, col, "DATA");
                        }
                        else
                        {
                            values = getValueByTableCol(tableName, col, "TABLE");
                        }

                        if (values == null || values.Count == 0)
                        {
                            values = new List <string>();
                            values.Add("NULL");
                        }

                        lists.Add(values);
                    }
                    for (int i = 0; i < lists[0].Count; i++)
                    {
                        String tmp = statement;
                        for (int j = 0; j < matches.Count; j++)
                        {
                            lists[j][i] = lists[j][i].Replace("'", "''");//SQL语句中存在 ' 时替换成 ''  2016/12/08
                            tmp         = tmp.Replace(matches[j].Value, lists[j][i]);
                        }
                        result.Add(tmp);
                    }
                }
                else
                {
                    result.Add(statement);
                }
            }
            else
            {
                result.Add("");
            }
            return(result);
        }