如何从组织中还原非托管插件

问题描述 投票:-1回答:2

我正在使用动力学crm 8.1。

我已经连接到一个组织,该组织有一个传统上部署到该组织的插件,作为托管解决方案的一部分。我使用插件注册工具覆盖了一个插件。这个插件现在可能是一个非托管资产,我希望它始终位于作为解决方案一部分部署的托管版本之上。

如何从组织中删除插件的非托管版本,以便托管解决方案的未来升级将应用于该组织?我认为这涉及某种crm脚本。

谢谢!

dynamics-crm dynamics-crm-2016
2个回答
0
投票

插件程序集的非托管版本不会“位于托管版本的顶部”。它只是取代了托管版本。换句话说,该解决方案组件的行为与例如实体形式和标签。

如果更方便,请再次导入托管解决方案或升级托管解决方案。这会将您的非托管插件自动转换为托管版本。


0
投票

通过一些数据库逆向工程,我想出了一个自己的问题的答案。这个过程对我有用,但我不能保证它对每个人都有用。

使用插件注册工具替换插件程序集时,它将执行三项操作。

1)将修改该插件的PluginAssemblyBase记录的OverwriteTime列。 2)将为刚添加的插件程序集添加新的PluginAssemblyBase记录。 3)将为插件修改DependencyNodeBase记录的TopSolutionId列中的记录。

使用以下SQL查询执行此逆转过程:

BEGIN TRANSACTION
        DELETE dbo.PluginAssemblyBase 
        WHERE PluginAssemblyIdUnique <> @originalPluginAssemblyIdUnique and Name = @assemblyName and OverwriteTime = 0

        UPDATE dbo.PluginAssemblyBase SET
            OverwriteTime='1900-01-01 00:00:00.000'
        WHERE PluginAssemblyIdUnique = @originalPluginAssemblyIdUnique

        UPDATE dbo.DependencyNodeBase SET
            TopSolutionId = @ManagedSolutionId
        WHERE Objectid = @pluginAssemblyId
 COMMIT TRANSACTION

其他人可以使用该脚本,但除了设置变量之外,您可能还需要在其中添加一些验证,以便在错误的情况下不使用它。

© www.soinside.com 2019 - 2024. All rights reserved.