SugarCRM开发入门
SugarCRM官网下载地址:https://sourceforge.net/projects/sugarcrm/
概述
Sugar最初是基于LAMP(Linux、Apache、MySQL和PHP)运行的。1.0版本以来,Sugar开发团队增加支持多种操作系统(包括Windows、Unix和Mac OSX)上运行Sugar,作为当今最先进的基于web的CRM平台,Sugar已经迅速成为全球企业的商业应用标准。有关支持的软件版本和推荐的更多详细信息,请参阅受支持的平台页面。
背景
Sugar有5个可用的版本:社区版、公司版、专业版、企业版,超级版。所有五个版本是由同一个开发团队使用相同的架构代码开发的,不同之处在于扩展功能的多少。
从2004年开始SugarCRM开放源码项目,SugarCRM开发团队设计了应用程序源代码,供开发人员检查和修改。Sugar的应用程序框架内置了一个非常复杂的扩展模型允许开发者进行重大的定制应用程序以upgrade-safe和模块化的方式。很容易修改一个核心的文件;你应该检查upgrade-safe让你改变的一种方式。教会开发人员如何使upgrade-safe定制这个是开发者指南的关键目标之一。
应用程序架构
Sugar的应用代码是基于一个模块化的框架与安全的入口点的应用程序(例如index.php or soap.php)。所有模块、核心或自定义的必须位于 <sugar root>/modules/文件夹。模块表示业务实体或对象(如联系人),对象具有字段或属性存储在数据库中,以及用户创建/修改界面的记录。模块包含数据架构、用户界面和应用程序功能的定义。
Sugar的根目录结构如下所示:
目录结构
Sugar应用程序中目录结构包括以下根目录:
cache : 写入文件系统的各种缓存文件才减轻数据访问压力,以及存储来自元数据创建的用户界面模板。
custom : 用户二次开发的文件应该放这个文件夹,可以避免Sugar升级造成的损害。
data : 关键文件夹,主要是SugarBean基类。
examples : Sugar的扩展的示例。
include : Sugar的大部份函数库位于这个目录,其中使用得最多的函数库是utils.php文件。
jssource : 非压缩JS文件。
log4php : 这个目录已过时,现以LoggerManager替代。
metadata : 业务对象之间的所有多对多数据关系的关系元数据。
ModuleInstall : 使用代码来加载Sugar模块。
modules : 包含系统中的所有模块。通过模块加载器安装的自定义模块也存在。
portal : 用户使用教程代码 v1
service : Web Services code for SOAP and REST v2 - v4_1
soap : Web Services code for SOAP v1; this has been deprecated.
themes : 用于显示各种主题的文件。
upload : 文件上传目录,注意:附件或文件放在这个目录里(参数配置(config.php)文件的upload_dir参数)
XTemplate : 旧的模板库,已被Smarty替代,但有些代码还可以使用它。
Zend : Classes used in the framework
关键概念
这些包含Sugar平台的主要文件、类和应用程序的概念。
应用程序概念
Controller(控制器) : 对于每个传入的页面请求都必须通过此模块。
Views(视图) : 由控制器管理的用户界面,默认视图包括详细视图、编辑视图和列表视图。
Display strings(字符串显示) : Sugar是完全国际化的,每个语言包都有自己的字符串显示,这是语言本地化的基础。在Sugar应用程序中有两种类型的字符串显示:应用程序字符串和模块字符串。
应用程序的用户界面标签的字符串显示包含在通过全局应用程序变量中。
$GLOBALS['app_strings']
Array - 包含标签值
$GLOBALS['app_list_strings']
Array - 包含系统范围的下拉列表值。
每种语言都有自己的应用字符串变量。
$GLOBALS['mod_strings']
Array - 包含特定于当前或焦点模块的字符串。
Dropdown lists(下拉列表) 下拉列表表示为name => value的键值对存储在数据库中,下拉列表可以通过Sugar工作室的可视界面进行编辑和创建。可以使用get_select_options_with_id()函数来获取一个下拉列表,使用translate()函数表现下拉列显示的字符串。
文件
SugarBean.php : 此文件位于<sugar root>/data目录,SugarBean基类包含所用业务实体或模块对象。任何读写或显示数据的模块都应继承这个类。SugarBean执行大量的数据交互、关系处理等等。
modules.php : modules.php文件包含几个有效可用的变量。
变量
$dictionary : $dictionary数组包含了所有模块字段变量(vardefs)以及数据库中所有表的元数据的关系。这个数组是动态生成的基于vardefs.php定义。
入口点
主要的用户界面入口点是通过位于根目录的index.php文件。主要参数是:
module : 要访问的模块
action : 模块内的动作
record : 记录ID
以下是一个Sugar调用的示例URL:
http://{sugar_url}/index.php?module=Contacts&action=DetailView&record=d545d1dd-0cb2-d614-3430-45df72473cfb
此URL调用联系人模块内的详细视图动作,以显示由记录请求值记录的记录。
其他常用的参数 return_module , return_action, return_id,这组请求参数是用来当用户取消操作创建或编辑记录。
模块架构
所有模块,开箱即用(OOTB)或自定义,位于<sugar root>/modules/文件夹。创建模块来表示Sugar中的对象(例如联系人),将对象的数据存储在数据库中,并提供一个界面来创建、编辑和删除对象记录。
"应用程序架构架" 部分先前提到了模块中详细视图操作的典型调用示例。模块有五个主要操作:
List View(列表视图) : 此控制器操作可用于模块的搜索窗体和搜索结果。用户可以执行诸如删除、导出、更新多个记录 (批量更新) 以及插入特定记录来查看和编辑详细信息的操作。当用户单击页面顶部的某个模块选项卡时, 默认情况下可以看到此视图。每个模块中的文件描述列表和搜索视图的内容。
Detail View(详细视图) : 详细信息视图显示特定记录的只读视图。通常, 这是通过列表视图的记录进入的。"详细信息" 视图显示自身和相关项 (子面板) 的详细信息。 子面板)是与父对象相关的项的微型列表视图。例如, 分配给项目的任务或商业机会的联系人将出现在 "项目" 或 "商业机会明细" 视图中的子面板中。 ./<module>/metadata/detailviewdefs.php 定义了模块的详细视图布局。./<module>/metadata/subpaneldefs.php 定义了在模块的详细视图页面中显示的子面板。
Edit View(编辑视图) : 当用户创建新记录或编辑现有数据的详细信息时, 将访问 "编辑视图" 页。也可以从列表视图直接访问 "编辑" 视图。<module>/metadata/editviewdefs.php 定义了一个模块的编辑视图页面布局。
Save(保存) : 当用户单击记录的 "编辑" 视图中的 "保存" 时, 将处理此控制器操作。
Delete(删除) : 当用户在一个记录的明细视图中单击 "删除" 或在子面板中列出的记录的详细视图中单击 "删除", 将处理此操作。
以下是UI框架驱动的。此框架依赖于所请求模块中的元数据文件。
./<module>/metadata/listviewdefs.php 描述列表视图的布局。
./<module>/metadata/searchdefs.php 描述列表视图上方的搜索表单选项卡。
./<module>/metadata/editviewdefs.php 描述编辑视图的布局。
./<module>/metadata/detailviewdefs.php 描述明细视图的布局。
除上述操作文件外, 以下文件还位于 ./<module>/文件夹中:
forms.php : 此文件包含两个函数, 用于在编辑/保存期间呈现用于验证的特定 javascript 或其他操作。默认情况下, 你可以把这些空, 让他们return '';
Menu.php : 此文件负责渲染 "快捷方式" 菜单, 它被更名为 "操作" 菜单, 如Sugar 6.0。在社区版中, "动作" 菜单显示在模块选项卡和最近查看的栏的下方。在Sugar的其它版中, "操作" 菜单在每个模块选项卡上显示。默认情况下, 通常添加一个链接以创建新记录, 以及指向要搜索的列表视图的链接。
Popup.php : 此文件充当位于 utils 文件夹下的弹出窗口类的封装。当模块要从相关模块中获取一个弹出记录列表时, 就会调用它。弹出类使用 Popup_picker.html 和./<module>/metadata/popupdefs.php 文件渲染弹出窗口。
Popup_picker.html : 用于显示模块的弹出窗口的弹出式类。
vardefs.php : vardefs. php 元数据文件定义了Sugar对象的 db 和 non-db 字段以及对象之间的关系。
field_arrays.php : 这个文件已被Sugar5.1以后版本的vardefs元数据替代,它已经被逐步淘汰。
下图显示了模块文件夹中的子文件夹:
以下子文件夹位于./<module>/ 文件夹:
Dashlets(面板) : 这些是在Sugar首页和仪表板标签上显示的面板。Sugar面板显示任何数据 (包括外部连接器的数据), 以及模块的列表视图和图表数据。作为一个自定义模块的开发人员, 您可以为您的新模块创建一个Sugar面板。对于您创建的每个Sugar面板, 您将在./<module>/Dashlets/文件夹中放置必要的文件。
language(语言) : 此文件夹保存模块的字符串文件。默认情况下, 您将有一个包含模块使用的所有字符串的 en_us.lang.php 文件。这些字符串由 mod_strings 变量表示, 在全局 mod_string 调用后随时访问。"帮助" 子系统使用位于此文件夹中的 html 文件。Sugar提供了通过新语言包的管理面板进行多语言支持和动态加载的功能。
metadata(元数据) : 在这个文件夹中添加了特定于模块的元数据文件, 增加了更多的元数据和扩展到Sugar平台。此目录中的大多数文件和文件夹都可以被一个同名的文件重写 ./custom/<module>/metadata/目录。此目录中的文件和文件夹包括:
additionaldetails.php : 列表视图中显示的弹出窗口的内容
detailviewdefs.php : 明细视图的字段布局
editviewdefs.php : 编辑视图的字段布局
listviewdefs.php : 在列表视图中显示的表头布局
popupdefs.php : 模块的弹出式视图的搜索字段和列表列
quickcreatedefs.php : 在应用程序的多个区域中使用的快速创建表单的布局
searchdefs.php : 列表视图中基本搜索和高级搜索表单的字段布局。
SearchFields.php : 模块中唯一搜索字段定义的映射
studio.php : 工作室的映射, 用于标识重写模块的标准元数据文件的文件
subpaneldefs.php : 在模块的详细视图中显示子面板的布局
subpanels : 这是一个文件夹,放置模块定义的显示在其他模块详细视图的子面板(一对多或多对多)存在一个适当的关系
tpls : 用于各种模块页眉、页脚等的 smarty 模板文件
views : 此文件夹包含可重写默认模型-视图-控制器 (mvc) 框架视图文件的文件。视图文件可以在 smarty 模板或输出 html 上执行多个操作, 允许开发人员修改和扩展默认 ui 显示类并完全控制用户界面。
用户界面框架
sugarcrm 使用模型-视图-控制器 (mvc) 模式的实现作为所有应用程序交互的基础。与 mvc 框架紧密合作是一个元数据驱动的 ui 框架, 其中用户界面的高级规范在元数据结构中描述。
扩展框架
Sugar的扩展框架使您能够实现现有模块的自定义或创建新的模块。您可以以通过安全的升级方式各种扩展框架功能来扩展Sugar的大部分功能。Sugar的"系统管理"提供模块生成器工具和工作室工具使您能够进行如下所述的自定义。然后, 您可以通过添加安全升级自定义代码来进一步扩展系统。可扩展的区域为:
Modules : 创建新的模块并将它们添加到Sugar中
Vardefs : 自定义字段添加到自定义模块添加到现有模块中
Relationships : 创建自定义模块与模块之间的关系
Subpanels : 为现有模块创建/添加新的子面板定义
Strings : 重写或添加到模块和应用程序的字符串
Menus : 重写或添加到操作菜单
Layout Defs : 指定显示的子面板和它们的显示顺序。创建自定义模块的布局定义, 并将其作为子面板添加到现有模块的布局定义中。
Sugar面板
Sugar面板是一个框架, 提供Sugar面板容器将包括在Sugar UI中。Sugar面板容器对象显示和与Sugar面板数据交互, 与外部来源如RSS, 以及web 服务如谷歌地图。最初发布在Sugar 4.5版本中, Sugar面板是一个强有力的新的展示方式, 结合高度功能 mash-ups 在一个有吸引力和容易定制的 AJAX-based ui 框架。Sugar面板位于Sugar首页, 允许通过简单的拖放工具定制。Sugar面板框架允许开发者轻松地创建新的Sugar面板, 可以通过模块装载器安装。
网络服务
Sugar为开发者提供了一个 web 服务 api 接口, 用于构建与Sugar的集成的读写数据。Sugar通过 soap 和 rest 协议的 NuSOAP php 实现提供了 web 服务 api。soap (简单对象访问协议) 用于通过 http 协议中继消息来进行远程过程调用。SugarSoap api, 内置在 NuSOAP php 库的顶端。rest (代表状态传输) 用于通过发送和接收 json/序列化格式的消息来通过 http 协议进行方法调用。框架支持为 rest 添加多种格式。例如, 可以添加 xml 格式以发送和接收数据。
连接器
云连接器框架使开发者能够将外部 web 服务和小部件的数据集成到它们的Sugar安装中。来自现有模块 (如客户、联系人和潜在顾客) 的数据可以充当检索外部数据的输入。
Sugar内的连接器类创建了一个集成第三方系统在Sugar内的框架。目前有三种不同的基础集成。文档允许Sugar将文档上载到第三方系统, 从该系统下载文档, 并在以后允许Sugar安装这些文档 (如果第三方系统支持) 共享。会议有助于Sugar与外部会议系统或其他会议系统集成, 从而创建和编辑会议, 邀请与会者参加会议, 并在电子邮件邀请中包括外部会议信息。提要集成类型允许Sugar从第三方来源获取新闻复制数据, 并将其显示在用户主页上的 "我的活动" 流中。
---------------------
个人公众号谢谢各位老铁支持
SugarCRM开发入门的更多相关文章
- openresty 前端开发入门五之Mysql篇
openresty 前端开发入门五之Mysql篇 这章主要演示怎么通过lua连接mysql,并根据用户输入的name从mysql获取数据,并返回给用户 操作mysql主要用到了lua-resty-my ...
- java WEB开发入门
WEB开发入门 1 进入web JAVASE:标准- standard JAVA桌面程序 GUI SOCKET JAVAEE:企业-浏览器控制 web 2 软件结构 C/S :client ...
- [译]:Xamarin.Android开发入门——Hello,Android Multiscreen深入理解
原文链接:Hello, Android Multiscreen_DeepDive. 译文链接:Xamarin.Android开发入门--Hello,Android Multiscreen深入理解. 本 ...
- [译]:Xamarin.Android开发入门——Hello,Android深入理解
返回索引目录 原文链接:Hello, Android_DeepDive. 译文链接:Xamarin.Android开发入门--Hello,Android深入理解 本部分介绍利用Xamarin开发And ...
- [译]:Xamarin.Android开发入门——Hello,Android快速上手
返回索引目录 原文链接:Hello, Android_Quickstart. 译文链接:Xamarin.Android开发入门--Hello,Android快速上手 本部分介绍利用Xamarin开发A ...
- VR原理讲解及开发入门
本文是作者obuil根据多年心得专门为想要入门的VR开发者所写,由52VR网站提供支持. 1. VR沉浸感和交互作用产生的原理: 在之前,我们观看一个虚拟的创造内容是通过平面显示器的,52VR ...
- Eclipse_luna_J2EE_For_JS+tomcat8.0环境搭建、配置、开发入门
一.所有需要的软件.插件等下载地址 J2SE的官方下载路径:http://www.oracle.com/technetwork/java/javase/downloads/index.html Ecl ...
- OWIN的理解和实践(三) –Middleware开发入门
上篇我们谈了Host和Server的建立,但Host和Server无法产出任何有实际意义的内容,真正的内容来自于加载于Server的Middleware,本篇我们就着重介绍下Middleware的开发 ...
- [Cordova] Plugin开发入门
[Cordova] Plugin开发入门 Overview Cordova的设计概念,是在APP上透过Web控件来呈现Web页面,让Web开发人员可以操作熟悉的语言.工具来开发APP.使用Web页面来 ...
随机推荐
- 关于Toad的Cannot load OCI DLL问题
昨天重新安装了新版本的JDK,突然发现Toad连接的时候报Cannot load OCI DLL....问题,网上查找了多种方法均不见效. 后调整系统环境变量配置,还原了之前安装的JDK版本,问题修复 ...
- Linux 的路由功能
目录 文章目录 目录 前文列表 路由器 Router 路由 Routing 静态路由与动态路由 通过路由实现的全网通信示例 Linux 作为路由器 route 指令 路由表项的类型 ip route ...
- resultMap的使用总结
Mybatis:resultMap的使用总结 resultMap是Mybatis最强大的元素,它可以将查询到的复杂数据(比如查询到几个表中数据)映射到一个结果集当中. resultMap包含的元素 ...
- W3C验证工具
HTML验证工具:http://validator.w3.org/ CSS验证工具:http://jigsaw.w3.org/css-validator/
- sha256---利用java自带的实现加密
利用java自带的实现加密:参考https://jingyan.baidu.com/article/2fb0ba40a2ef2b00f3ec5f74.html /** * 利用java原生的摘要实现S ...
- django.db.migrations.exceptions.BadMigrationError: Migration tests in app bl
这个错误基本上都是 替换文件后才会出现的问题 因为你替换后他的日志文件没有完全替换的话,那么日志对应不到就会出现这样的问题, 一个模糊的处理办法:重新进行数据迁移:首先删除migrations中除去_ ...
- 【Qt开发】在QLabel已经显示背景图片后绘制图形注意事项
主要是要解决图形覆盖的问题,通常的办法就是对QLabel进行子类化,并重载函数: void myLabel::paintEvent(QPaintEvent *event) { QLab ...
- python 并发编程 协程 greenlet模块
一 greenlet模块 不敢是yield,还是greenlet都没有实现检测io,实现遇到io切换效果 如果我们在单个线程内有20个任务,要想实现在多个任务之间切换,使用yield生成器的方式过于麻 ...
- C# 字符串、字节数组互相转换
/// <summary> /// MD5加密 /// </summary> /// <param name="sender"></par ...
- HDU 1160 FatMouse's Speed (动态规划、最长下降子序列)
FatMouse's Speed Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...