sugarCrm翻译
Logic Hook
hook配置信息和触发器定义在以下目录中
./custom/Extension/modules/<module>/Ext/LogicHooks/<file>.php
./custom/modules/<module>/logic_hooks.php(避免使用)
./custom/Extension/application/Ext/LogicHooks/<file>.php
./custom/modules/logic_hooks.php(避免使用)
具体的hook代码在配置文件中制定, 但是建议放在与之相关的module目录中去
配置文件还定义了执行hook的类名和方法名
可以通过代码调用去移除hook: remove_logic_hook("<module>", "before_save", $my_hook);
为防止发生无限循环执行hook的情况, 可以在类里加一个属性, 来记录是否已经执行过hook, 从而避免不必要的hook执行
hook分类:
db保存前, 保存后
数据删除前, 后 ..
登录, 退出: 成功/失败
job执行失败
job执行失败后重试
数据展示到Listview或Editview前进行处理
Application Hooks
after_ui_frame
after_ui_footer
server_round_trip
after_delete
after_relationship_add
after_relationship_delete
after_restore
after_retrieve
after_save
before_delete
before_restore
before_save
process_record
Job Queue Hooks
job_failure
job_failure_retry
User Hooks
after_load_user
after_login
after_logout
before_logout
login_failed
Sugar Logic(逻辑运算/数学运算??)
方便自定义的业务逻辑代码的创建, 管理以及在服务器端和客户端重用
他由许多互相独立和可扩展的组件构成, 其中的一个重要组件就是 Sugar Formula 引擎, 它用来解析和求值那些人类读懂的数学公式
Formula 是一个代码表达式, 包含了嵌套的函数和变量, 符合 Sugar Formula 引擎语法, 用来实现比如 加法, 乘法, 逻辑运算: add(1, 2); not(equal($billing_state, "CA")); multiply(number($employees), $seat_cost, 0.0833); ...
Function 可以被调用的函数, 他的输出结果无论在服务端还是前段都是一样的
Trigger 一个只返回true或false的Formula, 他在这种情况下被执行: 当一个公式中的字段被更新或者一条记录被获取/保存, 此时他会通知关联的action去执行一些动作
Action 以某种方法去更改当前记录或者布局的函数, 大多数有两个参数, 一个目标, 一个formula; 比如说 style action(样式动作), 需要传递一个字段, 和一个字符串样式, 就可以用传入的样式来更改字段的样式; 列表
Dependencies 是由触发器和action组成的用来表达业务逻辑的单元, 比如: 当一个下拉选项中的值没有被选中的时候, 对应的面板要隐藏起来
Sugar Logic Types (类型)
number 数值类型, string 字符串类型, enum 枚举类型(列表类型) link 连接类型(描述两个表之间的关联关系)
Sugar Logic 基本特性(Sugar Logic Based Features)
计算字段的值, 如显示的时候, 将值乘以0.1而不是原值显示
字段关联, 比如当一个字段值在某一个范围的时候才在页面中显示出来
下拉列表关联, 如多级联动效果
自定义
自定义Function,
他将会存放在/custom/include/Expressions/Expression/{Type}/{Function_Name}.php
文件名必须是: {functionName}Expression.php, 类名跟文件名要一样, 例如继承了数字类型的function: class AbcExpression extends NumericExpression{}
必须要同时定义php和JavaScript两个相同的计算逻辑, 当在admin面板中操作"Rebuild Sugar Logic Functions"重新构建时, 相关的js代码(代码文件??)就会被编译出来
自定义Action
自定义的action就不用像function那样保持前后端一致了, 比如, 填写表单时用户输入错误了, 前段会有一个alert提醒, 但是后端会记录一条日志
他会存放在: custom/include/Expressions/Actions/{ActionName}.php ,
文件名必须以Action.php结尾, 类名跟文件名要一样, 同时得继承AbstractAction类: class WarningAction extends AbstractAction{}
必须定义一些基本的方法: "fire", "getDefinition", "getActionName", "getJavascriptClass", "getJavscriptFire"
Extensions 扩展
扩展的目的是为了提供一个修改Sugar metadata(vardefs and layouts)的渠道,
他的文件存放在: ./custom/Extension/application/Ext/ 和 ./custom/Extension/modules/<module_name>/Ext 目录下
这些文件会通过一个事先定义好的规则(例如: vardef.ext.php)被合并成一个单独的文件,
比如vardefs文件, ./custom/Extension/modules/Accounts/Ext/Vardefs/ 目录下的所有文件都会被合并, 里边的变量合并成一个数组放到./custom/modules/Accounts/Ext/Vardefs/vardefs.ext.php中, 其中:
如果你通过studio添加了一个test字段, 就会在./custom/Extension/modules/Accounts/Ext/Vardefs/ 目录下生成一个 sugarfield_test_c.php文件, 里边很简单就一行: $dictionary['Task']['fields']['test_c']['labelValue']='test';
./ModuleInstall/extensions.php 包含了所有的扩展映射关系
扩展的属性:
1. name: 扩展的内部名字, This is used in method names such as rebuild_layouts (???)
2. install definition: manifest文件的段的名字
3. ext directory : 扩展文件存放的目录
4. ext file: 合并后存放的文件名
5. useage: 扩展在哪里被用到了
扩展种类:
| ActionFileMap | 如果你不想把视图文件放在./custom/modules/<module>/views/view.<name>.php, 这个文件定义了action到文件的映射关系 | |
| ActionReMap | 将一个action映射到另一个已经存在的action | |
| ActionViewMap | 给module添加一个action映射, 通常 | |
| Administration | 在admin页面添加一个管理面板 (Used to add new administrative panels to the admin section) | |
| Dependencies | 给字段或者表单添加一个依赖(关联)的行为去处理一些复杂的逻辑(studio界面暂时不能用) | |
| EntryPointRegistry | 添加额外的入口映射 | |
| Extensions | 允许用户在框架内自定义扩展, 他将跟./ModuleInstaller/extensions.php中的扩展一起使用 | |
| FileAccessControlMap | 用于限制系统用户的特定视图操作 (Used to restrict specific view actions from users of the system. 限定系统用户可以访问哪些页面??) | |
| GlobalLinks | 定义全局可用的超链接 | |
| Include | 用来映射系统中额外的modules, 通常是构建工具利用他来生成一个module | |
| JSGroupings | 添加js组(Used to add additional JavaScript groupings the system ??) | |
| Language | 他可以添加或者覆盖已有的语言描述, 相关的application 和 module 目录都能用到 | |
| Layoutdefs | 用来添加或者覆盖子面板的定义 | |
| LogicHooks | 给某一个action添加一个特定的功能, 比如在保存数据之前 | |
| Menus | 管理module的菜单, (会覆盖标准的菜单, 所以要全部重新定义) | |
| ScheduledTasks | 自定义计划任务 | |
| UserPage | 在用户管理详情页添加一个章节section | |
| Utils | 给工全局的具包(util)添加功能函数 | |
| vardefs | 添加或者覆盖vardefs | |
| WirelessLayoutdefs | 给移动端视图(mobile)添加一个子面板 | |
| WirelessModuleRegistry | 给移动端添加额外的modules |
sugarCrm翻译的更多相关文章
- 《Django By Example》第五章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者@ucag注:大家好,我是新来的翻译, ...
- 《Django By Example》第四章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:祝大家新年快乐,这次带来<D ...
- [翻译]开发文档:android Bitmap的高效使用
内容概述 本文内容来自开发文档"Traning > Displaying Bitmaps Efficiently",包括大尺寸Bitmap的高效加载,图片的异步加载和数据缓存 ...
- 【探索】机器指令翻译成 JavaScript
前言 前些时候研究脚本混淆时,打算先学一些「程序流程」相关的概念.为了不因太枯燥而放弃,决定想一个有趣的案例,可以边探索边学. 于是想了一个话题:尝试将机器指令 1:1 翻译 成 JavaScript ...
- 《Django By Example》第三章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:第三章滚烫出炉,大家请不要吐槽文中 ...
- 《Django By Example》第二章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:翻译完第一章后,发现翻译第二章的速 ...
- 《Django By Example》第一章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:本人目前在杭州某家互联网公司工作, ...
- 【翻译】Awesome R资源大全中文版来了,全球最火的R工具包一网打尽,超过300+工具,还在等什么?
0.前言 虽然很早就知道R被微软收购,也很早知道R在统计分析处理方面很强大,开始一直没有行动过...直到 直到12月初在微软技术大会,看到我软的工程师演示R的使用,我就震惊了,然后最近在网上到处了解和 ...
- ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第一章:创建基本的MVC Web站点
在这一章中,我们将学习如何使用基架快速搭建和运行一个简单的Microsoft ASP.NET MVC Web站点.在我们马上投入学习和编码之前,我们首先了解一些有关ASP.NET MVC和Entity ...
随机推荐
- 关于PHP中的全局变量global和$GLOBALS的不同区分
1.global Global的作用是定义全局变量,但是这个全局变量不是应用于整个网站,而是应用于当前页面,包括include或require的所有文件. 但是在函数体内定义的global变量,函数体 ...
- 洛谷P1494 【[国家集训队]小Z的袜子】
纪念自己独立完成的一道省选题(菜鸡如我只会看题解qwq) 还算是一道比较裸的莫队题把,比有的题目简单很多,也很好想怎么O(1)转移,比别的题就多了一个组合数计算(还有gcd??),还没算%意义下,也是 ...
- 修改element表格组件的样式
最近在开发一个项目,使用到了element中的表格组件,但是该组件的样式不是我们想要的样式,需要自己再调整,但是常常会遇到自己设置的样式无效,我使用的技术是Vue开发的 1. 页面使用了三栏布局,最右 ...
- lua 的元表与元方法
1. 元表与元方法, 相当于C++的函数重载 参考链接: https://blog.csdn.net/yueya_shanhua/article/details/52233228
- 微信小程序弹出可填写框两种方法
方法一: html页面: < view class = "container" class = "zn-uploadimg" > < butt ...
- Solr创建Core的两种方法
创建Core的两种方法: 第一种方法: 1.打开dos命令窗口,切换目录到${solr.home}\bin,然后输入:solr create -c corename之后回车: 2.打开solr安装文件 ...
- 搭建ubuntu14.04服务器必备环境
1. 设置网络 设置网络时,一定要设置好网卡,第一个网卡一定要设置为‘br0’(如下图),设置为其他的上不去网. 修改网络配置文件,命令:sudo gedit /etc/network/interf ...
- Django中间件基础笔记
django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法. 在django项目的se ...
- SpringSecurity认证处理流程
- linux+php实现定时任务[链接]
1.crontab 详细用法 定时任务 https://www.cnblogs.com/aminxu/p/5993769.html 2.查看crontab日志 https://www.cnblogs. ...