Перейти к основному содержанию
`Ctrl`+`K`

# Миграция 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();