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翻译相关推荐
- sugarcrm_通过SugarCRM休息
sugarcrm 2010年2月2日-作者在2010年2月2日增加了关于SugarCRM连接器的资源项目. 什么是REST? 常用缩略语 API:应用程序编程接口 CSS:级联样式表 DOM:文档对象 ...
- sugarcrm 数据库_使用SugarCRM连接器将数据连接到外界
sugarcrm 数据库 什么是连接器? 常用缩略语 Ajax:异步JavaScript + XML API:应用程序编程接口 DOM:文档对象模型 HTML:超文本标记语言 REST:代表性状态转移 ...
- SugarCRM中文文档翻译计划
SugarCRM中文文档翻译计划 点击这里报名参与翻译 SugarCRM是世界上优秀的客户关系管理系统,其先进的管理理念.管理技术和开源特性迅速被使用者和 开发者 所喜爱. 长期以来 ...
- Mysql函数group_concat、find_in_set 多值分隔字符字段进行数据库字段值翻译
Mysql函数group_concat.find_in_set进行数据库字段值翻译 场景 配方表:记录包含的原料 sources表示原料,字段值之间用逗号分隔 原料表:对应原料id和原料名称 现需要查 ...
- “Attention is All You Need 翻译
<p><img src="output_0_0.png" alt="png"></p> "Attention is ...
- 基于PyTorch的Seq2Seq翻译模型详细注释介绍(一)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qysh123/article/deta ...
- 全文翻译(全文合集):TVM: An Automated End-to-End Optimizing Compiler for Deep Learning
全文翻译(全文合集):TVM: An Automated End-to-End Optimizing Compiler for Deep Learning 摘要 人们越来越需要将机器学习应用到各种各样 ...
- 全文翻译(四) TVM An Automated End-to-End Optimizing Compiler
全文翻译(四) TVM An Automated End-to-End Optimizing Compiler 6.3 嵌入式GPU评估 对于移动GPU实验,在配备ARM Mali-T860MP4 G ...
- 全文翻译(三) TVM An Automated End-to-End Optimizing Compiler
全文翻译(三) TVM An Automated End-to-End Optimizing Compiler 5. 自动化优化 考虑到一组丰富的调度原语,剩下的问题是为DL模型的每一层,找到最佳的算 ...
最新文章
- QuickPart : 用户控件包装器 for SharePoint 2007
- 排错经历:openstack搭建dashboard进入输入帐号密码登录后报错
- 海拨3000点位的岛型堰塞湖
- 《Python核心编程》笔记 Python对象
- Objective-C 学习笔记
- 在知乎上泡了这么久,工作、工资、生活还是没有起色是什么原因?
- C语言课后习题(19)
- Python机器学习:梯度下降法005梯度下降法和数据标准化
- mysql单机在线迁移_MySQL 不停服务 在线进行100亿数据迁移切换
- 数据结构第三篇——线性表的链式存储之单链表
- 使用react-native做一个简单的应用-01项目介绍
- linux系统有gotoxy函数,linux下有没有类似gotoxy()的函数
- 鹏业安装算量常见安装问题处理
- 百度校园招聘和百度笔试
- 微信订阅号之政府认证
- using声明和using编译指令
- 北京大学计算机学院复试名单2021,北京大学研究生招生简章2021(北京大学研究生复试名单)...
- WORD如何设置打印? 三分钟学会WORD打印技巧
- vue获取当前时间和前一天时间_vue如何判断日期是今天?还是昨天?还是前天?...
- OC门电路和OD门电路的区别
热门文章
- Linux之文件系统和根文件系统
- KepServer问题解答
- 实现点击按钮导航条向左向右移动的状态
- php不通过js链接workeman,workerman 403毛病缘由与解决方法_PHP开发框架教程,workerman...
- Hibernate 使用log4j日志记录
- 这些CSS+HTML基础知识,你真的都知道吗
- python爬虫注意点
- 安装python2.7和3.6提示报错 microsoft.VC90.CRT
- Kubernetes Pod篇:带你轻松玩转Pod
- 快速上手Mac效率神器Alfred以及Alfred常用操作