概述
以下是SugarCRM专业服务团队在从事企业Sugar开发项目时使用的部署实践的示例。它没有列出可以在系统中进行的所有可能的自定义,它旨在用作如何将某些类型的自定义部署自动部署到本地Sugar实例的指南。以下技术不能与Sugar的云服务一起使用。
部署应用程序配置和元数据
例:系统设置的部署
系统设置存储在各个位置。在本节中,我们将介绍每种存储类型的设置以及如何迁移每种存储。
存储类型:
- config_override.php
- 这是一个存储在Sugar根目录中的文件,该文件允许覆盖核心配置值(位于config.php中)。在用户界面中,对此进行更改的主要位置是通过管理员->系统设置
- 数据库“配置”表
- 它可以通过Config API在整个Sugar应用程序中加载,使用和访问。
- 系统标签设置
- 预测设定
- 门户设置
- 这是一个简单的键/值/类别存储。没有太多使用此功能的组件。这里有一些:
config_override.php
系统注意事项:
- 文件系统:
- config_override.php放置在Sugar网站根目录中
- 所需脚本
- PHP
- 您将需要编写一个脚本来读取当前的config_override.php并将现有数组与要更改的新值合并。这可以完成一次,然后再用于以后的所有config_override.php更改
- PHP
迁移步骤:
- 评估要更改,添加或删除的值
- 编写脚本以读取现有的config_override.php,对数组进行更改,然后将文件重新写回系统。
数据库“配置”表
系统注意事项:
- 数据库:
- “ config”表存储所有这些值。它们存储在非常简单的表架构中。
- 所需脚本
- PHP
- 编写一个简单的PHP脚本以使用Sugar对象API。见图1
- PHP
迁移步骤:
- 编写脚本以使用我们的对象API进行配置表更改(请参见图1)
- 将脚本复制到Sugar根目录
- 执行脚本
- 删除脚本
屏幕截图:
例:报表部署
客户在“报告”模块中创建一个报告。他们希望部署该报告,以便最终用户都可以访问和运行该报告。
系统注意事项:
- 数据库
- 将行插入到“报告”模块中(saved_reports表)
- (对于新团队组合)将行插入team_sets表中
- (对于新团队组合)将行插入到team_sets_teams表中
- 所需脚本
- SQL
- 检索相关行(saved_reports,team_sets,team_sets_teams)并创建一个SQL脚本来插入它们。
- SQL
补充笔记:
- 在“系统注意事项”部分,“团队的新组合”表示在创建报告时,最终用户使用一组在其他任何记录中都不存在的团队来创建报告。这将在team_sets和team_sets_teams表中产生新条目。
迁移步骤:
- 在开发实例中生成报告
- 选择与该报告关联的数据库行(saved_reports,可能是team_sets和team_sets_teams表)
- 示例:“ SELECT * FROM saved_reports WHERE id =’REPORT_ID’”
- 将行/行导出到SQL文件
- 在下一个系统上执行
例:仪表板的部署
客户希望以自动化方式部署预构建的仪表板。参见下面的图1。此示例具有两个仪表板,“帮助仪表板”和“我的仪表板”。每个仪表板都有零个或多个小号。
系统注意事项:
- 数据库:
- 将行插入到每个用户仪表板的仪表板表中。元数据列存储与该仪表板关联的所有小仪表板,而assigned_user_id列存储将看到此仪表板的用户。
- 所需脚本
- PHP
- 部署仪表板后,您将需要运行在管理部分中找到的快速修复和重建脚本。
- 自定义脚本:是(如果应用于多个用户)
- 因为用户和ID是动态的,所以如果要应用于多个用户,则需要一个自定义脚本来检索这些用户ID并为每个sql插入设置它们。
- SQL
- 从仪表板表导入条目所需的脚本。
- PHP
迁移步骤:
- 针对特定用户构建一个dashlet
- 选择与该用户关联的数据库行
- 示例:“ SELECT * FROM dashlets WHERE Assigned_user_id =’USER_ID’”
- 选择您要应用于其他用户的仪表板,并将其导出到SQL文件中
- 确定需要为其创建仪表板的用户集。
- 编写脚本以拉出该用户列表,并使用您在步骤3中导出的插入查询动态设置assigned_user_id和id(id必须是唯一的),然后为每个用户运行。
屏幕截图:
例:角色(权限)部署
客户希望以自动化方式部署角色。这包括创建新角色和更新以前存在的角色。
系统注意事项:
- 数据库:
- 对于每个角色设置,将行插入到acl_roles 表中。根据角色的具体程度,我们可能将acl_fields 和acl_actions 通过acl_roles_actions 映射到角色
- 所需脚本
- PHP
- Sugar有一个SugarACL对象API,可用于创建,读取和写入角色和角色定义。
- PHP
迁移步骤:
- 使用我们的对象API编写脚本以创建或编写角色
- 定义要进行的更改或添加的元数据
- 编写逻辑以基于元数据添加/更新
- 在开发实例上执行脚本并确认更改
- 使用脚本升级到下一个实例
- 注意:请参见下面的功能示例脚本
- https://gist.github.com/sadekbaroudi/3191513e2bbce2170326
例:团队部署
客户希望以自动化方式部署团队。这应该通过Sugar对象API来完成。
系统注意事项:
- 所需脚本
- PHP
- 请遵循下面“其他说明”部分中的步骤,以获取有关构建团队脚本的详细信息。
- TeamSet由SugarCache为每个用户缓存。安装新团队后,应清除SugarCache。
- PHP
补充笔记:
要构建执行此操作的脚本,请参见以下内容:
- modules/Teams/Save.php
- 当用户通过UI中的表单发布数据时,将调用此文件。该代码应被复制(直到重构Teams模块)。
- modules/Teams/Team.php
- 函数save()-这应该在保存的一部分中调用
- 函数mark_deleted()-要删除团队时,应在对象上调用此函数,在执行此操作之前,请确保没有相关用户。
迁移步骤:
- 使用我们的Teams对象API编写脚本
- 创建所需的团队对象
- 在对象和/或POST数据上设置适当的数据
- 保存后,有可能将用户添加到团队中
- 在开发实例上执行脚本并确认更改
- 使用脚本升级到下一个实例
例:用户设置的部署
客户希望以自动方式部署用户设置。我们在几个地方存储用户设置。
存储类型:
- 用户首选项
这是一个键值对,具有先序列化然后为base64编码的值。我们存储了许多已编码的用户首选项。这些是非关键性设置,可以被吹走。但是,这样做将要求用户重新配置其首选项。数据存储在user_preferences表中。其中包括以下数据: 子面板显示顺序, 时区首选项等。
- 用户模块设置
这些是“用户”模块(用户表)上的直接值。在这里,我们跟踪持久的用户属性,例如: 地址, 电话号码 等
用户偏好
系统注意事项:
- 数据库:
- 对于每个用户设置更改,将行插入到user_preferences 表中。
- 所需脚本
- PHP
- 为了使用用户的首选项更新值,您需要编写一个自定义脚本来读取,更新和重写到user_preferences表中
- PHP
迁移步骤:
- 使用我们的用户偏好设置API编写脚本
- 查询数据库以检索给定用户的行
- base64解码值
- 反序列化值
- 更新所需数据
- 序列化数据
- base64编码
- 将行重写到数据库
- (对所有适用的用户重复)
- (请参阅modules / UserPreferences / UserPreference.php或modules / Users / User.php,特别是getPreference()和setPreference())
- 加载用户对象
- 调用getPreference作为指定值
- 做出改变
- 调用setPreference作为指定值
- 更好的性能方法(直接数据库查询和更新):
- 更健壮但性能较慢的方法(API):
用户表
系统注意事项:
- 数据库:
- 用户表已更新
- 所需脚本:
- SQL
- 如果数据未经编码或加密(例如密码),则可以直接直接更新“用户”表。
- SQL
迁移步骤:
- 编写SQL脚本以根据需要更新users表中的值
- 在开发实例上执行脚本并确认更改
- 使用脚本升级到下一个实例
例:定制字段的部署
用户想要部署以自动方式创建的自定义字段。这包括通过Studio创建的所有内容。
系统注意事项:
- 文件系统:
- 可能在以下目录中创建文件:
- 自定义字段vardef:custom/Extension/modules/<module_name>/Ext/Vardefs/sugarfield_<field_name>.php
- 自定义字段标签(如果需要,还包含app_list_string):./custom/Extension/modules/Accounts/Ext/Language/en_us.lang.php
- 可能在以下目录中创建文件:
- 数据库:
- <module_name> _cstm表已创建(如果尚不存在)。
- 将针对该表创建字段<field_name> _c
- 所需脚本
- 复制文件和fields_meta_data表值后,需要快速修复和重建。
- 的SQL
- 您将需要从fields_meta_data表中插入相关条目
迁移步骤:
- 将自定义字段的fields_meta_data条目导出到脚本中
- 复制自定义字段的文件
- 将#1和#2应用到另一个系统,然后执行快速修复和重建
- 执行上面QRR生成的DDL
例:定制模块的部署
开发人员创建一个自定义模块并希望对其进行部署,该用例指的是基本模块,因为每个附加功能(逻辑挂钩,关系,依赖关系等)都有其 自己的部署方案。
系统注意事项:
- 文件系统:
- ./custom/Extension/application/Ext/Include/<package_name>.php
- ./modules/<new_module>/*
- ./custom/modules/<new_module>/*
- ./custom/themes/default/images/*<new_module>*.(gif/png)
- ./custom/Extension/modules/<new_module>/*
- 数据库:
- 新表<new_module>和<new_module> _audit
- 注意:DDL由“快速修复和重建”脚本生成,此时您可以手动或自动执行
- fields_meta_data表
- 注意:这将存储在部署模块后通过Studio(不是Module Builder)构建的所有自定义字段。确保从该表中检索适用于此模块的所有行,并创建一个SQL脚本以插入到下一个系统中
- 新表<new_module>和<new_module> _audit
- 所需脚本
- 部署定制模块后,您将需要运行在admin部分中找到的Quick Repair and Rebuild脚本。
- SQL
- 从< new_module> 和<new_module> _audit表导入条目所需的脚本。
- 导入此模块的fields_meta_data表条目所需的脚本(如果有)
补充笔记:
- 对于一个完整的自定义模块的部署方案,这种部署方案应该是跑第一,那么所有的扩展模块的功能部署方案应该运行:
迁移步骤:
- 复制上面文件系统部分中列出的所有文件
- 导出fields_meta_data表条目,以应用于定制模块(如果有)
- 运行快速修复和重建
- ë ither手动或自动运行从QRR输出的DDL
- 测试功能
例:定制关系的部署
用户希望部署以自动方式创建的自定义关系。这包括通过Studio创建的所有内容。
请遵循与“自定义 字段”相同的说明,但是:
- 忽略fields_meta_data表
- 请务必考虑以下内容:
- custom/Extension/modules/<side_1_of_relationship>/Ext/
- custom/Extension/modules/<side_2_of_relationship>/Ext/
- custom/Extension/modules/relationships/
否则,将应用相同的过程。
例:部署自定义View或Layout元数据(Web)
用户从Studio创建Web的自定义布局和视图,并希望部署它们。
系统注意事项:
- 文件系统:
- 版面:
- ./custom/modules/<module>/clients/<platform>/layouts/<layout>/ <layout>.php
- 观看次数
- 从Studio创建布局实际上会增加Sidecar视图元数据,而不是Sidecar布局元数据
- ./custom/modules/<module>/clients/<platform>/views/<layout>/ <layout>.php
- 版面:
- 所需脚本
- 部署后,您将需要运行在admin部分中找到的Quick Repair and Rebuild脚本。
补充笔记:
- 对于布局(记录),您可以选择仅保存修改后的布局。在这种情况下,可以在./custom/working/modules/<module>/<platform>/views/<view>/<view>.php中找到布局的元数据
- 从工作室创建布局创建 .custom/modules/<module>/views 视图视图创建的视图可以是record | list | selection-list
- 对于两个弹出式布局(从Studio创建),./custom/modules/<module>/metadata/popupdefs.php中提供了额外的元数据。
例:自定义视图或布局元数据的部署(移动)
用户为Studio中的移动设备创建自定义布局和视图,并希望部署它们。
系统注意事项:
- 文件系统:是
- 版面:
- ./custom/modules/<module>/clients/mobile/layouts/<layout>/ <layout>.php
- 观看次数
- ./custom/modules/<module>/clients/mobile/views/<view>/ <view>.php
- 版面:
- 数据库:否
- 所需脚本
- 部署后,您将需要运行在admin部分中找到的Quick Repair and Rebuild脚本。
补充笔记:
- 布局和视图的处理方式与Web相同。在Studio中,您可以扩充细节,编辑和列出视图。
部署应用程序代码和集成
用例:定制CSS的部署(LESS)
为了更新品牌,开发人员可以部署自定义CSS。
系统注意事项:
- 文件系统:是
- ./custom/themes/custom.less
- 所需脚本
- 您将需要运行在admin部分中找到的Quick Repair and Rebuild 脚本来重建Sugar CSS捆绑包。
用例:逻辑挂钩和Web逻辑挂钩的部署
开发人员 创建自定义逻辑挂钩,他们想部署它们。
系统注意事项:
逻辑钩:
- 文件系统:是
- 应用挂钩:
- ./custom/Extension/application/Ext/LogicHooks/<file>.php
- 模块特定的挂钩:
- ./custom/Extension/modules/<module>/Ext/LogicHooks/<file>.php
- 应用挂钩:
- 所需脚本
- 您将需要运行在管理员部分中找到的快速修复和重建脚本来重建扩展。
Web逻辑挂钩:
- 数据库:是
- 仅用于weblogic挂钩:将行插入到weblogichooks 表中。
- 所需脚本
- 在weblogichooks 表中部署自定义钩子和数据库条目后,您将需要运行在admin部分中找到的Quick Repair and Rebuild 脚本。
- 的SQL
- 从weblogichooks 表导入条目所需的脚本。
例:定制API端点的部署
用户创建一个自定义api端点,他想部署它们。
系统注意事项:
- 文件系统
- clients/<platform>/api/*
- modules/:module/clients/<platform>/api/*
- custom/clients/<platform>/api*
- custom/modules/<module>/clients/<platform>/api/*
- 所需脚本
- 部署自定义api后,您将需要运行在admin部分中找到的Quick Repair and Rebuild 脚本。这将重建./cache/file_map.php和./cache/include/api/ServiceDictionary.rest.php文件以使 您的端点可用。
补充笔记:
- 可以在./include/api/ServiceDictionary.php中找到有关如何加载api端点的逻辑(从何处加载api端点,如何在快速构建和修复上构建api端点等)。
用例:定制管理面板的部署
用户创建自定义管理面板,并希望部署它们。
系统注意事项:
- 文件系统:
- ./custom/Extension/modules/Administration/Ext/Administration/<file>.php
- ./custom/Extension/modules/Administration/Ext/Language/<langtype.name>.php
- ./custom/themes/default/images/<icon_image_name>.<img_extension>
并取决于 管理面板网址,可以是:
- ./custom/modules/<linkUrlModule>/*
要么
- ./custom/modules/<linkUrlModule>/clients/base/layouts/<route_name>/*
- ./custom/modules/<linkUrlModule>/clients/base/views/<route_name>/*
- 所需脚本
- 部署管理面板后,您将需要运行在管理部分中找到的快速修复和重建脚本。
补充笔记:
- 管理员url可以指定新的Sidecar路线,旧的bwc路线,编辑视图文件,纯脚本或仅打开抽屉。没有适当的标准,可能无法确定要复制的其他资源。
例:定制作业/调度程序的部署
用户创建自定义作业和调度程序,并希望部署它们。
系统注意事项:
- 文件系统:是:
- ./custom/Extension/modules/Schedulers/Ext/ScheduledTasks/<jobname>.php
- ./custom/Extension/modules/Schedulers/Ext/Language/<langtype.jobname>.php
- 数据库:是
- 如果使用管理>计划程序将作业添加为计划的作业,则将行插入到计划程序表中 。
- 所需脚本
- 部署自定义作业后,您将需要运行在管理部分中找到的快速修复和重建脚本。
- 的SQL
- 从调度程序表导入条目所需的脚本。