Вопрос

Коллеги всем доброго времени суток!
При обновлении пакета из 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:

Войдите или зарегистрируйтесь, чтобы комментировать