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

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

МОи действия:
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:

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
Показать все комментарии