Ejemplo n.º 1
0
 public PerformNopImport(
     IImportPictureData importPictureData,
     IImportCountryData importCountryData,
     IImportRegionData importRegionData,
     IImportUsers importUsers,
     IImportTaxRates importTaxRates,
     IImportBrands importBrands,
     IImportSpecifications importSpecifications,
     IImportSpecificationAttributeOptions importSpecificationAttributeOptions,
     IImportOptions importOptions,
     IImportTags importTags,
     IImportCategories importCategories,
     IImportProducts importProducts,
     IImportOrders importOrders,
     IIndexService indexService, IImportAddresses importAddresses)
 {
     _importPictureData    = importPictureData;
     _importCountryData    = importCountryData;
     _importRegionData     = importRegionData;
     _importUsers          = importUsers;
     _importTaxRates       = importTaxRates;
     _importBrands         = importBrands;
     _importSpecifications = importSpecifications;
     _importSpecificationAttributeOptions = importSpecificationAttributeOptions;
     _importOptions    = importOptions;
     _importTags       = importTags;
     _importCategories = importCategories;
     _importProducts   = importProducts;
     _importOrders     = importOrders;
     _indexService     = indexService;
     _importAddresses  = importAddresses;
 }
Ejemplo n.º 2
0
 public PerformNopImport(
     IImportPictureData importPictureData,
     IImportCountryData importCountryData,
     IImportRegionData importRegionData,
     IImportUsers importUsers,
     IImportTaxRates importTaxRates,
     IImportBrands importBrands,
     IImportSpecifications importSpecifications,
     IImportSpecificationAttributeOptions importSpecificationAttributeOptions,
     IImportOptions importOptions,
     IImportTags importTags,
     IImportCategories importCategories,
     IImportProducts importProducts,
     IImportOrders importOrders,
     IIndexService indexService, IImportAddresses importAddresses)
 {
     _importPictureData = importPictureData;
     _importCountryData = importCountryData;
     _importRegionData = importRegionData;
     _importUsers = importUsers;
     _importTaxRates = importTaxRates;
     _importBrands = importBrands;
     _importSpecifications = importSpecifications;
     _importSpecificationAttributeOptions = importSpecificationAttributeOptions;
     _importOptions = importOptions;
     _importTags = importTags;
     _importCategories = importCategories;
     _importProducts = importProducts;
     _importOrders = importOrders;
     _indexService = indexService;
     _importAddresses = importAddresses;
 }
Ejemplo n.º 3
0
        /// <summary>
        /// 过滤
        /// </summary>
        /// <param name="workbook">工作簿</param>
        /// <param name="context">过滤器上下文</param>
        /// <param name="options">导入选项配置</param>
        public override IWorkbook Filter(IWorkbook workbook, IFilterContext context, IImportOptions options)
        {
            var kvps = new List <KeyValuePair <int, string> >();

            foreach (var sheet in workbook.Sheets)
            {
                foreach (var row in sheet.GetBody())
                {
                    if (!row.Valid && options.ValidateMode == ValidateMode.StopOnFirstFailure)
                    {
                        continue;
                    }
                    row.Cells.ForEach(cell =>
                    {
                        var kvp       = new KeyValuePair <int, string>(cell.ColumnIndex, cell.Value.ToString());
                        var attribute = cell.GetFilterAttribute <DuplicationAttribute>(context.TypeFilterInfo);
                        if (attribute != null)
                        {
                            row.Valid(!kvps.Contains(kvp), cell, attribute.ErrorMsg);
                        }
                        kvps.Add(kvp);
                    });
                }
            }
            return(workbook);
        }
 public void UpdateField(Sitecore.Data.Fields.Field field, string importValue, IImportOptions importOptions)
 {
     var selectionSource = field.Item.Database.SelectSingleItem(field.Source);
     if (selectionSource != null)
     {
         var query = ID.IsID(importValue)
             ? ".//*[@@id='" + ID.Parse(importValue) + "']"
             : "." +
               Sitecore.StringUtil.EnsurePrefix('/',
                   importValue.Replace(importOptions.TreePathValuesImportSeparator, "/"));
         var selectedItem = selectionSource.Axes.SelectSingleItem(query);
         if (selectedItem != null)
         {
             field.Value = selectedItem.ID.ToString();
             return;
         }
     }
     if (importOptions.InvalidLinkHandling == InvalidLinkHandling.SetBroken)
     {
         field.Value = importValue;
     }
     else if (importOptions.InvalidLinkHandling == InvalidLinkHandling.SetEmpty)
     {
         field.Value = string.Empty;
     }
 }
Ejemplo n.º 5
0
 /// <summary>
 /// 过滤
 /// </summary>
 /// <param name="workbook">工作簿</param>
 /// <param name="context">过滤器上下文</param>
 /// <param name="options">导入选项配置</param>
 public IWorkbook Filter(IWorkbook workbook, IFilterContext context, IImportOptions options)
 {
     foreach (var filter in Filters)
     {
         workbook = filter.Filter(workbook, context, options);
     }
     return(workbook);
 }
Ejemplo n.º 6
0
 /// <summary>
 /// 清理缓存
 /// </summary>
 /// <param name="options">导入选项配置</param>
 private void CleanHeaderRowCache(IImportOptions options)
 {
     if (!options.EnabledHeaderRowCache)
     {
         Table            = Hashtable.Synchronized(new Hashtable(1024));
         TableDynamicCell = Hashtable.Synchronized(new Hashtable(1024));
     }
 }
 public void UpdateField(Field field, string importValue, IImportOptions importOptions)
 {
     var separator = new[] {importOptions.MultipleValuesImportSeparator};
     var selectionSource = field.Item.Database.SelectSingleItem(field.Source);
     if (selectionSource != null)
     {
         var importValues = importValue != null
             ? importValue.Split(separator, StringSplitOptions.RemoveEmptyEntries)
             : new string[] {};
         var idListValue = "";
         foreach (var value in importValues)
         {
             var isIdImportValue = ID.IsID(value);
             var selectedItem = isIdImportValue
                 ? selectionSource.Children[ID.Parse(value)]
                 : selectionSource.Children[value];
             if (selectedItem != null)
             {
                 idListValue += "|" + selectedItem.ID;
             }
             else
             {
                 if (importOptions.InvalidLinkHandling == InvalidLinkHandling.CreateItem)
                 {
                     var firstChild = selectionSource.Children.FirstOrDefault();
                     if (firstChild != null)
                     {
                         var template = field.Item.Database.GetTemplate(firstChild.TemplateID);
                         var itemName = Utils.GetValidItemName(value);
                         var createdItem = selectionSource.Add(itemName, template);
                         if (createdItem != null)
                         {
                             idListValue += "|" + createdItem.ID.ToString();
                         }
                     }
                 }
                 else if (importOptions.InvalidLinkHandling == InvalidLinkHandling.SetBroken)
                 {
                     idListValue += "|" + value;
                 }
             }
         }
         if (idListValue.StartsWith("|"))
         {
             idListValue = idListValue.Substring(1);
         }
         field.Value = idListValue;
         return;
     }
     if (importOptions.InvalidLinkHandling == InvalidLinkHandling.SetBroken)
     {
         field.Value = importValue;
     }
     else if (importOptions.InvalidLinkHandling == InvalidLinkHandling.SetEmpty)
     {
         field.Value = string.Empty;
     }
 }
Ejemplo n.º 8
0
        public void UpdateField(Field field, string importValue, IImportOptions importOptions)
        {
            DateTime dateTime;

            if (DateTime.TryParse(importValue, out dateTime))
            {
                dateTime    = DateTime.Parse(importValue);
                field.Value = DateUtil.ToIsoDate(dateTime);
            }
        }
 public void UpdateField(Sitecore.Data.Fields.Field field, string importValue, IImportOptions importOptions)
 {
     try
     {
         var separator = new[] {importOptions.MultipleValuesImportSeparator};
         var selectionSource = field.Item.Database.SelectSingleItem(field.Source);
         var importValues = importValue != null
             ? importValue.Split(separator, StringSplitOptions.RemoveEmptyEntries)
             : new string[] {};
         var idListValue = "";
         foreach (var value in importValues)
         {
             var query = ID.IsID(value)
                 ? ".//*[@@id='" + ID.Parse(value) + "']"
                 : "." +
                   Sitecore.StringUtil.EnsurePrefix('/',
                       value.Replace(importOptions.TreePathValuesImportSeparator, "/"));
             var item = selectionSource.Axes.SelectSingleItem(query);
             if (item != null)
             {
                 idListValue += "|" + item.ID;
             }
             else
             {
                 if (importOptions.InvalidLinkHandling == InvalidLinkHandling.SetBroken)
                 {
                     idListValue += "|" + value;
                 }
                 else if (importOptions.InvalidLinkHandling == InvalidLinkHandling.SetEmpty)
                 {
                     idListValue += "|";
                 }
             }
         }
         if (idListValue.StartsWith("|"))
         {
             idListValue = idListValue.Substring(1);
         }
         field.Value = idListValue;
     }
     catch (Exception ex)
     {
         if (importOptions.InvalidLinkHandling == InvalidLinkHandling.SetBroken)
         {
             field.Value = importValue;
         }
         else if (importOptions.InvalidLinkHandling == InvalidLinkHandling.SetEmpty)
         {
             field.Value = string.Empty;
         }
     }
 }
Ejemplo n.º 10
0
        /// <summary>
        /// 验证表头
        /// </summary>
        /// <param name="sheet">工作表</param>
        /// <param name="options">导入选项配置</param>
        private void VerifyHeader <TTemplate>(IWorkSheet sheet, IImportOptions options)
        {
            var header = sheet.GetHeader().LastOrDefault();

            if (header == null)
            {
                throw new OfficeHeaderException($"导入的模板不正确,未匹配表头", options.HeaderRowIndex);
            }

            var cellNames = header.Cells.GroupBy(x => x.Name).Select(x => new { Name = x.Key, Count = x.Count() }).ToList();

            if (options.HeaderColumnOnly && cellNames.Any(x => x.Count > 1))
            {
                throw new OfficeHeaderException($"导入的表格存在重复列:{cellNames.Where(x => x.Count > 1).Select(x => x.Name).ExpandAndToString()}", options.HeaderRowIndex);
            }

            if (!options.HeaderMatch)
            {
                return;
            }
            List <PropertyInfo> properties = typeof(TTemplate).GetProperties().ToList();
            var props = properties
                        .Where(x => x.GetCustomAttribute <DynamicColumnAttribute>() == null)
                        .Where(x => x.GetCustomAttribute <ExcelIgnoreAttribute>() == null)
                        .Select(p => new
            {
                Name = p.GetCustomAttribute <ColumnNameAttribute>()?.Name,
                Code = p.Name
            }).ToList();

            var cellName = cellNames.Select(x => x.Name);
            var list     = props.Where(p => !cellName.Contains(p.Name)).ToList();

            if (list.Any())
            {
                list = list.Where(p => !(string.IsNullOrWhiteSpace(p.Name) && cellName.Contains(p.Code))).ToList();
                if (list.Any())
                {
                    throw new OfficeHeaderException($"导入的表格不存在列:{list.Select(x => string.IsNullOrWhiteSpace(x.Name) ? x.Code : x.Name).ExpandAndToString()}", options.HeaderRowIndex);
                }
            }
            else if (options.MappingDictionary != null && options.MappingDictionary.Any())
            {
                var dic = options.MappingDictionary.ToList().Where(x => !cellName.Contains(x.Value)).ToList();
                if (dic.Count > 0)
                {
                    throw new OfficeHeaderException($"导入的表格不存在列:{dic.Select(x => x.Value).ExpandAndToString()}", options.HeaderRowIndex);
                }
            }
        }
Ejemplo n.º 11
0
 private void SetForInvalidLinkHandling(Field field, IImportOptions importOptions, Item selectionSource, bool isIdImportValue, bool isQuery, string importValue)
 {
     if (importOptions.InvalidLinkHandling == InvalidLinkHandling.CreateItem && !isIdImportValue && !isQuery)
     {
         var firstChild = selectionSource.Children.FirstOrDefault();
         if (firstChild != null)
         {
             var template = field.Item.Database.GetTemplate(firstChild.TemplateID);
             var itemName = Utils.GetValidItemName(importValue);
             var createdItem = selectionSource.Add(itemName, template);
             if (createdItem != null)
             {
                 field.Value = createdItem.ID.ToString();
             }
         }
     }
 }
Ejemplo n.º 12
0
        /// <summary>
        /// 转换
        /// </summary>
        /// <typeparam name="TTemplate">导入模板类型</typeparam>
        /// <param name="options">导入选项配置</param>
        public virtual IWorkbook Convert <TTemplate>(IImportOptions options) where TTemplate : class, new()
        {
            CleanHeaderRowCache(options);
            var workbook      = new NpoiWorkbook();
            var innerWorkbook = GetWorkbook(options.FileUrl);

            if (options.MultiSheet == false)
            {
                BuildSheet <TTemplate>(workbook, innerWorkbook, options);
                return(workbook);
            }

            for (var i = 0; i < innerWorkbook.NumberOfSheets; i++)
            {
                BuildSheet <TTemplate>(workbook, innerWorkbook, options);
            }
            return(workbook);
        }
Ejemplo n.º 13
0
        public object Import(RedirectsProviderFile file, IImportOptions options)
        {
            if (file == null)
            {
                throw new ArgumentNullException(nameof(file));
            }
            if (options == null)
            {
                throw new ArgumentNullException(nameof(options));
            }

            if (!(options is CsvImportOptions))
            {
                throw new ArgumentException("Must be an instance of CsvImportOptions", nameof(options));
            }

            return(Import(file, (CsvImportOptions)options));
        }
        public void UpdateField(Field field, string importValue, IImportOptions importOptions)
        {
            field.Value = importValue;

            DateTime importeddate;

            if (System.DateTime.TryParseExact(importValue, "dd-MM-yyyy", CultureInfo.InvariantCulture, DateTimeStyles.AllowWhiteSpaces, out importeddate))
            {
                field.Value = Sitecore.DateUtil.ToIsoDate(importeddate);
            }
            else if (System.DateTime.TryParse(importValue, out importeddate))
            {
                field.Value = Sitecore.DateUtil.ToIsoDate(importeddate);
            }
            else
            {
                field.Value = importValue;
            }
        }
Ejemplo n.º 15
0
        /// <summary>
        /// 处理正文
        /// </summary>
        /// <param name="sheet">工作表</param>
        /// <param name="innerSheet">NPOI工作表</param>
        /// <param name="options">导入选项配置</param>
        private void HandleBody <TTemplate>(IWorkSheet sheet, ISheet innerSheet, IImportOptions options)
        {
            var header = sheet.GetHeader().LastOrDefault();

            // LastRowNum: 获取最后一行的行数,如果sheet中一行数据都没有则返回-1,只有第一行有数据则返回0,最后有数据的行是第n行则返回n-1
            // PhysicalNumberOfRows: 获取有记录的行数,即:最后有数据的行是第n行,前面有m行是空行没数据,则返回n-m
            for (var i = options.DataRowIndex; i < innerSheet.GetHasDataRowNum() + 1; i++)
            {
                var innerRow = innerSheet.GetRow(i);
                if (CheckIgnoreEmptyLine(options, innerRow.IsEmptyRow()))
                {
                    break;
                }
                if (CheckEmptyLine(innerRow.IsEmptyRow(), options.EnabledEmptyLine, i))
                {
                    continue;
                }
                sheet.AddBodyRow(Convert <TTemplate>(innerRow, header), innerRow.RowNum);
            }
        }
Ejemplo n.º 16
0
        public void UpdateField(Field field, string importValue, IImportOptions importOptions)
        {
            var separator       = new[] { importOptions.MultipleValuesImportSeparator };
            var selectionSource = field.Item.Database.SelectSingleItem(field.Source);

            if (selectionSource != null)
            {
                var strValue = GetFieldValue(selectionSource, importValue, separator, importOptions, field);
                field.Value = strValue;
                return;
            }
            if (importOptions.InvalidLinkHandling == InvalidLinkHandling.SetBroken)
            {
                field.Value = importValue;
            }
            else if (importOptions.InvalidLinkHandling == InvalidLinkHandling.SetEmpty)
            {
                field.Value = string.Empty;
            }
        }
Ejemplo n.º 17
0
        private static string BuildIdListValue(IImportOptions importOptions, string value, Data.Items.Item item)
        {
            StringBuilder builder = new StringBuilder();

            if (item != null)
            {
                builder.AppendFormat("|{0}", item.ID);
            }
            else
            {
                if (importOptions.InvalidLinkHandling == InvalidLinkHandling.SetBroken)
                {
                    builder.AppendFormat("|{0}", value);
                }
                else if (importOptions.InvalidLinkHandling == InvalidLinkHandling.SetEmpty)
                {
                    builder.Append("|");
                }
            }
            return(builder.ToString());
        }
Ejemplo n.º 18
0
 private void UpdateFieldValueByInvalidLinkHandling(IImportOptions importOptions, StringBuilder idListValue, Item selectionSource, Field field, string value)
 {
     if (importOptions.InvalidLinkHandling == InvalidLinkHandling.CreateItem)
     {
         var firstChild = selectionSource.Children.FirstOrDefault();
         if (firstChild != null)
         {
             var template    = field.Item.Database.GetTemplate(firstChild.TemplateID);
             var itemName    = Utils.GetValidItemName(value);
             var createdItem = selectionSource.Add(itemName, template);
             if (createdItem != null)
             {
                 idListValue.Append("|" + createdItem.ID.ToString());
             }
         }
     }
     else if (importOptions.InvalidLinkHandling == InvalidLinkHandling.SetBroken)
     {
         idListValue.Append("|" + value);
     }
 }
Ejemplo n.º 19
0
 /// <summary>
 /// 过滤
 /// </summary>
 /// <param name="workbook">工作簿</param>
 /// <param name="context">过滤器上下文</param>
 /// <param name="options">导入选项配置</param>
 public override IWorkbook Filter(IWorkbook workbook, IFilterContext context, IImportOptions options)
 {
     foreach (var sheet in workbook.Sheets)
     {
         foreach (var row in sheet.GetBody())
         {
             if (!row.Valid && options.ValidateMode == ValidateMode.StopOnFirstFailure)
             {
                 continue;
             }
             row.Cells.ForEach(cell =>
             {
                 var attribute = cell.GetFilterAttribute <DateTimeAttribute>(context.TypeFilterInfo);
                 if (attribute != null)
                 {
                     row.Valid(cell.IsDateTime(), cell, attribute.ErrorMsg);
                 }
             });
         }
     }
     return(workbook);
 }
Ejemplo n.º 20
0
 /// <summary>
 /// 过滤
 /// </summary>
 /// <param name="workbook">工作簿</param>
 /// <param name="context">过滤器上下文</param>
 /// <param name="options">导入选项配置</param>
 public override IWorkbook Filter(IWorkbook workbook, IFilterContext context, IImportOptions options)
 {
     foreach (var sheet in workbook.Sheets)
     {
         foreach (var row in sheet.GetBody())
         {
             if (!row.Valid && options.ValidateMode == ValidateMode.StopOnFirstFailure)
             {
                 continue;
             }
             row.Cells.ForEach(cell =>
             {
                 var attributes = cell.GetFilterAttributes <RegexAttribute>(context.TypeFilterInfo);
                 if (attributes != null && attributes.Count > 0)
                 {
                     attributes.ForEach(x => row.Valid(Regex.IsMatch(cell.Value.ToString(), x.RegexString), cell, x.ErrorMsg));
                 }
             });
         }
     }
     return(workbook);
 }
        public void UpdateField(Field field, string importValue, IImportOptions importOptions)
        {
            var selectionSource = field.Item.Database.SelectSingleItem(field.Source);

            if (selectionSource != null)
            {
                var isIdImportValue = ID.IsID(importValue);
                var selectedItem    = isIdImportValue
                    ? selectionSource.Children[ID.Parse(importValue)]
                    : selectionSource.Children[importValue];
                if (selectedItem != null)
                {
                    field.Value = selectedItem.ID.ToString();
                    return;
                }
                if (importOptions.InvalidLinkHandling == InvalidLinkHandling.CreateItem && !isIdImportValue)
                {
                    var firstChild = selectionSource.Children.FirstOrDefault();
                    if (firstChild != null)
                    {
                        var template    = field.Item.Database.GetTemplate(firstChild.TemplateID);
                        var itemName    = Utils.GetValidItemName(importValue);
                        var createdItem = selectionSource.Add(itemName, template);
                        if (createdItem != null)
                        {
                            field.Value = createdItem.ID.ToString();
                        }
                    }
                }
            }
            if (importOptions.InvalidLinkHandling == InvalidLinkHandling.SetBroken)
            {
                field.Value = importValue;
            }
            else if (importOptions.InvalidLinkHandling == InvalidLinkHandling.SetEmpty)
            {
                field.Value = string.Empty;
            }
        }
 public void UpdateField(Field field, string importValue, IImportOptions importOptions)
 {
     var selectionSource = field.Item.Database.SelectSingleItem(field.Source);
     if (selectionSource != null)
     {
         var isIdImportValue = ID.IsID(importValue);
         var selectedItem = isIdImportValue
             ? selectionSource.Children[ID.Parse(importValue)]
             : selectionSource.Children[importValue];
         if (selectedItem != null)
         {
             field.Value = selectedItem.ID.ToString();
             return;
         }
         if (importOptions.InvalidLinkHandling == InvalidLinkHandling.CreateItem && !isIdImportValue)
         {
             var firstChild = selectionSource.Children.FirstOrDefault();
             if (firstChild != null)
             {
                 var template = field.Item.Database.GetTemplate(firstChild.TemplateID);
                 var itemName = Utils.GetValidItemName(importValue);
                 var createdItem = selectionSource.Add(itemName, template);
                 if (createdItem != null)
                 {
                     field.Value = createdItem.ID.ToString();
                 }
             }
         }
     }
     if (importOptions.InvalidLinkHandling == InvalidLinkHandling.SetBroken)
     {
         field.Value = importValue;
     }
     else if (importOptions.InvalidLinkHandling == InvalidLinkHandling.SetEmpty)
     {
         field.Value = string.Empty;
     }
 }
Ejemplo n.º 23
0
        public void UpdateField(Field field, string importValue, IImportOptions importOptions)
        {
            var dataSource = field.Source;
            Item[] queryItems = null;
            Item selectionSource = null;
            var isQuery = IsQuery(dataSource);
            var isDatasourceId = IsDatasourceId(dataSource);
            if (isQuery)
            {
                string query = dataSource.Substring(Constants.DatasourceStartWithQuery.Length);
                queryItems = field.Item.Parent.Database.SelectItems(query);
            }
            else
                selectionSource = GetSelectionSource(isDatasourceId, dataSource, field);

            var isIdImportValue = ID.IsID(importValue);
            Item selectedItem = null;
            if (selectionSource != null || queryItems.Any())
            {

                selectedItem = GetSelectedItem(isQuery, isIdImportValue, queryItems, importValue, selectionSource);
                if (selectedItem != null)
                {
                    field.Value = selectedItem.ID.ToString();
                    return;
                }
                SetForInvalidLinkHandling(field, importOptions, selectionSource, isIdImportValue, isQuery, importValue);
            }
            if (importOptions.InvalidLinkHandling == InvalidLinkHandling.SetBroken)
            {
                field.Value = importValue;
            }
            else if (importOptions.InvalidLinkHandling == InvalidLinkHandling.SetEmpty)
            {
                field.Value = string.Empty;
            }
        }
Ejemplo n.º 24
0
 public void UpdateField(Sitecore.Data.Fields.Field field, string importValue, IImportOptions importOptions)
 {
     throw new NotImplementedException();
 }
 public void UpdateField(Sitecore.Data.Fields.Field field, string importValue, IImportOptions importOptions)
 {
     try
     {
         var separator       = new[] { importOptions.MultipleValuesImportSeparator };
         var selectionSource = field.Item.Database.SelectSingleItem(field.Source);
         var importValues    = importValue != null
             ? importValue.Split(separator, StringSplitOptions.RemoveEmptyEntries)
             : new string[]
         {
         };
         var idListValue = "";
         foreach (var value in importValues)
         {
             var query = ID.IsID(value)
                 ? ".//*[@@id='" + ID.Parse(value) + "']"
                 : "." +
                         Sitecore.StringUtil.EnsurePrefix('/',
                                                          value.Replace(importOptions.TreePathValuesImportSeparator, "/"));
             var item = selectionSource.Axes.SelectSingleItem(query);
             if (item != null)
             {
                 idListValue += "|" + item.ID;
             }
             else
             {
                 if (importOptions.InvalidLinkHandling == InvalidLinkHandling.SetBroken)
                 {
                     idListValue += "|" + value;
                 }
                 else if (importOptions.InvalidLinkHandling == InvalidLinkHandling.SetEmpty)
                 {
                     idListValue += "|";
                 }
             }
         }
         if (idListValue.StartsWith("|"))
         {
             idListValue = idListValue.Substring(1);
         }
         field.Value = idListValue;
     }
     catch (Exception ex)
     {
         if (importOptions.InvalidLinkHandling == InvalidLinkHandling.SetBroken)
         {
             field.Value = importValue;
         }
         else if (importOptions.InvalidLinkHandling == InvalidLinkHandling.SetEmpty)
         {
             field.Value = string.Empty;
         }
     }
 }
Ejemplo n.º 26
0
 public void UpdateField(Sitecore.Data.Fields.Field field, string importValue, IImportOptions importOptions)
 {
     throw new NotImplementedException();
 }
Ejemplo n.º 27
0
 /// <summary>
 /// 过滤
 /// </summary>
 /// <param name="workbook">工作簿</param>
 /// <param name="context">过滤器上下文</param>
 /// <param name="options">导入选项配置</param>
 public abstract IWorkbook Filter(IWorkbook workbook, IFilterContext context, IImportOptions options);
        public void UpdateField(Field field, string importValue, IImportOptions importOptions)
        {
            var separator       = new[] { importOptions.MultipleValuesImportSeparator };
            var selectionSource = field.Item.Database.SelectSingleItem(field.Source);

            if (selectionSource != null)
            {
                var importValues = importValue != null
                    ? importValue.Split(separator, StringSplitOptions.RemoveEmptyEntries)
                    : new string[]
                {
                };
                var idListValue = "";
                foreach (var value in importValues)
                {
                    var isIdImportValue = ID.IsID(value);
                    var selectedItem    = isIdImportValue
                        ? selectionSource.Children[ID.Parse(value)]
                        : selectionSource.Children[value];
                    if (selectedItem != null)
                    {
                        idListValue += "|" + selectedItem.ID;
                    }
                    else
                    {
                        if (importOptions.InvalidLinkHandling == InvalidLinkHandling.CreateItem)
                        {
                            var firstChild = selectionSource.Children.FirstOrDefault();
                            if (firstChild != null)
                            {
                                var template    = field.Item.Database.GetTemplate(firstChild.TemplateID);
                                var itemName    = Utils.GetValidItemName(value);
                                var createdItem = selectionSource.Add(itemName, template);
                                if (createdItem != null)
                                {
                                    idListValue += "|" + createdItem.ID.ToString();
                                }
                            }
                        }
                        else if (importOptions.InvalidLinkHandling == InvalidLinkHandling.SetBroken)
                        {
                            idListValue += "|" + value;
                        }
                    }
                }
                if (idListValue.StartsWith("|"))
                {
                    idListValue = idListValue.Substring(1);
                }
                field.Value = idListValue;
                return;
            }
            if (importOptions.InvalidLinkHandling == InvalidLinkHandling.SetBroken)
            {
                field.Value = importValue;
            }
            else if (importOptions.InvalidLinkHandling == InvalidLinkHandling.SetEmpty)
            {
                field.Value = string.Empty;
            }
        }
Ejemplo n.º 29
0
        private string GetFieldValue(Item selectionSource, string importValue, string[] separator, IImportOptions importOptions, Field field)
        {
            var importValues = importValue != null
                    ? importValue.Split(separator, StringSplitOptions.RemoveEmptyEntries)
                    : new string[]
            {
            };
            StringBuilder idListValue = new StringBuilder();

            foreach (var value in importValues)
            {
                var isIdImportValue = ID.IsID(value);
                var selectedItem    = isIdImportValue
                    ? selectionSource.Children[ID.Parse(value)]
                    : selectionSource.Children[value];
                if (selectedItem != null)
                {
                    idListValue.Append("|" + selectedItem.ID);
                }
                else
                {
                    UpdateFieldValueByInvalidLinkHandling(importOptions, idListValue, selectionSource, field, value);
                }
            }
            var idListValueStr = idListValue.ToString();

            if (idListValueStr.StartsWith("|"))
            {
                idListValueStr = idListValueStr.Substring(1);
            }

            return(idListValueStr);
        }
Ejemplo n.º 30
0
        public void UpdateField(Sitecore.Data.Fields.Field field, string importValue, IImportOptions importOptions)
        {
            var selectionSource = field.Item.Database.SelectSingleItem(field.Source);

            if (selectionSource != null)
            {
                var query = ID.IsID(importValue)
                    ? ".//*[@@id='" + ID.Parse(importValue) + "']"
                    : "." +
                            Sitecore.StringUtil.EnsurePrefix('/',
                                                             importValue.Replace(importOptions.TreePathValuesImportSeparator, "/"));

                var selectedItem = selectionSource.Axes.SelectSingleItem(query);
                if (selectedItem != null)
                {
                    field.Value = selectedItem.ID.ToString();
                    return;
                }
            }
            if (importOptions.InvalidLinkHandling == InvalidLinkHandling.SetBroken)
            {
                field.Value = importValue;
            }
            else if (importOptions.InvalidLinkHandling == InvalidLinkHandling.SetEmpty)
            {
                field.Value = string.Empty;
            }
        }
Ejemplo n.º 31
0
 public void UpdateField(Field field, string importValue, IImportOptions importOptions)
 {
     field.Value = importValue;
 }
        public static void UpdateField(Field field, string importValue, IImportOptions importOptions)
        {
            IFieldUpdater updater = GetFieldUpdater(field);

            updater.UpdateField(field, importValue, importOptions);
        }
Ejemplo n.º 33
0
 /// <summary>
 /// 忽略空行后数据
 /// </summary>
 /// <param name="options">导入选项配置</param>
 /// <param name="isEmptyRow">是否空行</param>
 private bool CheckIgnoreEmptyLine(IImportOptions options, bool isEmptyRow) => options.IgnoreEmptyLineAfterData && isEmptyRow;
 public static void UpdateField(Field field, string importValue, IImportOptions importOptions)
 {
     IFieldUpdater updater = GetFieldUpdater(field);
     updater.UpdateField(field, importValue, importOptions);
 }
        public void UpdateField(Sitecore.Data.Fields.Field field, string importValue, IImportOptions importOptions)
        {
            if (!string.IsNullOrWhiteSpace(importValue))
            {
                if (CachedValues == null)
                {
                    CachedValues = new Dictionary <ID, Dictionary <string, ID> >();
                }
                try
                {
                    Dictionary <string, ID> values;
                    if (!CachedValues.TryGetValue(field.ID, out values))
                    {
                        values = new Dictionary <string, ID>();
                        CachedValues.Add(field.ID, values);
                    }

                    var separator       = new[] { importOptions.MultipleValuesImportSeparator };
                    var selectionSource = field.Item.Database.SelectSingleItem(field.Source);
                    var importValues    = importValue != null
              ? importValue.Split(separator, StringSplitOptions.RemoveEmptyEntries)
              : new string[]
                    {
                    };
                    var idListValue = "";
                    foreach (var value in importValues)
                    {
                        ID target;
                        if (!values.TryGetValue(value, out target))
                        {
                            var query = ID.IsID(value)
                  ? ".//*[@@id='" + ID.Parse(value) + "']"
                  : ".//*[@Value='" + value + "']";
                            var item = selectionSource.Axes.SelectSingleItem(query);
                            if (item != null)
                            {
                                target = item.ID;
                                values.Add(value, target);
                            }
                        }
                        if (!ID.IsNullOrEmpty(target))
                        {
                            idListValue += "|" + target;
                        }
                        else
                        {
                            if (importOptions.InvalidLinkHandling == InvalidLinkHandling.SetBroken)
                            {
                                idListValue += "|" + value;
                            }
                            else if (importOptions.InvalidLinkHandling == InvalidLinkHandling.SetEmpty)
                            {
                                idListValue += "|";
                            }
                        }
                    }
                    if (idListValue.StartsWith("|"))
                    {
                        idListValue = idListValue.Substring(1);
                    }

                    field.Value = idListValue;
                }
                catch (Exception ex)
                {
                    if (importOptions.InvalidLinkHandling == InvalidLinkHandling.SetBroken)
                    {
                        field.Value = importValue;
                    }
                    else if (importOptions.InvalidLinkHandling == InvalidLinkHandling.SetEmpty)
                    {
                        field.Value = string.Empty;
                    }
                }
            }
        }
Ejemplo n.º 36
0
 public void UpdateField(Field field, string importValue, IImportOptions importOptions)
 {
     field.Value = importValue;
 }
Ejemplo n.º 37
0
        /// <summary>
        /// 构建工作表
        /// </summary>
        /// <typeparam name="TTemplate">导入模板类型</typeparam>
        /// <param name="workbook">工作簿</param>
        /// <param name="innerWorkbook">内部工作簿</param>
        /// <param name="options">导入选项配置</param>
        private void BuildSheet <TTemplate>(IWorkbook workbook, NPOI.SS.UserModel.IWorkbook innerWorkbook, IImportOptions options)
        {
            var innerSheet = GetSheet(innerWorkbook, options.SheetIndex);
            //if (innerSheet.GetRow(0).PhysicalNumberOfCells > maxColumnLength)
            //    throw new OfficeException($"导入数据初始化过多的无效列: {maxColumnLength}");
            var sheet = workbook.CreateSheet(innerSheet.SheetName, options.HeaderRowIndex);

            HandleHeader(sheet, innerSheet, options.HeaderRowIndex);
            VerifyHeader <TTemplate>(sheet, options);
            HandleBody <TTemplate>(sheet, innerSheet, options);
        }