【问题标题】:Crm 2011: Unmanaged changes to managed solution form gotchaCrm 2011:对托管解决方案的非托管更改形成陷阱
【发布时间】:2015-05-14 02:52:55
【问题描述】:

这些天我学到了很多关于托管和非托管解决方案的知识,而且我肯定看到了在生产中使用托管解决方案的很多好处。

我看到推荐的模式是拥有一个开发环境,您可以在其中使用非托管解决方案,导出解决方案的非托管和托管版本,最后将托管解决方案部署到生产环境(可能首先部署到暂存环境进行测试)。

这一切都非常好和干净,但并非没有陷阱。我最近经历了以下场景:

1.

我们使用上述模式为帐户实体创建和部署托管解决方案,并为客户安装它。该解决方案包括一个表单和其他一些用于与遗留系统集成的东西

草图:

托管部分


字段 A 字段 B

字段 C 字段 D

2.

在我不知情的情况下,客户继续使用“自定义”菜单自定义了帐户表单。他所做的是创建一个新的表单部分,并将我们托管解决方案中包含的一些自定义字段从原始部分移动到新部分

草图:

非托管部分


字段 A 字段 B

托管部分


字段 C 字段 D

3.

由于这是一项非托管更改,因此它优先于我的托管更改,在我进行其他一些更改(删除一些其他字段并更改表单上某些字段的顺序)之后对表单布局造成严重破坏

解析尝试:

我当然尝试过重新安装解决方案,还使用“覆盖自定义”选项,该选项承诺覆盖实体的非托管自定义,但这不会改变任何内容。

我还尝试删除新部分和作为非托管自定义移动的字段(使用自定义菜单),然后重新安装托管解决方案,希望这会以某种方式“撤消”非托管更改,并且差异机制将检测到有问题的字段仅存在于托管解决方案中,并且这将导致它们出现在原始位置。但事实证明,我似乎只是在石头上刻下更多的变化——这一次是告诉系统从表单中完全删除字段。

真的会这样吗,一旦您对表单进行了非托管更改,您的托管表单就搞砸了?

有没有办法强制托管表单再次获得优先权?

我当然可以对表单进行更多非托管自定义以将字段放回原来的位置,但这只会将问题推迟到下一次我想要例如更改托管表单中的字段顺序 - 上次的非托管更改仍然具有优先权。

看来我唯一的选择是重新从头开始,或者为帐户实体切换到非托管制度。

经验教训:

如果这看起来很糟糕,我可能应该使用托管属性来禁止对我的托管解决方案中的表单进行自定义。如果这是一个自定义实体,我会这样做,但我认为这对于像帐户实体这样的实体来说有点严格。另一个教训可能是永远不要给客户系统管理员/定制者权限......

希望有其他关于此的想法和经验。

【问题讨论】:

  • 是的,锁定任何对您交付的“系统”功能至关重要的表格,或者您以后可能希望能够使用更新版本进行更新并知道结果会如何的表格喜欢。所以这意味着您必须在新表单上执行此操作,而不是在内置的默认表单上执行此操作。现在看来,您最好的选择是在您的开发环境中对表单执行 SaveAs,给它一个新名称,进行您需要的更改,导出和导入,然后从两个环境中删除旧版本。

标签: forms dynamics-crm-2011 unmanaged managed


【解决方案1】:

我知道我在这里聚会迟到了,但是对于它的价值以及看到这篇文章的任何人,我会加两分钱。我们有一个几乎与@TMan 提到的完全一样的设置,除了我们有一个 Dev、QA 和生产站点,其中 Dev 是不受管理的,并且我们的定制源以及 QA 和生产都是受管理的。我在解决方案和自定义分层过程上花费的时间比我希望的要多得多,以了解所有内容如何组合在一起以获得最终结果。我还在组合中添加了第三方托管解决方案。看到这一切的最终结果,我得出的结论是托管解决方案绝对不是要走的路,除了第三方解决方案提供商,但恕我直言,目标系统都应该使用非托管更改进行定制。我发现的一个主要问题是,当我将第三方托管解决方案引入我们的开发环境时,一旦我们将自己的自定义项导出为托管解决方案以部署到 QA 和生产环境,我们将依赖于该解决方案中的组件。有趣的是,一旦您转到 QA 或生产托管站点,开发站点上的分层和依赖项就会以相反的顺序翻转,因为您自己的自定义项从非托管变为托管,并且托管的自定义项按安装顺序应用系统中的日期。在此处不详细介绍,总结是这些依赖项一旦引入其中一个托管环境就永远不会消失,除非您希望丢失数据,否则您无法卸载自己的自定义,并且在某些情况下您可能无法即使由于依赖关系而导致数据丢失也可以卸载解决方案。我们所有的环境都是 CRM Online,所以我们没有选择直接在数据库中乱搞来摆脱我们不想要的东西。这里的关键是要知道,在大多数情况下,一旦部署了托管解决方案,它就会永远、永久地存在,并且您只能在现有的基础上应用额外的非托管更改,您将无法清理未使用或不需要的成分。我花了很多时间做自己的研究和测试,也花很多时间在微软的电话上。

底线:用于多站点设置(例如从开发到 QA 和/或生产)的托管解决方案是一种非常糟糕的方式,您会失去灵活性并且可能会碰壁在某些情况下。您最好保持一切不受管理并拥有您期望正确自定义系统的灵活性

【讨论】:

  • 我是否可以添加对此的全面支持 - 我们的定制遇到了类似的问题。如果您将自定义应用到自己的 CRM,请使用非托管解决方案。特别是如果您要部署到 CRM Online!
  • 感谢 David E,自从我发布此消息以来,我们已经通过各种版本的 CRM Online 进行了升级,目前我们使用的是最新版本的 CRM 2016,并希望尽快升级到 Dynamics 365。这种行为仍然是一样的,我们还与微软的各种高级工程师和产品人员进行了讨论,他们基本上告诉我们,一旦发生这种情况,除非我们启动一个新站点并复制我们的数据溢出,这在拥有大量数据的 CRM Online 中几乎是不可能的。
  • 嗨,AK,您如何构建您的解决方案?我们将它作为一组功能,您所描述的问题很容易通过持有解决方案的概念(升级阶段)来解决。
  • 我们以类似的方式打包我们的解决方案,其中包含准备发布的功能或一组功能所需的所有组件。持有解决方案并不能解决依赖问题,因为原始解决方案仍然具有依赖关系,您无法释放它以删除解决方案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-23
  • 1970-01-01
  • 2016-11-05
  • 1970-01-01
  • 1970-01-01
  • 2013-03-01
  • 1970-01-01
相关资源
最近更新 更多