protected override void ProcessSPFieldXElement(XElement fieldTemplate, FieldDefinition fieldModel) { base.ProcessSPFieldXElement(fieldTemplate, fieldModel); var typedFieldModel = fieldModel.WithAssertAndCast <CalculatedFieldDefinition>("model", value => value.RequireNotNull()); if (typedFieldModel.CurrencyLocaleId.HasValue) { fieldTemplate.SetAttribute(BuiltInFieldAttributes.LCID, typedFieldModel.CurrencyLocaleId); } if (!string.IsNullOrEmpty(typedFieldModel.Formula)) { // can't really validate it automatically // Improve CalculatedFieldDefinition with field ref check // https://github.com/SubPointSolutions/spmeta2/issues/648 TraceService.Verbose((int)LogEventId.ModelProvisionCoreCall, "Crafting formula for a CalculatedField. Ensure FieldReferences are correct."); // should be a new XML node var formulaNode = new XElement(BuiltInFieldAttributes.Formula, typedFieldModel.Formula); fieldTemplate.Add(formulaNode); // Format="0" when provisioning CalculatedField #969 // https://github.com/SubPointSolutions/spmeta2/issues/969 //fieldTemplate.SetAttribute(BuiltInFieldAttributes.Format, // (int)Enum.Parse(typeof(SPDateTimeFieldFormatType), typedFieldModel.DateFormat)); fieldTemplate.SetAttribute(BuiltInFieldAttributes.Format, typedFieldModel.DateFormat); } if (typedFieldModel.ShowAsPercentage.HasValue) { fieldTemplate.SetAttribute(BuiltInFieldAttributes.Percentage, typedFieldModel.ShowAsPercentage.Value.ToString().ToUpper()); } if (!string.IsNullOrEmpty(typedFieldModel.DisplayFormat)) { fieldTemplate.SetAttribute(BuiltInFieldAttributes.Decimals, NumberFieldModelHandler.GetDecimalsValue(typedFieldModel.DisplayFormat)); } fieldTemplate.SetAttribute(BuiltInFieldAttributes.ResultType, typedFieldModel.OutputType); if (typedFieldModel.FieldReferences.Count > 0) { var fieldRefsNode = new XElement("FieldRefs"); foreach (var fieldRef in typedFieldModel.FieldReferences) { var fieldRefNode = new XElement("FieldRef"); fieldRefNode.SetAttribute("Name", fieldRef); fieldRefsNode.Add(fieldRefNode); } fieldTemplate.Add(fieldRefsNode); } }
protected override void ProcessSPFieldXElement(XElement fieldTemplate, FieldDefinition fieldModel) { base.ProcessSPFieldXElement(fieldTemplate, fieldModel); var typedFieldModel = fieldModel.WithAssertAndCast <CalculatedFieldDefinition>("model", value => value.RequireNotNull()); if (typedFieldModel.CurrencyLocaleId.HasValue) { fieldTemplate.SetAttribute(BuiltInFieldAttributes.LCID, typedFieldModel.CurrencyLocaleId); } // should be a new XML node var formulaNode = new XElement(BuiltInFieldAttributes.Formula, typedFieldModel.Formula); fieldTemplate.Add(formulaNode); fieldTemplate.SetAttribute(BuiltInFieldAttributes.Format, (int)Enum.Parse(typeof(SPDateTimeFieldFormatType), typedFieldModel.DateFormat)); if (typedFieldModel.ShowAsPercentage.HasValue) { fieldTemplate.SetAttribute(BuiltInFieldAttributes.Percentage, typedFieldModel.ShowAsPercentage.Value.ToString().ToUpper()); } if (!string.IsNullOrEmpty(typedFieldModel.DisplayFormat)) { fieldTemplate.SetAttribute(BuiltInFieldAttributes.Decimals, NumberFieldModelHandler.GetDecimalsValue(typedFieldModel.DisplayFormat)); } fieldTemplate.SetAttribute(BuiltInFieldAttributes.ResultType, typedFieldModel.OutputType); if (typedFieldModel.FieldReferences.Count > 0) { var fieldRefsNode = new XElement("FieldRefs"); foreach (var fieldRef in typedFieldModel.FieldReferences) { var fieldRefNode = new XElement("FieldRef"); fieldRefNode.SetAttribute("Name", fieldRef); fieldRefsNode.Add(fieldRefNode); } fieldTemplate.Add(fieldRefsNode); } }