Миграция Global Subject#
Локальный скрипт модуля BPM. Используется для служебной настройки, миграции, очистки или восстановления данных, связанных с объектами модуля.
Место применения: Сервис > Инструменты > Выполнить JEXL-скрипт
Внимание
Скрипт привязан к объектам конкретного модуля и требует проверки на целевой базе. Перед запуском проверьте идентификаторы, SQL-запросы, API-классы и условия обработки.
Тип: JEXL-скрипт
//регистрация глобальных субъектов по субъектам, на которые есть ссылки
sql(`
select
psps.idPsSubject as "idPsSubject"
,pss.sSystemName as "sSystemName"
,max(pss.scaption) as "sCaption"
from Bpm_PrSubjectPersSetting psps
left join Bpm_PSSubject pss on psps.idpssubject = pss.id
where psps.idpssubject is not null
and psps.idsubject is null
group by psps.idpssubject,pss.ssystemname
`).foreach(function(r){
Bpm_SubjectApi.register(r.sSystemName, r.sCaption, null);
});
flush();
//проставляем ссылки на глобальные субъекты в субъекты схем
var svSelect = sql(`
select
ps.id as "id"
,ps.ssystemname
,s.id as "idSubj"
from bpm_pssubject ps
join bpm_subject s using (ssystemname)
`);
var ropList = svSelect.batchObjLoad(Bpm_PSSubjectApi, "id");
svSelect.foreach(function(r){
Bpm_PSSubjectApi.setidSubject(Bpm_PSSubjectApi.load(r.id), r.idSubj);
});
//проставляем ссылки на глобальные субъекты в настройки пользователей
var ropavPersSettings = sql(`
select
psps.id
from Bpm_PrSubjectPersSetting psps
where psps.idpssubject is not null
and psps.idsubject is null
`).batchObjLoad(Bpm_PrSubjectPersSettingApi, "id");
for (rop : ropavPersSettings) {
var idvPsSubj = rop.copyAro().idPSSubject();
var idvGSubj = Bpm_PSSubjectApi.load(idvPsSubj).copyAro().idSubject();
if (idvGSubj != null) {
Bpm_PrSubjectPersSettingApi.setidSubject(rop, idvGSubj);
};
};
commit();