/// <summary> /// Edit a new or existing calculated field /// </summary> /// <param name="uo">Existing UserObject with content or null to create a new CF</param> /// <returns></returns> public static UserObject Edit(UserObject uo) { if (uo == null) // prompt if not supplied { uo = UserObjectOpenDialog.ShowDialog(UserObjectType.CalcField, "Open Calculated Field"); } if (uo == null) { return(null); } uo = UserObjectDao.Read(uo); if (uo == null) { return(null); } CalcField cf = CalcField.Deserialize(uo.Content); if (cf == null) { return(null); } uo = Edit(cf, uo); return(uo); }
/// <summary> /// Pass drilldown along to first metacolumn in calc field for processing /// </summary> /// <param name="mt"></param> /// <param name="mc"></param> /// <param name="level"></param> /// <param name="resultId"></param> /// <returns></returns> public override Query GetDrilldownDetailQuery( MetaTable mt, MetaColumn mc, int level, string linkInfoString) { bool summary; int tableId; MetaTable.ParseMetaTableName(mt.Name, out tableId, out summary); UserObject uo = UserObjectDao.Read(tableId); if (uo == null) { return(null); } CalcField cf = CalcField.Deserialize(uo.Content); if (cf == null) { return(null); } if (cf.MetaColumn1 == null || cf.MetaColumn1.MetaTable == null) { return(null); } Query q = QueryEngine.GetDrilldownDetailQuery(cf.MetaColumn1.MetaTable, cf.MetaColumn1, level, linkInfoString); return(q); }
private void JoinAnchorComboBox_Properties_Enter(object sender, EventArgs e) { GetCalcFieldForm(); // get latest values CalcField cf = CalcField; CalcFieldColumn cfc; HashSet <MetaTable> tableSet = new HashSet <MetaTable>(); ComboBoxItemCollection items = JoinAnchorComboBox.Properties.Items; items.Clear(); items.Add("(none)"); for (int ci = 0; ci < cf.CfCols.Count; ci++) { CalcFieldColumn cfCol = cf.CfCols[ci]; if (cfCol.MetaColumn == null) { continue; } MetaTable mt = cfCol.MetaColumn.MetaTable; if (tableSet.Contains(mt)) { continue; } tableSet.Add(mt); items.Add(mt.Label); } return; }
public override void Set_Info(CalcField info) { try { this.lblName.Text = info.Name; this.cboMember1.Value = info.Member1; this.txtMember1.Text = Lib.IfNOE(info.Member1, "0"); this.cboOperator.Value = info.Operator; this.cboMember2.Value = info.Member2; this.txtMember2.Text = Lib.IfNOE(info.Member2, "0"); } catch { } }
/// <summary> /// Create a new calculated field /// </summary> /// <returns></returns> public static MetaTable CreateNew() { CalcField cf = new CalcField(); UserObject uo = Edit(cf, null); if (uo == null) { return(null); } string tName = "CALCFIELD_" + uo.Id.ToString(); MetaTable mt = MetaTableCollection.Get(tName); return(mt); }
public override CalcField Get_CalcFieldInfo() { try { var ret = new CalcField { Name = this.lblName.Text, Member1 = this.txtMember1.Visible ? Lib.IfNOE(this.txtMember1.Text, "0") : Lib.NTE(this.cboMember1.Value), Operator = Lib.NTE(this.cboOperator.Value), Member2 = this.txtMember2.Visible ? Lib.IfNOE(this.txtMember2.Text, "0") : Lib.NTE(this.cboMember2.Value) }; return(ret); } catch { } return(null); }
public override CalcField Get_CalcFieldInfo() { try { var ret = new CalcField { Name = this.lblName.Text, Member1 = this.txtMember1.Visible ? Lib.IfNOE(this.txtMember1.Text, "0") : Lib.NTE(this.cboMember1.Value), Operator = Lib.NTE(this.cboOperator.Value), Member2 = this.txtMember2.Visible ? Lib.IfNOE(this.txtMember2.Text, "0") : Lib.NTE(this.cboMember2.Value) }; return ret; } catch { } return null; }
public override void Load_InitData() { this.cboOperator.Items.Clear(); this.cboOperator.Items.AddRange(CalcField.GetCalcOperator()); this.cboOperator.SelectedIndex = 0; }
private MetaTable GetMetaTableLevel2( string name) { UserObject uo; Query incQry = null; // included query QueryTable qt, qt1, qt2; QueryColumn qc, qc1, qc2; CalcFieldMetaTable mt; MetaTable mt1, mt2; MetaColumn mc, mc1, mc2, cfMc, cfMcModel; ExecuteQueryParms eqp; string cfLabel = "", mcName, mcLabel; string sql = null, tables = null, exprs = null, criteria = null; int objectId, startingSuffix, ci, i1; string prefix = "calcfield_"; // calculated field metatable names begin with "calcfield_" if (name.ToLower().IndexOf(prefix) != 0) { return(null); } if (Lex.Eq(name, "CALCFIELD_826476")) { name = name; // debug } string tok = name.Substring(prefix.Length); // get the object id try { objectId = Int32.Parse(tok); } catch (Exception ex) { return(null); } uo = UserObjectDao.Read(objectId); if (uo == null) { return(null); } if (!Permissions.UserHasReadAccess(Security.UserName, uo)) { return(null); } CalcField cf = CalcField.Deserialize(uo.Content); if (cf == null) { return(null); } if (cf.FinalResultType == MetaColumnType.Unknown) { return(null); // need a final result type } mt = new CalcFieldMetaTable(); mt.Name = name; mt.CalcField = cf; // include associated CalcField object mt.Label = uo.Name; if (MetaTableFactory.ShowDataSource) // add source to label if requested { mt.Label = MetaTableFactory.AddSourceToLabel(mt.Name, mt.Label); } mt.Description = cf.Description; mt.MetaBrokerType = MetaBrokerType.CalcField; bool keyAdded = false; cfLabel = cf.ColumnLabel; // get any user defined label for result // Add metacolumns for basic calculated field if (cf.CalcType == CalcTypeEnum.Basic && cf.Column1.MetaColumn != null) { cfMcModel = cf.Column1.MetaColumn; tok = cf.Operation; if (Lex.IsNullOrEmpty(cfLabel)) { if (tok.IndexOf("/") == 0) { cfLabel = "Ratio"; } else if (tok.IndexOf("*") == 0) { cfLabel = "Product"; } else if (tok.IndexOf("+") == 0) { cfLabel = "Sum"; } else if (tok.IndexOf("-") == 0) { cfLabel = "Difference"; } else { if (cf.Column1.FunctionEnum == CalcFuncEnum.None) // just use existing col name { cfLabel = cf.Column1.MetaColumn.Label; } else // use function & col name { tok = cf.Column1.Function; i1 = tok.IndexOf("("); if (i1 >= 0) { tok = tok.Substring(0, i1); } if (!tok.EndsWith(" ")) { tok += " "; } tok += cf.MetaColumn1.Label; cfLabel = tok; } } if (cf.IsClassificationDefined) { cfLabel += " Class"; // add class suffix if classifier } } } else if (cf.CalcType == CalcTypeEnum.Advanced && cf.AdvancedExpr != "") { List <MetaColumn> mcList = cf.GetInputMetaColumnList(); if (mcList.Count == 0) { return(null); } cfMcModel = mcList[0]; if (cfLabel == "") { cfLabel = "Value"; } } else { return(null); } mt.Parent = cfMcModel.MetaTable.Parent; // set parent if (mt.Root == mt) { mt.Parent = cfMcModel.MetaTable; // if F1 table is a root set it as parent } // Add key value mc = cfMcModel.MetaTable.KeyMetaColumn; // make copy of first table key field for our key if (mc == null) { return(null); } mc = mc.Clone(); mc.ColumnMap = mc.Name; // map to self mc.MetaTable = mt; mt.AddMetaColumn(mc); keyAdded = true; mc.IsSearchable = cf.IsSearchable; // Add calculated value column mc = new MetaColumn(); mt.AddMetaColumn(mc); mc.MetaTable = mt; mc.Name = "CALC_FIELD"; mc.Label = cfLabel; mc.DataType = cf.FinalResultType; // final result type mc.InitialSelection = ColumnSelectionEnum.Selected; mc.Format = cfMcModel.Format; mc.Width = cfMcModel.Width; mc.Decimals = cfMcModel.Decimals; if (cf.FinalResultType == MetaColumnType.Integer) { mc.Format = ColumnFormatEnum.Decimal; mc.Decimals = 0; } if (cf.FinalResultType == MetaColumnType.Image) { mc.Width = (int)(mc.Width * 2.0); // make CF images wider } mc.IsSearchable = cfMcModel.IsSearchable; if (mc.IsSearchable) // refine searchability { mc.IsSearchable = cf.IsSearchable; } cfMc = mc; // Add metacolumns for the underlying columns that go into the calculation foreach (CalcFieldColumn cfc in cf.CfCols) { if (cfc.MetaColumn == null) { continue; } if (cfc.MetaColumn.IsKey) { continue; // don't add additional key } mc = cfc.MetaColumn.Clone(); mcName = mc.MetaTable.Name + "_" + mc.Name; mc.Name = mt.GetValidMetaColumnName(mcName); mc.DetailsAvailable = false; // no drill-down for now (can cause issues) mc.IsSearchable = false; // no searching for now (can cause issues) mc.ColumnMap = mc.Name; // map to self if (Lex.Eq(mc.Label, cfLabel)) // if same as result start suffix checking at 2 { startingSuffix = 1; } else { startingSuffix = 2; } mc.Label = mt.GetUniqueMetaColumnLabel(mc.Label, startingSuffix); mc.InitialSelection = ColumnSelectionEnum.Hidden; // hide for now mc.TableMap = cfc.MetaColumn.MetaTable.Name + "." + cfc.MetaColumn.Name; // save source table and column //mc.TableMap = cfc.MetaColumn.MetaTable.Name; // save source table and column //mc.ColumnMap = cfc.MetaColumn.Name; mt.AddMetaColumn(mc); } //mt.MetaColumns.Remove(cfMc); // move cf result column to end after the inputs //mt.MetaColumns.Add(cfMc); return(mt); }
/// <summary> /// Select a standard calculated field /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void StandardCalcMenuItem_Click(object sender, EventArgs e) { CalcField cf2 = null; string title; int i1; ToolStripMenuItem ci = (ToolStripMenuItem)sender; // item clicked on if (String.IsNullOrEmpty(ci.Text)) { return; } string standardCalcName = ci.Text; for (i1 = 0; i1 < StandardCalculatedFields.Count; i1++) { cf2 = StandardCalculatedFields[i1]; if (Lex.Eq(cf2.UserObject.Name, standardCalcName)) { break; } } if (i1 >= StandardCalculatedFields.Count) { throw new Exception("Unrecognized standard calculation: " + standardCalcName); } CalcField = cf2.Clone(); SetupForm(); // display new content title = "Edit Calculated Field"; string cfName = cf2.UserObject.Name; i1 = cfName.IndexOf(" ("); if (i1 > 0) { cfName = cfName.Substring(0, i1); } title += " - " + cfName; Text = title; if (UoIn.Id <= 0) { UoIn.Name = cfName; // substitute name if not saved yet } if (!String.IsNullOrEmpty(cf2.Prompt)) // prompt the user { MetaColumn mc = FieldSelectorDialog.Show(cf2.Prompt, "Input Parameter", QueriesControl.Instance.CurrentQuery, null); if (mc == null) { return; } else if (CalcField.CalcType == CalcTypeEnum.Basic) { CalcField.Column1.MetaColumn = mc; } else { CalcField.AdvancedExpr = Lex.Replace(CalcField.AdvancedExpr, "user_input_metatable.metacolumn", mc.MetaTable.Name + "." + mc.Name); } SetupForm(); } }
/// <summary> /// Read in the set of standard calculated fields & send to dropdown menu /// </summary> void SetupStandardCalculatedFields() { try { if (StandardCalculatedFields == null) { StandardCalculatedFields = new List <CalcField>(); string fileName = "StandardCalculatedFields.xml"; string serverFile = @"<MetaDataDir>\" + fileName; string clientFile = ClientDirs.TempDir + @"\" + fileName; ServerFile.CopyToClient(serverFile, clientFile); StreamReader sr = new StreamReader(clientFile); XmlTextReader tr = new XmlTextReader(sr); tr.MoveToContent(); if (!Lex.Eq(tr.Name, "StandardCalculatedFields")) { throw new Exception("SetupStandardCalculatedFields - \"StandardCalculatedFields\" element not found"); } while (true) { tr.Read(); // get CalcField element tr.MoveToContent(); if (Lex.Eq(tr.Name, "CalcField")) { CalcField cf = CalcField.Deserialize(tr); StandardCalculatedFields.Add(cf); } else if (Lex.Eq(tr.Name, "StandardCalculatedFields")) { break; } else { throw new Exception("SetupStandardCalculatedFields unexpected element: " + tr.Name); } } tr.Close(); sr.Close(); } ToolStripItemCollection items = StandardCalcContextMenu.Items; items.Clear(); foreach (CalcField cf2 in StandardCalculatedFields) { ToolStripMenuItem mi = new System.Windows.Forms.ToolStripMenuItem(); mi.Image = StandardCalcMenuItem.Image; mi.ImageTransparentColor = System.Drawing.Color.Cyan; mi.Text = cf2.UserObject.Name; mi.Click += new System.EventHandler(this.StandardCalcMenuItem_Click); items.Add(mi); } return; } catch (Exception ex) { ServicesLog.Message("Error reading StandardCalculatedFields.xml: " + ex.Message); } return; }
/// <summary> /// Get other values from calc field form checking for errors /// </summary> /// <returns></returns> bool GetCalcFieldForm() { List <MetaColumn> mcList; CalcField cf = CalcField; CalcFieldColumn cfc = null; if (cf.CalcType == CalcTypeEnum.Basic) // basic CF { cf.Operation = Operation.Text; cf.CfCols.Clear(); // update foreach (CalcFieldColumnControl cfcc in CfColCtls) { if (cfcc.FieldSelectorControl.MetaColumn == null) { continue; } cfc = new CalcFieldColumn(); cfc.MetaColumn = cfcc.FieldSelectorControl.MetaColumn; cfc.Function = cfcc.Function.Text; cfc.Constant = cfcc.Constant.Text; cf.CfCols.Add(cfc); } } else // advanced CF { cf.AdvancedExpr = ParseAdvancedExpr(AdvancedExpr.Text, out mcList); // Get preclassification result type string txt = ResultDataType.Text; if (Lex.IsDefined(txt)) { cf.PreclassificationlResultType = MetaColumn.ParseMetaColumnTypeString(txt); } else { cf.PreclassificationlResultType = MetaColumnType.Number; } // Get anchor table for joins cf.CfCols.Clear(); foreach (MetaColumn mc0 in mcList) { cfc = new CalcFieldColumn(); cfc.MetaColumn = mc0; cf.CfCols.Add(cfc); } cf.OuterJoinRoot = ""; txt = JoinAnchorComboBox.Text; if (Lex.Eq(txt, "(None)")) { txt = ""; } if (Lex.IsDefined(txt)) { for (int ci = 0; ci < cf.CfCols.Count; ci++) { cfc = cf.CfCols[ci]; if (Lex.Eq(txt, cfc.MetaColumn.MetaTable.Label)) { cf.OuterJoinRoot = cfc.MetaColumn.MetaTable.Name; break; } } } } cf.Description = Description.Text; CondFormatRules rules = CondFormatRulesCtl.GetRules(); if (rules.Count == 0) { cf.Classification = null; } else { cf.Classification = new CondFormat(); cf.Classification.Rules = rules; } try { cf.SetDerivedValuesWithException(); } // set derived values checking for errors catch (Exception ex) { MessageBoxMx.ShowError(ex.Message); return(false); } return(true); }
/// <summary> /// Set contents of calculated field form /// </summary> /// <param name="cf"></param> void SetupForm() { InSetup = true; CalcField cf = CalcField; CalcFieldColumn cfc; CalcFieldColumnControl cfcc; CondFormatRules rules; int ci, cci; MetaColumnType mcType = MetaColumnType.Number; // be sure source column type is set MetaColumn cfMc = null; Tabs.SelectedTabPageIndex = 0; // be sure first tab is selected SetupControlVisibility(); foreach (CalcFieldColumnControl cfc0 in CfColCtls) // clear field selector controls on form { cfc0.FieldSelectorControl.Query = QueriesControl.Instance.CurrentQuery; // cfc0.CfCol.Query = QueriesControl.Instance.CurrentQuery; cfc0.FieldSelectorControl.MetaColumn = null; } AdvancedExpr.Text = ""; FormatAdvancedExpr(cf.AdvancedExpr, out AdvancedEditorPseudoQuery); // setup advanced field menu if (cf.CalcType == CalcTypeEnum.Basic) { cfMc = cf.MetaColumn1; BasicOptionButton.Checked = true; if (cf.Operation != "") { Operation.Text = cf.Operation; } else { Operation.Text = "/ (Division)"; } cf.SetDerivedValues(); } else // advanced type { AdvancedOptionButton.Checked = true; AdvancedExpr.Text = FormatAdvancedExpr(cf.AdvancedExpr, out AdvancedEditorPseudoQuery); List <MetaColumn> mcList = cf.GetInputMetaColumnList(); if (mcList.Count > 0) { cfMc = mcList[0]; } // Setup result type if (cf.PreclassificationlResultType == MetaColumnType.Unknown) { cf.PreclassificationlResultType = MetaColumnType.Number; } string txt = cf.PreclassificationlResultType.ToString(); if (Lex.Eq(txt, "String")) { txt = "Text"; // fixup } ResultDataType.Text = txt; // Setup outer join table JoinAnchorComboBox.Text = ""; if (Lex.IsDefined(cf.OuterJoinRoot)) { for (ci = 0; ci < cf.CfCols.Count; ci++) { cfc = cf.CfCols[ci]; if (cfc.MetaColumn == null) { continue; } MetaTable mt = cfc.MetaColumn.MetaTable; if (Lex.Eq(cf.OuterJoinRoot, cfc.MetaColumn.MetaTable.Name)) { JoinAnchorComboBox.Text = cfc.MetaColumn.MetaTable.Label; break; } } } } // Setup column controls for source column type if (cfMc != null) { cf.SourceColumnType = cfMc.DataType; } else { cf.SourceColumnType = MetaColumnType.Number; } SetupFormForColumnType(cf.SourceColumnType); // Add column controls MetaColumn references and function info cci = -1; // col control index for (ci = 0; ci < cf.CfCols.Count; ci++) { cfc = cf.CfCols[ci]; cci++; if (cci >= CfColCtls.Count) { throw new Exception("Number of calculated field columns exceeds limit of: " + CfColCtls.Count); } cfcc = CfColCtls[cci]; cfcc.FieldSelectorControl.MetaColumn = cfc.MetaColumn; if (Lex.IsDefined(cfc.Function)) { cfcc.Function.Text = cfc.Function; } else { cfcc.Function.Text = "None"; } cfcc.Constant.Text = cfc.Constant; cfcc.Constant.Enabled = Lex.Contains(cfc.Function, "constant"); } CalcField.ColumnLabel = FieldColumnName.Text; Description.Text = cf.Description; if (cf.Operation != "") { Operation.SelectedItem = cf.Operation; } if (cf.Classification != null) { rules = cf.Classification.Rules; } else { rules = new CondFormatRules(); } if (rules.Count == 0) { rules.Add(new CondFormatRule()); // include initial rule } CondFormatRulesCtl.SetupControl(CalcField.PreclassificationlResultType, rules.ColoringStyle); CondFormatRulesCtl.SetupControl(CalcField.PreclassificationlResultType, rules); InSetup = false; return; }
/// <summary> /// Edit a new or existing calculated field /// </summary> /// <param name="cf"></param> /// <param name="uoIn"></param> /// <returns></returns> public static UserObject Edit( CalcField cf, UserObject uoIn) { QueryTable qt; MetaTable mt = null; MetaColumn mc, field; UserObject uo2; CalcField cf2 = null; string msg; int i1; CalcFieldEditor lastInstance = Instance; CalcFieldEditor i = Instance = new CalcFieldEditor(); i.AdvancedPanel.BorderStyle = BorderStyle.None; i.AdvancedPanel.Visible = false; i.AdvancedPanel.Dock = DockStyle.Fill; i.BasicPanel.BorderStyle = BorderStyle.None; i.BasicPanel.Visible = true; i.BasicPanel.Dock = DockStyle.Fill; i.SetupStandardCalculatedFields(); if (ServicesIniFile.Read("CalcFieldHelpUrl") != "") { i.Help.Enabled = true; } if (lastInstance != null) { i.StartPosition = FormStartPosition.Manual; i.Location = lastInstance.Location; i.Size = lastInstance.Size; lastInstance = null; } if (uoIn == null) { uoIn = new UserObject(UserObjectType.CalcField); } else if (uoIn.Id > 0) // get existing metatable for calc field for exclusion in BuildQuickSelectTableMenu { string tName = "CALCFIELD_" + uoIn.Id.ToString(); mt = MetaTableCollection.GetExisting(tName); if (MainMenuControl != null) { MainMenuControl.UpdateMruList(tName); } } Instance.UoIn = uoIn; string title = "Edit Calculated Field"; if (!String.IsNullOrEmpty(uoIn.Name)) { title += " - " + uoIn.Name; } Instance.Text = title; Instance.CalcField = cf; // what we're editing Instance.SetupForm(); // set up the form DialogResult dr = Instance.ShowDialog(SessionManager.ActiveForm); if (dr == DialogResult.Cancel) { return(null); } return(Instance.UoIn); // return saved object }
/// <summary> /// Build a set of rows from data in the buffer /// </summary> public override void BuildDataFromOtherRetrievedData( QueryEngine qe, int ti, List <object[]> results, int firstResult, int resultCount) { // This routine takes a set of results in the buffer, computes the calculated field value // and stores the results back in the buffer. For a calc field derived from a single column // the process is simple; however, for two column calculations there are two cases to consider. // 1. If no values then nothing to compute. // 2. If both values are present in the buffer row then just use them. // 3. If a single value is present then pick up the most recent other value that // exists for the same key. // Note that if the query only retrieves one of the two fields the the other field // will be retrieved into the calc field buffer. QueryColumn qc; MetaColumn mc; CalcFieldColumn cfc, cfc2; int voiCfKey, voiCf, voi; object v, v1, v2, vn; object[] vo, mergedVo; const int keyOffset = 1; throw new NotImplementedException(); #if false Query q = qe.Query; CalcFieldMetaTable cfMt = GetCalcFieldMetaTable(q.Tables[ti].MetaTable); CalcField cf = cfMt.CalcField; // Setup if (resultCount <= 0) { return; } if (SelectList.Count <= 1) { return; // just return if only key selected } voiCfKey = Qt.KeyQueryColumn.VoPosition; // calc field key value buffer index voiCf = Qt.GetQueryColumnByNameWithException("CALC_FIELD").VoPosition; // calculated value buffer index mergedVo = new object[results[0].Length]; // merged vo containing latest values for each column // Process each result row for (int ri = firstResult; ri < firstResult + resultCount; ri++) // result loop { vo = results[ri]; if (vo[0] == null) { continue; } if (mergedVo[0] == null || Lex.Ne(vo[0].ToString(), mergedVo[0].ToString())) { // if new key init voVals Array.Clear(mergedVo, 0, mergedVo.Length); mergedVo[0] = vo[0]; } int nonNullCount = 0; int nullCount = 0; QueryColumn[] colMap = _dataMap.InputColMap; for (int mi = 0; mi < colMap.Length; mi++) { if (colMap[mi] == null) { continue; // } voi = colMap[mi].VoPosition; v = vo[voi]; if (!NullValue.IsNull(v)) { mergedVo[voi] = v; nonNullCount++; } else { nullCount++; } } if (nonNullCount == 0) { continue; // if all inputs are null then all done (assume all outputs are null also) } vo[voiCfKey] = vo[0]; // copy key value QueryTableData qtd = qe.Qtd[ti]; // Pick up each retrieved value in the from other data fields for (int cfci = 0; cfci < qtd.SelectedColumns.Count; cfci++) // columns to retrieve/calculate loop { qc = qtd.SelectedColumns[cfci]; mc = qc.MetaColumn; voi = qc.VoPosition; bool calcFieldCol = Lex.Eq(mc.Name, "CALC_FIELD"); bool selectedCol = !calcFieldCol; // Input value column if (selectedCol) // retrieved input value { QueryColumn cmi = _dataMap.SelectedColMap[cfci]; if (cmi != null && cmi.VoPosition > 0) { v = mergedVo[cmi.VoPosition]; if (mc.DataType == MetaColumnType.Image) // convert to proper image reference { MetaTable sourceMt = cmi.QueryTable.MetaTable; GenericMetaBroker gmb = QueryEngine.GetGlobalBroker(cmi.QueryTable.MetaTable); v = gmb.ConvertValueToImageReference(v); } vo[voi] = v; } } // Calculate the CF value else { cfc = cf.CfCols[0]; vn = vo[voiCf]; // get possible single retrieved value vo[voiCf] = null; // clear calc value (may hold one of two values) v = mergedVo[colMap[0].VoPosition]; // get first value if (NullValue.IsNull(v)) { continue; // if null then result must be null } v = ApplyFunction(cfc, v); for (int mi = 1; mi < colMap.Length; mi++) // combine with { v1 = v; // reference previous value if (colMap[mi] == null) { continue; } cfc2 = cf.CfCols[mi]; voi = colMap[mi].VoPosition; v2 = mergedVo[voi]; v2 = ApplyFunction(cfc2, v2); v = CalculateValue(cf, v1, cfc2, v2); if (v == null) { break; } } v = ApplyClassification(cf, v); vo[voiCf] = v; // store calculated value } } // column loop vo = vo; // debug to check row loop at end } // row loop return; #endif }
public virtual void Set_Info(CalcField info) { }