コード例 #1
0
        public void DynBeforeUpdate(BEManager be, DataRow dr, appDB.ddTableRow ruleDefinition, Dictionary <string, appDB.ddFieldRow> ruleColumnMap)
        {
            if (ruleDefinition == null)
            {
                return;
            }

            FileManager fm = GetFMFromBE(be);

            foreach (appDB.ddRuleRow ddr in ruleDefinition.GetddRuleRows())
            {
                //for "beforeupdate" event
                if (ddr.EventId == 2 && ddr.Enabled)
                {
                    //check rules
                    RunRule(null, dr, null, fm, null, ddr);
                }
                if (ddr.EventId == 10 && ddr.Enabled)
                {
                    //check rules
                    //needs to run for column
                    //need columnmap
                    DataColumn       dc  = dr.Table.Columns[ddr.ddFieldRow.DBFieldName];
                    appDB.ddFieldRow dfr = ruleColumnMap[dc.ColumnName];
                    RunRule(dc, dr, ruleColumnMap, fm, dfr, ddr);
                }
                if (ddr.EventId == 5 && ddr.Enabled && dr.RowState == DataRowState.Added)
                {
                    //check rules
                    RunRule(null, dr, null, fm, null, ddr);
                }
            }
        }
コード例 #2
0
        public static appDB.ddFieldRow LookupDDFieldRow(atriumManager atmng, string table, string field)
        {
            appDB.ddFieldRow   returnDDField = null;
            appDB.ddFieldRow[] ddFields      = (appDB.ddFieldRow[])atmng.DB.ddField.Select("tablename='" + table + "' and fieldname='" + field + "'", "");
            if (ddFields.Length > 0)
            {
                returnDDField = ddFields[0];
            }

            return(returnDDField);
        }
コード例 #3
0
        protected override void AfterAdd(DataRow dr)
        {
            appDB.ddFieldRow dtr        = (appDB.ddFieldRow)dr;
            string           ObjectName = this.myddFieldDT.TableName;

            dtr.FieldId              = this.myA.PKIDGet(ObjectName, 1);
            dtr.FieldName            = "New Field";
            dtr.AllowInRelatedFields = true;
            dtr.isFromView           = false;
            dtr.isVirtualColumn      = false;
            dtr.isMissing            = false;
        }
コード例 #4
0
        protected override void AfterChange(DataColumn dc, DataRow dr)
        {
            appDB.ddFieldRow dtr = (appDB.ddFieldRow)dr;
            switch (dc.ColumnName)
            {
            case "FieldName":
                if (!dtr.ddTableRow.isDynamic)
                {
                    dtr.DBFieldName = dtr.FieldName;
                }

                break;
            }
        }
コード例 #5
0
        public void DynBeforeChange(BEManager be, DataColumn dc, DataRow dr, Dictionary <string, appDB.ddFieldRow> ruleColumnMap)
        {
            //find row in ddfield
            if (ruleColumnMap.ContainsKey(dc.ColumnName))
            {
                FileManager fm = GetFMFromBE(be);

                appDB.ddFieldRow dfr = ruleColumnMap[dc.ColumnName];
                //find rules for field
                foreach (appDB.ddRuleRow ddr in dfr.GetddRuleRows())
                {
                    //for "beforechange" event
                    if ((ddr.EventId == 1 | ddr.EventId == 10) && ddr.Enabled)
                    {
                        //check rules
                        RunRule(dc, dr, ruleColumnMap, fm, dfr, ddr);
                    }
                }
            }
        }
コード例 #6
0
        private void RunRule(DataColumn columnToCheck, DataRow rowToCheck, Dictionary <string, appDB.ddFieldRow> ruleColumnMap, FileManager fm, appDB.ddFieldRow fieldDefinition, appDB.ddRuleRow ruleToRun)
        {
            string Left = "Left" + myA.AppMan.Language;

            switch (ruleToRun.RuleTypeId)
            {
            case 0:    //code based
                ExecuteCodeRule(columnToCheck, rowToCheck, fm, ruleToRun);
                break;

            case 1:    //required
                if (rowToCheck.IsNull(columnToCheck))
                {
                    throw new RequiredException(fieldDefinition[Left].ToString());
                }
                break;

            case 2:    //acseries based
                EvaluateRule(fm, ruleToRun, rowToCheck);
                break;

            case 3:    //domain
                if (!rowToCheck.IsNull(columnToCheck))
                {
                    if (!fm.Codes(ruleToRun.Val1).Rows.Contains(rowToCheck[columnToCheck]))
                    {
                        throw new AtriumException(atriumBE.Properties.Resources.IsNotValid, fieldDefinition[Left].ToString());
                    }
                }
                break;

            case 4:    //related - must be field on same record
                if (rowToCheck.IsNull(ruleToRun.Val1))
                {
                    throw new RelatedException(fieldDefinition.LeftEng, ruleColumnMap[ruleToRun.Val1][Left].ToString());
                }

                break;

            case 5:    //old domain check
                if (!rowToCheck.IsNull(columnToCheck))
                {
                    if (!myA.CheckDomain(rowToCheck[columnToCheck].ToString(), fm.Codes(ruleToRun.Val1)))
                    {
                        throw new AtriumException(atriumBE.Properties.Resources.BadDomainValue, fieldDefinition[Left].ToString(), fieldDefinition.ddTableRow["Description" + myA.AppMan.Language].ToString(), ruleToRun.Val1);
                    }
                }
                break;

            case 6:    //valid date
                if (!rowToCheck.IsNull(columnToCheck))
                {
                    DateTime beginDate;
                    DateTime endDate;
                    DateTime dateValue = (DateTime)rowToCheck[columnToCheck];
                    string   name1     = ruleToRun.Val1;
                    string   name2     = ruleToRun.Val2;

                    if (ruleColumnMap.ContainsKey(ruleToRun.Val1))
                    {
                        beginDate = (DateTime)rowToCheck[ruleColumnMap[ruleToRun.Val1].DBFieldName];
                        name1     = ruleColumnMap[ruleToRun.Val1][Left].ToString();
                    }
                    else
                    {
                        beginDate = (DateTime)fm.GetDefaultValue(ruleToRun.Val1);
                    }

                    if (ruleColumnMap.ContainsKey(ruleToRun.Val2))
                    {
                        endDate = (DateTime)rowToCheck[ruleColumnMap[ruleToRun.Val1].DBFieldName];
                        name2   = ruleColumnMap[ruleToRun.Val2][Left].ToString();
                    }
                    else
                    {
                        endDate = (DateTime)fm.GetDefaultValue(ruleToRun.Val2);
                    }


                    if (dateValue < beginDate || dateValue > endDate)
                    {
                        throw new DateBetweenException(fieldDefinition[Left].ToString(), name1, beginDate.ToShortDateString(), name2, endDate.ToShortDateString());
                    }
                }
                break;

            case 7:    //numeric range
                if (!rowToCheck.IsNull(columnToCheck))
                {
                    int v1, v2, thisVal;
                    if (ruleColumnMap.ContainsKey(ruleToRun.Val1))
                    {
                        v1 = System.Convert.ToInt32(rowToCheck[ruleColumnMap[ruleToRun.Val1].DBFieldName]);
                    }
                    else
                    {
                        v1 = System.Convert.ToInt32(fm.GetDefaultValue(ruleToRun.Val1));
                    }

                    if (ruleColumnMap.ContainsKey(ruleToRun.Val2))
                    {
                        v2 = System.Convert.ToInt32(rowToCheck[ruleColumnMap[ruleToRun.Val1].DBFieldName]);
                    }
                    else
                    {
                        v2 = System.Convert.ToInt32(fm.GetDefaultValue(ruleToRun.Val2));
                    }

                    thisVal = System.Convert.ToInt32(rowToCheck[columnToCheck]);

                    if (thisVal < v1 || thisVal > v2)
                    {
                        throw new AtriumException("Outside numeric range");
                    }
                }
                break;

            case 8:    //string length range
                if (!rowToCheck.IsNull(columnToCheck))
                {
                    int v1, v2, thisVal;
                    if (ruleColumnMap.ContainsKey(ruleToRun.Val1))
                    {
                        v1 = (int)rowToCheck[ruleColumnMap[ruleToRun.Val1].DBFieldName];
                    }
                    else
                    {
                        v1 = (int)fm.GetDefaultValue(ruleToRun.Val1);
                    }

                    if (ruleColumnMap.ContainsKey(ruleToRun.Val2))
                    {
                        v2 = (int)rowToCheck[ruleColumnMap[ruleToRun.Val1].DBFieldName];
                    }
                    else
                    {
                        v2 = (int)fm.GetDefaultValue(ruleToRun.Val2);
                    }

                    thisVal = rowToCheck[columnToCheck].ToString().Length;

                    if (thisVal < v1 || thisVal > v2)
                    {
                        throw new AtriumException("Length out of range");
                    }
                }
                break;

            case 99:    //action
                if (!ruleToRun.IsACSeriesIdNull())
                {
                    ExecuteAction(fm, ruleToRun, rowToCheck);
                }
                break;

            case 100:    //action program
                ExecuteCodeAction(columnToCheck, rowToCheck, fm, ruleToRun);
                break;

            default:
                throw new AtriumException("Not a valid rule");
            }
        }
コード例 #7
0
        public void Populate(appDB.ddTableRow drTable)
        {
            DataTable dtTyped = null;

            try
            {
                atLogic.BEManager mngr = myA.GetFile(0).GetBEMngrForTable(drTable.DBTableName);
                dtTyped = mngr.MyDS.Tables[drTable.DBTableName];
            }
            catch (Exception x)
            {
                //ignore
            }

            DataTable dtViews = myA.GetGeneralRec("select * from information_schema.columns where table_schema='dbo' and table_name='v" + drTable.DBTableName + "' ");
            DataTable dtTable = myA.GetGeneralRec("select * from information_schema.columns where table_schema='dbo' and table_name='" + drTable.DBTableName + "' ");

            if (dtTable.Rows.Count == 0)
            {
                drTable.isDBTable = false;
            }
            else
            {
                drTable.isDBTable = true;
            }

            if (dtTyped != null)
            {
                foreach (DataColumn dc in dtTyped.Columns)
                {
                    appDB.ddFieldRow drField;
                    if (myA.DB.ddField.Select("Tableid=" + drTable.TableId.ToString() + " and DBFieldName='" + dc.ColumnName + "'").Length == 0)
                    {
                        drField             = (appDB.ddFieldRow)Add(drTable);
                        drField.FieldName   = dc.ColumnName;
                        drField.DBFieldName = dc.ColumnName;
                        if (drTable.isDynamic)
                        {
                            drField.AllowInRelatedFields = false;
                        }
                    }
                    else
                    {
                        drField = (appDB.ddFieldRow)myA.DB.ddField.Select("Tableid=" + drTable.TableId.ToString() + " and DBFieldName='" + dc.ColumnName + "'")[0];
                    }
                    drField.isMissing = true;
                    drField.DataType  = dc.DataType.Name;

                    if (drField.IsLeftEngNull())
                    {
                        drField.LeftEng = SplitCamelCase(drField.FieldName);
                        drField.LeftFre = SplitCamelCase(drField.FieldName);
                    }

                    if (dtViews.Select("Column_name='" + dc.ColumnName + "'", "").Length == 0)
                    {
                        drField.isVirtualColumn = true;
                    }
                    else
                    {
                        drField.isMissing       = false;
                        drField.isVirtualColumn = false;
                    }

                    if (!drField.isVirtualColumn && dtTable.Select("Column_name='" + dc.ColumnName + "'", "").Length == 0)
                    {
                        drField.isFromView = true;
                    }
                    else
                    {
                        drField.isMissing  = false;
                        drField.isFromView = false;
                    }
                }

                //check for "obsolete" columns
                foreach (appDB.ddFieldRow drf in drTable.GetddFieldRows())
                {
                    if (!dtTyped.Columns.Contains(drf.DBFieldName))
                    {
                        drf.AllowInRelatedFields = false;
                        drf.DescEng = "OBSOLETE";
                    }
                }
            }
            else
            {
                foreach (DataRow dr in dtViews.Rows)
                {
                    if (myA.DB.ddField.Select("Tableid=" + drTable.TableId.ToString() + " and DBFieldName='" + dr["Column_name"].ToString() + "'").Length == 0)
                    {
                        appDB.ddFieldRow drField = (appDB.ddFieldRow)Add(drTable);
                        drField.FieldName = dr["Column_name"].ToString();

                        if (dtTable.Select("Column_name='" + drField.FieldName + "'", "").Length == 0)
                        {
                            drField.isFromView = true;
                            drField.isMissing  = false;
                        }
                    }
                }
            }
        }