应用程序商店
从管理员向您开放的目录中,把小程序(applet)安装到您自己的登录账户上。每一次安装都只针对一个登录账户,从不针对整个租户;私有目录之所以出现在这里,只是因为 Tenant Admin 把您关联到了它。这里没有任何东西是购买或付费的:商店里没有价格、方案或订单,付费小程序在商店之外另行安排。
概述
Applet Store 是一个平台画面,已登录的用户在这里浏览其登录账户获准访问的小程序目录,并把小程序安装到自己的账户上。本网站上每一条"安装某某小程序"的说明,指向的都是这个画面。
它有两点决定了本页几乎所有其他内容。第一,安装是按用户,而不是按租户:每次安装写入一行,把您的登录账户与某一个目录中的某一个小程序关联起来,后端会拒绝为其他任何人的登录账户提交的安装。第二,您能看到什么是在别处决定的 —— 目录分为公开或私有,私有目录之所以能到达您这里,只是因为管理员在 Tenant Admin Applet 中把您的登录账户关联到了它。
它在注册表中的行是 appletStore,名称 Applet Store,类型为 ROOT-USER,状态 ACTIVE。它没有自己的设置(见配置)。
所处位置
| 方向 | 什么 | 为什么 |
|---|---|---|
| 上游 | Developer SysAdmin Applet | 它维护的注册表记录就是商店所列出的内容 —— 小程序的名称、图标、描述、类型、文档 URL,以及外壳(shell)加载的模块 URL。注册表中不是 ACTIVE 的小程序永远不会出现在这里。 |
| 上游 | Tenant Admin Applet | 建立目录、把小程序放进目录,并把用户的登录账户关联到私有目录。这个关联是私有目录出现在 Private 标签页上的唯一原因。它还可以为租户中的其他用户批量安装小程序 —— 商店做不到。 |
| 下游 | 平台启动台(launchpad) | 已安装的小程序会成为启动台上的一个图块;商店本身也是从那里进入的。 |
| 并列 | Complete Applet Catalog | 本 wiki 自己的全部小程序列表,由商店所读取的同一个注册表生成。 |
画面和菜单
所有内容都挂载在 applets/bigledger/akaun-platform/applet-store 之下。没有侧边栏:导航是列表画面顶部由三个链接组成的栏。
| 画面 | 路由 | 状态 |
|---|---|---|
| 私有目录列表 | catalog-listing-private | 可用 —— 这是着陆画面;空的子路径会重定向到这里 |
| 公开目录列表 | catalog-listing | 可用 |
| My Applets | my-applets | 可用 |
| 小程序详情 | applet-information/:guid | 可用 —— :guid 是小程序与目录之间的链接 |
| 按目录的小程序列表 | applet-listing/:guid | 旧版 —— 任何现行模板中都没有链接到达它 |
| Notifications | applet-notifications | 占位 —— 一张重复图库图片的静态卡片,没有数据,任何地方都没有链接到它 |
| Subscription | applet-subscription | 损坏 —— 读取一个从未被填充的行对象,加载时抛出错误;任何地方都没有链接到它 |
使用条款关卡
商店中的每一个画面之前都会运行一个守卫(guard)。它读取已登录用户的个人资料扩展,查找代码中含有 APPLET_STORE_TNC 且数值为真的参数。如果有,您会直接通过,再也不会看到这个对话框。如果没有,就会打开一个全高、无法关闭的对话框,显示 Akaun.com Marketplace Terms of Use、一个 I have read the terms and conditions 复选框,以及 Accept / Decline 按钮。勾选复选框之前,Accept 处于禁用状态。接受会把接受记录写入您的用户资料(见生命周期和影响);拒绝会把您弹回启动台。
接受是按登录账户记录的,而不是按租户或公司。即使企业中其他所有人都已接受,一位新同事第一次访问时也会看到这个对话框。
列表画面
三个列表画面都渲染同一个组件,所以看起来很相似:
- 一个写着 Catalog 的标题栏,带有 Public、Private 和 My Applets 链接。
- 一个 Search for applets 搜索框。它筛选的是已经加载到浏览器中的行 —— 不会重新查询服务器。在 Public 和 My Applets 标签页上,它匹配小程序名称;在 Private 标签页上,它在短暂的输入停顿之后匹配小程序名称或目录名称。
- 一个小程序卡片网格。
- 仅在 Public 和 Private 标签页上,有一个 Install All 按钮。当画面上的每个小程序都已安装或被阻止安装时,它会变灰。
Public 标签页在一次请求中加载所有公开目录,并把小程序显示为一个平铺网格,每张卡片带有其目录的名称。由同一个租户、以同一个等级(rank)提供的同一个小程序,即使位于两个目录中,也只显示一次。
Private 标签页每次请求加载一个目录。滚动到底部 —— 或按网格下方的 Load More 按钮 —— 会获取下一个,所以拥有许多私有目录的用户是一页一页地看到它们,而不是一次全部看到。
My Applets 显示标题 My Installed Applets,列出您的登录账户已安装的内容。它没有 Install All 按钮,也没有卸载控件;卸载在小程序的详情画面中进行。
视口宽度低于 500 px 时,列表会自动切换为深色主题;高于此宽度时为浅色。这是宽度测试,不是操作系统偏好测试。
小程序详情画面
点击任何卡片都会打开详情画面,其布局类似消费类应用商店的商品页:
- 主视区 —— 图标(可点击,打开原尺寸)、名称,以及最多四项统计:Rating(平均分,或"No ratings")、Rank、Tenant、Status(Installed / Not installed)。
- Documentation 按钮 —— 在新标签页中打开小程序的文档 URL。当该小程序的注册表行没有文档 URL 时,它处于禁用状态。
- Share 按钮 —— 在有原生分享面板的浏览器中使用它,否则把当前页面 URL 复制到剪贴板,并用一条提示消息确认。
- Install,或者 —— 安装之后 —— Uninstall 和 Open。
- Preview —— 小程序截图的横向滚动图库,按其序号排序。小程序没有图片时,整个部分会被隐藏。
- About this app —— 描述,以及注册表中有记录时的 Version 和 Updated on。没有描述时,它显示 No description is available for this applet yet.
- Rate this applet / My review —— 一排五颗星,以及一个 Write a review / Edit your review 链接,打开一个带星级和评论框的对话框,评论上限为 500 个字符。
- Ratings and reviews —— 平均分、一星到五星数量的五条柱状图、总数,以及其他用户的评论。您自己的评论会从该列表中提出来,放到上面的部分。
配置
使用之前
| 前提条件 | 在哪里设置 | 没有它会怎样 |
|---|---|---|
| 一个平台登录账户 | 平台用户管理;见 Tenant Admin Applet | 商店中的每一个画面都位于需要身份验证的端点之后 |
| 已接受使用条款 | 商店本身,每个登录账户一次 | 对话框会挡住每一个画面 |
小程序存在于注册表中且为 ACTIVE | Developer SysAdmin Applet | 它会从两个列表中被筛除 |
小程序已关联到一个目录,且该关联为 ACTIVE | Tenant Admin Applet | 没有可安装的东西 —— 商店列出的是目录成员关系,而不是直接列出注册表 |
所属租户记录为 ACTIVE | 平台管理 | 该小程序会从公开列表中被筛除 |
| 对于私有目录:您的登录账户已关联到它 | Tenant Admin Applet | 该目录不会出现在 Private 标签页上 |
小程序设置
商店没有任何类型的设置。它写入的唯一按用户状态,是您对使用条款的接受。
其他小程序中控制本小程序的设置
| 设置 | 在哪里设置 | 在这里的效果 |
|---|---|---|
目录访问类型(PUBLIC / PRIVATE) | 目录记录,Tenant Admin Applet | 决定该目录的小程序出现在哪个标签页上。Public 标签页只显示有效的公开目录。 |
| 目录与用户的关联 | Tenant Admin Applet | Private 标签页列出的正是您的登录账户有关联的那些目录。没有关联,就没有目录。 |
小程序与目录关联的 rank,以及您自己目录关联上的 rank | Tenant Admin Applet | 卡片显示哪一个取决于标签页 —— 见字段下的 Rank。卡片显示的是哪个 rank,复制到您已安装关联上的就是哪个。取值为 OWNER、ADMIN、MEMBER。 |
| 小程序的文档链接 | Developer SysAdmin Applet | 启用或禁用详情画面上的 Documentation 按钮。 |
| 小程序的图标和图片 | Developer SysAdmin Applet | 卡片图标和 Preview 图库。图标在每次列表加载时从注册表获取,所以在那里替换图标,会在每位用户下次访问时改变他们的卡片;不按目录保存任何东西。没有图标的小程序,或图片加载失败的小程序,都不算错误:卡片会改为在一个纯色图块中显示小程序名称的第一个字母。满屏字母图块意味着注册表记录没有图标,修正应在 Developer SysAdmin Applet 中进行,而不是在这里。 |
| 小程序的加载详情 | Developer SysAdmin Applet | Open 交给外壳用来加载小程序的内容。 |
功能可见性和权限
Applet Store 没有客户端权限。商店中没有任何东西会因权限集而隐藏或显示。权限是在服务器上按端点执行的:
| 规则 | 由什么执行 | 效果 |
|---|---|---|
| 您只能为自己安装 | 安装和批量安装端点会把提交的登录账户与令牌的主体(subject)进行比较 | 指名其他用户的请求会被拒绝 |
| 您只能卸载自己的关联 | 卸载端点会把关联的登录账户与令牌的主体进行比较 | 针对其他用户关联的请求会被拒绝 |
| 为其他人安装是管理员操作 | 一个单独的租户管理端点,要求具有平台系统管理员身份,或者在该租户中具有 OWNER/ADMIN 等级 | 在 Tenant Admin Applet 中进行,而不是在商店中 |
ADMIN 并不授予任何管理权限。一行已安装记录实际为您带来什么
已安装的关联不是装饰,但也不是完整的答案。如果您正在决定谁可以打开什么,这两半都很重要。
它是一道真实的关卡,只有一次。 小程序不能用您普通的登录令牌与平台通信。启动时,它会把该令牌换成一个小程序令牌(applet token),而服务器只有在确认该小程序已在该租户中为您的登录账户安装之后才会签发;没有安装,交换会被拒绝,信息为 One or more Applet/Tenant Code combination does not exist。所以"卸载它,他们就用不了"是真的。
越过这道关卡之后,API 并不是按小程序组织的。 服务器端的权限代码是以它们保护的资源命名的 —— 一个客户、一张单据、一次导出 —— 从不以小程序命名,而令牌中携带的小程序身份几乎只被用来标记审计记录。整个平台上只有两个端点要求小程序令牌。对访问模型的实际影响是:少安装小程序会整理一个人通过画面能到达的地方;它并不限制他们的登录账户通过 API 能做什么。 对一个执意的人仍然有效的限制,是权限集,而不是小程序列表。
而一次安装可能会悄无声息地让某人进入一个租户。 授予一个小程序,也会确保该登录账户存在于该小程序的租户中,而授予落入的租户取自小程序与目录的关联行,而不是取自您正在邀请对方加入的那个租户。因此,一个其中各行指向不止一个租户的目录,会在一次邀请中让这个人进入所有这些租户。请审慎地组成目录,并在把一个目录用作邀请对象之前检查每一行上的租户 —— 这就是"不要分发一个您没有看过里面内容的目录"这条建议背后的具体原因。
字段
商店没有创建或编辑表单。以下是它显示的字段,以及它接受的唯一一个字段。
小程序卡片(全部三个列表)
| 字段 | 含义 | 说明 |
|---|---|---|
| Icon | 注册表中的图标图片 | 按图标 GUID 从平台的公开小程序图标端点提供;缺失或损坏的图片会改为显示名称的第一个字母 |
| Publisher | 目录条目上指名的租户 —— 安装后小程序在其中打开的那个租户 | 仅限目录布局(Public 和 Private 标签页)。小程序注册表本身没有所有者;租户来自目录行,所以同一个小程序可能出现在两个发布者名下,而您从哪一个安装,决定您被接纳进谁的租户(见一行已安装记录实际为您带来什么)。Public 标签页上标题相同的两张卡片,是由不同租户或以不同等级提供的同一个小程序 —— 只有当小程序、租户和等级全部相同时,重复项才会被合并。按下 Install 之前请检查发布者。如果您从错误的卡片安装了,请卸载它,并告诉该租户中负责管理用户的人,因为这次安装可能也已经让您的登录账户进入了那里 |
| Rank | 一个目录 rank,具体是哪一个取决于标签页 | **Public:**小程序与目录关联的 rank。**Private:**安装之前是您自己在该目录上的 rank,安装之后是您已安装关联上的 rank。**My Applets:**您已安装关联上的 rank。安装会把卡片显示的 rank 复制到您的关联上,所以同一个小程序对两位同事可能带有不同的 rank。它是一个标签,而不是一种权限 —— 见上面的警告 |
| Catalogue | 该条目所属的目录 | 以颜色区分;在 My Applets 上,这个位置显示该小程序是从哪个目录安装的。颜色在每次列表加载时随机选择,所以不要教任何人"蓝色的那些" |
| Rating | 平均评分 | 一颗星加一位小数;从未被评分的小程序显示一颗空心星且没有数字 |
| 已安装勾号 | 您的登录账户有一个来自这个目录条目的、指向该小程序的有效关联 | 从另一个目录安装的小程序在这里不显示勾号;该卡片会被阻止(见生命周期)。在 My Applets 上,每张卡片都有勾号。Install All 会在服务器回应之前就在您的浏览器中勾上卡片,而 Error! 回复并不会把勾号去掉,所以出错之后,勾号不能作为证据。这是从代码中读出的,没有实际试过:Install All 出现任何 Error! 之后,请重新加载标签页或打开 My Applets,只把仍然有勾号的视为已安装 |
在 Public 和 Private 标签页上,卡片的标题是注册表中小程序的名称,每次加载都重新读取;目录不能给小程序改名,所以在 Developer SysAdmin Applet 中的改名会立即反映到这些卡片上。
小程序详情画面
| 字段 | 含义 | 说明 |
|---|---|---|
| Rating | 平均分,以及评分总数 | 数量为零时显示"No ratings" |
| Rank | 目录关联的 rank | 为空时隐藏 |
| Tenant | 所属租户名称 | 为空时隐藏 |
| Status | Installed 或 Not installed | 由您自己的已安装关联推导,而不是由列表行推导 |
| Description | 注册表描述 | 回退为一行明确的"没有描述" |
| Version | 注册表版本 | 为空时隐藏 |
| Updated on | 注册表更新日期,否则为创建日期 | 两者都为空时隐藏 |
| Preview | 截图,按序号排序 | 没有截图时整个部分隐藏 |
| Reviews | 评论者显示名称、照片、日期、星级、评论 | 您自己的评论不在此列表中,而是单独显示 |
评论对话框
| 字段 | 含义 | 必填 | 说明 |
|---|---|---|---|
| Stars | 您的评分,1–5 | 是 | 选择星级之前,Submit review 保持禁用。服务器会拒绝 1–5 以外的任何值 |
| Comment | 自由文本 | 否 | 评论框中上限为 500 个字符,并有实时计数器;服务器自己的上限是 4,000。您输入的草稿会保存在本地,所以重新加载后仍然存在 |
生命周期和影响
Applet Store 是一个工具类小程序。它不过账日记账,不移动库存,也不向任何租户分类账写入任何东西。它改变的一切都位于平台(master)数据库中。
| 操作 | 写入什么 |
|---|---|
| 接受使用条款 | 您用户资料上的一个标志 |
| Install(详情画面) | 一条小程序与登录账户的关联:您的登录账户、小程序、目录及其条目、所属租户,以及从目录条目复制过来的 rank |
| Install All(Public 或 Private 标签页) | 为画面上每个既未安装也未被阻止的小程序写入同样的关联,一次请求完成 |
| Uninstall | 删除您的小程序与登录账户的关联。小程序内部的任何东西都不会被删除 |
| Rate | 每位用户对每个小程序一条评分;小程序的评分汇总会被重新计算,每张列表卡片显示的就是该汇总 |
| 撰写或编辑评论 | 一条附在您评分上的评论 |
| Open | 在浏览器会话中,把外壳加载该小程序所需的东西交给外壳 |
值得知道的三个后果:
- 卸载是可逆的,不会销毁任何东西。 它删除的是您的登录账户与小程序之间的关联。从同一个目录条目重新安装,就能把小程序找回来;小程序在租户中保存的数据无论哪种情况都不受影响。
- Install All 在不同目录之间不是幂等的。 它会跳过任何已安装和被阻止的内容,所以按两次是安全的,但它只安装画面上的内容 —— 在 Private 标签页上,那是到目前为止已加载的目录,而不是全部目录。
- 已经从一个目录安装的小程序,不能再从另一个目录安装。 列表会把这样的卡片标记为被阻止并拒绝点击,提示文字为 This applet has been installed in another catalog!
这个小程序中没有需要管理的状态。已安装的关联要么存在且为 ACTIVE,要么不存在。
相关小程序
- Developer SysAdmin Applet —— 注册小程序以及商店显示的关于它的一切。如果某个列表看起来不对,它背后的记录是在那里编辑的。
- Tenant Admin Applet —— 建立目录,决定谁能看到私有目录,并为租户中的其他用户批量安装小程序。它是这个面向用户的画面在管理员一侧的对应物。
故障排除
| 症状 | 原因 | 解决方法 |
|---|---|---|
| 使用条款对话框对某个人再次出现 | 接受记录保存在个人登录账户上,而不是租户上 | 正常现象。让他们接受一次即可 |
| 同事能看到的某个目录在您的 Private 标签页上不见了 | 您的登录账户没有关联到该目录 | 由一位具有 OWNER/ADMIN 等级的用户在 Tenant Admin Applet 中添加关联 |
| 企业已购买的某个小程序不在任何目录中 | 该小程序在注册表中不是 ACTIVE,它的目录关联不是 ACTIVE,或所属租户记录不是 ACTIVE | 检查注册表记录,然后检查目录成员关系 |
| 某张卡片变灰且无法打开 | 它已经从另一个目录安装 —— 提示文字为 This applet has been installed in another catalog! | 从 My Applets 打开它,或先卸载另一个副本 |
| Install 报告 The applet already exists! | 安装调用失败了 —— 最常见的原因是该小程序和登录账户的关联已经存在 | 检查 My Applets;重试之前先刷新 |
| Install All 变灰 | 画面上的所有内容都已安装或被阻止 | 无需处理 |
| 评分失败,提示 Install this applet before you can rate it | 服务器在接受评分之前,要求该小程序有一个已安装的关联 | 先安装,再评分 |
| 评分失败,提示 You already rated this applet | 每位用户对每个小程序只允许一条有效评分 | 刷新页面;之后会编辑现有评分,而不是新建 |
| 评分失败,提示 Not logged in 或 Auth token is invalid or expired | 商店是在没有有效会话令牌的情况下打开的 | 通过平台外壳重新登录 |
| Documentation 按钮变灰 | 该小程序的注册表记录没有文档 URL | 在 Developer SysAdmin Applet 中添加 |
| Private 标签页显示一个永远不消失的加载图标 | 私有目录的获取没有错误处理;失败的请求会让加载状态一直保持 | 重新加载页面。这是一个已知的产品缺陷,不是配置问题 |
相关文档
以下页面目前只有英文版。