news 2026/7/22 22:37:24

Custom Lightning Types 实战:航班预订示例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Custom Lightning Types 实战:航班预订示例

航班预订示例:自定义 Lightning Types 输入和输出

本示例展示如何使用自定义 Lightning Types 来覆盖 Agent Action 的默认输入和输出 UI。我们将使用 FlightAgent Apex 类查找可用航班,创建两个自定义 Lightning Type:flightResponse(输出渲染器——以精美的卡片布局展示航班)和 flightFilter(输入编辑器——带标签的表单字段收集价格和折扣输入)。

Apex 类设计

FlightAgent — 主 InvocableMethod

  • @InvocableMethod(label='Find Flights' description='Finds available flights')
  • 输入:FlightRequest(originCity、destinationCity、dateOfTravel、filters)
  • 输出:FlightResponse → AvailableFlight → List<Flight>

数据类结构

字段
FlightflightId (String), numLayovers (Integer), isPetAllowed (Boolean), price (Long), discountPercentage (Double), durationInMin (Integer)
AvailableFlightglobal List<Flight> flights
FlightRequestFilterprice (Long), discountPercentage (Double) — 可选搜索过滤器
FlightRequestoriginCity, destinationCity, dateOfTravel, filters (FlightRequestFilter)

示例硬编码了四个航班(演示用,生产环境应从外部服务获取):IX 2814(1 次转机,$1000,20.2% 折扣,70 分钟)、6E 488(2 次转机,$2000,15.15% 折扣,120 分钟)、6E 523(1 次转机,$3000,13.14% 折扣,75 分钟)、6E 6166(2 次转机,$4000,14.14% 折扣,130 分钟)。

创建 Agent Action 和默认 UI 问题

使用 FlightAgent 类创建 Agent Action 后,默认 UI 存在严重问题:

默认输入 UI 问题

  • 只显示基本字段(出发城市、目的城市、旅行日期)
  • 过滤器字段(价格和折扣百分比)完全不可见——用户无法筛选航班

默认输出 UI 问题

  • 航班数据以原始 JSON格式返回
  • 无标签、布局混乱、难以理解
  • 无视觉层次或样式 —— 用户必须手动解析 JSON 才能比较航班
// 默认输出 —— 原始 JSON {"aFlight": {"flights": [ {"flightId": "IX 2814", "price": 1000, "numLayovers": 1, ...}, {"flightId": "6E 488", "price": 2000, "numLayovers": 2, ...} ]}}

目标:创建两个自定义 Lightning Type —— flightResponse 将原始 JSON 转换为精美的航班卡片,flightFilter 显示带标签的价格和折扣输入字段。

自定义输出 UI:flightResponse CLT

目录结构

lightningTypes/ flightResponse/ schema.json lightningDesktopGenAi/ renderer.json

schema.json

引用 Apex 类类型,告诉系统这个自定义类型映射到哪个数据结构:

{ "title": "My Flight Response", "description": "My Flight Response", "lightning:type": "@apexClassType/c__AvailableFlight" }

renderer.json — 用自定义 LWC 覆盖默认渲染

使用顶级 renderer(覆盖整个输出组件):

{ "renderer": { "componentOverrides": { "$": { "definition": "c/flightDetails" } } } }

LWC:flightDetails 组件

  • Target:lightning__AgentforceOutput(在 js-meta.xml 中)
  • sourceType:c__flightResponse
  • HTML 布局:lightning-card 展示每个航班——航班 ID + 折扣标签、价格(粗体)、持续时间、出发/到达时间线、转机次数、宠物政策
  • JS 逻辑:将持续时间从分钟格式化为 "X hr Y min"、计算到达时间、将 petAllowed 映射为 Yes/No

渠道支持:lightningDesktopGenAi文件夹用于桌面 Agentforce 聊天,可额外配置enhancedWebChat文件夹用于 Web 聊天渠道。

集成步骤

  1. 打开 Agent Action → 编辑 aFlight 的 Output Rendering
  2. 选择flightResponse自定义 Lightning Type
  3. 保存(忽略 "Unsupported Data Type" 提示——无害)
  4. 测试前重新加载 Agent 页面

自定义输入 UI:flightFilter CLT

目录结构

lightningTypes/ flightFilter/ schema.json lightningDesktopGenAi/ editor.json

schema.json

{ "title": "Flight Filter", "description": "Flight Filter", "lightning:type": "@apexClassType/c__FlightRequestFilter" }

editor.json — 用自定义 LWC 覆盖默认输入表单

{ "editor": { "componentOverrides": { "$": { "definition": "c/flightRequestFilter" } } } }

LWC:flightRequestFilter 组件

  • Target:lightning__AgentforceInput
  • targetType:c__flightFilter
  • HTML:lightning-card "Price and Discount Percentage" 包含两个 lightning-input 字段——Price(数字,min 1000 / max 20000 / step 1)、Discount Percentage(数字,min 0 / max 100 / step 1)

关键模式 — handleInputChange()

这是输入数据绑定的核心:

  • connectedCallback()—— 加载已有值
  • handleInputChange()—— 捕获用户输入、更新组件状态、派发valuechangeCustomEvent(包含 {price, discountPercentage} detail)通知父 Planner 组件、使用stopPropagation()阻止不需要的事件传播

集成

  1. 打开 Agent Action → 编辑 filters 的 Input Rendering
  2. 选择flightFilter自定义 Lightning Type → 保存
  3. 重新加载 Agent 页面后测试
  4. 注意:确保子代理指令正确引导 LLM 使用 UI 表单输入,而非文本输入

改造前后对比

输出改造

方面改造前(默认)改造后(flightResponse CLT)
展示方式原始 JSON 无格式精美卡片布局 + 航班图标
标签航班 ID + 折扣标签、价格加粗、出发/到达时间线
可读性难以扫描和比较一目了然比较航班差异

输入改造

方面改造前(默认)改造后(flightFilter CLT)
可见字段仅基本字段(origin、destination、date)新增 Price 和 Discount Percentage 卡片
过滤器能力无法筛选航班带约束的数字输入(min/max/step)

核心技术模式总结

模式用途关键配置
顶级 Renderer覆盖整个输出显示"renderer": {"componentOverrides": {"$": {"definition": "c/xxx"}}}
顶级 Editor覆盖输入表单显示"editor": {"componentOverrides": {"$": {"definition": "c/xxx"}}}
schema.json映射 Apex 类类型"lightning:type": "@apexClassType/c__ClassName"
LWC Target输出组件lightning__AgentforceOutput
LWC Target输入组件lightning__AgentforceInput
输入数据绑定实时更新 PlannerhandleInputChange()+valuechangeCustomEvent

通过 schema.json 引用 Apex 类型、renderer.json 覆盖输出渲染、editor.json 覆盖输入表单,配合自定义 LWC 组件,你可以将 Agent Action 的默认原始 JSON UI 完全改造为品牌化、专业级的用户体验。

发布来源:Custom Lightning Types 实战:航班预订示例 | Salesforce CRM 中文站

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/22 22:36:28

手机号查询QQ号终极指南:3分钟掌握高效查询的完整解决方案

手机号查询QQ号终极指南&#xff1a;3分钟掌握高效查询的完整解决方案 【免费下载链接】phone2qq 项目地址: https://gitcode.com/gh_mirrors/ph/phone2qq 在当今数字化办公环境中&#xff0c;快速验证手机号与QQ号的对应关系已成为企业HR、客服团队和数据管理人员的刚…

作者头像 李华
网站建设 2026/7/22 22:34:27

仅限前200名教研负责人开放:AI配音效果AB测试模板(含眼动追踪+答题正确率+回放跳转率三维归因分析表)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI语音教育课程配音的范式变革与评估挑战 传统教育音频制作长期依赖专业配音演员、录音棚环境与线性剪辑流程&#xff0c;而大语言模型驱动的端到端语音合成&#xff08;TTS&#xff09;技术正彻底重构…

作者头像 李华
网站建设 2026/7/22 22:33:40

前后端分离架构

GoViewBoard 系统中前端和后端的联系&#xff1a; &#x1f3d7;️ 架构概述 这个系统采用 前后端分离架构&#xff0c;包含两个独立的部分&#xff1a; 后端 (Backend) 技术栈: Go Gin 框架端口: 8080功能: 提供 RESTful API 接口&#xff0c;处理业务逻辑&#xff0c;数据库…

作者头像 李华
网站建设 2026/7/22 22:26:59

S3跨域资源共享实战:3步解决90%前端资源访问问题

S3跨域资源共享实战&#xff1a;3步解决90%前端资源访问问题 【免费下载链接】aws-devops-zero-to-hero AWS zero to hero repo for devops engineers to learn AWS in 30 Days. This repo includes projects, presentations, interview questions and real time examples. 项…

作者头像 李华
网站建设 2026/7/22 22:26:50

终极指南:如何在ComfyUI中轻松部署LTX-Video实现AI视频生成

终极指南&#xff1a;如何在ComfyUI中轻松部署LTX-Video实现AI视频生成 【免费下载链接】ComfyUI-LTXVideo LTX-Video Support for ComfyUI 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI-LTXVideo 想要在ComfyUI中体验强大的AI视频生成功能吗&#xff1f;…

作者头像 李华
网站建设 2026/7/22 22:17:19

Chiplets仿真相关概念列表

Content一、系统与单元&#xff08;宏观层级&#xff09;二、封装载体与基板&#xff08;中间层&#xff09;三、连接与互连结构&#xff08;物理接口&#xff09;四、仿真与电气专有概念一、系统与单元&#xff08;宏观层级&#xff09; PCB&#xff08;印刷电路板&#xff09…

作者头像 李华