Миграция документов с файлами из внешнего источника#
Используется для массового создания документов 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();
};
};