Импорт данных в формате файлов txt, csv через таблицу

Вы можете настроить в компоненте Таблица массовое занесение данных в таблицу через файлы CSV и TXT. 

Файл содержит некоторые данные построчно с некоторым разделителем колонок (в примере - это точка с запятой). 

Для одной таблицы может быть размещено несколько вариантов импорта (отдельные кнопки со своими настройками импорта).

Как настроить импорт в компоненте Таблица: 

1. Прописываем в GetItems SELECT 3 параметр importOptions в формате JSON:

-- SELECT 3
select '[
{"enable": true,  
         "code": "importKeys",
    	"desc": "Загрузите данные в txt или csv формате с разделителем в виде точки с запятой", 
		"resourceManager": "importTable1" , 
        "btnText": "Импортировать данные в таблицу", 
		"icon": "fa fa-bars", 
        "dialogTitle": "Массовая загрузка данных через таблицу", "dialogBtnText": "Выполнить импорт"  }

]' importOptions
	

Параметры JSON - массив объектов со следующими полями: 

2. Создаем менеджер ресурсов, указанный в resourceCode

К примеру можно выставить такие параметры: 

3. Реализуем процедуру updateField, у которой на вход приходят следующие параметры: 

Процедура возвращает Result, Message - т.е. результат операции загрузки данной строки.

Таким образом делается загрузка файла, содержимое разбирается на строки (через \n) и для каждой строки запускается процедура updateField.

Вид процедуры: 

CREATE PROCEDURE [dbo].[crud_testx1213312_updateField]
	@itemID nvarchar(128),
	@field nvarchar(64),
	@value nvarchar(max),
	@username nvarchar(64)
AS
BEGIN

if(@field = 'import-importKeys') begin
	-- itemID - это itemID таблицы
    -- value это rows разделенный delimiter 
    declare @row nvarchar(max) = @value
    declare @v1 nvarchar(max) = isnull((select value from dbo.split(@row, ';') where [num] = 1), '')
    declare @v2 nvarchar(max) = isnull((select value from dbo.split(@row, ';') where [num] = 2), '')
    declare @v3 nvarchar(max) = isnull((select value from dbo.split(@row, ';') where [num] = 3), '')
    declare @v4 nvarchar(max) = isnull((select value from dbo.split(@row, ';') where [num] = 4), '')
    
    print @row
    print @v1
    print @v2
    print @v3
    print @v4
    select 0 Result, '11' Msg
    
    
end else if(@field = 'YYY') begin 
	update as_trace set code = @value where id = @itemID	
end else begin 
	select 'Невалидный код свойства' Msg, 0 Result
	return 
end  
select '' Msg, 1 Result	

END

--ru 29.04.2022 9:41:14
--ru 29.04.2022 9:44:44
--ru 29.04.2022 10:48:07

В итоге выполнения процедуры получаем окно вида, где зеленым выделено что загрузилось корректно (result=1 в updateField), а где были ошибки (result=0 в updateField).

Указывается исходная строка и ее результат (msg).

Примечание: Строки  Всего, Не прошла загрузка, Корректно загружено можно менять через as.resources - ключи crud.importTotal, crud.importFail, crud.importCorrect.

Таким образом для продвинутых пользователей, которые в состоянии подготовить файл с корректными данными можно сделать удобный механизм массового занесения данных. 

Страница-источник на сайте falconspace.ru