Импортировать данные в SiteFinity - PullRequest
1 голос
/ 20 февраля 2020

Очень новый для SiteFinity. Как взять существующую базу данных, скажем, в формате CSV или Excel, и импортировать элементы в siteFinity для взаимодействия на страницах SF? Я хотел бы сделать один набор данных как Продукты, а другой, возможно, просто как пользовательский тип контента. Но как мне импортировать уже существующие данные? Должен ли я использовать. Net или ...?

Ответы [ 2 ]

4 голосов
/ 20 февраля 2020

Я бы создал службу ServiceStack (поставляется с sitefinity) для предоставления этих данных CSV, а затем просто использовал бы их где-нибудь как Json ... если намерение состоит в том, чтобы постоянно обновлять CSV в качестве основного источника данных? Я не уверен в этом случае использования, у вас есть внешняя система, которая создает дамп в этот файл или что-то в этом роде?

Что вы должны сделать , если это не так, использовать ModuleBuilder (/ Sitefinity / Administration / Module-builder), чтобы создать свой тип данных в Sitefinity, а затем запустить скрипт для импорта данных (вы делаете это, МБ предоставляет вам пример кода импорта на основе вашей структуры).

Теперь у вас есть лучший ввод данных, и все это отображается правильно, хотя конечная точка API \ OData используется (не говоря уже о том, что все виджеты генерируются автоматически).

1 голос
/ 26 февраля 2020

Сначала вам нужно создать динамический c модуль, включающий поле данных вашего предмета. Затем вы можете использовать. net для создания API или sthing для импорта CSV.

Пример кода для вас с данными о продуктах с полем No и Title.

//read data from CSV
var attachedFile = System.Web.HttpContext.Current.Request.Files["CsvDoc"];
if (attachedFile == null || attachedFile.ContentLength <= 0) return Request.CreateResponse(HttpStatusCode.NoContent, "No data");
var csvReader = new StreamReader(attachedFile.InputStream);
string inputDataRead;
var values = new List<string>();
while ((inputDataRead = csvReader.ReadLine()) != null)
{
    //values.Add(inputDataRead.Trim().Replace(" ", "").Replace(",", " "));
    values.Add(inputDataRead);
}
values.Remove(values[0]);

//import to CMS                
var dynamicModuleManager = DynamicModuleManager.GetManager();
var contentType = TypeResolutionService.ResolveType("Telerik.Sitefinity.DynamicTypes.Model.Product.Product");

foreach (var value in values)
{
      var eachValue = value.Split(',');
      if (!string.IsNullOrEmpty(eachValue[0]))
      {
           using (new ElevatedModeRegion(dynamicModuleManager))
           {
                 var newcontent = dynamicModuleManager.CreateDataItem(contentType);
                 newcontent.SetValue("No", eachValue[0] != "" ? eachValue[0] : string.Empty);
                 newcontent.SetValue("Title", eachValue[1] != "" ? eachValue[1] : string.Empty);
                 newcontent.UrlName = Regex.Replace(eachValue[1].ToLower(), @"[^\w\-\!\$\'\(\)\=\@\d_]+", "-");;
                 newcontent.Author = "ImportCSV";
                 newcontent.SetWorkflowStatus(dynamicModuleManager.Provider.ApplicationName, "Published");
                 dynamicModuleManager.SaveChanges();                                
            }
      }
}

CSV Файл, подобный следующему:

Нет, название

1, Product1

2, Product2

...