terça-feira, 21 de abril de 2015

CRM Tips - Managed to UnManaged Solution

Se por um acaso - ou falta de conhecimento - você criou uma solução Gerenciada no CRM por engano e precisa convertê-la para não gerenciada, segue um Script que faz este trabalho por você, já que até o momento a MS não disponibilizou uma opção para isto na ferramenta.

Importante notar que esta ação é sim suportada porque inclusive é ensinada no TechEd (aos 43:08 min do vídeo referenciado no final deste artigo). Eu somente fiz algumas alterações na procedure para atender melhor nosso cenário.

No script abaixo substitua a palavra [SolutionName] pelo nome de sua solução gerenciada que deseja converter.


declare @solutionId uniqueidentifier, @systemSolutionId uniqueidentifier
select @solutionId = solutionid from solutionbase where uniquename = 'SolutionName'
select @systemSolutionId = solutionid from solutionbase where uniquename = 'active'

update publisherbase 
set isreadonly = 0 
where publisherid in
(
select publisherid from solutionbase where solutionid = @solutionId
)

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)
 end

 print 'updated IsManaged to 0 on: ' + @currentTable

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


Basicamente este código busca todas as tabelas que possuem os atributos [ismanaged] e [solutionid] para poder transformar os componentes da solução em não gerenciáveis e redirecionar as dependências para a solução interna do CRM chamada [Active].

Ref: Advanced Bag of Tips & Tricks for Microsoft Dynamics CRM 2011 Developers

[]s

Nenhum comentário:

Postar um comentário

<< Ao enviar um comentário, favor clicar na opção [Enviar por e-mail comentários de acompanhamento para gtezini@gmail.com] >>