Exemplo n.º 1
0
        public static IFieldConverter GetDataSource(Column field)
        {
            IFieldConverter result = null;

            if (field.Type.ToLower() == "bit")
            {
                result = new EnumDataSource()
                {
                    EnumTypeFullName = typeof(YesOrNo).FullName
                };
            }
            if (field.Name.IndexOf("UserId") >= 0 || field.Name.IndexOf("Creator") >= 0)
            {
                result = new EntityDataSource()
                {
                    EntityType = typeof(User)
                };
            }
            if (field.Name.IndexOf("DepartmentId") >= 0)
            {
                result = new EntityDataSource()
                {
                    EntityType = typeof(Department)
                };
            }
            return(result);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Convert field
        /// </summary>
        /// <param name="server">Database server</param>
        /// <param name="conversionOptions">Field conversion options</param>
        /// <param name="objectName">Object name</param>
        /// <param name="fieldName">Field name</param>
        /// <returns>Return field conversion result</returns>
        internal static FieldConversionResult ConvertField(DatabaseServer server, FieldConversionOptions conversionOptions, string objectName, string fieldName)
        {
            if (string.IsNullOrWhiteSpace(conversionOptions?.ConversionName))
            {
                return(null);
            }

            IFieldConverter fieldConverter = DataManager.GetFieldConverter(conversionOptions.ConversionName) ?? DefaultFieldConverter;

            return(fieldConverter.Convert(new FieldConversionContext()
            {
                ConversionName = conversionOptions.ConversionName,
                Parameter = conversionOptions.Parameter,
                FieldName = fieldName,
                ObjectName = objectName,
                Server = server
            }));
        }
Exemplo n.º 3
0
        public PropertyContext(PropertyInfo property,
                               string tag,
                               IFieldConverter converter)
        {
            if (property == null)
            {
                throw new ArgumentNullException(nameof(property));
            }
            if (string.IsNullOrEmpty(tag))
            {
                throw new ArgumentNullException(nameof(tag));
            }
            if (converter == null)
            {
                throw new ArgumentNullException(nameof(converter));
            }

            Property  = property;
            Tag       = tag;
            Converter = converter;
        }
Exemplo n.º 4
0
        public static FilterParams BuildFilter <C>(C obj, IFieldConverter <C> converter)
            where C : class
        {
            var ret = new FilterParams();

            foreach (PropertyDescriptor p in TypeDescriptor.GetProperties(obj))
            {
                var val = p.GetValue(obj);
                if (val == null || val.ToString().Length == 0)
                {
                    continue;
                }
                if (val is long? && (!(val as long?).HasValue || (val as long?).Value == 0))
                {
                    continue;
                }
                if (val is long && (long)val == 0)
                {
                    continue;
                }
                if (val is int && (int)val == 0)
                {
                    continue;
                }
                if (val is short && (short)val == 0)
                {
                    continue;
                }

                var field = converter.Match(p.Name);
                if (field == null)
                {
                    continue;
                }

                AddExpression(ret, field.Item1, val, field.Item2);
            }
            return(ret);
        }
		public FieldConverterWrapper(Type converterType, IFieldConverter converterInstance)
		{
			ConverterType = converterType;
			ConverterInstance = converterInstance;
		}
Exemplo n.º 6
0
 public FieldConverterWrapper(Type converterType, IFieldConverter converterInstance)
 {
     ConverterType     = converterType;
     ConverterInstance = converterInstance;
 }
Exemplo n.º 7
0
        private void ConvertSaveActions(SCItem form, string tracking, SCItem buttonItem, bool saveToDatabaseActionCreated)
        {
            var formSaveActionField = form.Fields
                                      .FirstOrDefault(field => field.FieldId == new Guid(FormConstants.FormSaveActionFieldId));
            var formSaveActions = formSaveActionField?.Value;

            if (!string.IsNullOrEmpty(formSaveActions))
            {
                var saveActionElements            = XmlHelper.GetXmlElementNodeList(XmlHelper.GetXmlElementNode(formSaveActions, "g").InnerXml, "li");
                List <SaveAction> saveActionItems = new List <SaveAction>();
                if (saveActionElements != null)
                {
                    foreach (XmlNode saveActionElement in saveActionElements)
                    {
                        if (saveActionElement.Attributes != null)
                        {
                            var saveAction = new SaveAction()
                            {
                                Id         = saveActionElement.Attributes["id"].Value,
                                UnicId     = saveActionElement.Attributes["unicid"].Value,
                                Parameters = XmlHelper.GetXmlElementValue(saveActionElement.InnerXml, "parameters")
                            };
                            saveActionItems.Add(saveAction);
                        }
                    }

                    foreach (var saveActionItem in saveActionItems)
                    {
                        if (saveActionItem.Id == FormConstants.FormSaveAction_RegisterCampaignValue)
                        {
                            var trackingCampaign       = XmlHelper.GetXmlElementNodeList(tracking, "campaign");
                            var xmlAttributeCollection = trackingCampaign[0].Attributes;
                            if (xmlAttributeCollection != null)
                            {
                                var trackingCampaignId = trackingCampaign.Count > 0 ? xmlAttributeCollection["id"]?.Value : null;
                                if (trackingCampaignId != null)
                                {
                                    if (!_appSettings.enableReferencedItemCheck || _destMasterRepository.ItemExists(new Guid(trackingCampaignId)))
                                    {
                                        // Create Trigger Campaign Activity Save Action
                                        var triggerCampaignActivityValues = new Dictionary <Guid, string>();
                                        triggerCampaignActivityValues.Add(new Guid(SubmitActionConstants.SubmitActionFieldId),
                                                                          SubmitActionConstants.SubmitActionField_TriggerCampaignActivityActionValue);
                                        triggerCampaignActivityValues.Add(new Guid(SubmitActionConstants.ParametersFieldId),
                                                                          string.Format("{{\"referenceId\":\"{0}\"}}", trackingCampaignId));
                                        ConvertFieldsToSubmitActionItem("Trigger Campaign Activity", triggerCampaignActivityValues, buttonItem);
                                    }
                                }
                            }
                        }
                        else if (!saveToDatabaseActionCreated && saveActionItem.Id == FormConstants.FormSaveAction_SaveToDatabaseValue)
                        {
                            ConvertSaveDataAction(form, buttonItem);
                        }
                        else
                        {
                            // Convert other save actions if mapped in AppSettings.json
                            var submitAction =
                                _appSettings.submitActions.FirstOrDefault(s => s.sourceSaveActionId == Guid.Parse(saveActionItem.Id));

                            if (submitAction != null)
                            {
                                IFieldConverter converter          = IoC.CreateInstance(submitAction.destParametersConverterType);
                                var             submitActionValues = new Dictionary <Guid, string>();
                                submitActionValues.Add(new Guid(SubmitActionConstants.SubmitActionFieldId),
                                                       submitAction.destSubmitActionFieldValue);
                                try
                                {
                                    submitActionValues.Add(new Guid(SubmitActionConstants.ParametersFieldId),
                                                           converter.ConvertValue(
                                                               HttpUtility.HtmlDecode((saveActionItem.Parameters.Replace("&amp;", "&")))));
                                }
                                catch (Exception ex)
                                {
                                    _logger.Log(new LogEntry(LoggingEventType.Error,
                                                             string.Format("SubmitConverter - Failed to parse Xml value of Parameters field of Submit Action. FormID = {0} - FieldID = {1} - FieldValue = {2}",
                                                                           form.ID, formSaveActionField.Id, saveActionItem.Parameters), ex));
                                }

                                var destSubmitActionItemId = ConvertFieldsToSubmitActionItem(submitAction.destSubmitActionItemName, submitActionValues, buttonItem);

                                // Only if Save Action is Send Email
                                if (submitAction.sourceSaveActionId == Guid.Parse(FormConstants.FormSaveAction_SendEmailValue))
                                {
                                    CreateAddressBookSender(destSubmitActionItemId);
                                }
                            }
                            else
                            {
                                _analysisReporter.AddUnmappedSaveAction(formSaveActionField, form.ID, Guid.Parse(saveActionItem.Id));
                            }
                        }
                    }
                }
            }
        }
Exemplo n.º 8
0
        public override string Render()
        {
            if (Visiable)
            {
                AddAttributes();
                var texts = new List <string>();
                if (TextID.IsNullOrEmpty())
                {
                    TextID = "{0}_Text".FormatTo(Id);
                }
                if (!Value.IsNullOrEmpty() && !SelectType.IsNullOrEmpty())
                {
                    var page = PageBuilder.BuildPage(SelectType);
                    if (page != null && page.Controls.Count > 0)
                    {
                        IFieldConverter listDs = null;
                        page.Controls.ForEach((o) =>
                        {
                            if (o is IListDataSourceControl)
                            {
                                listDs = (o as IListDataSourceControl).DataSource as IFieldConverter;
                                return;
                            }
                            else if (o is ICascadeDataSourceControl)
                            {
                                listDs = (o as ICascadeDataSourceControl).DataSource as IFieldConverter;
                                return;
                            }
                        });
                        if (listDs != null)
                        {
                            if (IsMulitle)
                            {
                                foreach (var v in Value.Split(','))
                                {
                                    texts.Add(listDs.Converter(Id, v, null).ToString());
                                }
                            }
                            else
                            {
                                texts.Add(listDs.Converter(Id, Value, null).ToString());
                            }
                        }
                    }
                }
                string text = string.Empty;
                if (texts.Count > 0)
                {
                    text = string.Join(",", texts.ToArray());
                }
                var textBox = new TextBox()
                {
                    Id = TextID, Name = TextID, Value = text
                };
                if (!Attributes.IsNullOrEmpty())
                {
                    foreach (var attr in Attributes)
                    {
                        textBox.Attributes[attr.Key] = attr.Value;
                    }
                }
                textBox.Attributes["data-selector"]     = SelectType;
                textBox.Attributes["data-showtype"]     = ShowType.ToString();
                textBox.Attributes["data-multiple"]     = IsMulitle.ToString().ToLower();
                textBox.Attributes["data-target"]       = Id;
                textBox.Attributes["data-dialogheight"] = DialogHeight.ToString();
                textBox.Attributes["data-dialogwidth"]  = DialogWidth.ToString();

                var hidden = new HiddenField()
                {
                    Id = Id, Name = Id, Value = Value, Validator = Validator
                };
                string result = hidden.Render() + textBox.Render();
                return(ContainerTemplate.FormatTo(Id, Label, result, Description));
            }
            return(string.Empty);
        }
Exemplo n.º 9
0
        private List <SCItem> ConvertFields(SCItem destItem, SCItem lastDescendantItem)
        {
            var destFields = new List <SCField>();
            var destItems  = new List <SCItem>();

            var sourceFields = destItem.Fields;

            var itemId = sourceFields.First().ItemId;

            IEnumerable <Tuple <string, int> > langVersions = sourceFields.Where(f => f.Version != null && f.Language != null).Select(f => new Tuple <string, int>(f.Language, (int)f.Version)).Distinct();
            var languages = sourceFields.Where(f => f.Language != null).Select(f => f.Language).Distinct();

            // Migrate existing fields
            if (_itemMetadataTemplate.fields.existingFields != null)
            {
                var filteredExistingFields = sourceFields.Where(f =>
                                                                _itemMetadataTemplate.fields.existingFields.Select(mf => mf.fieldId).Contains(f.FieldId));

                foreach (var filteredExistingField in filteredExistingFields)
                {
                    var existingField =
                        _itemMetadataTemplate.fields.existingFields.FirstOrDefault(mf => mf.fieldId == filteredExistingField.FieldId);

                    if (existingField != null)
                    {
                        destFields.Add(filteredExistingField);
                    }
                }
            }

            // Convert fields
            if (_itemMetadataTemplate.fields.convertedFields != null)
            {
                // Select only fields that are mapped
                var filteredConvertedFields = sourceFields.Where(f =>
                                                                 _itemMetadataTemplate.fields.convertedFields.Select(mf => mf.sourceFieldId).Contains(f.FieldId));

                foreach (var filteredConvertedField in filteredConvertedFields)
                {
                    var convertedField =
                        _itemMetadataTemplate.fields.convertedFields.FirstOrDefault(mf =>
                                                                                    mf.sourceFieldId == filteredConvertedField.FieldId);

                    if (convertedField != null)
                    {
                        // Process fields that have multiple dest fields
                        if (convertedField.destFields != null && convertedField.destFields.Any())
                        {
                            var valueElements = new List <string>();
                            try
                            {
                                valueElements = XmlHelper.GetXmlElementNames(filteredConvertedField.Value);
                            }
                            catch (Exception ex)
                            {
                                _logger.Log(new LogEntry(LoggingEventType.Error, string.Format("ItemConverter - Failed to parse Xml value for form field item. ItemID = {0} - FieldID = {1} - FieldValue_Decoded = {2}", itemId, filteredConvertedField.Id, filteredConvertedField.Value), ex));
                            }

                            var filteredValueElementsToMany = convertedField.destFields.Where(f =>
                                                                                              valueElements.Contains(f.sourceElementName.ToLower(), StringComparer.InvariantCultureIgnoreCase) && (f.destFieldId == null || f.destFieldId == Guid.Empty));

                            foreach (var valueXmlElementMapping in filteredValueElementsToMany)
                            {
                                // Special case for List Datasource fields
                                if (string.Equals(valueXmlElementMapping.sourceElementName, "Items",
                                                  StringComparison.InvariantCultureIgnoreCase))
                                {
                                    IFieldConverter converter = IoC.CreateConverter(valueXmlElementMapping.fieldConverter);

                                    List <SCField> convertedFields = converter?.ConvertValueElementToFields(filteredConvertedField,
                                                                                                            XmlHelper.GetXmlElementValue(filteredConvertedField.Value, valueXmlElementMapping.sourceElementName));
                                    if (convertedFields != null && convertedFields.Any())
                                    {
                                        destFields.AddRange(convertedFields);
                                    }

                                    // Delete existing list items
                                    var listItemMetadataTemplate = _metadataProvider.GetItemMetadataByTemplateName("ExtendedListItem");
                                    if (lastDescendantItem != null)
                                    {
                                        var listItems =
                                            _destMasterRepository.GetSitecoreChildrenItems(listItemMetadataTemplate.destTemplateId,
                                                                                           lastDescendantItem.ID);

                                        foreach (SCItem listItem in listItems)
                                        {
                                            _destMasterRepository.DeleteSitecoreItem(listItem);
                                        }
                                    }

                                    List <SCItem> convertedItems = converter?.ConvertValueElementToItems(filteredConvertedField,
                                                                                                         XmlHelper.GetXmlElementValue(filteredConvertedField.Value, valueXmlElementMapping.sourceElementName),
                                                                                                         listItemMetadataTemplate, lastDescendantItem ?? destItem);

                                    if (convertedItems != null && convertedItems.Any())
                                    {
                                        destItems.AddRange(convertedItems);
                                    }

                                    // Reporting
                                    if (convertedFields?.Count > 0 && convertedItems?.Count > 0)
                                    {
                                        _conversionReporter.AddUnmappedValueElementSourceField(filteredConvertedField, itemId, valueXmlElementMapping.sourceElementName, XmlHelper.GetXmlElementValue(filteredConvertedField.Value, valueXmlElementMapping.sourceElementName));
                                    }
                                }
                            }

                            var filteredValueElements =
                                convertedField.destFields.Where(f => valueElements.Contains(f.sourceElementName.ToLower(), StringComparer.InvariantCultureIgnoreCase) && (f.destFieldId != null && f.destFieldId != Guid.Empty));

                            foreach (var valueXmlElementMapping in filteredValueElements)
                            {
                                IFieldConverter converter = IoC.CreateConverter(valueXmlElementMapping.fieldConverter);

                                SCField destField = converter?.ConvertValueElement(filteredConvertedField, (Guid)valueXmlElementMapping.destFieldId, XmlHelper.GetXmlElementValue(filteredConvertedField.Value, valueXmlElementMapping.sourceElementName), destItems);

                                if (destField != null && destField.FieldId != Guid.Empty)
                                {
                                    destFields.Add(destField);
                                }
                            }

                            // Reporting
                            var unmappedValueElementSourceFields = valueElements.Where(v =>
                                                                                       !convertedField.destFields.Select(f => f.sourceElementName)
                                                                                       .Contains(v, StringComparer.InvariantCultureIgnoreCase));

                            foreach (var unmappedValueElementSourceField in unmappedValueElementSourceFields)
                            {
                                _conversionReporter.AddUnmappedValueElementSourceField(filteredConvertedField, itemId, unmappedValueElementSourceField, XmlHelper.GetXmlElementValue(filteredConvertedField.Value, unmappedValueElementSourceField));
                            }
                        }
                        // Process fields that have a single dest field
                        else if (convertedField.destFieldId != null && convertedField.destFieldId != Guid.Empty)
                        {
                            IFieldConverter converter = IoC.CreateConverter(convertedField.fieldConverter);
                            SCField         destField = converter?.ConvertField(filteredConvertedField, (Guid)convertedField.destFieldId);

                            if (destField != null && destField.FieldId != Guid.Empty)
                            {
                                destFields.Add(destField);
                            }
                        }
                    }
                }
            }

            if (_itemMetadataTemplate.fields.newFields != null)
            {
                // Create new fields
                foreach (var newField in _itemMetadataTemplate.fields.newFields)
                {
                    destFields.AddRange(_fieldFactory.CreateFields(newField, itemId, langVersions, languages));
                }
            }

            destItem.Fields = destFields;
            destItems.Add(destItem);

            // Merge multi-language List items with same value
            destItems = MergeListItems(destItems);

            // Reporting
            var unmappedSourceFields = sourceFields?.Where(f => (_itemMetadataTemplate.fields.existingFields == null || !_itemMetadataTemplate.fields.existingFields.Select(mf => mf.fieldId).Contains(f.FieldId)) &&
                                                           (_itemMetadataTemplate.fields.convertedFields == null || !_itemMetadataTemplate.fields.convertedFields.Select(mf => mf.sourceFieldId).Contains(f.FieldId)));

            foreach (SCField unmappedSourceField in unmappedSourceFields)
            {
                _conversionReporter.AddUnmappedItemField(unmappedSourceField, itemId);
            }

            return(destItems);
        }
Exemplo n.º 10
0
 /// <summary>
 /// Throws a ConvertException with the passed values
 /// </summary>
 /// <param name="converter">IField converter instance</param>
 /// <param name="from">The source string.</param>
 /// <param name="errorMessage" >The custom error msg.</param>
 /// <exception cref="ConvertException">Throw exception with values</exception>
 public static void ThrowConvertException(this IFieldConverter converter, string from, string errorMessage)
 {
     throw new ConvertException(from, converter?.Type, errorMessage);
 }