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

 

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(*) > 1
 
 
SELECT SysAdminOperationId, Position, COUNT(*)
FROM dbo.SysAdminOperationGrantee
GROUP BY SysAdminOperationId, Position
HAVING COUNT(*) > 1

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

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

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

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

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

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

вот же

TOP (1) ставьте 

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

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

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

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

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

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

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

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

Нравится

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

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

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

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

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

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

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

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

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

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

Нравится

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

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

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

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

Добрый день, известно, что для активностей можно сделать разные страницы для каждого из ее типов. Создал я тип Активности "Звонок" и создал для нее собственную страницу. Вопрос: как привязать то, что для типа активности "Звонок" создана новая страница к пакету?

Нравится

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

Здравствуйте!

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

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

Demchenko Olha,

Я создаю страницу через мастер разделов. И к ней дополнительно добавляется мой код. Но когда я выгружаю пакет в архив и потом устанавливаю на другую bpm, то этой страницы нет, хотя схема в пакете есть. Типы активностей я привязываю к пакету

Victor Ivanitski,

Для привязки вашей страницы, нужно добавить запись в таблицу SysModuleEdit, где в CardSchemaUId указать UId вашей страницы из таблицы SysSchema.

Пример скрипта для выборки существующих привязанных страниц к Активности:

select * from SysModuleEdit where SysModuleEntityId in (select Id from SysModuleEntity where SysEntitySchemaUId in (select Uid from SysSchema where Name like 'Activity'))

 

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

Добрый день!

Подскажите, какие данные необходимо привязать к пакету для переноса настройки колонок детали и реестра раздела?

Нравится

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

Здравствуйте, Александр.

Инструкцию по механизму привязки данных вы можете найти на Академии по следующей ссылке: https://academy.terrasoft.ru/documents/technic-sdkmp/7-9/privyazka-dann….

Для переноса настроек колонок создайте привязку данных на вкладке Данные в разделе Конфигурация. При создании привязки нужно настроить фильтрацию записей таблицы SysProfileData. Нажатием на кнопку Показать данные вы сможете увидеть какие именно данные будут привязаны. Обязательным условием фильтрации является условие по полю Ключ.

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

Коллеги, добрый день!

Не могу разобраться с чем связана ошибка "Внимание:
Привязка данных недоступна, в конфигурации присутствуют схемы объектов, требующие публикации: Объект администрирования".

Данное уведомление появляется при попытке привязать данные на новом локальном стенде. Уже и перекомпилировал, и обновлял БД. Что это за объект администрирования?)
Скрин: https://yadi.sk/i/o6CEkWqU3GjtQA

Нравится

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

Проблема в следующем:
Здесь храниться дата изменения объекта
SELECT *
FROM [SysSchema]
WHERE UId = '84F44B9A-4BC3-4CBF-A1A8-CEC02C1C029C'

А здесь дата когда изменения были приняты
SELECT *
FROM [SysSchemaSource]
WHERE SysSchemaId = '1E9FA34C-B906-48E7-BC1A-241190FFBD6C'

Посмотрев на объекты, изменения были применены а вот с датами косяк.
Дата изменения в моей базе указана была: '2017-07-05 18:37:55.000'

Изменив дату последнего изменения на дату из таблицы SysSchemaSource у меня ошибка ушла
update SysSchema
SET ModifiedOn = '2017-04-04 11:31:40.877'
WHERE UId = '84F44B9A-4BC3-4CBF-A1A8-CEC02C1C029C'

Здравствуйте!

Выполните операцияю [Обновить для требующих обновления]

"Терещук Павел" написал:Здравствуйте!

Выполните операцияю [Обновить для требующих обновления]

Павел, это первое, что пришло в голову - но нет, не помогает.

Найдите последний измененный [Объект администрирования]

Пересохраните, опубликуйте, после чего выполните операцию [Обновить для выбранных]

Объект администрирования - системный. К нему доступа нет.
добавьте sql сценарий и впишите в него запрос:

update SysSchema
SET ModifiedOn = (SELECT top 1 ModifiedOn
FROM [SysSchemaSource]
WHERE SysSchemaId = '1E9FA34C-B906-48E7-BC1A-241190FFBD6C')
WHERE UId = '84F44B9A-4BC3-4CBF-A1A8-CEC02C1C029C'

И собственно выполните затем сценарий

"Сурмачевский Евгений Александрович" написал:Объект администрирования - системный. К нему доступа нет.
добавьте sql сценарий и впишите в него запрос:

update SysSchema
SET ModifiedOn = (SELECT top 1 ModifiedOn
FROM [SysSchemaSource]
WHERE SysSchemaId = '1E9FA34C-B906-48E7-BC1A-241190FFBD6C')
WHERE UId = '84F44B9A-4BC3-4CBF-A1A8-CEC02C1C029C'

И собственно выполните затем сценарий

Евгений, спасибо помогло!

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

Есть ли инструкция для использования "привязки данных" к пакетам, для переноса их через СВН для версии от 7.3?

Та, которая в топике https://community.terrasoft.ru/blogs/9885 неактуальна.
Я так и не понял, как этим пользоваться и на данный момент предпочитаю переносить через SQL. Не хочется тратить на это время, и в то же время не хочется всегда переносить через запросы.

Нравится

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

Здравствуйте, Дмитрий!
Инструкция из топика http://www.community.terrasoft.ru/blogs/9885 актуальна по сей день, можете пользоваться.
Смысл в следующем: Вы привязываете данные к пакету. Обычно это наполнение или регистрация справочников.
Затем при переносе пакета в другую среду, скажем с базы разработки на промышленную, данные переносятся вместе с пакетом. За автоматическую установку данных при обновлении из SVN, если не ошибаюсь, отвечает параметр "AutoInstallPackageData" в Web.config'e приложения (..\Terrasoft.WebApp\).
Когда Вы сохраняете запись с данными, привязываются те данные, которые та текущий момент попадают под настроенную фильтрацию (можно посмотреть, нажав на "Показать данные").
Тип установки обычно выбирают "Установка".

Я раз 5 пробовал, ни разу не получилось)
Завтра покажу скриншоты с подробностями
А пока скажу, что, например, сейчас нет кнопки "Загрузить данные", зато есть вкладка "Привязанные данные". Но как их туда привязать, мне лично не понятно

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

Дмитрий, вместо "Загрузить данные" теперь кнопка "Показать данные". Нажав на нее можно посмотреть, какие данные будут привязаны. При сохранении они автоматически привязываются.

"Андросов Дмитрий" написал:

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


Естественно. Иначе возникнет ошибка ограничения внешнего ключа при попытке установить данные.

Итак, серия скриншотов на тему "Как у меня ничего не получается"
1. Создаю новый элемент

2. Нажимаю "Показать данные", показываются все (т.к. фильтры не накладывал), нажимаю сохранить, открываю, проверяю, что данные привязались


3. Фиксирую в свн, обновляю локалку из свн


4. Проверяю локальный справочник - данные не импортировались

5. Проверяю элемент с данными - данные присутствуют

6. Устанавливаю вручную, но увы...


Здравствуйте, Дмитрий!

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

Приятного дня!

"Андрей Каспаревич" написал:

Тип установки обычно выбирают "Установка".


Попробуйте изменить тип установки.

получилось спасибо

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