Технические вопросы
7.x

Крэш после удаления объекта детали

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

МОи действия:
1. Удаляю деталь из дизайнера страницы, сохраняю.
2. Удаляю страницы детали, которые ссылаются на объект детали.
3. Удаляю объект.

Вроде всё.
После этого захожу в мастер деталей - ошибка! Пишется, что объект с определённым GUID не существует, это GUID того удалённого объекта. Пытаюсь открыть визуальный редактор страницы, где ранее была деталь - так же ошибки. И после этого страницы конфигурации тоже валятся с ошибками. Не смог решить проблему. Пришлось брать бэкап DB и ресторить. И так несолько раз.

Подскажите, в чем может быть проблема.

Нравится

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

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

После удаления схем необходимо выполнить действие "Компилировать всё".

По завершению публикации - проверить суть проблемы.

Удалил объект, выполнил "Компилировать всё". При попытке зайти в визард деталей, или визард секций, скорее всего еще куда-то, или открыть редактор визуальный редактор страницы - то же самое.
Есть ли какой то способ, возможно, с помощью SQL запроса, узнать, где используется объект с определённым именем / GUID ? Почему вообще падает визард деталей в этом случае, не баг ли?

Exception Message: Item with Id "04a74226-e7ef-4615-a334-0dfd3abdb93b" not found.
Exception Type: Terrasoft.Common.ItemNotFoundException
Exception Source: Terrasoft.Core

Exception Stack Trace:
   at Terrasoft.Core.ManagerItemCollection`1.GetByUId(Guid uid)
   at Terrasoft.Core.Manager`2.GetItemByUId(Guid uid)
   at Terrasoft.Core.Manager`2.Terrasoft.Core.IManager.GetItemByUId(Guid uid)
   at Terrasoft.UI.WebControls.ClientUnitSchemaDecorator.GetClientUnitSchemaHash(ISchemaManagerItem item)
   at Terrasoft.UI.WebControls.ClientUnitSchemaDecorator.GetSchemaHash(ISchemaManagerItem item)
   at Terrasoft.UI.WebControls.ClientUnitSchemaDecorator.GetCommonSchemaHash(ISchemaManagerItem item)
   at Terrasoft.UI.WebControls.ClientUnitSchemaDecorator.GetSchemaPath(ISchemaManagerItem item)
   at Terrasoft.UI.WebControls.ClientUnitSchemaDecorator.GetSchemaDescriptor(ISchemaManagerItem item, String identifiersQuote)
   at Terrasoft.Configuration.ConfigurationSectionHelper.GetClientUnitSchemaDescriptors(UserConnection userConnection)
   at Terrasoft.Configuration.ConfigurationSectionHelper.GetConfigurationScript(UserConnection userConnection)
   at Terrasoft.WebApp.Nui.ViewModuleHelper.CreateModulesConfigScript(UserConnection userConnection, HttpResponse response)
   at Terrasoft.WebApp.Nui.ViewModule.SetupModulesConfig()
   at Terrasoft.WebApp.Nui.ViewModule.Page_Load(Object sender, EventArgs e)
   at System.Web.UI.Control.LoadRecursive()
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

trickbz

Скрипт ниже покажет все таблицы, в которых указанный идентификатор находится в колонке с именем Id:

[sql]
DECLARE @COLUMN_NAME NVarChar(100) = 'Id' -- попробуйте с Id и с Uid
DECLARE @COLUMN_VALUE NVarChar(100) = '04a74226-e7ef-4615-a334-0dfd3abdb93b'

DECLARE @tableName VARCHAR(50)
DECLARE tablesCursor CURSOR LOCAL FORWARD_ONLY STATIC FOR

SELECT table_name = sysobjects.name
FROM sysobjects
JOIN syscolumns ON sysobjects.id = syscolumns.id
WHERE sysobjects.xtype='U'
and syscolumns.name = @COLUMN_NAME

OPEN tablesCursor
FETCH NEXT FROM tablesCursor INTO @tableName

WHILE @@FETCH_STATUS = 0
BEGIN

EXEC ('DECLARE @recordCount INT;
DECLARE @quotesChar CHAR = char(39);
DECLARE @tabChar CHAR = char(9);
BEGIN TRY
SET @recordCount =
(SELECT COUNT(*)
FROM [' + @tableName + '] where ' + @COLUMN_NAME + ' = ''' + @COLUMN_VALUE + ''')
IF @recordCount > 0
BEGIN
PRINT ''''
PRINT ''-- ' + @tableName + ':''
PRINT '' SELECT * FROM ' + @tableName +
' WHERE ' + @COLUMN_NAME +
' = '' + @quotesChar + ''' + @COLUMN_VALUE + ''' + @quotesChar + ''''
PRINT '' -- Количество строк в запросе: '' + CAST(@recordCount as VARCHAR(5))
END
END TRY
BEGIN CATCH
END CATCH;
');
FETCH NEXT FROM tablesCursor INTO @tableName
END

CLOSE tablesCursor
DEALLOCATE tablesCursor
[/sql]

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