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

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

个人工作台

个人工作台对象

个人工作台

个人工作台

站点根、工作台,都是属于栏目容器。栏目容器可以管理子栏目,定义团队成员。栏目容器也叫做空间。

1   站点成员空间

1.1   个人区 root['desks']

所有站点成员存放在个人区,位于 root['desks']

个人区的 object_types

('HomeContainer', 'AppContainer', 'Container')

个人区下面是所有的个人工作台,可以通过dict方法访问:

for home in root['desks'].values():
    print home.name

下面用 root.profiles 来管理站点成员空间

1.2   成员空间 get_home

得到某个人(pid)的成员空间:

home = root.profiles.get_home(pid)

成员空间的 object_types

('Home', 'AppContainer', 'Container')

成员空间可以是如下状态 stati

  • profile.member: 激活的成员
  • profile.removed: 用户被删除
  • profile.disabled: 用户被禁用
  • profile.unlicensed: 未授权
  • profile.excluded: 许可被排除(本来有的)

2   个人属性

2.1   设置个人属性 set

每个人会有一些个性化的设置, 比如个人偏好设置等。

可以设置profile:

root.profiles.set(pid, name, value)

2.2   获取个人设置 get

获取:

root.profiles.get(pid, name, default)

2.3   个人的站内公钥 get_public_key

得到某个人的公钥:

root.profiles.get_public_key(pid)

可以用于站点签名验证(TODO)。

3   个人常用列表

经常需要维护我常用的列表,比如:

  • users: 我常用的人员
  • gorups: 常用的分组
  • search-terms: 常用的搜索
  • datamanagers: 常用的表单库
  • files: 常用的文件

3.1   获取我常用的 get_recent

root.profiles.get_recent(pid, name)

其中:

  • pid: 用户
  • name: 常用信息代号

3.2   更新我常用的 update_recent

root.profiles.update_recent(pid, name, value, size)

其中:

  • pid:用户
  • name:常用信息代号
  • value:新增的常用
  • size:常用列表最大保留多少

注意,最近更新的数据,仍然可以通过 root.profiles.get(name) 获得,返回的内容是:

{'count':15, # 保存多少个最近使用项
 'list':[]   # 全部的最近使用项
 }

4   工作台栏目

工作台的栏目管理,和站点栏目管理是类似的。

如果需要编写一个可以在工作台安装的栏目,可以定制一个 home_setup_ 开头的安装脚本。

首先需要部署一个应用容器:

if name in context: # 已经安装卸载工作台应用功能,返回错误信息
    return '该栏目已安装'

# 没有传入栏目title就用name
container = context.add_appcontainer(name, title="my title")
context.navs.append(container)

这个栏目必须和一个脚本关联,工作台将显示这个脚本的标题和图标。

  1. 优先使用栏目默认查看方式的标题:

    container.settings['default_view'] = default_view
    container.index()
    
  2. 有些栏目没默认查看方式,而是点击展开,这时候用 on_nav_expand 脚本的标题:

    # 二级导航展开设置
    container.settings['on_nav_expand'] = on_nav_expand
    container.index()
    

5   收藏 home['myfavorites']

收藏是工作台的一个预制表单库栏目,任何对象都可以被收藏

5.1   收藏一个对象

其实是在表单库中添加一个表单页,以对象的 uid 作为名字:

  uid = root.object_uid(obj)
  fav = home['myfavorites'].add_dataitem(
                  {"title":obj.md['title'],
                  'list': [uid],
                  'type': obj.object_types[:1]})
  fav.index()

收藏本身是一个表单,其 ``type`` 记录了收藏对象的 ``content_type`` 。

5.2   删除一个收藏

query_direct = QuerySet().anyof(path=home['myfavorites'])\
                     .anyof(list=[context_uid])\
                     .exclude(type=['Favorite'])
if query_direct:
    del home['myfavorites'][query_direct[0].name]

5.3   添加一个收藏单

type 取值为 ["Favorite"]

fav = home['myfavorites'].add_dataitem(
                {"title":obj.md['title'],
                'list': [uid],
                'type': ["Favorite"], })
fav.index()