Кастомизация
27
Дек
0

Управляемое в неуправляемое

«Управляемость» Решения несколько ограничивает возможности по его модификации. Но это можно исправить. Чтобы преобразовать управляемое Решение в неуправляемое выполните следующий код (поменяйте в нем только системное имя управляемого Решения):

declare @solutionId uniqueidentifier, @systemSolutionId uniqueidentifier

-- Задаем системное имя управляемого Решения
select @solutionId = solutionid from SolutionBase where UniqueName='audit'

-- Далее ничего не менять --
select @systemSolutionId = solutionid from SolutionBase where UniqueName='Active'
update PublisherBase set IsReadonly=0 
 where PublisherId in (select PublisherId from SolutionBase where SolutionId=@solutionId)
print 'updated publisher'

declare @tables table (id int identity, name nvarchar(100), ismanaged bit, issolution bit)
declare @count int, @currentTable nvarchar(100), @currentM bit, @currentS bit, @sql nvarchar(max)

insert into @tables (name, ismanaged, issolution)
 select name, 1, 0 from sysobjects where id in 
  (select id from syscolumns where name in ('IsManaged')) 
 and type='U'
 order by name

insert into @tables (name, ismanaged, issolution)
 select name, 0, 1 from sysobjects where id in 
  (select id from syscolumns where name in ('SolutionId')) 
 and type='U' and name not in ('SolutionComponentBase')
 order by name

select @count = count(*) from @tables
while (@count > 0)
begin
 select @currentTable =name, @currentM =ismanaged, @currentS =issolution from @tables where id=@count

 if (@currentM = 1) 
 begin
  select @sql ='update ' + @currentTable + ' set IsManaged=0 where SolutionId=N''' + cast(@solutionId as nvarchar(100)) + ''''
  exec (@sql)
 
  print 'updated IsManaged to 0 on: ' + @currentTable
 end

 if (@currentS = 1)
 begin
  select @sql ='update ' + @currentTable + ' set SolutionId=N''' + cast(@systemSolutionId as nvarchar(100)) + ''' where SolutionId=N''' + cast(@solutionId as nvarchar(100)) + ''''
  exec (@sql)
 
  print 'updated SolutionId on: ' + @currentTable
 end

 select @count = @count -1, @currentTable = NULL
end


Комментарии (0)

*

code