手动插件注册 - 托管解决方案

Manual Plugin Registration - Managed Solution

我对 registering/updating 之前由第三方通过托管解决方案加载的第三方插件有一些疑问。

我们遇到的问题是他们(第 3 方)向我们发送了插件更新和托管解决方案之外的新插件,并让我们通过注册工具手动注册。然后,下次我们尝试导入他们解决方案的更高版本时,托管解决方案导入失败。我们最终意识到,pluginassembly 和 pluginassemblytype table 中的重复行分别具有相同的 Pluginassemblyid 和 plugintypeid,但具有不同的 solutionid。

这些解决方案 ID 是 "Active",我认为它们来自手动注册,"IPM Global" 是我们的第 3 方托管解决方案。我们成功导入解决方案的唯一方法是更改​​覆盖时间 在 table(s) 到 0,然后删除 "Active" pluginassembly 和 plugintype 记录。

是否有任何其他方法可以完成同样受支持的事情?

顺便说一句。我们确实尝试过在尝试之前注销插件,但我们的工作流程中存在太多依赖项。

哇,这是个棘手的问题。既然你提到直接更新 tables,我假设系统是本地的。

在该托管解决方案之外注册存在于该托管解决方案中的插件是我从未做过的事情,虽然我直接更新了插件注册 table,但它肯定是要尽量减少的事情。

虽然听起来很不愉快,但要以受支持的方式恢复到良好状态,您可能需要:

备份SQL数据库

备份来自任何托管解决方案实体的所有数据。

取消对托管解决方案的所有依赖(即编辑所有工作流,使它们不再依赖于托管解决方案)。为了减轻这篇文章的痛苦,您可能想尝试通过非托管解决方案导出受影响的工作流。然后你可以删除它们而不是试图清除依赖项。然后在系统中恢复托管解决方案后,理论上您可以导入非托管工作流解决方案以恢复工作流。但是,不可否认,这项工作取决于工作流程通过名称而不是 Id 找到它们所依赖的插件程序集,我不确定情况是否如此 - 所以就像我说的那样,实验。

取消注册 "out-of-band" 插件

卸载托管解决方案

安装托管解决方案的干净副本,包括以前有问题的插件。

Restore/reconfigure 工作流程

恢复托管实体数据

太多...事实上,我会考虑打开 Microsoft 支持票,看看他们是否可以提供任何替代方法来纠正这种情况。

在这种情况下,我个人可能还会考虑不支持的方法,例如在删除托管解决方案之前使用 SQL 复制任何托管实体的 table,然后使用 SQL 复制修复托管解决方案后返回的数据。当然,我(几乎)从不建议以不受支持的方式使用 SQL,因此探索该选项需要您自担风险(并进行大量备份)。

首先,尽量避免在系统表中直接更新数据库。您永远不知道它什么时候会袭击您(下一次解决方案导入、下一次 CRM 升级、迁移到云端等)。

我假设您的供应商解决方案包含实体和属性,而不仅仅是包含 SDK 消息处理步骤的程序集。因此,您不能简单地删除该托管解决方案,因为这会导致数据丢失。我还假设他们的程序集中没有工作流活动。

请他们提供正确注册程序集和 SDK 消息处理步骤的解决方案。然后使用插件注册工具 (https://msdn.microsoft.com/en-us/library/gg309580.aspx) 进入您的组织并取消注册他们的程序集。然后只需导入他们的最新解决方案。它应该能够导入它们的程序集及其内部的任何内容。

最好先在安全环境中恢复生产组织的副本并完成整个过程。