Миграция Global Subject

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