应用软件包
软件包相关接口
应用软件包是一种特殊的站点内容,通过 root.packages 管理。
目录
- 1 软件包管理
- 2 应用市场管理
- 3 表单定义 form
- 4 扩展属性
- 5 阶段
- 6 工作流
- 6.1 注册工作流定义 register_workflow
- 6.2 获取流程对象 get_workflow_obj
- 6.3 获取流程定义json get_workflow
- 6.4 获取流程步骤 get_workflow_step
- 6.5 查看应用包的所有流程 list_workflows
- 6.6 删除流程 remove_workflow
- 6.7 移除流程步骤 remove_workflow_step
- 6.8 增加流程步骤 add_workflow_step
- 6.9 查看应用包的所有流程步骤 list_workflow_steps
- 6.10 更新流程步骤 update_workflow_step
- 6.11 增加流程动作 add_workflow_action
- 6.12 获取流程动作 get_workflow_action
- 6.13 删除流程动作 remove_workflow_action
- 6.14 更新流程动作 update_workflow_action
- 7 python 脚本
- 8 规则
- 9 站点模板
- 10 资源文件
- 11 模板
1 软件包管理
1.1 查看全部应用包 keys
查看已经安装的所有应用包:
package_names = root.packages.keys()
其中有一个特殊的软件包,名字叫 zopen.builtin ,用于存放站点特有的定制内容。定制的表单、流程、阶段等存放在这个软件包中。
1.2 创建一个新软件包 new
软件包里面存放了应用的定义逻辑和代码。
先得创建一个应用软件包:
package = root.packages.new('zopen.test', {'title':'zopen.xxx', description:''})
看看这个应用软件包的名字,我们发现加了一个公司名称的前缀名字空间:
>>> pkg.name 'zopen.test_app'
在软件包里面,还能够定义流程、阶段、规则、python脚本、皮肤、静态资源等各种信息。
1.5 查找插件 list_plugins
平台通过前缀命名约定的脚本来定义插件。
查找出全部应用中指定前缀的脚本:
plugins = root.packages.list_plugins( prefix=['viewlet_datacontainer_', 'viewlet_all_'], categories=[])
其中:
- prefix:脚本的前缀
- categories:所在应用的分类
1.6 得到站点软件包对象 []
得到一个应用包对象:
pack_obj = root.packages['zopen.test']
站点默认有一组只读的内置软件包,可以检查软件包是否是内置:
pack_obj.in_memory
1.7 在站点卸载软件包 remove
卸载、删除一个安装的应用包:
root.packages.remove('zopen.test')
卸载之前会执行 uninstall 脚本,也可以忽略 uninstall 脚本卸载:
root.packages.remove('zopen.test', ignore_uninstall=True)
2 应用市场管理
2.1 搜索应用市场 search_appstore
根据名字或者分类,搜索市场,返回软件包的信息:
# 搜索全部软件包 packages = root.packages.search_appstore() # 搜索文档分类的软件包 packages = root.packages.search_appstore(category='document') # 搜索zopen.teamspace软件包的信息 packages = root.packages.search_appstore(name='zopen.teamspace')
2.2 在应用市场安装软件包 install
在应用市场安装 (升级) 一个应用包:
pkg_obj = root.packages.install(package, upgrade=False, is_temp=False)
其中:
package: 软件包的名字,如 zopen.test
upgrade: 安装的时候是否执行升级程序,升级程序是 upgrade_VERSION 命名的脚本
is_temp:是否临时修订。如果是,下次升级的时候,会先删除这个软件包
通过 pkg_obj.is_temp 可以检查是否是一个临时修订软件包。
3 表单定义 form
3.1 在软件包中注册表单 regsiter_form
用json描述表单定义:
form_def = {"name":'sales', "title":'',"description":'', "template": "", # 生成表单的模板'on_validation':"", # 字段正确性整体校验脚本 'object_types':['DataItem'], # 语义定义用于的对象类型 'tag_groups': "", # 所在容器的标签组设置'on_update':""" """, # 保存之后的触发脚本"fields" : [ # 所有的字段 {"name":"title", "type":"TextLine", "title":'任务标题', }, {"name":'description': "type": "Text", "title":'任务说明', "rows":3, }, {"name":"startend", "Type":"Panel", "title":"时间", "layout":'horizontal', # vertical "fields":[{"name":"start, "type": "Date", "title": '开始时间',}, {"name":"end", "type": "Date", "title": '结束时间',}, ] }, {"name":"level", "type": "Integer", "title": '任务等级', "size":18,}, {"name":"local_paths", "type": "LocalPathSelect", "title": '本地路径', "multiple": False, "mode": "fileonly", }, {"name":"responsibles", "type":"PersonSelect", "title":'负责人', "validation_expr":"not value and'需要一名检查人'",} {"name":"reviewers", "type":"GrowingTable", "title":'审核人', "fields": [{"name":"title","type":"TextLine""title"" 标题 ",}, {"name":"description", "type":"Text" "title"" 描述 ",}, ] } ], }
可以注册一个表单定义,用于表单、表单库,或者栏目:
root.packages.register_form('zopen.sales', form_def)
3.2 得到表单对象 get_form_obj
获取表单对象:
form_obj = root.packages.get_form_obj(name, custom=False)
其中 :
- custom是否读取可能存在的定制版本
3.3 得到表单定义json get_form
获取表单(dict):
data = root.packages.get_form(name, custom=False)
其中 :
- custom是否读取可能存在的定制版本
3.4 获取表单字段定义json get_form_field
获取表单字段信息(dict, 是否定制版本):
data = root.packages.get_form_field(form_name, name, custom=False)
其中:
- form_name: 表单名字,比如 zopen.tasks:task
- name: 字段的名字,比如 title
- custom是否读取可能存在的定制版本
3.7 更改表单字段 update_field
root.packages.update_field(field, data)
3.8 表单是否存在 has_form
root.packages.has_form(form)
3.9 移除表单 remove_form
root.packages.remove_form(name)
3.10 查看软件包的所有表单 list_form
root.packages.list_forms('zopen.test')
3.11 查看软件包的所有表单 list_all_forms
root.packages.list_all_forms(object_types=['DataItem', 'DataContainer', 'AppContainer'])
输入:
- object_types: 表单的类型条件
- includ_custom : 是否包含定制
输出按照应用分隔的全部属性集:
{'<应用的标题>':[{name:<完整的名字>, title:}]}
4 扩展属性
4.1 注册扩展属性定义 register_mdset
属性集的注册类似表单:
root.packages.register_mdset('zopen.sales', {name: title:, description:, fields:, on_update:, template:, obejct_types})
4.3 获取扩展属性定义json get_mdset
data = root.packages.get_mdset(name, custom=False)
4.4 获取扩展属性字段 get_mdset_field
data = root.packages.get_mdset_field(mdset_name, name, custom=False)
4.5 移除扩展属性 remove_mdset
root.packages.remove_mdset(name)
4.6 查看软件包的所有扩展属性 list_mdsets
root.packages.list_mdsets('zopen.test')
4.7 获取全部属性集 list_all_mdsets
root.packages.list_all_mdsets()
可选择是否包含定制项,输出按照应用分隔的全部属性集:
{'<应用的标题>':[{name:<完整的名字>, title:}]}
5 阶段
5.1 注册阶段定义 register_stage
采用 json 格式来描述阶段:
stages = {'name':'sales', 'title':'Sales', 'description':'Description', 'stages': [{"name":"valid", "title":"需求确认", "description": "分配的新单", "on_enter": ""# 进入阶段的触发脚本}, {"name":"initial", "title":"初始"} ] }
注册一个阶段定义到应用包:
root.packages.register_stage('zopen.sales', stages)
5.2 获取阶段对象 get_stage_obj
obj = root.packages.get_stage_obj(name, custom=False)
5.3 获取阶段定义json get_stage
data = root.packages.get_stage(name, custom=False)
5.4 移除阶段 remove_stage
root.packages.remove_stage(name)
5.5 查看应用包的所有阶段
root.packages.list_stages('zopen.test')
6 工作流
6.1 注册工作流定义 register_workflow
工作流由步骤 Step 和操作 Action 组成:
workflow_json = {'name':'sales', 'title':'销售流程', 'description':'销售', 'steps':[{"name":"start","title":'新的销售机会',"fields": ['title','client','responsibles','case_info','subjects'],"invisible_fields": ['plan_info','files','folder','lastlog','log','start'],"on_enter":"", "condition": '',"hours": 0, # 时限, 如果非 0,流程任务会创建生成 deadline"stage":'valid',"responsibles":'[request.principal.id]', "actions": [{"name":'submit',"title":'提交',"type":'default', # 正常的流程操作"condition":'', "finish_condition":'',"next_steps":['communicate'],"on_submit":"", } ] }, {"name":"auto_step" "title": '这是一个自动步骤,无人参与', "condition":'',"on_enter":"", "stage":'planing', "actions": [{"name":'submit',"title":'触发',"type":'auto', # 自动步骤"condition":'', "finish_condition":'',"next_steps":['communicate'],"on_submit":"", } ] }, {"name": "communicate", "title": '了解需求背景', "fields": ['title', 'case_info', 'files', 'log', 'start', 'subjects'], "invisible_fields":['plan_info', 'lastlog'], "on_enter": "","condition":'', "stage":'planing', "responsibles":'context["responsibles"]', "actions": [{"name":'duplicated',"title":'重复或无效, 不再跟进',"type":'error', # 这里 error,表示流程异常操作"next_steps":[], "finish_condition":'',"condition":'', }, {"name": '8372', "title": '需求了解完毕', "type": 'default', "next_steps": ['submit_plan'], "finish_condition":'',} ] } }]}
将这个工作流注册到系统:
root.packages.register_workflow('zopen.sales', workflow_json)
6.2 获取流程对象 get_workflow_obj
obj = root.packages.get_workflow_obj(name, custom=False)
6.3 获取流程定义json get_workflow
root.packages.get_workflow(name, custom=False)
如:
salse_query_wfl = root.packages.get_workflow('zopen.sales:sales_query')
6.4 获取流程步骤 get_workflow_step
root.packages.get_workflow_step('zopen.test', workflow_name, step_name)
6.5 查看应用包的所有流程 list_workflows
root.packages.list_workflows('zopen.test')
6.6 删除流程 remove_workflow
root.packages.remove_workflow(name)
6.7 移除流程步骤 remove_workflow_step
root.packages.remove_workflow_step('zopen.test', workflow_name, step_name)
6.8 增加流程步骤 add_workflow_step
root.packages.add_workflow_step('zopen.test', workflow_name, step_name)
6.9 查看应用包的所有流程步骤 list_workflow_steps
root.packages.list_workflow_steps('zopen.test', workflow_name)
6.10 更新流程步骤 update_workflow_step
root.packages.update_workflow_step('zopen.test', workflow_name, **kw)
6.11 增加流程动作 add_workflow_action
root.packages.add_workflow_action('zopen.test', workflow_name, step_name, action_name)
6.12 获取流程动作 get_workflow_action
root.packages.get_workflow_action('zopen.test', workflow_name, step_name, action_name)
6.13 删除流程动作 remove_workflow_action
root.packages.remove_workflow_action('zopen.test', workflow_name, step_name, action_name)
6.14 更新流程动作 update_workflow_action
root.packages.update_workflow_action('zopen.test', workflow_name, step_name, action_name)
7 python 脚本
7.1 注册python脚本 register_script
在应用包里面注册一个脚本:
root.packages.register_script('zopen.sales', {'name':'setup', 'permission':'Access', 'template':'standard', 'icon':'folder-o', 'args':'','script':'print "hello, world"', })
其中 icon 使用fontawsome中的图标名字, template 是输出套用的模板:
- standard: 系统标准模版,支持应用权限、编辑和设置
- blank: 不使用现有模版页首和页脚,但保持现有界面风格, 保留 css/js 的模板
- json: json api
- kss: 页面调用处理脚本(ajax)
- none: 不使用任何模版
7.3 得到脚本对象 get_script_obj
通过名字,可以得到:
script_obj = root.packages.get_script_obj(name='xxx.xxx:xxx')
返回的是脚本对象
7.4 查看应用包的所有脚本 list_scripts
root.packages.list_scripts(package_name)
7.5 移除脚本 remove_script
root.packages.remove_script(name)
8 规则
8.1 创建一个规则 register_rule
root.packages.register_rule('zopen.ocr', {'name':'ocr', 'title':'中文 OCR', 'description':'对移入文件夹的文档进行 ocr', 'event':'movein', 'object_types':['File'], 'extensions':"jpg, tiff, png, pdf, gif, jpeg, tif", 'script':'root.call_code()'})
8.2 获取规则对象 get_rule_obj
root.packages.get_rule_obj(name)
8.3 获取规则 get_rule
root.packages.get_rule(name)
8.4 查看软件包的所有规则 list_rules
root.packages.list_rules('zopen.test')
8.5 移除规则 remove_rule
root.packages.remove_rule(name)
8.6 获取所有规则集 list_all_rules
root.packages.list_all_rules()
按照应用分隔的全部规则:
{'<应用的标题>':[{name:<完整的名字>, title:}]}
9 站点模板
9.1 注册皮肤 register_skin
把这个皮肤注册到站点的皮肤注册表:
root.packages.register_skin('', {'name':'bootstrap', 'title':'Twitter 的 Bootstrap 风格皮肤', 'template':template, 'description':''})
也可以注册到某个应用包中:
root.packages.register_skin('zopen.cool_skin', {'name':'bootstrap', 'title':'Twitter 的 Bootstrap 风格皮肤', 'template':template, 'description':''})
9.4 查看软件包的所有皮肤 list_skins
root.packages.list_skins(package_name)
9.5 移除皮肤 remove_skin
root.packages.remove_skin(name)
9.6 得到皮肤模板 get_skin_template
root.packages.get_skin_template(name)
9.7 获取全部皮肤 list_all_skins
root.packages.list_all_skins()
按照应用分隔的全部皮肤:
{'<应用的标题>':[{name:<完整的名字>, title:}]}
10 资源文件
10.1 得到软件包的缓存路径 packages_cache_url
root.packages.cache_url(request)
需要获取一个资源文件的完整 URL,参考以下代码:
root.packages.cache_url(request) + 'zopen.pkg_name/resources/filename.ext'
10.2 其他的接口
root.packages.add_resource(ackage_name, path, stream, overwrite=False) root.packages.get_resource(package_name, path='/') root.packages.list_resources(package_name='') root.packages.remove_resource(package_name, path)
11 模板
11.1 注册一个模板对象 register_template
root.packages.register_template('zopen.sales', {'name':'lal', 'code':'',})
11.2 获取模板对象 get_template_obj
root.packages.get_template_obj(name)
11.3 获取模板 get_template
root.packages.get_template(name)
11.4 查看应用包的所有模板 list_templates
root.packages.list_templates('zopen.test')
11.5 移除模板 remove_template
root.packages.remove_template(name)