Есть неправильно созданная деталь, уже добавленная на страницу, связанная с определённым кастомным объектом, еще парочу клиенских модулей, которые используют этот объект. Необходимо удалить это всё.
МОи действия:
1. Удаляю деталь из дизайнера страницы, сохраняю.
2. Удаляю страницы детали, которые ссылаются на объект детали.
3. Удаляю объект.
Вроде всё.
После этого захожу в мастер деталей - ошибка! Пишется, что объект с определённым GUID не существует, это GUID того удалённого объекта. Пытаюсь открыть визуальный редактор страницы, где ранее была деталь - так же ошибки. И после этого страницы конфигурации тоже валятся с ошибками. Не смог решить проблему. Пришлось брать бэкап DB и ресторить. И так несолько раз.
Подскажите, в чем может быть проблема.
Нравится
Здравствуйте.
После удаления схем необходимо выполнить действие "Компилировать всё".
По завершению публикации - проверить суть проблемы.
Удалил объект, выполнил "Компилировать всё". При попытке зайти в визард деталей, или визард секций, скорее всего еще куда-то, или открыть редактор визуальный редактор страницы - то же самое.
Есть ли какой то способ, возможно, с помощью 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]