Summary
【KWC 工程唯一入口 Skill】负责 KWC 项目的脚手架初始化、组件/页面/Controller 元数据生成、环境配置与部署。当用户请求涉及 KWC 工程创建、kd CLI 使用、.page-meta.kwp / .js-meta.kwc / .kws 元数据文件、环境部署时,必须优先使用本 Skill。本…
kingdee/kwc-skills
【KWC 工程唯一?
npx skills add kingdee/kwc-skills --skill kwc-project-scaffold
【KWC 工程唯一入口 Skill】负责 KWC 项目的脚手架初始化、组件/页面/Controller 元数据生成、环境配置与部署。当用户请求涉及 KWC 工程创建、kd CLI 使用、.page-meta.kwp / .js-meta.kwc / .kws 元数据文件、环境部署时,必须优先使用本 Skill。本…
Related neighbors and high-traction skills in the same topics — useful to compare before installing.
Scaffold a complete Power Apps Code App project with PAC CLI setup, SDK integration, and connec…
8.8K installsScaffolds an xUnit integration test project targeting Oracle in .NET solutions.
1.8K installsGenerate new Webflow Code Component boilerplate with React component, definition file, and opti…
837 installsCreate exercise directory structures with sections, problems, solutions, and explainers that pa…
318.5K installsThis skill should be used when the user wants to "create an agent project", "start a new ADK pr…
160.4K installsDesign, organize, and manage Helm charts for templating and packaging Kubernetes applications w…
10.5K installsOther skills from kingdee/kwc-skills.
npx skills add kingdee/kwc-skills
Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.
main
Files included with this skill beyond the listing page.
SKILL.md
49,770 B
SUMMARY.md
604 B
将本 Skill 作为 KWC 工程脚手架工作的入口。 优先把用户需求归入以下几类:初始化项目、创建组件、创建 Controller、创建页面元数据、配置环境、部署、查看环境效果、调试。
不要把 KWC 工作流理解成“本地把一个组件渲染出来”。 KWC 的核心交付对象是:
.js-meta.kwc)*.page-meta.kwp*.kws 和脚本代码(当功能涉及后端数据交互时)kd project deploy 上传后的环境渲染结果页面最终展示依赖页面元数据中的 <controls> 和组件类型映射,而不是本地 main.tsx 是否挂载了某个组件。 main.tsx 和 npm run dev` 只用于本地辅助预览,不是最终交付路径。
KWC 不仅是前端开发框架。当页面需要读取或操作业务数据时,KS Controller 提供后端 REST API 能力,通过 KingScript 脚本访问苍穹平台的数据查询、业务操作等服务。一个完整的业务功能通常包含前端组件(展示与交互)和后端 Controller(数据获取与业务逻辑)两部分。
Controller 也遵循"元数据 + 代码"的二元模型:
这与前端的"组件元数据 .kwc + 组件代码"模式完全对称。
从用户开发角度看,一个完整的 KWC 功能最多涵盖以下层次:
前端(展示与交互):
.js-meta.kwc:声明"这个组件可以被页面如何引用、可以暴露哪些可配置属性".page-meta.kwp:声明"这个页面由哪些组件实例组成,并给每个实例传什么属性值"后端(数据与业务逻辑):
.kws:声明"这个 Controller 暴露哪些 API 端点、使用什么 HTTP 方法、需要什么权限"前端和后端都遵循"元数据先行、代码实现跟进"的模式——先声明结构和契约,再填充实现。
因此,面对需求时不要只问“要写几个组件”,还要继续判断:
<property><controls> 中默认原则:
面对“帮我开发一个 KWC 页面/功能”的请求时,先把需求翻译成下面几项:
只有把这几项补齐,脚手架命令才有明确目标。
将 kwc-project-scaffold 视为 KWC 工作流的总入口,但不要让它吞掉框架开发 Skill 的职责。
当任务进入"实现组件代码"阶段时,必须遵循以下强制规则:
kwc-ks-controller-development- 新建工程:以 kd project init 时用户选择的 framework 为准 - 已有工程:以 .kd/config.json 中的 framework 字段为准 - 若无法识别 framework,必须停止并向用户确认,禁止猜测
| 任务阶段 | 负责 Skill | 产出物 |
|---|---|---|
| 工程初始化 | scaffold | .kd/config.json |
| 创建组件目录 | scaffold | app/kwc/Component/ |
| 编写组件代码 | react/vue/lwc-development | ***.tsx / .vue / .js** |
| 补全组件元数据 | scaffold | *.js-meta.kwc |
| 创建页面元数据 | scaffold | *.page-meta.kwp |
| 环境配置与部署 | scaffold | 环境渲染结果 |
| 创建 Controller 目录 | scaffold | app/ks/controller/ControllerName/ |
| 补全 Controller 元数据 | scaffold | *.kws(URL、方法、权限配置) |
| 构建 Controller | scaffold | dist/controller/ |
| 编写 Controller 脚本代码 | kwc-ks-controller-development | .ts 脚本(业务逻辑实现) |
deploy、open、debug 阶段时,继续由本 Skill 主导kd project create 完成后需写代码 → 必须切到框架 Skill,禁止本 Skill 直接编写kwc-ks-controller-development,禁止本 Skill 直接编写当 CLI 命令失败(如 kd project create 报错)而改用手动方式创建文件/目录时,代码编写阶段的 Skill 切换规则同样适用。手动创建目录结构不等于可以手动编写业务代码。
.ts / .tsx / .vue / .js 文件的编写,无论前置步骤是否通过 CLI 完成,都必须先切换到对应的框架 Skillkd project create 失败 → 手动创建 app/kwc/MyComponent/ 目录和 .js-meta.kwc → 到这里仍是 scaffold 职责 → 开始写 MyComponent.tsx 时 → 必须切换到框架 Skillapp/ks/controller/ 目录和 .kws → scaffold 职责 → 开始写 .ts 脚本 → 必须切换到 kwc-ks-controller-development在进入代码实现阶段前,确认以下事项:
kd project init 交互中用户选择的 framework 作为后续推荐 Skill 依据.kd/config.json 中的 framework 作为推荐 Skill 依据framework=react 时,必须转入 kwc-react-developmentframework=vue 时,必须转入 kwc-vue-developmentframework=lwc 时,必须转入 kwc-lwc-developmentkwc-ks-controller-development注意:不要同时加载三个框架开发 Skill;只根据当前工程的 framework 推荐一个。
这些输入若无法从现有工程或上下文推断,就必须向用户确认:
app这些信息不要擅自编造,尤其是 app、环境 URL、认证参数和最终部署环境。
关于 isv(开发商标识):开发阶段可以留空,在组件与环境绑定时会从环境拉取开发商标识,kd project deploy 时会自动写入组件和页面元数据,因此不需要用户手工提供或维护。
对 app 使用最严格的规则(本节为全文唯一权威定义):
app 必须由用户明确提供,或来自 .kd/config.jsonkd project init 交互中输入app,不继续生成元数据或部署这些内容应由 Skill 基于用户需求主动完成,不要把它们再推回给用户逐项设计:
PascalCase 名称.js-meta.kwc,还是应删除以避免被当成可部署组件<property>page-meta.kwp 并填充 <controls>nameinit、create、deploy、open 还是 debugkd open 的目标页面;仅当用户明确要求本地联调时才使用 kd debugversionkd env list 和 kd env info默认策略是:让用户确认不可推断的关键环境参数,由 Skill 负责把需求落实成工程结构和元数据。
app 是例外:即使在自动决策范围内,也必须严格遵守"需要用户提供或确认的输入"中的 app 规则。
当用户要“开发一个页面功能”时,不要等到最后才补 .js-meta.kwc。 应在组件职责确定后,立即判断组件元数据应如何生成。
按这个顺序处理:
.js-meta.kwc。.js-meta.kwc,避免被脚手架当作可部署组件。<property>,不要把所有内部 props 都暴露出去。组件元数据至少应关注这些字段:
version:自然数;脚手架模板可能留空,Skill 需要补成有效值name:通常与组件名保持一致,作为组件类型标识masterLabel:组件的中文名称(如「销售订单卡片」「采购申请列表」),作为组件在页面装配侧的显示标题isv:开发商标识,开发阶段可留空,deploy 时自动从环境拉取写入app:规则见“需要用户提供或确认的输入”一节frameworktargetstargetConfigs如果需要字段规则、类型和示例,读取:
references/component-metadata.md页面元数据不是简单“列出组件名称”,而是把用户要的页面装配结构显式写出来。
按这个顺序处理:
<control>。control.type 必须与组件元数据里的组件 name 完全一致,包含大小写也必须一致。control.name 是页面内唯一实例名,必须符合页面元数据命名规范。<propertys>。例如,若组件元数据中的 name 是 OverviewCard,则页面元数据里的 control.type 只能写 OverviewCard。 不要因为组件目录在 app/kwc/ 下,就擅自写成 kwc_OverviewCard;这类前缀不是组件类型名的一部分。
页面字段默认策略:
masterLabel:页面的中文名称(如「销售订单」「采购申请」「库存查询」),作为页面在导航和管理界面的显示标题template 默认使用 oneregionisv deploy 时自动写入,无需手填app 规则见“需要用户提供或确认的输入”一节如果需要字段规则、校验约束和示例,读取:
references/page-metadata.md按这个顺序判断并推进:
.kd,先视为“尚未初始化 KWC 工程”。kd project create,不要手工拼目录结构。kd env create 和 kd env auth openapi 完成配置。先确认以下前提:
Project 理解为本地工程目录。Env 理解为远端苍穹环境。node、npm、git。在用户尚未拥有 KWC 工程时,按以下流程执行:
kd project init <project-name>。app(规则见“需要用户提供或确认的输入”一节)。npm install。npm run dev。补充:kd project init 依赖 git clone 下载模板,若失败优先检查 git。
在已有项目中新增组件时:
kd project create <ComponentName> --type kwc。PascalCase 组件名。.js-meta.kwc,补齐可部署所需字段和属性定义(这是本 Skill 的职责)。.js-meta.kwc 补齐后,必须停止本 Skill 的代码编写,转而加载对应的框架开发 Skill(kwc-react-development / kwc-vue-development / kwc-lwc-development)来编写组件实现代码。若用户只提供了页面结构想法,没有组件名,先根据语义生成稳定、可复用的组件名,再创建。 若用户给的是完整业务诉求,而不是组件清单,先主动拆分组件职责,再批量创建。
补充:
app/kwc/<ComponentName>/ 下.js-meta.kwc 只是模板,需按上述规则补齐在已有项目中新增 KingScript 脚本控制器时:
kd project create <ControllerName> --type controller。PascalCase 控制器名,建议以 Controller 后缀结尾。app/ks/controller/<ControllerName>/ 下。kwc-ks-controller-development 来编写控制器脚本代码。-e 选项:kd project create <ControllerName> --type controller -e dev。补充:
kwc-ks-controller-development**页面元数据是最终交付链路的核心。 环境在部署后会根据 page-meta.kwp 的 <controls> 来渲染页面包含的组件,因此这里不是可选步骤,而是页面交付的主入口。
在需要新增页面时:
kd project create <page-name> --type page。app/pages/<page-name>.page-meta.kwp。name、masterLabel、app、version。<controls> 中把页面实例和组件类型关联起来。version 加 1。不要忽略以下约束:
type 是组件类型名,必须与组件元数据中的组件 name 完全一致,不能只做到语义对应或名称相近。name 是组件实例名,需要在页面内唯一。isv 开发阶段可留空,deploy 时会自动从环境拉取并写入app 规则见“需要用户提供或确认的输入”一节若需要字段规则、校验约束和示例,读取 references/page-metadata.md。
补充:新生成的 page-meta.kwp 默认只包含注释掉的 <control> 模板,Skill 必须根据需求主动补全 <controls>。
面对完整业务需求时,按以下优先级判断是否需要 Controller:
强信号(命中任意一条即直接判定需要 Controller,无需询问用户):
弱信号(需要询问用户确认):
排除信号(不需要 Controller):
默认倾向:当需求描述中出现任何业务数据相关的词汇时,优先判定需要 Controller,而非询问用户。
判定需要 Controller 后,必须进一步识别需求涉及哪些业务实体,用于后续 meta-query-api.mjs 查询真实字段:
- 用户直接提供:用户在需求中明确给出了表单编码(如 bdmaterial、iminventory) - 通过查询确认:使用 queryFormsByApp 搜索表单,从返回结果中确认真实编码
- "您提到的'库存'对应的是哪个业务表单?请提供表单编码或名称,以便查询准确的字段结构" - 若实体名称无歧义且用户也不确定编码,可先用 queryFormsByApp 按关键词搜索,将结果展示给用户选择
getEntityFields 查询字段结构当需求同时涉及前端组件和后端 Controller 时,按以下流程执行(元数据先于代码):
kd project inita. 对每个前端组件执行 kd project create <ComponentName> --type kwc b. 对每个后端 Controller 执行 kd project create <ControllerName> --type controller
- 用户提供了表单名称/编码/实体相关信息时,使用 meta-query-api.mjs 查询真实字段 - 先 queryFormsByApp 搜索表单,再 getEntityFields 获取字段结构(见「元数据查询」章节) - 查询结果用于指导后续 Controller 元数据和代码编写,禁止猜测字段名
a. 补全组件元数据 .js-meta.kwc b. 补全 Controller 元数据 .kws(定义 URL、方法、权限配置)
kwc-ks-controller-development 编写 Controller 脚本(*.ts)<controls>npm run build:frontendkd project deployform-link.mjs 输出渲染卡片(见「部署完成标准输出」章节)关键原则:
.kwc + Controller 元数据 .kws 都由本 Skill 完成若确认不涉及后端,仅前端开发时,优先按这条顺序执行:
kd project initkd project create <ComponentName> --type kwc.js-meta.kwc(本 Skill 职责)meta-query-api.mjs 查询关联表单的字段结构,辅助组件设计(见「元数据查询」章节)kd project create <page-name> --type pageapp/pages/<page-name>.page-meta.kwpnpm run build:frontendkd project deploy(部署到开发环境时会同时上传前端静态文件)form-link.mjs 输出渲染卡片(见「部署完成标准输出」,不可跳过)kd open,明确要求本地联调时执行 kd debug(须后台模式)关键原则:
如果是修改已有页面:
若确认仅涉及后端,不需要新增前端组件时:
kd project initkd project create <ControllerName> --type controller 创建 Controllermeta-query-api.mjs 先搜索表单再获取字段结构(见「元数据查询」章节),禁止猜测字段名.kws(本 Skill 职责)kwc-ks-controller-developmentkd project deploy 部署到目标环境(Controller 无需预先 build)form-link.mjs 输出渲染卡片(见「部署完成标准输出」,不可跳过)在部署前先完成环境配置。
当用户提供了具体的环境名称或别名(如 dev、sit、uat 等)时,应先执行环境存在性检查:
kd env list 查看当前已配置的环境列表- 不需要再让用户提供 URL、Client ID/Secret 等环境信息 - 直接使用该环境进行后续操作(如 deploy、debug) - 若该环境不是当前默认环境,可通过 kd env set target-env <name> 切换 - 使用 kd env info 确认环境认证状态
当环境不存在时,按以下流程执行:
kd env create <env-name> --url <url> 创建环境别名。kd env auth openapi 走交互式认证。kd env set target-env <env-name> 设置默认环境。kd env list 和 kd env info 检查当前配置。优先采用 openapi 认证方式;web 模式暂不作为默认路径。
如果目标环境不存在,或环境存在但尚未完成认证,先停下来收集这些字段:
其中 data center 不属于预先手填字段,而属于“读取后选择”的字段:
kd env auth openapi收集规则:
data center 不要让用户自由输入,应让脚手架读取候选项后再选择dev、sit、base 等别名,就自动推断这次要绑定哪个环境交互方式规则:
kd env auth openapi 的交互里选择数据中心推荐向用户索要环境信息的格式:
请补充以下环境信息:
1. env name:
2. env url:
3. client id:
4. client secret:
5. username:
说明:data center 不需要先手填,后续会由脚手架读取候选项供选择。
补充:环境配置保存在 ~/.kd 而非项目目录;创建后必须用 kd env list 复核是否持久化成功;kd env auth openapi 在 URL 不可达时会直接失败。
开发阶段只需要构建前端,Controller 由 deploy 直接处理:
| 场景 | 构建命令 | 说明 |
|---|---|---|
| 改了前端代码(.tsx/.vue/.js) | npm run build:frontend |
构建前端静态资源,输出到 dist/kwc/ |
| 改了 Controller 代码(.ts)或 .kws | 不需要 build | 开发阶段 deploy 直接处理 Controller |
| 仅改元数据文件(.kwc/.kwp/.kws) | 不需要 build | 元数据由 deploy 直接上传 |
补充用法:
npm run build:frontend -- MyComponent:构建指定前端组件npm run build:controller:仅用于生产环境构建 Controller 产物,开发阶段不需要npm run build:全量构建(前端 + Controller),仅用于生产环境改了什么?
├── 只改前端代码(.tsx/.vue/.js/.html/.scss)
│ ├── 仅本地调试 → npm run build:frontend → kd debug(不需要 deploy)
│ └── 更新环境效果 → npm run build:frontend → kd project deploy
├── 只改 Controller 代码(.ts)或 .kws 元数据
│ → .kws version + 1 → 直接 kd project deploy(不需要 build)
├── 前端 + Controller 都改了
│ → 递增相关 version → npm run build:frontend → kd project deploy
├── 只改元数据(.js-meta.kwc / .page-meta.kwp)
│ → version + 1 → 直接 kd project deploy(不需要 build)
└── 新建组件/页面/Controller
→ version = 1 → 若有前端代码则 npm run build:frontend → kd project deploy
kd project deploy:一次性部署整个项目的所有元数据(.js-meta.kwc + .page-meta.kwp + .kws)和前端静态文件到默认环境;开发阶段 Controller 由 deploy 直接处理,无需预先 buildkd project deploy -d app/kwc/MyComponent -e sit:仅部署指定组件到 sitkd project deploy -d app/pages/my_page -e sit:仅部署指定页面元数据到 sitkd project deploy -d app/ks/controller/MyController -e sit:仅部署指定 Controller 到 sitkd open -e dev -f kdtestdemopage:部署后直接打开环境上的表单查看效果(无 DNS 代理)kd debug:进入本地调试,通过 DNS 代理连接环境(必须使用 is_background: true 运行,仅当用户明确要求调试时使用)每当 AI 完成一段工作并且部署成功后,必须调用 form-link.mjs 脚本生成渲染卡片并输出给用户,展示已部署页面的访问入口。渲染卡片是用户触发预览效果的入口。
关键规则:
kd project deploy)、指定路径部署(-d app/kwc/...、-d app/pages/...、-d app/ks/controller/...)# 页面无关联实体时(纯展示页、配置页等)
node "{form_link}" generate --pageMeta app/pages/<page-name>.page-meta.kwp [--env <envName>]
# 页面关联了业务实体时(如销售订单、采购申请等)
node "{form_link}" generate --pageMeta app/pages/<page-name>.page-meta.kwp --formNumber <entity-formNumber> [--env <envName>]
metadata 字段是条件性的,仅当页面关联了业务实体时才输出--formNumber 传入的是实体的 formNumber(如 sal_salorder),不是页面元数据的 <name>--formNumber 的场景(满足任一即必须传入):- 用户需求提及了任何已有的表单、实体或元数据名称(如"销售订单"、"采购申请"等业务对象) - 开发过程中使用了 meta-query-api.mjs 查询过表单/字段(如 queryFormsByApp、getEntityFields) - Controller 配置了 entityNumber - 用户明确提供了表单编码 / formNumber
meta-query-api.mjs 的 queryFormsByApp 搜索表单获取 formNumber,再将其传入 --formNumber。不能因为开发过程中没有调用过 getEntityFields 就忽略该参数queryFormsByApp 查询确认,而不是默认不传--formNumber 的场景(仅以下情况才可省略):- 明确是纯展示页、配置页、仪表盘等无关联实体的页面 - 页面是全新创建的,不基于任何已有实体
当段工作所有 deploy 完成 → 调用 form-link.mjs 输出渲染卡片(强制) → 询问菜单发布(可选)
注意:部署后默认仅输出渲染卡片(见「部署完成标准输出」),不自动执行 kd open。仅当用户明确要求查看环境效果时才使用本命令。
部署后使用 kd open 查看环境上的表单效果:
kd open -e <env> -f <page_name>:直接在浏览器中打开对应环境上已部署的表单页面-e 指定目标环境(必填),-f 传入页面元数据 <name> 值(必填),取值规则与 kd debug -f 一致kd project deploy 将元数据和静态文件部署到目标环境适用场景:用户说"看看效果"、"打开页面"、"查看环境上的表单"、"看看部署结果"等。
仅当用户明确说"调试"、"本地调试"、"联调"、"实时预览代码修改"时才使用 kd debug:
kd debug 时必须使用后台模式(is_background: true),因为这是一个持续运行的开发服务器,不会自动结束kd debug,命令会在 90 秒后因超时被强制终止,导致本地服务被 killkd debug 启动后会先打开浏览器访问对应地址,但此时本地开发服务可能尚未完全启动,页面可能暂时无法访问。应等待服务启动完成后再刷新浏览器getterminaloutput 查看 kd debug 的运行状态和输出kd env set target-env <env-name>前置条件(必须在触发 open/debug 前完成):
用户意图判断:
├── "看效果/打开页面/查看部署结果/看看环境上的表单" → kd open
├── "调试/联调/本地调试/实时预览修改" → kd debug
└── 未明确表达 → 默认输出渲染卡片即结束,不自动执行 kd open 或 kd debug
补充:环境未认证时 kd project deploy 会直接阻止部署。
菜单管理将部署后的页面注册到应用导航菜单,使页面在苍穹环境中可被用户导航访问。
所有菜单操作通过scripts/menu-api.mjs脚本完成,详细命令参考见 [references/app-menu.md](references/app-menu.md)。
kd project deploy 成功后,引导用户是否将页面发布到应用菜单kd env auth openapi 已完成).kd/config.json 的 app 字段,或用户明确提供)所有菜单操作必须遵循「先查后改」原则,禁止跳过查询直接执行写操作。
queryTree(必须)→ 获得 menuId / 菜单结构 → 执行写操作 → getMenu 或 queryTree 验证结果
| 约束 | 说明 |
|---|---|
| menuId 只能从接口获取 | menuId 只能来自 queryTree 返回的菜单树、addMenu 返回的新建菜单、或 getMenu 返回的详情。禁止凭记忆或猜测构造 menuId |
| 修改/删除/移动前必须先查询 | 执行 updateMenu、deleteMenu、moveMenu 前,必须先执行 queryTree 获取当前菜单树,从返回结果中确认目标 menuId 存在且状态正确 |
| 新增后必须捕获 menuId | addMenu 成功后,必须从响应中提取新菜单的 menuId 并记录,供后续修改/移动使用 |
| 写操作后必须验证 | 任何写操作(add/update/delete/move)完成后,必须执行 getMenu 或 queryTree 验证实际状态,不能仅凭返回的 success 判断 |
| parentMenuId 必须来自查询 | 新增子菜单时,parentMenuId 必须从 queryTree 的返回结果中获取已有菜单的 menuId,禁止猜测 |
.kd/config.json 的 app 字段作为 bizAppNumber.page-meta.kwp 中 <name> 标签的实际值(已含 ISV 前缀)⚠ formNumber 必须从 deploy 后的
.page-meta.kwp文件中读取<name>标签的实际值,不要自行拼接 ISV 前缀。
无论用户要求什么菜单操作,都必须先执行此步骤获取当前菜单状态。
node "{menu_api}" queryTree --bizAppNumber {bizAppNumber}
- 部署后进入 → 根据表单名称和现有菜单结构,推荐菜单放置位置(分析语义关联,推荐同类分组;菜单树为空则推荐创建一级菜单)。推荐前须检查目标位置层级深度(不超过 3 级) - 用户直接触发 → 展示菜单树后等待用户指示操作
根据用户意图执行对应操作(所有 menuId 必须来自 Step 2 的查询结果):
| 操作 | 命令 | 执行前检查 |
|---|---|---|
| 新增 | addMenu --bizAppNumber {app} --name {name} --formNumber {form} [--parentMenuId {pid}] [--seq {n}] |
确认菜单名称和位置;检查层级不超 3 级;parentMenuId 必须来自 queryTree 结果;批量新增同级菜单时必须传递从小开始的递增 --seq 值(如 1、2、3),禁止使用大数值,范围 1–32767 |
| 修改 | updateMenu --bizAppNumber {app} --menuId {id} [--name ...] [--visible ...] [--seq {n}] |
menuId 必须来自 queryTree 结果;修改 visible 为 0 时警告级联隐藏;修改 parentMenuId 时检查循环引用和层级 |
| 删除 | deleteMenu --bizAppNumber {app} --menuId {id} |
menuId 必须来自 queryTree 结果;检查 HPCE 保护;警告级联删除子菜单;需用户确认 |
| 移动 | moveMenu --bizAppNumber {app} --menuId {id} --direction {up/down} |
menuId 必须来自 queryTree 结果;展示当前排序位置;若报错「序号一致」,先用 updateMenu --seq 修改相邻菜单序号再重试 |
每次操作前均需将配置方案展示给用户确认,用户确认后再执行。
- 删除操作:优先用 getMenu 确认目标菜单返回 MENUNOTFOUND(菜单树可能存在短暂缓存延迟) - 其他写操作:执行 getMenu(单个菜单)或 queryTree(全局)验证
1. 修改此菜单 2. 移动菜单位置 3. 删除此菜单 4. 继续添加其他菜单 5. 查看完整菜单树 6. 完成
kd project deploy 成功后:
form-link.mjs 生成部署完成渲染卡片(见「部署完成标准输出」章节)部署成功。是否需要将页面发布到应用菜单?
若用户同意 → 自动进入 Step 1(bizAppNumber 和 formNumber 均已可从当前上下文获取)。
| 约束 | 何时提醒 |
|---|---|
| 菜单最多 3 级 | 新增或移动菜单时检查 |
| HPCE 菜单不可删除 | 删除前检查 menuId 是否以 HPCE 结尾 |
| 级联隐藏 | 修改 visible 从 1→0 时警告 |
| 级联删除 | 删除有子菜单的菜单时警告 |
| formNumber 取实际值 | 新增页面菜单时 |
元数据查询用于在已认证环境中搜索表单和获取实体字段结构,为 KS 脚本编写、页面开发等提供上下文信息。
所有查询操作通过scripts/meta-query-api.mjs脚本完成,详细命令参考见 [references/meta-query.md](references/meta-query.md)。
kd env auth openapi 已完成).kd/config.json 的 app 字段,或用户明确提供)优先使用 queryFormsByApp 在当前应用范围内搜索:
node "{meta_query_api}" queryFormsByApp --appNumber {appNumber} --keyword {keyword}
appNumber 从 .kd/config.json 的 app 字段获取keyword 为用户提到的表单名称关键词(可选,不传则列出应用下所有表单)根据返回结果数量处理:
| 场景 | 处理方式 |
|---|---|
| 返回单条 | 直接确认为目标表单,提取 formNumber |
| 返回多条 | 列表展示让用户选择(序号 / 表单名称 / 表单编码 / 模型类型 / 所属应用) |
| 返回空 | 提示未找到,建议尝试换关键词重试 |
确认目标表单后,根据需要获取字段结构:
node "{meta_query_api}" getEntityFields --formNumber {formNumber}
返回结果按单头和单据体分组展示字段的 key、类型、是否必录等信息。
当用户说“帮我开发一个 KWC 页面/功能”时,默认按这条链路推进:
.js-meta.kwc、Controller 元数据 .kws(若有)npm run build:controllerdeployform-link.mjs 输出渲染卡片(见「部署完成标准输出」章节)kd openkd debug不要只完成其中的"创建组件"或"本地跑起来",除非用户明确只要某个局部步骤。
输出方案或执行命令时,尽量同时给出:
page-meta.kwpdeployversion:::render:kdform 渲染卡片(见「部署完成标准输出」章节)| 症状 | 可能原因 | 解决方案 |
|---|---|---|
kd project deploy 提示未认证 |
环境未执行 auth | kd env auth openapi |
| 页面元数据上传失败 | version 未递增 | 递增 version 后重试 |
| 页面显示空白 | control.type 与组件 name 不匹配 | 检查大小写完全一致 |
| 组件属性不生效 | 属性未在 .js-meta.kwc 声明 | 添加 <property> 定义 |
| name 校验失败 | 格式不符 | 字母开头,仅小写+数字+下划线,≤30字符 |
| isv 不一致 | 页面与环境开发商不匹配 | deploy 会自动替换,无需手填 |
| 在非 KWC 工程目录执行命令 | 缺少 .kd 目录 | 先执行 kd project init |
| 创建了页面但组件不显示 | 未把组件写入 <controls> |
编辑 page-meta.kwp 添加 control |
kd debug 提示端口占用 |
3333 端口被占用 | 关闭占用进程或重启终端 |
kd debug 启动后无法找到目标表单 / 进入了错误的表单 |
未使用 -f 参数指定页面元数据 name,或传入了文件名而非元数据 name 值 |
使用 kd debug -f <pagename>,其中 <pagename> 为当前本地 .page-meta.kwp 文件中 <name> 节点的实际值。注意:deploy 后脚手架会自动更新本地文件中的 name(拼接 isv 前缀),因此应使用 deploy 后的完整名称,如 kdtestdemopage |
kd open 打开页面后显示空白 |
未部署或静态文件未上传 | 先执行 kd project deploy 确保元数据和静态文件已上传 |
kd open 提示表单不存在 |
-f 参数值不正确 |
传入页面元数据 <name> 节点的实际值(deploy 后的完整名称) |
.page-meta.kwp 中的 <name> 可填写业务标识,如 demo_pagekdtest),拼接成 kdtestdemopage 上传到远端,并同步更新本地文件kd debug -f 和 kd open -f 均应传入当前本地文件中的 <name> 值(即 deploy 后的完整名称).page-meta.kwp 查看 <name> 节点即可按常见场景快速定位参考文档:
cli-reference.md(project init)+ 本文「初始化工程」章节cli-reference.md(project create)+ component-metadata.mdpage-metadata.md + 本文「创建页面元数据」章节env-setup.md + cli-reference.md(deploy/open/debug)+ 本文「配置环境」「部署与调试」章节app-menu.md + 本文「应用菜单管理」章节meta-query.md + 本文「元数据查询」章节| 主题 | 参考文件 |
|---|---|
| CLI 命令语法、参数、示例 | references/cli-reference.md |
| 组件元数据字段与属性类型 | references/component-metadata.md |
| 环境信息收集与认证流程 | references/env-setup.md |
| 页面元数据字段、controls 规则、命名规范 | references/page-metadata.md |
| 应用菜单管理命令与展示规范 | references/app-menu.md |
| 元数据查询命令与响应格式 | references/meta-query.md |