SuperAPI AI 工具集

workspace-builder

编程与开发

查看项目

更新于 10-16 02:50

技能介绍

本技能面向 ServiceNow 的 App Engine Studio(AES)低代码应用开发,用于创建工作区及其背后的记录结构。

用途:在 ServiceNow 实例上创建作用域应用、应用表,以及自定义工作区(Workspace)。AES 支持低代码应用开发,其结构大致为:应用(sys_scope)下含表与表单、工作流、工作区(sys_aw_workspace,含列表、表单、仪表板)与门户。

涉及的关键表:sys_scope(应用范围)、sys_app(应用记录)、sys_aw_workspace(Agent Workspace 定义)、sys_ux_experience(Next Experience 工作区,UI Builder 链的顶端)、sys_ux_app_config(工作区设置,链接到 experience)、sys_ux_macroponent(页面内容与自定义组件)、sys_ux_page_registry(将 macroponent 注册为 app config 的页面)、sys_ux_app_route(到达已注册页面的 URL slug)、sys_ux_page(UI Builder 页面行,只读取,不要直接插入)。

主要能力:

  1. 创建作用域应用:通过 GlideRecord("sys_scope") 初始化并设置 name、scope、short_description、version、vendor、vendor_prefix、licensable 等字段后插入。
  2. 创建应用表:通过 GlideRecord("sys_db_object") 设置 name(scope_表名)、label、super_class、sys_scope、is_extendable、create_access_controls 并插入,再为每个字段创建字段(字段类型如 glide_date、reference 等)。
  3. 配置工作区:通过 GlideRecord("sys_aw_workspace") 设置 name、title、description、primary_table、url、icon、color、sys_scope、agent_assist_enabled、contextual_side_panel_enabled 等。
  4. 配置工作区列表:通过 GlideRecord("sys_aw_list") 设置 workspace、name、table、filter、columns、order_by、order_by_desc、group_by。

UI Builder 页面与工作区的重要说明:Next Experience 工作区是一张互相链接的记录图,而不是单条记录。单独插入一条 sys_ux_page 或 sys_ux_macroponent 行虽然会成功并返回 sys_id,但会形成孤立记录——没有 experience 拥有该页面,没有 app config 注册它,没有路由到达它。本服务器中 snow_artifact_manage(action='create', type='uib_page')与 snow_github_deploy 都可能产生这种孤立行。UI Builder 页面工具中,snow_artifact_manage 应仅用于 get、find、export、verify,不用于 create;给 snow_github_deploy 传入已回读的 target_sys_id 或 identifier。

记录链(六步,顺序被强制执行): 第 1 步 sys_ux_experience(snow_create_ux_experience,输出 experience_sys_id);第 2 步 sys_ux_app_config(snow_create_ux_app_config,输出 app_config_sys_id);第 3 步 sys_ux_macroponent(snow_create_ux_page_macroponent,输出 macroponent_sys_id);第 4 步 sys_ux_page_registry(snow_create_ux_page_registry,输出 sys_name);第 5 步 sys_ux_app_route(snow_create_ux_app_route,输出 name);第 6 步更新 sys_ux_app_config 的 landing_page(snow_update_ux_app_config_landing_page)。第 2 步会在第 1 步读不回时拒绝;第 4 步会先 GET app config 与 macroponent,缺失即拒绝;第 5 步通过 page_sys_name 回连第 4 步;第 6 步常被跳过,不执行则 app config 没有 landing_page。第 5 步的 name 是路由名(成为 URL slug),route 是路径(默认 /<name>),第 6 步需要的是 name。

Builder Toolkit 依赖:第 1 步不是 Table API 写入,而是 POST 到 /api/sn_uibtk_api/buildertoolkit/experience;若实例上没有 sn_uibtk_api 作用域,第 1 步会报 Builder Toolkit API not available - UI Builder plugin may not be installed 并指出插件 com.snc.ui_builder_toolkit。第 2 步在写入前会 GET 该 toolkit 端点确认 experience 存在并吞掉所有失败,因此在没有 toolkit 的实例上会误报 Experience '<sys_id>' not found or not accessible。

角色与权限:创建权限在链上并不统一。sys_ux_app_config 与 sys_ux_macroponent 需要 delegated_developer 或 ui_builder_admin;sys_ux_page_registry 需要 canvas_admin、maint、ui_builder_admin 或 uxframework_designer;sys_ux_app_route、sys_ux_data_broker 需要 ui_builder_admin;sys_ux_page_element 需要 ui_builder_admin 或 uxframework_designer。delegated_developer 可完成第 2、3 步但在第 4 步失败,此时已有三条记录写入。

本服务器提供三条互不一致的链:六步链(无列表,每条记录可检查);snow_create_complete_workspace(experience、app config,经 toolkit /page 创建页面,若传入 tables 则创建列表配置、列表分类与列表;不写 sys_ux_page_registry 或 sys_ux_app_route);snow_create_workspace(ui-builder 域,experience、app config、route、lists,但没有页面)。工作区需要正确时优先用六步链;之后仍要打开 UI Builder 时可用 complete_workspace;不要用 snow_create_workspace 构建用户会打开的东西。三条链都不会从实例回读真实 URL。

脚本的边界:链只给出五条互相引用的记录和一次更新,是否构成 UI Builder 能打开的页面不是本仓库能证明的,需通过打开 experience 验证。链不提供有任何内容的页面。snow_create_ux_page_macroponent 会把传入对象作为 JSON 字符串写入 composition 列,不传时写默认 {"layout":"single-column","components":[]},该默认值只是占位,不保证是运行时能渲染的结构。页面布局应在 UI Builder 中完成。snow_uib_page_manage(action='add_element')向 sys_ux_page_element 写入 page、component、position 与 JSON 属性字符串,但其 page_id 是 sys_ux_page 的 sys_id,而六步链从不创建 sys_ux_page,因此没有已验证的路径。snow_uib_page_manage(action='create')接收 experience_id 与 name,POST 到 toolkit 的 /page 端点并返回 macroponent、screen、route id,但依赖 toolkit,且返回的 id 是 toolkit 的。snow_create_uib_client_state 通过 GET toolkit 的 macroponent 端点追加 state_properties 再整体 PATCH 回去,读改写无版本检查,并发添加状态可能产生丢失更新。

验证限制:snow_validate_workspace_configuration(workspace_type: "ux_experience")只检查 experience 的 active 标志、是否有 sys_ux_app_config 的 experience_assoc 指向它、该 config 是否有 list_config_id,以及是否有 sys_ux_page_property 引用它;它不读 sys_ux_macroponent、sys_ux_page_registry 或 sys_ux_app_route,因此没有页面和路由的工作区也可能返回通过。最后两项需要自行用 snow_query_table 检查,例如查询 sys_ux_page_registry 中 app_config 是否匹配第 2 步的 app config。

适用场景:需要在 ServiceNow 上以编程方式搭建 App Engine Studio 应用范围、作用域表、Agent Workspace 以及 Next Experience / UI Builder 工作区记录链的开发者。

限制:第 1 步依赖未在可及 REST 文档中出现的 sn_uibtk_api 端点,跨版本可能不成立;链不创建页面内容,页面布局须在 UI Builder 中完成;验证工具不覆盖页面与路由;部分步骤对角色要求不统一;并发编辑客户端状态存在丢失更新风险。

分类:编程与开发。