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 ...
随机推荐
- HTML第三耍 图像标签
复习一下第二耍: <!doctype html> <html> <head> <meta charset="utf-8"> < ...
- 观察者模式--java
写在前面 钩子函数.注册函数.回调函数,他们的概念其实是一样的. 观察者模式,又可以称之为发布-订阅模式,观察者,顾名思义,就是一个监听者,类似监听器的存在,一旦被观察/监听的目标发生的情况,就会被监 ...
- jspdf简单使用
安装 npm install jspdf --save 英文输出 import jsPDF from 'jspdf-customfonts' let doc = new jsPDF() doc.tex ...
- Date类、SimpleDateFormat类
Date 构造方法: 1.无参数构造方法: Date date = new Date(); System.out.println(date);// Thu Mar 28 16:28:40 CST 20 ...
- ArcGIS坐标系转换出错:Error 999999执行函数出错 invalid extent for output coordinate system
本文主要介绍在用ArcGIS做坐标系转换过程中可能会遇到的一个问题,并分析其原因和解决方案. 如下图,对一份数据做坐标系转换: 过了一会儿,转换失败了.错误消息如下: “消息”中提示,“执行函数出错 ...
- 无法定位程序输入点 InitializeCriticalSectionEx、GetTickCount64
(1)方法一:在vc项目中把对应的方法名改为 InitializeCriticalSection.GetTickCount. (2)方法二:添加如下定义#define WINVER ...
- SSH整合方案一(带有hibernate.cfg.xml)
整体结构 1.导入响应的jar包 2.在web.xml中配置struts的过滤器和spring整合web的监听器 <!--配置Spring整合web的监听器--> <listener ...
- [译]Nuget.Server
原文 NuGet.Server是一个包,可用于使一个ASP.NET应用host一个package feed . 使用VS创建一个新的空WEB应用,添加Nuget.Server包. 配置应用的Packa ...
- 课堂测试——jsp登录界面设计
实现结果:在login.jsp页面提交用户名和密码(可以验证是否为空),点击登录跳转到loginResult.jsp页面进行验证并显示结果 JSP + JDBC + MySQL login.jsp 设 ...
- 第28月第22天 iOS动态库
1. NIMSDK 在 5.1.0 版本之后已改为动态库,集成方式有所改变,若需要集成高于此版本的 SDK,只需要做以下步骤: 将下载的 SDK 拖动到 Targets -> General - ...