private static Field LoadField(JToken fieldJson) { var type = ParseEnum <FieldType>(fieldJson["Type"]); Field field; switch (type) { case FieldType.Formula: field = new FormulaField { OutputType = ParseEnum <FormulaOutputType>(fieldJson["OutputType"]), Values = LoadListValues(fieldJson["Values"]), }; break; case FieldType.List: field = new ListField { Multiplicity = ParseEnum <Multiplicity>(fieldJson["Multiplicity"]), Values = LoadListValues(fieldJson["Values"]), }; break; case FieldType.Reference: field = new ReferenceField { Multiplicity = ParseEnum <Multiplicity>(fieldJson["Multiplicity"]), }; break; default: field = new Field(); break; } field.Id = (int)fieldJson["Id"]; field.AppId = (int)fieldJson["AppId"]; field.Name = (string)fieldJson["Name"]; field.Type = type; field.Status = ParseEnum <FieldStatus>(fieldJson["Status"]); field.IsRequired = (bool)fieldJson["IsRequired"]; field.IsUnique = (bool)fieldJson["IsUnique"]; return(field); }
private void Awake() { formulaField = FindObjectOfType <FormulaField>(); SetRandomNumber(); }
private static void ProcessField(Field fld, XmlWriter xmlw, string type) { xmlw.WriteStartElement(type + "Field"); xmlw.WriteAttributeString("Description", fld.Description); xmlw.WriteAttributeString("FormulaForm", fld.FormulaForm); xmlw.WriteAttributeString("HeadingText", fld.HeadingText); xmlw.WriteAttributeString("IsRecurring", fld.IsRecurring.ToStringSafe()); xmlw.WriteAttributeString("Kind", fld.Kind.ToStringSafe()); xmlw.WriteAttributeString("Length", fld.Length.ToStringSafe()); xmlw.WriteAttributeString("LongName", fld.LongName); xmlw.WriteAttributeString("Name", fld.Name); xmlw.WriteAttributeString("ShortName", fld.ShortName); xmlw.WriteAttributeString("Type", fld.Type.ToStringSafe()); xmlw.WriteAttributeString("UseCount", fld.UseCount.ToStringSafe()); switch (fld.Kind) { case CrFieldKindEnum.crFieldKindDBField: { DBField dbf = (DBField)fld; xmlw.WriteAttributeString("TableAlias", dbf.TableAlias); break; } case CrFieldKindEnum.crFieldKindFormulaField: { FormulaField ff = (FormulaField)fld; xmlw.WriteAttributeString("FormulaNullTreatment", ff.FormulaNullTreatment.ToStringSafe()); xmlw.WriteAttributeString("Text", ff.Text.ToStringSafe()); xmlw.WriteAttributeString("Syntax", ff.Syntax.ToStringSafe()); break; } case CrFieldKindEnum.crFieldKindGroupNameField: { GroupNameField gnf = (GroupNameField)fld; xmlw.WriteAttributeString("Group", gnf.Group.ConditionField.FormulaForm); break; } case CrFieldKindEnum.crFieldKindParameterField: { ParameterField pf = (ParameterField)fld; xmlw.WriteAttributeString("AllowCustomCurrentValues", pf.AllowCustomCurrentValues.ToStringSafe()); xmlw.WriteAttributeString("AllowMultiValue", pf.AllowMultiValue.ToStringSafe()); xmlw.WriteAttributeString("AllowNullValue", pf.AllowNullValue.ToStringSafe()); if (pf.BrowseField != null) { xmlw.WriteAttributeString("BrowseField", pf.BrowseField.FormulaForm); } xmlw.WriteAttributeString("DefaultValueSortMethod", pf.DefaultValueSortMethod.ToStringSafe()); xmlw.WriteAttributeString("DefaultValueSortOrder", pf.DefaultValueSortOrder.ToStringSafe()); xmlw.WriteAttributeString("EditMask", pf.EditMask); xmlw.WriteAttributeString("IsEditableOnPanel", pf.IsEditableOnPanel.ToStringSafe()); xmlw.WriteAttributeString("IsOptionalPrompt", pf.IsOptionalPrompt.ToStringSafe()); xmlw.WriteAttributeString("IsShownOnPanel", pf.IsShownOnPanel.ToStringSafe()); xmlw.WriteAttributeString("ParameterType", pf.ParameterType.ToStringSafe()); xmlw.WriteAttributeString("ReportName", pf.ReportName); xmlw.WriteAttributeString("ValueRangeKind", pf.ValueRangeKind.ToStringSafe()); if (pf.CurrentValues != null) { ProcessValues(pf.CurrentValues, xmlw, "Current"); } if (pf.DefaultValues != null) { ProcessValues(pf.DefaultValues, xmlw, "Default"); } if (pf.InitialValues != null) { ProcessValues(pf.InitialValues, xmlw, "Initial"); } if (pf.Values != null) { ProcessValues(pf.Values, xmlw, ""); } ProcessValue(pf.MaximumValue as Value, xmlw, "Maximum"); ProcessValue(pf.MinimumValue as Value, xmlw, "Minimum"); break; } case CrFieldKindEnum.crFieldKindRunningTotalField: { RunningTotalField rtf = (RunningTotalField)fld; xmlw.WriteAttributeString("EvaluateCondition", ProcessCondition(rtf.EvaluateCondition)); xmlw.WriteAttributeString("EvaluateConditionType", rtf.EvaluateConditionType.ToStringSafe()); xmlw.WriteAttributeString("Operation", rtf.Operation.ToStringSafe()); xmlw.WriteAttributeString("ResetCondition", ProcessCondition(rtf.ResetCondition)); xmlw.WriteAttributeString("ResetConditionType", rtf.ResetConditionType.ToStringSafe()); xmlw.WriteAttributeString("SummarizedField", rtf.SummarizedField.FormulaForm); break; } case CrFieldKindEnum.crFieldKindSpecialField: { SpecialField sf = (SpecialField)fld; xmlw.WriteAttributeString("SpecialType", sf.SpecialType.ToStringSafe()); break; } case CrFieldKindEnum.crFieldKindSummaryField: { SummaryField smf = (SummaryField)fld; if (smf.Group != null) { xmlw.WriteAttributeString("Group", smf.Group.ConditionField.FormulaForm); } xmlw.WriteAttributeString("Operation", smf.Operation.ToStringSafe()); xmlw.WriteAttributeString("SummarizedField", smf.SummarizedField.FormulaForm); break; } case CrFieldKindEnum.crFieldKindUnknownField: { break; } } xmlw.WriteEndElement(); }
//This function responsable for resolving formual and getting the value private static object GetFormulaFieldValue(PropertyInfo propertyInfo, T entity, FormulaField attFormual) { var formualFields = attFormual.Formula.Split(']'); string fieldName = ""; object fieldVal = ""; string formula = ""; PropertyInfo innerPropertyInfo; object formulaValue = null; formula = attFormual.Formula; for (int i = 0; i < formualFields.Length - 1; i++) { fieldName = formualFields[i].Split('[')[1]; innerPropertyInfo = entity.GetType().GetProperty(fieldName); fieldVal = innerPropertyInfo.GetValue(entity, null); if (fieldVal != null) { formula = formula.Replace("[" + fieldName + "]", fieldVal.ToString().Trim()); } } if (propertyInfo.PropertyType == typeof(decimal) || propertyInfo.PropertyType == typeof(int) || propertyInfo.PropertyType == typeof(float)) { formulaValue = MathEvaluator.Evaluate(formula); SetFieldValue(entity, propertyInfo, formulaValue); return(formulaValue); } //This only will be for default values on not numbers fields else { return(formula); } }