Перейти к содержанию

Импорт данных из локального CSV-файла

Как один из вариантов наполнения справочников или загрузки данных в продукт нередко используется загрузка и парсинг из CSV-файла. Чтобы осуществить такую загрузку, нужен грамотно составленный CSV-файл, а также технический процесс со скриптовой задачей. 

В данном примере мы рассмотрим загрузку клиентов и их договоров в определенных статусах.

1. В системе уже есть:

  • Шаблон записи «Статусы договора». Созданы три записи: В обработке, В работе, Завершён.

'Атрибуты

Атрибуты Шаблона записи "Статусы договора"

  • Шаблон записи «Договоры»

'Атрибуты

Атрибуты Шаблона записи "Договоры"

  • Шаблон записи «Клиенты»

'Атрибуты

Атрибуты Шаблона записи "Клиенты"

2. Подготовка CSV-файла. В примере файла во вложении данные по каждому клиенту прописаны в отдельных строках, параметры для каждого перечислены через точку с запятой по форме:

Наименование клиента;Контактное лицо;Телефон;Email;Наименование договора;Статус;Дата;Сумма договора

Примечание : во избежание проблем с кодировкой (см. пример ниже) устанавливайте для CSV-файла кодировку UTF-8.

Пример импорта CSV файла с неправильно указанной кодировкой

Пример импорта 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-файла создались следующие записи в системе:

Импортированные записи клиентов и договоров

Импортированные записи клиентов и договоров

  • Вложения
  • File_of_contracts.csv (536 Bytes) 251