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 ...
随机推荐
- 队列 Queue 与 生产者消费模型
队列:先进先出 # from multiprocessing import Queue # Q = Queue(4) # Q.put('a') # Q.put('b') # Q.put('b') # ...
- 016、Dockerfile 常用命令(2019-01-07 周一)
参考https://www.cnblogs.com/CloudMan6/p/6864000.html Dokcerfile常见命令 FROM 指定base镜像 MAINTAINER ...
- Java入门系列 泛型
前言 <Java编程思想>第四版足足用了75页来讲泛型——厚厚的一沓内容,很容易让人头大——但其实根本不用这么多,只需要一句话:我是一个泛型队列,狗可以站进来,猫也可以站进来,但最好不要既 ...
- Delegate与Event关系
1.Delegate是类型,Event是成员(本质为成员方法),Event成员类型派生于Delegate.仅此! 2.大概就好比说委托是C++里一个方法的模板,而event是这个模板具体的实现
- 32. Springboot 系列(八)动态Banner与图片转字符图案的手动实现
使用过 Springboot 的对上面这个图案肯定不会陌生,Springboot 启动的同时会打印上面的图案,并带有版本号.查看官方文档可以找到关于 banner 的描述 The banner tha ...
- 搭建阿里云lnmp环境 (centos7+nginx+MySQL5.7.9+PHP7)
阿里云一台服务器出现问题! 我估计是一键安装包环境的原因,所以打算重新搭建下环境! 首先,当然是先做好快照!安全第一! 对系统盘做更换系统操作,装上纯净版的centos. 装好后,进入系统 一.挂载数 ...
- Andrew NG 机器学习编程作业5 Octave
问题描述:根据水库中蓄水标线(water level) 使用正则化的线性回归模型预 水流量(water flowing out of dam),然后 debug 学习算法 以及 讨论偏差和方差对 该线 ...
- 关于ajax及相关数据传输问题
之前整理的ajax相关应用笔记,一直没有时间整理,今天突然翻到特此将初稿大概的整理了一下,可能有点乱,欢迎指出不足之处. jQuery的ajax请求:complete函数一般无论服务器有无数据返回都会 ...
- Python 爬虫一 简介
什么是爬虫? 爬虫可以做什么? 爬虫的本质 爬虫的基本流程 什么是request&response 爬取到数据该怎么办 什么是爬虫? 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间 ...
- 在IntelliJ IDEA 中配置Ueditor富文本插件
这是我自学的配置教程,刚刚学习不太完善请谅解! 我会根据我的学习进程对此进行更贴,欢迎关注哦 ! 第一步:下载插件,地址:http://ueditor.baidu.com/website/downlo ...