Код:
// Адрес Apache-сервера, где лежат файлы для загрузки
const url_address = 'http://files-ubuntu.vps.elewise.com:8080'
// Размер постраничной выборки элементов приложения
const page_size = 90
async function initData(): Promise<void> {
if (Context.data.contracts_quantity == 0) {
Context.data.contracts_quantity = await Context.fields.contract.app.search().where(f => f.__deletedAt.eq(null)).size(page_size).count()
}
Context.data.contract = await Context.fields.contract.app.search().where(f => f.__deletedAt.eq(null)).from(Context.data.contracts_pages_counter!).size(page_size).all()
Context.data.counter = Context.data.contract.length
Context.data.contracts_pages_counter! += page_size
}
async function downloadContracts(): Promise<void> {
const i = Context.data.counter! - 1
const contract = await Context.data.contract![i].fetch()
if (contract.data.isHasHistoryFiles || contract.data.historyId) {
const file_dir = contract!.data.historyId!
// Обращаемся к файлу, который содержит имена файлов в каталоге
const req = await fetch(encodeURI(`${url_address}/contracts/ДОГ${file_dir}/desc.txt`))
if (req.ok) {
// Формируем массив из имён файлов
const str_array = (await req.text()).split('\n')
const file_array: Promise<FileItem>[] = []
for (let item of str_array) {
if (item && item !== 'desc.txt') {
// Формируем массив промисов
file_array.push(contract.fields.doc_files.createFromLink(item, encodeURI(`${url_address}/contracts/ДОГ${file_dir}/${item}`)))
}
}
contract.data.doc_files = await Promise.all(file_array)
await contract.save()
}
else {
Context.data.debug += `${req.status}: ${req.statusText}:
${contract.data.__name} ${contract.data.historyId}
${req.url} `
}
}
Context.data.counter!--
updateData(contract.data.__id)
}
async function updateData(item: string): Promise<void> {
// Матчим данные из справочников
const document = await Context.fields.contract.app.search().where(f => f.__id.eq(item)).first()
if (document) {
document.data.ourCompany2 = await document.fields.ourCompany2.app.search().where(f => f.id.eq(document.data.migration_ourCompany!)).first()
document.data.contractType = await document.fields.contractType.app.search().where(f => f.code.eq(document.data.migration_contractType!)).first()
document.data.subdivision = await document.fields.subdivision.app.search().where(f => f.id.eq(document.data.migration_subdivision!)).first()
document.data.budgetLine = await document.fields.budgetLine.app.search().where(f => f.__name.like(document.data.migration_budgetLine!)).first()
document.data.status = await document.fields.status.app.search().where(f => f.__name.like(document.data.migration_status!)).first()
document.data.historicalDocument = true;
await document.save()
const history_group = await System.userGroups.search().where((f, g) => g.and(f.__name.like('АРХД'))).first()
await document.setPermissions(new Permissions([new PermissionValue(history_group!, [PermissionType.READ])]))
await document.setStatus(document.fields.__status.variants.registered)
}
}