Миграция документов с файлами из внешнего источника

Миграция документов с файлами из внешнего источника#

Используется для массового создания документов Wf_Doc по данным внешнего источника и прикрепления файлов к созданным версиям документов. Скрипт проверяет наличие файла на диске, создает файл в файловом хранилище, создает документ и версию документа с файлом.

Место применения: Сервис > Инструменты > Выполнить JEXL-скрипт

Внимание

Требует адаптации под конкретный внешний источник, тип документа, файловое хранилище и путь к файлам. Перед запуском проверьте SQL-запрос, idvObjectType, idvDir, idvExt_Tronix и путь к каталогу файлов.

Тип: JEXL-скрипт

var idvDir = null;
var idvObjectType = 75901L;
var idvFileStorage = Wf_Lib.idFileStorageWf();
var idvExt_Tronix = 52L;
if(idvDir != null) {
	var nvCount = sql(`
		select count(*) as "nCount"
		from tronix.old_norm_doc ond 
		left join wf_doc d on (d.jidext_dz ->> '52') = cast(ond.id as varchar)
		where d.id is null 
		`).asSingle().nCount;
	var nvIter = nvCount / 200 + 1;
	for (i : (1 .. nvCount)){
		sql(`
			select 
				cast(ond.id as varchar) as sid 
				,cast(ond.inv as varchar) as "sNumInventory"
				,to_date(nullif(ond.Srokvved, 'None'), 'YYYY-mm-dd') as "dStartDate"
				,to_date(nullif(ond.Srokprod, 'None'), 'YYYY-mm-dd') as "dProlongPeriod"
				,cast(ond.Obozn as varchar) as "sDesignation"
				,cast(ond.Naimen as varchar) as "sCaption"
				,cast(ond.Kolex as numeric) as "nQtyCopies"
				,cast(ond.Tfile as varchar) as "sFilePath"
			from tronix.old_norm_doc ond 
			left join wf_doc d on (d.jidext_dz ->> '52') = cast(ond.id as varchar)
			where d.id is null 
			order by ond.id
			limit 200
		`).foreach(function(r){
			@begin{
				var filePath = "/mnt/attach/upl_normdoc"+r.sFilePath;
				var file = new ("java.io.File", filePath)
				if (!file.exists()) {
				  raise("Файл " + filePath  + " не существует")
				}
				var is = new("java.io.FileInputStream", file);
				var idFile = null;
				@begin{
				 idFile = Btk_FilePkg.createAndFill(file.getName(), idvFileStorage, null, is)
				}@exception function(e){
				  is.close();
				  throw(e);
				} end;
				 is.close();
				var ropDoc = Wf_DocApi.insert();
				Wf_DocApi.setidParent(ropDoc, idvDir);
				Wf_DocApi.setidObjectType(ropDoc, idvObjectType);
				Wf_DocApi.setIdExtForExtSystem(ropDoc, idvExt_Tronix, r.sid);
				Wf_DocApi.setsNumInventory(ropDoc, r.sNumInventory);
				Wf_DocApi.setdStartDate(ropDoc, r.dStartDate);
				Wf_DocApi.setdProlongPeriod(ropDoc, r.dProlongPeriod);
				Wf_DocApi.setsDesignation(ropDoc, r.sDesignation);
				Wf_DocApi.setsCaption(ropDoc, r.sCaption);
				Wf_DocApi.setnQtyCopies(ropDoc, r.nQtyCopies);
				
				Wf_DocVerApi.createVerWithFile(ropDoc.idJ(), idFile);
				Btk_FileApi.setgidSrc(Btk_FileApi.load(idFile), ropDoc.gid());
			}
			@exception
			function(exp){
				var svErr = "Ошибка загрузки документа " + r.sid + ": " + exp.getCause()
				println(svErr);
				tsql("update tronix.old_norm_doc set serr = '"+svErr+ "' where id = " + r.sid).execute()
			}end;
		}) ;
		commit();
	};
};