internal XOFieldCalculatorRouteRelation(XOTable TableForFill, XOField KeyFieldForFill, XOField FieldForRetrieve, string Filter) { this._tableForFill = TableForFill; this._keyFieldForFill = KeyFieldForFill; this._fieldForRetrieve = FieldForRetrieve; this._filter = Filter; }
private object GetSpecifiedControl(XOField XOField) { if (XOField.SpecifiedControlType == null && XOField.SpecifiedControlIndex == -1) return null; object ctl = ContainerControls.FirstOrDefault( p => p.Key.SpecifiedControlType == XOField.SpecifiedControlType && p.Key.SpecifiedControlIndex == XOField.SpecifiedControlIndex).Value; if (ctl == null) { } return ctl; }
public XORelation GetChildRelation(XOField ChildField) { return XOTable.GetChildRelation(ChildField); }
internal XOFieldCalculator(XOField XOField) { //Route to a file could have some stupid format, like this // [ParentTable;ParentFieldRefOrValue|ChildTable;ChildField;ChildFieldRefOrValue],[...] List<XOFieldCalculatorRouteRelation> rels = new List<XOFieldCalculatorRouteRelation>(); XOField iterField = null; foreach (string refr in XOField.XopField.Calculator.Split(',')) { string[] ets = refr.Split(';'); if (_issueField == null) { _issueField = ets[0]; iterField = XOField.XoTable.Fields.Single(p=>p.Name == _issueField); } XOFieldCalculatorRouteRelation rel = null; if (ets.Length == 2) { string[] childTablRef = ets[1].Split('-'); if (childTablRef.Length == 1) { //Reference to parent table XORelation parRel = iterField.ParentRelation; //Refactoring here. (maybe when post building initialization were implemented) if (parRel == null) throw new NullReferenceException("Refernced table in calculator isn't defined in model file"); iterField = parRel.ParentTable.Fields.Single(p=>p.Name == ets[1]); rel = new XOFieldCalculatorRouteRelation( parRel.ParentTable, parRel.ParentField, iterField, null); } else if (childTablRef.Length == 3) { //Reference to parent table XORelation parRel = iterField.ParentRelation; //Refactoring here. (maybe when post building initialization were implemented) if (parRel == null) throw new NullReferenceException("Refernced table in calculator isn't defined in model file"); XORelation parChildRel = parRel.ParentTable.ChildrenRelations.FirstOrDefault(p => p.ChildTable.Name == childTablRef[0] && p.ChildField.Name == childTablRef[1]); if (parChildRel != null) { string filter = null; string childColumn = childTablRef[2]; int filterStratBraceIndex = childColumn.IndexOf("[", 0); int filterEndBraceIndex = -1; if (filterStratBraceIndex != -1) filterEndBraceIndex = childColumn.IndexOf("]", filterStratBraceIndex); //Some formatting check and exceptions are needed here if (filterStratBraceIndex != -1 && filterEndBraceIndex != -1) { filter = childColumn.Substring(filterStratBraceIndex + 1, filterEndBraceIndex - filterStratBraceIndex - 1); childColumn = childColumn.Remove(filterStratBraceIndex, filterEndBraceIndex - filterStratBraceIndex + 1); } iterField = parChildRel.ChildTable.Fields.First(p => p.Name == childColumn); rel = new XOFieldCalculatorRouteRelation( parChildRel.ChildTable, parChildRel.ChildField, iterField, filter); } } } if (rel == null) { throw new Exception("Can't parse calculator expression string"); } rels.Add(rel); } _routeRelations = rels.ToArray(); }
public XOFieldContext(XOTableContext XTable, XOField XOField) { _xOTable = XTable; _xOField = XOField; }
public XORelation GetChildRelation(XOField ChildField) { return ChildrenRelations.FirstOrDefault(p => p.ChildField == ChildField); }