Коллеги всем доброго времени суток!
При обновлении пакета из SVN возник ряд ошибок - http://prntscr.com/lo4cyk
Хотя подвязка данных к пакету была выполнена без ошибок - http://prntscr.com/lo4djshttp://prntscr.com/lo4e0u и т.д.
Как бороться с такими ошибками, вроде все выполнил правильно. 

Благодарю.

Нравится

2 комментария
Лучший ответ

Черным же по белому написано Название таблицы и Название Констрента. Смотрим Констрент и поля что входят в данный Констрейнт. Делаем выборки по 2 таблицам и ищем недостающие ID, что есть в Пакете но нет в этих 2 таблицах в Полях что Описаны в Констрейнте. Заливаем новые ID через данные и выполняем новое обновление и все взлетит.

Добрый день, скорее всего это связно с типом установки данных и списком обновляемых полей, попробуйте данные из связанных сущностей просмотреть

Черным же по белому написано Название таблицы и Название Констрента. Смотрим Констрент и поля что входят в данный Констрейнт. Делаем выборки по 2 таблицам и ищем недостающие ID, что есть в Пакете но нет в этих 2 таблицах в Полях что Описаны в Констрейнте. Заливаем новые ID через данные и выполняем новое обновление и все взлетит.

Показать все комментарии

Добрый день.
Создана Орг. структура. В качестве родителя указан "Все сотрудники компании".
Фиксирую в данные пакета: Объект SysAdminUnit, Тип установки - Установка , в фильтрах  указываю Название созданных админ.единиц. Данные сохраняются.
При установке пакета на другом экземпляре bpmonline возникает ошибка на схеме данных SysAdminUnit:

Транзакция завершилась в триггере. Выполнение пакета прервано.
Невозможно добавить корневую единицу администрирования. Задан неверный тип единицы администрирования

 

Нравится

10 комментариев

Игорь, здравствуйте!

Данная ошибка значит, что Вы пытаетесь добавить новую корневую группу, но это не разрешено (только «Все сотрудники компании» и «Все пользователи портала»). Скорее всего, указан неверный ParentId (пустой), но, чтобы сказать точно, нужно смотреть этот файл привязки (или весь пакет) в виде zip или в репозитории.

 За эту логику отвечает триггер [TRSysAdminUnitRoot] таблицы SysAdminUnit.

Maksym Naumovets,

Я добавил две подчинённые админ. единицы в группу "Все сотрудники компании" https://yadi.sk/i/GIvq8kYZ3T5hqN

Коновалов Игорь, добрый вечер.

Не могли бы Вы прислать скриншоты привязок и ParentId ?

 Логика переноса работает таким образом, что сначала происходит создание записей, но parentid = NULL, а потом происходит заполнение этих справочников (parentId) значениями.

Решение:

- убедиться, что переносятся только две роли (без корневых!)

- отключить триггер TRSysAdminUnitRoot на  таблице SysAdminUnit.

- выполнить установку

- убедиться, что эти записи в SysAdminUnit имеют заполненную колонку parentid

- включить триггер TRSysAdminUnitRoot

Сергей Кy6риш,

Данный вариант не подходит , т.к. мое приложение готовится к публикации на marketplace и оно может быть развернуто, например, в облаке.

Есть еще варианты?

В таком случае можно попробовать не привязывать данные, а реализовать вставку нужных значений в SysAdminUnit при помощи SQL-запроса. А уже запрос привязать к пакету.

Коновалов Игорь, как-то решили проблему? У меня сейчас такая же ошибка.

На версии 7.12 формируется такая же ошибка. При этом в структуре запроса установки отсутсвует колонка "ParentRoleId", хотя в конфигурации в схеме установки данных данная колонка есть и она заполнена.

Возможно ли, что это связано с тем, что организационные роли созданы с типом "Организация"?

Ошибка установки данных AddSysAdminUnitAsRole в пакете TsCIBLoanApplication. UId f0b6ed44-e5a0-4a37-9f59-1bc7968fedb9: ORA-20000: Невозможно добавить корневую единицу администрирования. Корневая единица администрирования уже существует
[17:42:15][Step 8/11] ORA-06512: at "BPMONLINE.TRSysAdminUnitRoot", line 18
[17:42:15][Step 8/11] ORA-04088: error during execution of trigger 'BPMONLINE.TRSysAdminUnitRoot'
[17:42:15][Step 8/11] 
[17:42:15][Step 8/11] INSERT INTO "BPMONLINE"."SysAdminUnit"("Id", "CreatedOn", "CreatedById", "ModifiedOn", "ModifiedById", "Name", "Description", "SysAdminUnitTypeValue", "IsDirectoryEntry", "TimeZoneId", "UserPassword", "Active", "SynchronizeWithLDAP", "LDAPEntry", "LDAPEntryId", "LDAPEntryDN", "LoggedIn", "LoginAttemptCount", "SourceControlLogin", "SourceControlPassword", "PasswordExpireDate", "ConnectionType", "UnblockTime", "ForceChangePassword", "ScannerName", "WebCamUrl", "SessionTimeout")
[17:42:15][Step 8/11] 	VALUES('{3ACFA10A-8964-45DF-8840-42F4FD27B7A6}', TO_TIMESTAMP('2019-05-27 17:41:33.798', 'YYYY-MM-DD HH24:MI:SS.FF3'), '{410006E1-CA4E-4502-A9EC-E54D922D2C00}', TO_TIMESTAMP('2019-05-27 17:41:33.798', 'YYYY-MM-DD HH24:MI:SS.FF3'), '{410006E1-CA4E-4502-A9EC-E54D922D2C00}', 'Участник комитета', '', 0, 0, 'UTC', '', 1, 0, '', '', '', 0, 0, '', NULL, NULL, 0, NULL, 0, '', '', 0)

 

Судя по тексту, вставка записи с указанными значениями в таблицу SysAdminUnit конфликтует с триггером на ней. Откройте триггер TRSysAdminUnitRoot и посмотрите его 18 строку.

Показать все комментарии

Здравствуйте.
Добавили новые поля BusinessSegment типа Справочник и BusinessSegmentString типа Строка в SysAdminUnit, VwSysAdminUnit, модифицировали скрипт для последнего, вывели новое поле в интерфейс на страницу SysAdminUnitPageV2. Система дает выбирать значение из справочника или вносить значения в текстовое кастом поле. Нажимаем кнопку сохранить, система говорит, что все ОК, только актуализируйте роли Но по факту значения внесенные в кастомные поля не сохраняются.

В клиентском модуле объект changedColumns содержит наше поле и внесенное значение в виде, который представлен на скриншоте. Далее вызывается веб-сервис AdministrationService. В нем меня смутило вот это место

                ///
                /// Возвращает значение преобразованное в соотвествтии с типом колонки
                ///
                /// Колонка схемы значение для которой необходимо получить.
                /// Преобразуемое значение.
                /// Преобразованное значение.
                private static object GetColumnValue(EntitySchemaColumn column, object value) {
                        if (column.DataValueType is DateTimeDataValueType) {
                                return DataTypeUtilities.ValueAsTypeDateTime>(value);
                        }
                        if (column.DataValueType is LookupDataValueType){
                                return String.IsNullOrEmpty((string)value) ? null : value;
                        }
                        return value;
                }

Думал может проблема с несовпадением по типу или формату (string с Guid), поэтому и добавил текстовое поле еще, но нет - текстовое поле точно также не сохраняет.
Подскажите в чем может быть причина? Можно ли вообще добавлять в SysAdminUnit пользовательские поля?

Нравится

9 комментариев

Здравствуйте, Андрей
Недавно этот вопрос был подробно рассмотрен в этой теме
http://www.community.terrasoft.ru/forum/topic/21828

Здравствуйте, Андрей
Недавно этот вопрос был подробно рассмотрен в этой теме
http://www.community.terrasoft.ru/forum/topic/21828

Здравствуйте, Роман.
Спасибо за ответ. Я ознакомился с темой, которую вы предложили и не смог найти ответа на свой вопрос. Из темы также неясно решил ли автор все свои проблемы. Но те проблемы, которые он изначально поднял, я прошел. У меня поля добавлены в объекты SysAdminUnit и VwSysAdminUnt. Для View выполнен скрипт

USE [BPMonline770]
GO
 
/****** Object:  View [dbo].[VwSysAdminUnit]    Script Date: 11.10.2016 21:01:55 ******/
SET ANSI_NULLS ON
GO
 
SET QUOTED_IDENTIFIER ON
GO
 
 
 
ALTER VIEW [dbo].[VwSysAdminUnit]
AS
SELECT [SysAdminUnit].[Id]
	,[SysAdminUnit].[CreatedOn]
	,[SysAdminUnit].[CreatedById]
	,[SysAdminUnit].[ModifiedOn]
	,[SysAdminUnit].[ModifiedById]
	,[SysAdminUnit].[Name]
	,[SysAdminUnit].[Description]
	,[SysAdminUnit].[ParentRoleId]
	,[SysAdminUnit].[ContactId]
	,[SysAdminUnit].[IsDirectoryEntry]
	,[TimeZone].[Id] AS [TimeZoneId]
	,[SysAdminUnit].[UserPassword]
	,[SysAdminUnitType].[Id] AS [SysAdminUnitTypeId]
	,[SysAdminUnit].[AccountId]
	,[SysAdminUnit].[Active]
	,[SysAdminUnit].[LoggedIn]
	,[SysAdminUnit].[SynchronizeWithLDAP]
	,[LDAPElement].[Name] as [LDAPEntry]
	,[LDAPElement].[LDAPEntryId]
	,[LDAPElement].[LDAPEntryDN]
	,[SysAdminUnit].[SysCultureId]
	,[SysAdminUnit].[ProcessListeners]
	,[SysAdminUnit].[PasswordExpireDate]
	,[SysAdminUnit].[HomePageId]
	,[SysAdminUnit].[ConnectionType]
	,[SysAdminUnit].[ForceChangePassword]
	,[SysAdminUnit].[LDAPElementId]
	,[SysAdminUnit].[BusinessSegmentId]
	,[SysAdminUnit].[BusinessSegmentString]
FROM [SysAdminUnit]
INNER JOIN [SysAdminUnitType] ON [SysAdminUnitType].[Value] = [SysAdminUnit].[SysAdminUnitTypeValue]
LEFT JOIN [TimeZone] ON [TimeZone].[Code] = [SysAdminUnit].[TimeZoneId]
LEFT JOIN [LDAPElement] ON [LDAPElement].[Id] = [SysAdminUnit].[LDAPElementId]
 
GO

На уровне БД я вижу что нужные колонки (с требуемым именем и типом) появились и в таблице, и в представлении. В интерфейсе я вижу эти поля, вношу в них требуемую информацию. Жму сохранить, система говорит, что все ОК. Но когда я возвращаюсь к измененной мной записи, обнаруживаю, что поля пусты. В таблице SysAdminUnit в соответствующих полях также пусто. Механизм сохранения записей из раздела Орг структура использует конфигурационный веб-сервис AdministrationService, который задебажить у меня нет возможности. Единственно, что вижу, что в конфигурационный объект, передаваемый этому сервису, попадают изменения внесенные мной в эти кастомные поля на странице. Я, конечно, понимаю, что можно придумать обходной путь с updatequery прямо из клиентского модуля, но как-то это будет выглядеть как костыль.

Что касается вопроса наследования, поднятого Вами в предложенной теме, то пока не совсем понял что именно мне стоит проверить. Но вот, что могу сказать.
Объект VwSysAdminUnit в моем пакете замещает схему Пользователи/роли (представление) ( Base ). По этому заголовку в системе имеется ряд объектов, но все они находятся в разных пакетах (как я понял проблема именно, когда в одном пакете есть схемы с одинаковым заголовком??) То же относится и к SysAdminUNit (замещает Объект администрирования ( Base )) с SysAdminUnitPageV2 (замещает Схема страницы редактирования раздела "Организационные роли" ( UIv2 )) К сообщению прикрепляю скриншоты с найденными по заголовкам схемами, а также скриншот с прописанными зависимостями моего пакета.

Здравствуйте, Роман.
Спасибо за ответ. Я ознакомился с темой, которую вы предложили и не смог найти ответа на свой вопрос. Из темы также неясно решил ли автор все свои проблемы. Но те проблемы, которые он изначально поднял, я прошел. У меня поля добавлены в объекты SysAdminUnit и VwSysAdminUnt. Для View выполнен скрипт

USE [BPMonline770]
GO
 
/****** Object:  View [dbo].[VwSysAdminUnit]    Script Date: 11.10.2016 21:01:55 ******/
SET ANSI_NULLS ON
GO
 
SET QUOTED_IDENTIFIER ON
GO
 
 
 
ALTER VIEW [dbo].[VwSysAdminUnit]
AS
SELECT [SysAdminUnit].[Id]
	,[SysAdminUnit].[CreatedOn]
	,[SysAdminUnit].[CreatedById]
	,[SysAdminUnit].[ModifiedOn]
	,[SysAdminUnit].[ModifiedById]
	,[SysAdminUnit].[Name]
	,[SysAdminUnit].[Description]
	,[SysAdminUnit].[ParentRoleId]
	,[SysAdminUnit].[ContactId]
	,[SysAdminUnit].[IsDirectoryEntry]
	,[TimeZone].[Id] AS [TimeZoneId]
	,[SysAdminUnit].[UserPassword]
	,[SysAdminUnitType].[Id] AS [SysAdminUnitTypeId]
	,[SysAdminUnit].[AccountId]
	,[SysAdminUnit].[Active]
	,[SysAdminUnit].[LoggedIn]
	,[SysAdminUnit].[SynchronizeWithLDAP]
	,[LDAPElement].[Name] as [LDAPEntry]
	,[LDAPElement].[LDAPEntryId]
	,[LDAPElement].[LDAPEntryDN]
	,[SysAdminUnit].[SysCultureId]
	,[SysAdminUnit].[ProcessListeners]
	,[SysAdminUnit].[PasswordExpireDate]
	,[SysAdminUnit].[HomePageId]
	,[SysAdminUnit].[ConnectionType]
	,[SysAdminUnit].[ForceChangePassword]
	,[SysAdminUnit].[LDAPElementId]
	,[SysAdminUnit].[BusinessSegmentId]
	,[SysAdminUnit].[BusinessSegmentString]
FROM [SysAdminUnit]
INNER JOIN [SysAdminUnitType] ON [SysAdminUnitType].[Value] = [SysAdminUnit].[SysAdminUnitTypeValue]
LEFT JOIN [TimeZone] ON [TimeZone].[Code] = [SysAdminUnit].[TimeZoneId]
LEFT JOIN [LDAPElement] ON [LDAPElement].[Id] = [SysAdminUnit].[LDAPElementId]
 
GO

На уровне БД я вижу что нужные колонки (с требуемым именем и типом) появились и в таблице, и в представлении. В интерфейсе я вижу эти поля, вношу в них требуемую информацию. Жму сохранить, система говорит, что все ОК. Но когда я возвращаюсь к измененной мной записи, обнаруживаю, что поля пусты. В таблице SysAdminUnit в соответствующих полях также пусто. Механизм сохранения записей из раздела Орг структура использует конфигурационный веб-сервис AdministrationService, который задебажить у меня нет возможности. Единственно, что вижу, что в конфигурационный объект, передаваемый этому сервису, попадают изменения внесенные мной в эти кастомные поля на странице. Я, конечно, понимаю, что можно придумать обходной путь с updatequery прямо из клиентского модуля, но как-то это будет выглядеть как костыль.

Что касается вопроса наследования, поднятого Вами в предложенной теме, то пока не совсем понял что именно мне стоит проверить. Но вот, что могу сказать.
Объект VwSysAdminUnit в моем пакете замещает схему Пользователи/роли (представление) ( Base ). По этому заголовку в системе имеется ряд объектов, но все они находятся в разных пакетах (как я понял проблема именно, когда в одном пакете есть схемы с одинаковым заголовком??) То же относится и к SysAdminUNit (замещает Объект администрирования ( Base )) с SysAdminUnitPageV2 (замещает Схема страницы редактирования раздела "Организационные роли" ( UIv2 )) К сообщению прикрепляю скриншоты с найденными по заголовкам схемами, а также скриншот с прописанными зависимостями моего пакета.

"Орленко Андрей Николаевич" написал:AdministrationService

Вы можете почитать исходные коды AdministrationService, т.к. это схемы на уровне конфигурации. Более того, в случае необходимости Вы можете разблокировать и переписать под свои нужны.

Кстати, костыль с updatequery тоже не заработал. Возвращало ошибку, что пользователь не имеет права на объект SysAdminUnit. Пользователь был в роли Системные администраторы. Администрируемость объекта SysAdminUnit в системе выключена и на уровне объекта и в разделе администрирование

Коллеги, кому-нибудь удалось справиться с данной проблемой?

Добрый вечер, Сергей.

Предыдущие комментаторы не учли одну важную вещь - триггеры. Для корректной работы замещенной SysAdminUnitPageV2 нужно:

1) Заместить объект SysAdminUnit и добавить нужные поля.
2) Изменить в бд VwSysAdminUnit
3) Заместить объект VwSysAdminUnit и добавить поля (типы и имена должны совпадать).
4) Заместить SysAdminUnitPageV2
5) Изменить на уровне бд триггеры TRVwSysAdminUnitIU (апдейт VwSysAdminUnit) и VwSysAdminUnitI (инсерт).

Да, Илья, действительно изменение указанных тригеров помогло решить проблему. Жаль, что этой информации еще не было в октябре:smile:

Показать все комментарии