Salesforce - 如何在环境之间部署(沙箱,实时等)

时间:2009-02-23 11:32:32

标签: deployment salesforce apex-code

我们正在研究如何设置适当的部署流程。

据我所知,似乎有4种方法可以做到这一点。

  1. 复制&粘贴 - 我们不想这样做
  2. 使用Salesforce Web界面内置的“包”机制
  3. Eclipse Force IDE“部署到服务器”选项
  4. Ant脚本(还没试过这个)
  5. 有没有人对各种方法的限制提出建议。

    您可以在Web Interface包中包含所有内容吗?

    我们希望部署以下项目:

    • Apex Classes

    • Apex触发器

    • 工作流

    • 电子邮件模板

    • MailMerge模板 - 似乎无法在Eclipse中找到它们

    • 自定义字段

    • 页面布局

    • RecordTypes(似乎无法在网站或Eclipse中找到这些)

    • PickList项目?

    • SControls

7 个答案:

答案 0 :(得分:15)

我推荐Force.com Migration Tool

供参考:

迁移工具允许您使用ant目标在salesforce.com组织之间移动元数据。

答案 1 :(得分:15)

我可以从最近的痛苦经历中谈到这一点。

打包:这是一个非常古老的方法,它早于Ant和Eclipse所依赖的元数据API。根据我们的经验,包装的唯一好处是定义您的项目。如果您正在使用Eclipse(我们这样做,我推荐),您可以将项目定义为基于特定包。只要您记得在包中添加新组件,您的项目就会挂起来

困扰我们一段时间的一件事,顺便说一句,是包的许多用途。我们注意到以下几点:

已安装的软件包:这些软件包含托管和非托管版本,实际上,正如SFDC董事会最近发布的一篇文章所述,ISV将其资源部署到各种未知的组织中。托管和非托管软件包都有一些限制,使得它们不适合在组织内从开发到生产部署,或者在您进行自定义开发并且不打算将代码分发给大型匿名库的任何情况下都不需要。

未安装的软件包:这是您在Web UI中单击“软件包”时看到的内容。我们有时称之为“开发包”的这些似乎只是将项目定义保持在一起的便捷方式。

无论如何,我的结论是我们的团队(自定义开发,而不是ISV)不需要任何形式的包。

其他形式的部署(Eclipse和Ant)都依赖于Metadata API。从理论上讲,它们具有完全相同的功能。实际上它们似乎是互补的。内置于Force.com IDE for Eclipse中的Force.com迁移工具使部署变得尽可能简单(这不是很简单),并让您很好地了解它打算部署什么。另一方面,我们已经看到Ant做了一些IDE无法做到的事情。因此,学习它们可能是值得的。

我们倾向于将所有项目保留在SVN中,并使用SVN结构作为项目定义(Eclipse将使用它并尊重它)。我们使用Eclipse,有时使用Ant进行迁移。在任何地方都不需要包装。

顺便说一下,还有一件事需要注意 - 并非所有组件都是可迁移的。有些东西必须在目标环境中手动重新配置。一个例子是基于时间的工作流程。我认为,队列和组也需要进行行为创建。同样,元数据API无法直接处理字段删除,因此如果您删除了源中的字段,则需要在目标中手动删除它。还有其他案例。

希望这很有用 -

- Steve Lane

答案 2 :(得分:2)

从2009年春季开始,元数据不支持邮件合并模板,但记录类型不受支持。您将在文件中找到它们所属对象的记录类型作为XML元素。列表中的其他所有内容都支持一个小例外。 09年春季无法编辑标准字段的选项列表值。请继续关注2009年夏季专题公告的新闻。

更新:标准对象上的标准选项列表现在已公开元数据(自API v16起): http://www.salesforce.com/us/developer/docs/api_meta/Content/meta_picklist.htm

否则,史蒂夫莱恩的反应非常准确。使用非托管软件包(Steve称之为未安装的软件包)的优点是,当您向软件包添加元数据时,将自动添加它所依赖的元数据。因此,获取包含其所有依赖项的完整元数据集更容易。如果您反复将元数据从一个组织(沙箱)移动到另一个组织(生产),那么史蒂夫的方法可能是最好的方法,当然也是当今最常见的方法。我经常使用非托管“开发人员”软件包将我在一个组织中开发的内容移动到另一个不相关的组织中。出于我的目的,我喜欢在org中定义包而不是Eclipse项目/ SVN。但是,如果您正在跨越许多dev / sandbox组织进行团队开发并且已经在使用SVN,这可能没有意义。

的Jesper

答案 3 :(得分:2)

如果要将元数据从沙箱移动到生产中,另一个选择是使用Change Sets

目前在如何使用变更集方面存在一些限制:

  

在两个组织之间发送更改集需要部署   连接。目前,更改集只能在两者之间发送   与生产组织有关联的组织   例如,生产组织和沙箱,或两个沙箱   从同一个组织创建。

答案 4 :(得分:0)

来自文档:

必须管理软件包才能在AppExchange上公开发布,并支持升级。组织可以创建单个托管包,可以由许多不同的组织下载和安装。它们与非托管软件包的不同之处在于某些组件已被锁定,从而允许稍后升级托管软件包。非托管包不包含锁定的组件,无法升级。此外,托管软件包会对订阅组织中的某些组件(如Apex)进行模糊处理,以保护开发人员的知识产权。

托管软件包的优势在于它允许您轻松地在多个SFDC组织中进行版本和分发。

答案 5 :(得分:0)

我自己还在努力解决这个问题。迁移工具的IDE都没有解决我面临的主要问题,如下所示:

  1. 已安装的软件包无法部署到Developer Org 。你必须 在Dev Org中逐个手动安装它们。

    如果包不能 安装在组织中(例如,因为它需要密码,如 Marketo Sales Insight,或者因为它已被弃用,例如 Salesforce for Google Adwords)我们的应用程序有依赖项 在它上面(比如对属于对象的对象中的字段的引用) 包)然后我们将无法部署该应用程序。

    解决方法:如果是 包不能手动安装在每个开发人员的DEv Org中 将需要他自己的开发人员沙箱。其他开发人员沙箱 可以从Salesforce订购。 (客户必须愿意为他们付款,但是......)

  2. 当沙盒从生产中刷新时,我们刷新我们的 所有来自服务器的本地项目(连接到SVN) 旧沙箱中的其他文件/代码,但它不在 生产将转移到新的沙盒。

    解决方法:全部 生产中所做的更改必须在沙盒中复制 开发者组织。 (有点痛,但还好......)

答案 6 :(得分:-1)

在任何Salesforce生产部署中,Metadata API是执行此操作的更好选项之一。有些工具可以简化工作。看看这篇文章:https://www.deploypkg.com/deploy-to-production/