大道至简,新一代企业应用无栈开发

平台之上,一种语言,可视化、脚本化、全端一体化开发

表单库

表单和表单库

表单管理

表单管理

表单存放在表单库中.

1   表单库 DataContainer

存储表单页,表单页是结构化的数据。类似传统数据库里面表的一行数据。

表单库的对象类型 obj.object_types:

('DataContainer', 'Container')

表单库是一个 容器 对象,包含 容器 对象的所有接口.

1.1   表单库状态

表单库的状态 obj.stati 包括一组:

  • datamanager.started: '活动', '启用'
  • datamanager.finished: '关闭', '已冻结, 禁止添加新表单'

1.2   新建表单库

在应用容器(AppContainer)中,创建一个名字为 sendifle 的表单库:

container = obj.add_datacontainer(name='sendfile',
              item_content_type='zopen.sendfile:sendfile',
              content_type='zopen.sendfile:sendfile_container',
              item_stage='zopen.sendfile:sendfile',
              item_workflow='zopen.sendfile:sendfile',
              title='文件外发',
              description='')

其中:

  • name: 表单库的名字
  • title: 表单的标题
  • description:表单的描述信息
  • item_content_type:表单的定义
  • content_type:(可选)表单库设置表单的定义
  • item_stage: (可选)表单的阶段定义
  • item_workflow:(可选)表单的工作流

1.3   表单库的设置信息

表单库 container 的设置表单保存后,信息存放在 container.md 中,比如:

container.md['title']
container.md['description']
container.md['reviewers']

2   表单页

表单页用来存放结构化的表单数据,是系统的基础内容,不能包含其他内容.

表单页的对象类型 obj.object_types:

('DataItem', 'Item')

2.1   创建表单页

如果希望添加表单的时候校验各个字段,可以用这个API:

item = obj.add_dataitem(data={'title':'the title', 'description':'the desc', 'age':12}, name='', **options)
item.index()

这个会指向相关的参数合法性校验,会自动设置默认值。其中:

  • data: 要添加的表单数据
  • name: 表单存放在容器中的key
  • options:这个是运行表单触发脚本所需要的一些额外的参数,如果没有,可以忽略

2.2   表单页的属性

上面新建的表单页 item 的属性存放在 item.md 中,比如:

item.md['title']
item.md['description']
item.md['age']

2.3   表单的状态

和文件类似,表单的默认状态包括:

  • visible: 保密
    • visible.default 普通
    • visible.private 保密。一旦保密,内容不再继承上层文件夹授予的查看权限。
  • modify: 编辑状态
    • modify.default 草稿
    • modify.archived 存档:一旦存档,文件禁止任何人删除、修改。
    • modify.published 发布:一旦发布,文件禁止任何人删除、修改。
    • modify.abandoned, '废弃', '流程单已被废弃,不可做任何其他处理'
    • modify.pending 流程运行,流程正在运行
    • modify.paused, 流程暂停, 暂停流程处理,此状态仅限于表单
    • modify.finished 编辑结束,表单流程结束,默认会进入这个状态

2.4   表单的阶段

阶段就是一种可自定义的状态,在软件包里面定义阶段。

内容所处的阶段状态,以前缀 stage 描述,比如:

  • stage.valid
  • stage.open
  • stage.finished

可以如下方法得到对象的stage:

stage = obj.state.get('stage')
print stage.name, stage.title, stage.description

3   附加菜单

可以将表单库放入批量选择等的附加菜单。

配置位于 obj.settings['addon_actions'] 中,存放的信息是:

[{"id":'default',            # 菜单ID
  "title":"分享",           # 菜单项名称
  "items":[{'uid':1212,'for':['Folder']},
           {'uid':1221, 'for':['Folder]}]     # 具体的表单
 }
]

4   表单库设置

4.1   表格显示列

container.settings['grid_columns'] = ('title', 'size', 'created', 'zopen.sales:query',)

4.2   表单定义

表单库是存储和管理表单数据的容器。表单库保存的表单类型:

container.settings['item_metadata'] = ('zopen.sales:query',)

4.3   表单使用的阶段

container.settings['item_stage'] = ('zopen.sales:query',)