Как один из вариантов наполнения справочников или загрузки данных в продукт нередко используется загрузка и парсинг из CSV-файла. Чтобы осуществить такую загрузку, нужен грамотно составленный CSV-файл, а также технический процесс со скриптовой задачей.
В данном примере мы рассмотрим загрузку клиентов и их договоров в определенных статусах.
1. В системе уже есть:
Атрибуты Шаблона записи "Статусы договора"
Атрибуты Шаблона записи "Договоры"
Атрибуты Шаблона записи "Клиенты"
2. Подготовка CSV-файла. В примере файла во вложении данные по каждому клиенту прописаны в отдельных строках, параметры для каждого перечислены через точку с запятой по форме:
Наименование клиента;Контактное лицо;Телефон;Email;Наименование договора;Статус;Дата;Сумма договора
Пример импорта CSV файла с неправильно указанной кодировкой
3. Создайте технический процесс по примеру:
Схема технического процесса
4. В «Задачу на выполнение сценария» добавьте C#.
using System; using System.Collections.Generic; using System.Linq; using Comindware.Data.Entity; using System.IO; using System.Globalization; using System.Text;
class Script { public class client // модель данных CSV-файла { public string title { get; set; } public string contact { get; set; } public string phone { get; set; } public string email { get; set; } public string contract { get; set; } public string status { get; set; } public DateTime date { get; set; } public float total { get; set; } }
public static void Main(Comindware.Process.Api.Data.ScriptContext context, Comindware.Entities entities) { string path = @"C:reportFile_of_contracts.csv"; // путь к CSV-файлу string text; using (StreamReader sr = new System.IO.StreamReader(path)) { text = sr.ReadToEnd(); } List <client> clientFile = new List <client>();
foreach (var line in text.Split(new [] {'n'}, StringSplitOptions.RemoveEmptyEntries)) { var column = line.Split(';'); DateTime date_; DateTime.TryParse(column[6].Trim(), out date_); date_ = TimeZoneInfo.ConvertTime(date_, TimeZoneInfo.Utc, TimeZoneInfo.Local);
float total_ = 0; Single.TryParse(column[7].Trim(), out total_);
clientFile.Add(new client() { title = column[0].Trim(), contact = column[1].Trim(), phone = column[2].Trim(), email = column[3].Trim(), contract= column[4].Trim(), status = column[5].Trim(), date = date_, total = total_ }); }
foreach (var line in clientFile) { string status_string = line.status; switch (status_string) // определяем ID статуса { case "В обработке": status_string = "13477"; break; case "В работе": status_string = "13476"; break; case "Завершён": status_string = "13475"; break; default: status_string = ""; break; }
// создание записи "Договор" var contractData = new Dictionary <string, object>() { {"Title", line.contract}, // системные имена атрибутов в ШЗ "Договоры" {"Total", line.total.ToString()}, {"Date", line.date}, {"Status", status_string} }; string contract = Api.TeamNetwork.ObjectService.CreateWithAlias("Contracts", contractData); // Системное имя ШЗ "Договоры"
// создание записи "Клиент" var data = new Dictionary<string, object>() { {"Title", line.title}, // системные имена атрибутов в ШЗ "Клиенты" {"Contact", line.contact}, {"Phone", line.phone}, {"Email", line.email}, {"Contract", contract} };
Api.TeamNetwork.ObjectService.CreateWithAlias("Clients", data); // Системное имя ШЗ "Клиенты" } } } |
5. Опубликуйте процесс и протестируйте.
В нашем примере из CSV-файла создались следующие записи в системе:
Импортированные записи клиентов и договоров
Номер Статьи: 1606
Размещено: Wed, Dec 2, 2020
Последнее обновление: Tue, Dec 7, 2021
Online URL: https://kb.comindware.ru/article/import-dannyh-iz-lokalnogo-csv-fajla-1606.html