Возникла необходимость перенести настроенные права доступа на другую среду.

 

Удалось успешно привязать к данных

  • Доступ к объектам - SysEntitySchemaOperationRight
  • Операции - SysAdminOperation
  • Права на операции - SysAdminOperationGrantee

 

Однако

  • настройку прав на колонки SysEntitySchemaColumnRight
  • и настройку прав по умолчанию SysEntitySchemaRecordDefRight

добавить в пакет не получается - просто не даёт выбрать такие объекты.

Как лучше поступить для решения?

Нравится

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

Добрый вечер.

Подобные темы уже обсуждались на Community. То, что не привязывается к данным, переносят SQL скриптами, которые также привязываются к пакету.

Алла Савельева,

Есть даже пример таких скриптов для переноса этих настроек?

 

Или, может, Terrasoft сделает возможным перенос стандартными средствами? 

Владимир, пока этой функциональности нет в базовой версии, рекомендуем выполнять перенос скриптами. 

 

Реализовать перенос настроек организационной структуры и прав доступа из одного стенда на другой можно с помощью SQL-скриптов. Для этого на эталонной среде необходимо сформировать insert-запросы на основании записей со следующих таблиц:

  • SysAdminUnit (Объект администрирования: пользователи и роли)
  • SysUserInRole (Непосредственные вхождения пользователей в роли)
  • SysFuncRoleInOrgRole (Вхождение функциональной роли в организационную)
  • SysAdminOperation (Системные операции, если необходимо)
  • SysAdminOperationGrantee (Доступ к системным операциям, если необходимо)
  • SysEntitySchemaOperationRight (Доступ к объектам)
  • SysEntitySchemaRecordDefRight (Доступ к записям по умолчанию)
  • SysEntitySchemaColumnRight (Доступ к колонкам объекта)
  • SysAdminUnitGrantedRight (Делегирование)

Для формирования запросов можно воспользоваться Microsoft SQL Server Database Publishing Wizard и подобными инструментами. Полученный SQL-скрипт необходимо прикрепить к пакету (вкладка - «SQL-сценарии»).

Если перенос происходит на продуктивную среду, то мы рекомендуем предварительно сделать резервное копирование данных, и, в первую очередь, заливать пакет на тестовую среду, чтобы проверить результат выполнения скрипта. Эти работы необходимо выполнять не в бизнес-время.

Ещё очень интересное поведение заметили.

Записи SysEntitySchemaColumnRight были перенесены полностью идентично на рабочую среду (проверили после переноса). А через некоторое время на рабочей среде оказались те же записи, но с совершенно другими Id. 

Какие процессы могут полностью сменить Id в этой таблице? И на что это может повлиять?

 

Может, компилировали объект? Актуализацию прав запускали?

Зверев Александр пишет:

Может, компилировали объект? Актуализацию прав запускали?

Да, компиляция же происходит после каждой установки новых пакетов (с того же Marketplace), насколько я понимаю.

И актуализация прав запускается после изменений в пользователях/ролях.

 

1. Но как это влияет на настройки доступа по колонкам?

2. И как переносить последующие изменения в настройках доступа по колонкам, если по Id уже не понять, это те же настройки или уже другие?

Владимир, логика перераздачи прав не предусматривает сохранения Id записей. Вы можете предусмотреть в своих скриптах привязку не к Id, а к SysAdminUnitId, SubjectColumnUId и SubjectSchemaUId, они должны быть стабильными.

Говорят, в будущих версиях планируется новый механизм прав, там будет возможна привязка их к пакету.
 

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

Коллеги, очень усложняет жизнь новая логика привязки данных к пакету.
1. По умолчанию к схеме данных добавляются только ID и поле для отображения.
т.о. при переносе на prod можно получить очень не приятный сюрприз.

На мой взгляд правильнее в список полей подгружать все поля выбранного объекта.
2. В схемах данных отсутствует уже до боли привычный расширенный фильтр, который позволяет привязать результат выборки, а не конкретные записи, т.к. их бывает очень много.
3. Тип установки Первичная установка по идее полностью перекрывается типом Установка (это из старого)

 

1 комментарий

Игорь, получена следующая информация от разработчиков по Вашим тезисам:

  1. Зафиксировано пожелание, будут отслеживаться обращения на эту тему;
  2. Старую логику с фильтрами возвращать не планируется;
  3. Типы установки полностью повторили по аналогии со старой версией.
Показать все комментарии

Есть необходимость перенести данные справочника Tax , включая id,на препрод
Я спросил как это правильно сделать, и мне посоветовали создать замещающий объект, но при попытке публикации пишет , что Элемент с именем "Tax" не найден
Для исправления ошибки, пробовал советы из этой темы  https://community.terrasoft.ru/questions/oshibka-sokhraneniya-element-n…
А именно генерацию исходных кодов, просто вылетает страница с ошибкой
А при компиляции всего, вылетает Элемент с именем "Tax" не найден

Нравится

1 комментарий

Не совсем понял, что Вы собирались сделать: перенести записи в справочнике или его схему?

Если первое, то нужно, чтобы на базе, куда переностите, уже была такая схема и создавшаяся по ней после публикации таблица в БД. Или же схема создавалась или дополнялась в том же пакете, что и данные в неё. А наполнение справочника затем переносить при помощи привязки данных к пакету.

Если второе, то нужно не создавать объект или замещающий объект вручную, а переносить с сайта-источника готовую схему (или путём выгрузки в md-файл, или через SVN, или пакетами).

Объект Tax — стандартный, у Вас в нём есть какие-то доработки?

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

Как пенести на другую среду признак деактивации процесса в пакете?

 

Для того что бы перенести признак деактивации процесса на другую среду необходимо к пакету привязать sql-скрипт.

В элементе sql-скрипт необходимо добавить следующий запрос. Запрос должен соответствовать СУБД, с которой работает система, ниже пример запроса подходящего для MSSQL и PostgreSQL : 

INSERT INTO "SysProcessDisabled" ("Name", "SysSchemaId")
SELECT "Name","Id"
FROM "SysSchema"
WHERE "Name" IN ('Название процесса (важно! не заголовок)')

Пример скрипта деактивации процесса "Квалификация продажи v7.8.0"

 

Название процесса можно найти в дизайнере процесса.

 

Также в дизайнере бизнес-процесса после применения скрипта признак [Активен] будет проставлен до перезагрузки пула приложения, так как эта галочка остается закешированной, хотя процесс по факту больше не активен. 

Нравится

Поделиться

3 комментария

А у меня всё равно такие процессы исполняются... 

Процессы могут исполняться, если запускаются не вручную, а, например, как подпроцесс из другого.

Зверев Александр пишет:

Процессы могут исполняться, если запускаются не вручную, а, например, как подпроцесс из другого.

 И, к сожалению, стартуют по сигналу. А надо совсем отключить

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

Подскажите как забиндить настройку страниц в разделе? Это я так вижу таблица и должна отдельно от настройки раздела быть, но не как не найду ее. При сохранение настроек (нажатие "Сохранить" в настройках раздела) нужные данные не сохраняются в пакет, и при установке его на другую среду таблица со списком есть но вторая колонка (справа) пустая, данные не сохраняются в ней

Нравится

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

Александр Тыра,

1. Уточните, пожалуйста, версию bpm'online, в которой Вы выполняете настройки?

2. Я правильно понимаю, что при создании нескольких страниц редактирования, через мастер разделов, не выполняется автоматическая привязка данных об этих страницах в таблицу SysModuleEdit?

Если Вы используете последнюю версию и там не работает такая привязка данных, то это является недоработкой мастера раздела.

У нас был похожий опыт переноса дополнительных страниц редактирования для стандартных разделов году в 2018. На сколько я помню, все кастомные разделы с несколькими страницами редактирования переносятся нормально, а для стандартных разделов нужно выполнить это не привязкой данных, а SQL скриптом на целевой среде после переноса. Я попробую поискать вариант скрипта в архивах. Если найду - вышлю вам.

 

Нашел.

Необходимо добавить связь в таблицу SysModuleEdit. Детальнее можно почитать здесь. Нам помогло.

 https://community.terrasoft.ru/questions/rucnaa-registracia-razdela

Сидоров Александр Валерьевич,

Спасибо, как раз привязку делал через эту таблицу, но не могу найти колонку что отвечает за справочник (таблицу в которой значения на основе которых разные страницы прописываются)

Александр Тыра,

1. Уточните, пожалуйста, версию bpm'online, в которой Вы выполняете настройки?

2. Я правильно понимаю, что при создании нескольких страниц редактирования, через мастер разделов, не выполняется автоматическая привязка данных об этих страницах в таблицу SysModuleEdit?

Если Вы используете последнюю версию и там не работает такая привязка данных, то это является недоработкой мастера раздела.

Александр Тыра пишет:
не могу найти колонку что отвечает за справочник (таблицу в которой значения на основе которых разные страницы прописываются)

В таблице SysModuleEntity колонка TypeColumnUId.

В этой колонке нужно указать "UId" колонки из таблицы раздела, которая ссылается на справочник, используемый в качестве типа записей раздела.

Алла Савельева,

Версия 7.15.2. Привязка для страниц происходит, но именно привязка названия справочника откуда берутся значения привязки для каждой страницы не привязывается, потому при установке пакета привязка по страницам не может отработать так как нет привязка справочника (на втором скрине выделено поле со справочником)

Алла Савельева,

Колонка TypeColumnUId заполнена у страниц, проверил на корректность. Но справочник (выделенное поле) не заполнен, и потому думаю не происходит установка значений из пакета (связка видимо не дает)

Алла Савельева,

Думаю это оно и есть, просто уже перенес данные и думаю потому не вижу разницы, но вот думаю это оно. Спасибо большое

Александр Тыра,

Интересно, исправлено ли это в последней актуальной на текущий момент версии 7.15.4?

Алла, с версии 7.14.3 заведена проблема «Перенос пакетов. При переносе пакетами раздела с несколькими страницами редактирования настройка типизированных страниц не переносится - используемые значения справочников не переносятся пока для колонки  TypeColumnValue не установить признак Force Update», она ещё не решена.

Зверев Александр,

Решил попробовать то что Вы процетировали, и после того как указал принудительное обновление колонок все перенеслось.

На сколько я понимаю это не баг а фитца, и смысл ее заключается в том что запись уже существует, и значение в колонке есть в модуле и в Entity, а если без галочки принудительного обновления записи оно и не перезаписывает (на уровне системы это прекрасная функция, к примеру значения номера договора в dev среде не перетрут номер в продуктивной среде если не стоит галочка), так что если мыслить с такой точки зрения то логично. Но конечно было вы удобнее что бы создавалось уже с проставленными галочками принудительной перезаписи а не идти и менять руками при создании новых страниц

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

Привязываю данные к пакету, нажимаю кнопку [Показать данные] - 'Всего записей: 7'.

Потом перехожу во вкладку 'Привязанные данные', нажимаю кнопку [Проверить данные] и вижу, что у меня отображается 'Всего записей: 5', хотя должно отображаться 7.

По какой причине могут не отображаться ещё 2 значения?

Нравится

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

Алла, добрый день.
На вашем первом изображении отображается 7 записей - это кол-во записей в вашем приложении, которые подходят по фильтру.
На втором изображении 5 записей - это те записи, которые уже привязаны и находятся в вашей привязке. 
Т.е. Если вы хотите чтобы в вашей привязке были все 7 записей, которые на данный момент находятся в вашем приложении, вам необходимо перепривязать (пересохранить) вашу привязку.

На втором скрине данные которые уже привязаны к пакету и находятся в свн, а на первом 5 записей, которые уже давно привязаны к пакету и находятся в свн + 2 записи, которые вы привязали но еще не залили в свн

Миннекаев Айдар,

В данном случае вообще не работаю с SVN.

Все 7 записей ранее не были привязаны к пакету.

Из-за этого потом не могу привязать все 7 записей в таблицу LookupInFolder, выдается сообщение, что 2 записи не добавлены и это как раз те 2 записи, которые не отображаются на второй вкладке.

Есть ещё какие-то варианты?

Была подобная проблема связанная с локализацией. Попробуйте привязать по ИД. А еще после установки приложения https://marketplace.terrasoft.ru/app/data-binding-tool процесс привязки данных стал в разры проще.

Алла, если есть доступ к базе, поищи, в чём различие между этими двумя записями и остальными. Может, их Id упомянут в каких-то таблицах или наоборот, нет. Может, что-то не так с локализацией этих значений, когда строковые значения на разных языках хранятся в разных таблицах.

Алексей Следь пишет:
Была подобная проблема связанная с локализацией. Попробуйте привязать по ИД.

Какая именно проблема - можете подробнее написать? С привязкой по Id работает аналогично.

 

Зверев Александр пишет:
Может, что-то не так с локализацией этих значений, когда строковые значения на разных языках хранятся в разных таблицах

С локализацией вроде все в порядке. Все справочники создавались под одной локализацией и не переводились на другие языки.

Какие ещё могут быть варианты?

Возможно, есть какие-то специфические условия привязки данных к пакету?

Алла, добрый день.
На вашем первом изображении отображается 7 записей - это кол-во записей в вашем приложении, которые подходят по фильтру.
На втором изображении 5 записей - это те записи, которые уже привязаны и находятся в вашей привязке. 
Т.е. Если вы хотите чтобы в вашей привязке были все 7 записей, которые на данный момент находятся в вашем приложении, вам необходимо перепривязать (пересохранить) вашу привязку.

P.Shvedun пишет:
вам необходимо перепривязать (пересохранить) вашу привязку.

 А каким образом это сделать?

Алла, причина и способ устранения могут быть аналогичными этой теме.

Зверев Александр,

В этом посте идет речь об обновлении существующих записей, а у меня вообще-то совсем другая ситуация.

О переносе речь не идет, так как данные не привязываются.

Значит, нужно смотреть, в чём разница между теми записями, что привязались, и что нет.

Зверев Александр,

Уже смотрела, но разницы не нашла. Можешь конкретнее написать, что следует проверить?

Но если внешне одинаковые записи в одном и том же справочнике ведут себя различно, значит они не совсем одинаковые, разница либо в полях, либо в наличии/отсутствии ссылок из других таблиц. Есть скрипты по поиску Guid по всей базе, может, по Id этих справочников будет что-то интересное?

Алла Савельева,

Всё что вам нужно, это открыть вашу привязку и сохранить её. Все данные, которые подходят по условию, привяжутся к данной привязке.

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

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

Благодарю.

Нравится

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

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

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

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

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

Добрый день! Производил привязку данных по правам на администрируемые операции. Написал скрипт по предварительному удалению записей по фильтру и привязал данные. При обновлении из свн на другом сайте, после обновления сайт перестал работать. В логах приложения ошибка. Будьте добры, подскажите как решить данную проблему.

 

2018-10-26 17:22:07,220 [5] ERROR IIS APPPOOL\ArdshinBank7102-3 Terrasoft.WebApp.FileWebEventProvider ProcessEvent - Date: 26.10.2018 17:22:07
Date (UTC): 26.10.2018 13:22:07

Exception Message: Вложенный запрос вернул больше одного значения. Это запрещено, когда вложенный запрос следует после =, !=, <, <=, >, >= или используется в качестве выражения.
Exception Type: System.Data.SqlClient.SqlException
Exception Source: .Net SqlClient Data Provider

Exception Stack Trace:
   в System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   в System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   в System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
   в System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
   в System.Data.SqlClient.SqlDataReader.TryHasMoreRows(Boolean& moreRows)
   в System.Data.SqlClient.SqlDataReader.TryReadInternal(Boolean setTimeout, Boolean& more)
   в System.Data.SqlClient.SqlDataReader.Read()
   в Terrasoft.Core.DB.DBSecurityEngine.GetCurrentUserAdminOperationsFromDB()
   в Terrasoft.Core.DB.DBSecurityEngine.InitializeCurrentUserAdministratedOperations(String code)
   в Terrasoft.Core.DB.DBSecurityEngine.GetCanExecuteOperation(String code)
   в Terrasoft.Core.DB.DBSecurityEngine.GetEntitySchemaOperationsRightLevels(String schemaName)
   в Terrasoft.Core.DB.DBSecurityEngine.GetEntitySchemaOperationsRightLevel(String schemaName)
   в Terrasoft.Core.DB.DBSecurityEngine.GetIsEntitySchemaReadingAllowed(String schemaName)
   в Terrasoft.Core.Entities.EntitySchemaQuery.CreateSelect()
   в Terrasoft.Core.Entities.EntitySchemaQuery.GetSelectQuery(UserConnection userConnection)
   в Terrasoft.Core.Entities.EntitySchemaQuery.GetEntityCollection(UserConnection userConnection)
   в Terrasoft.Configuration.FeatureUtilities.GetFeatureState(UserConnection source, String code)
   в Terrasoft.Configuration.FeatureUtilities.GetIsFeatureEnabled(UserConnection source, String code)
   в Terrasoft.Configuration.ConfigurationSectionHelper.GetModuleStructure(UserConnection userConnection)
   в Terrasoft.Configuration.ConfigurationSectionHelper.GetConfigurationScript(UserConnection userConnection)
   в Terrasoft.Configuration.SectionHelper.GetConfigurationScript(UserConnection userConnection)
   в Terrasoft.WebApp.Nui.ViewModuleHelper.CreateModulesConfigScript(UserConnection userConnection, HttpResponse response)
   в Terrasoft.WebApp.Nui.ViewModule.SetupModulesConfig()
   в Terrasoft.WebApp.Nui.ViewModule.Page_Load(Object sender, EventArgs e)
   в System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
   в System.Web.UI.Control.OnLoad(EventArgs e)
   в System.Web.UI.Control.LoadRecursive()
   в System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

Нравится

6 комментариев
Лучший ответ
SELECT SysAdminOperationId, SysAdminUnitId, COUNT(*)
FROM dbo.SysAdminOperationGrantee
GROUP BY SysAdminOperationId, SysAdminUnitId
HAVING COUNT(*) &gt; 1
 
 
SELECT SysAdminOperationId, Position, COUNT(*)
FROM dbo.SysAdminOperationGrantee
GROUP BY SysAdminOperationId, Position
HAVING COUNT(*) &gt; 1

Если любой из этих запросов вернул что-то, то в этом проблема. Необходимо почистить данную таблицу дублирующих данных.

Без ошибок из лога  и сообщений в консоли броузера трудно чтото сказать. Разве что посоветовать обратится в тех поддержку.

Запросите у поддержке sql скрипты для перераздачи прав на существующие обекты и выполните их для тех объектов что вы меняли! Свежий бэкап есть или вы делали на среде разработки?

Есть приложение на маркет плэйсе  которое раздает права на созданные записи (актуальнот если изминили права и хотите распространить это на существующие объекты)  но если входа не происходит это вам не поможет!

Где-то есть подзапрос, который выдаёт более одной строки, хотя логика внешнего SQL-запроса ожидает одну. Вызывается он в стандартной функции ядра GetCurrentUserAdminOperationsFromDB. Видимо, при работе скрипта или переносе залилось некорректное наполнение в таблицы прав.

Где именно, можно увидеть, записав в профайлере запрос, происходящий перед падением.

вот же

TOP (1) ставьте 

Я так понимаю что это из-за неправильно разданных прав происходит ошибка, в явном виде никто sql не корректировал. Так что  про TOP 1 єто не в тему 

SELECT SysAdminOperationId, SysAdminUnitId, COUNT(*)
FROM dbo.SysAdminOperationGrantee
GROUP BY SysAdminOperationId, SysAdminUnitId
HAVING COUNT(*) &gt; 1
 
 
SELECT SysAdminOperationId, Position, COUNT(*)
FROM dbo.SysAdminOperationGrantee
GROUP BY SysAdminOperationId, Position
HAVING COUNT(*) &gt; 1

Если любой из этих запросов вернул что-то, то в этом проблема. Необходимо почистить данную таблицу дублирующих данных.

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

Выдает: При привязке SysSettingsValue выдает "Не привязаны данные для связанного объекта "SysSettings" по колонке "SysSettings". Значение "72ab6c8f-fbb6-42ae-ba5c-7288bab96e2d"

Однако запись в SysSettings c Id = 72ab6c8f-fbb6-42ae-ba5c-7288bab96e2d предварительно успешно привязана.

Манипуляции из этой темы проблемы не решили.

Остается только через SQL?

Нравится

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

Убедитесь, что вы привязываете правильный объект. Вы должны выбрать в данных "Системная настройка (объект)", если выбрать просто "Системная настройка", то это будет просто представление в бд

Убедитесь, что вы привязываете правильный объект. Вы должны выбрать в данных "Системная настройка (объект)", если выбрать просто "Системная настройка", то это будет просто представление в бд

Литвинко Павел,

так и было! Благодарю.

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

Есть у меня справочник, связанный со справочником городов.

Я хочу привязать данные справочника к пакету, но система говорит, что этого делать нельзя, т.к. города на привязаны.

Я не хочу привязывать города, т.к. они на деве и проде совпадают и я знаю, что здесь всё будет нормально.

Можно ли отключить на уровне системы это требование и привязать мои данные к пакету?

Нравится

1 комментарий

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

В базе привязка всех записей одной таблицы хранится в одной строке SysPackageSchemaData, данные хранятся в поле Data.

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