Custom Lightning Types 实战:酒店预订集合渲染器

简介: Custom Lightning Types 集合渲染器实战教程:酒店预订 Agent Action 列表输出 UI 自定义。涵盖 HotelReservation Apex 类设计、默认列表 JSON 输出问题、hotelResponse CLT(Collection Renderer -- collection 键包裹 componentOverrides)、LWC 通过 @api value 接收单个列表项、与航班示例顶级 Renderer 的对比、三种覆盖模式完整总结。

Custom Lightning Types — 酒店预订集合渲染器

酒店预订示例:集合渲染器覆盖列表输出

本示例展示如何使用集合渲染器(Collection Renderer)——这是一种自定义列表项显示方式的模式。与航班示例中使用的顶级 renderer/editor 覆盖不同,集合渲染器控制列表中每一项的渲染方式。我们将使用 HotelReservation Apex 类查找可用酒店,然后创建 hotelResponse 自定义 Lightning Type,将酒店列表渲染为精美的卡片。

Apex 类设计

HotelReservation — 主 InvocableMethod

  • @InvocableMethod(label='Find hotels' description='Find Available Hotels')

  • 输入:HotelRequest(city、checkInDate、checkOutDate)—— 三个简单字段

  • 输出:HotelResponse → List —— 关键区别:输出是列表

数据类结构

类字段
Hotelname (String), address (String), rooms (List), hotelCategory (HotelCategory)
Roomtype (String), available (Integer), discountPercentage (Double), price (Long), petAllowed (Boolean)
HotelCategorystar (String) — 如 "four"、"five"
HotelRequestcity (String), checkInDate (Date), checkOutDate (Date)

示例硬编码两家酒店(生产环境应从外部服务获取):Sahara Hotels(四星,Gacchibowli Hyderabad,DELUX 房间 $2000,15.15% 折扣)和 Taj Vivanta(五星,Kokapet,DELUX 房间 $2000,15.15% 折扣)。

Apex 类

默认 UI 和结果数据

创建 Agent Action

  • 方法:Find hotels

  • 输入:checkInDate (dateType), checkOutDate (dateType), city (textType)

  • 输出:hotels — list 类型,使用 @apexClassType/c__Hotel

默认输出问题

原始 JSON 无格式显示——酒店名称、地址、星级、房间信息全部混杂在一起,无法快速浏览和比较酒店选项:

{"hotels": [ {"name": "Sahara Hotels", "address": "Gacchibowli Hyderabad", "hotelCategory": {"star": "four"}, "rooms": [{"type": "DELUX", "price": 2000, "discountPercentage": 15.15, "available": 2}] }, {"name": "Taj Vivanta", "address": "Kokapet", "hotelCategory": {"star": "five"}, "rooms": [/* 同上结构 */] } ]}


目标:创建 hotelResponse CLT,使用集合渲染器将每个酒店显示为带样式的卡片。

![默认 UI 和结果数据](https://sfdcvideotest.oss-cn-beijing.aliyuncs.com/media/ADG001/slide_240/image.png)

## 自定义输出:hotelResponse CLT

### 目录结构

`lightningTypes/
  hotelResponse/
    schema.json
    lightningDesktopGenAi/
      renderer.json`

schema.json

引用单个 Hotel 的 Apex 类类型(而非列表):

{ "title": "Hotel Reservation", "description": "Hotel Reservation", "lightning:type": "@apexClassType/c__Hotel" }


### renderer.json — 集合渲染器(与航班示例的关键区别)

使用 "collection" 键包裹 componentOverrides,告诉系统对列表中的每个单独项目应用 LWC:

`{
  "collection": {
    "renderer": {
      "componentOverrides": {
        "$": {
          "definition": "c/hotelDetails"
        }
      }
    }
  }
}`

两种覆盖模式对比

模式渲染器结构适用场景
顶级 Renderer
(航班示例)"renderer": {"componentOverrides": {...}}覆盖整个输出组件
集合 Renderer
(酒店示例)"collection": {"renderer": {"componentOverrides": {...}}}覆盖列表中每一项的渲染方式。LWC 每次接收一个列表项

LWC:hotelDetails 组件

  • Target:lightning__AgentforceOutput

  • sourceType:lightning__listTypeitemTypeName="c__hotelResponse"

  • HTML 布局:lightning-card "Available Hotels" 带旅行图标 —— 迭代 {value} 数组 —— 每个酒店:名称 + 位置图标 + 地址 —— 每个房间:类型、可用数量、宠物政策、价格(₹)、折扣标签

  • JS:极简 —— 仅 @api value(组件通过 value 属性接收数据)

关键区别:集合渲染器中的 LWC 接收 单个列表项(而非整个列表),通过 @api value 属性。这使得每个酒店都能获得一致的卡片样式。

自定义输出 hotelResponse

集成和最终效果

集成步骤

  • 打开 Agent Action → 编辑 HotelResponse 的 Output Rendering 参数

  • 选择 hotelResponse 自定义 Lightning Type

  • 保存(忽略 "Unsupported Data Type" 提示)

  • 测试前重新加载 Agent 页面

改造前(默认 UI)

  • 原始 JSON —— 酒店名称、地址、星级和房间信息全部混杂

  • 无视觉卡片、无图标、无结构

  • 无法快速比较酒店

改造后(hotelResponse CLT)

  • "Available Hotels" 卡片 + 旅行图标标题

  • 每个酒店以独立样式卡片展示:酒店名称(标题)+ 位置图标 + 地址

  • 每个房间在阴影子框中展示:房型(粗体标题)、可用数量(事件图标)、宠物政策(动物图标)、价格(₹ 突出显示)、折扣百分比(标签/芯片)

  • 干净、专业、可快速浏览的布局

三种覆盖模式最终总结

模式renderer.json 结构适用场景
顶级 Renderer{"renderer": {"componentOverrides": {"$": {"definition": "c/xxx"}}}}覆盖整个输出显示(航班示例)
集合 Renderer{"collection": {"renderer": {"componentOverrides": {"$": {"definition": "c/xxx"}}}}}覆盖列表中每项渲染——LWC 接收单个项(酒店示例)
顶级 Editor{"editor": {"componentOverrides": {"$": {"definition": "c/xxx"}}}}覆盖输入表单显示(航班 Filter 示例)

集成和最终效果

集合渲染器是列表输出的核心模式 —— 它将每个列表项作为独立卡片渲染,配合顶级 Renderer 和 Editor 模式,组成了 Custom Lightning Types UI 自定义的完整工具箱。

发布来源:https://www.salesforcecrm.cn/article/agentforce/custom-lightning-types-hotel-collection.html

相关文章
|
7月前
|
弹性计算 运维 安全
轻量 vs ECS:阿里云轻量应用服务器与ECS云服务器有什么区别?2026最新手动整理
阿里云轻量应用服务器适合个人开发者、学生搭建博客、测试环境等轻量场景,操作简单、成本低;ECS功能全面、弹性强,支持高并发、集群部署,适合企业级应用。选型关键看业务规模与技术需求。
412 4
|
4月前
|
人工智能 机器人 Shell
在公司蒸馏我之前,我先赛博飞升
OpenClaw(龙虾)是一款开源AI数字分身框架,可本地或云端部署,支持多模型接入(Claude、Qwen、Ollama等)及钉钉/飞书/Telegram等10+聊天平台。它不止聊天,还能操作浏览器、读写文件、执行命令,并通过插件实现“蒸馏人物”、自动化办公等高级能力,主打隐私可控、真能干活。
766 11
|
4月前
|
人工智能 安全 BI
2026年企业级BI系统建设方案,从数据孤岛到智能决策的架构设计
2026年,数据已成为核心生产要素,但企业仍困于数据孤岛、口径不一、分析迟滞。本文聚焦企业级BI建设,提出“从孤岛到智能决策”路径,以瓴羊Quick BI为标杆,详解其全域治理、AI原生分析与安全服务三层架构,助力构建可落地、可演进、可智能的决策中枢。(239字)
|
4月前
|
编解码 自然语言处理 安全
无接口也能通:实在Agent如何用ISSUT屏幕语义技术打通企业异构系统孤岛
实在Agent首创ISSUT屏幕语义理解技术,不依赖API,像人一样“看懂”并操作各类系统界面(SAP/钉钉/网银/老旧OA等),自动完成跨系统数据搬运与流程闭环,破解企业“系统孤岛”难题,开箱即用,安全合规。(239字)
|
8月前
|
存储 编解码 缓存
上传文件卡顿?阿里云点播上传加速技巧全解析
本文系统解析阿里云视频点播上传机制,针对进度停滞、超时失败等问题,分享选型策略、分片上传、并发优化等实战技巧,助力提升上传效率与稳定性。
|
4月前
|
SQL 运维 容灾
MySQL 主从复制全解:底层原理、复制模式差异、主从延迟排查与优化实战
本文系统解析MySQL主从复制:涵盖核心价值(高可用、读写分离、备份分析、异地多活)、binlog与redo log本质区别、GTID原理、异步/半同步/MGR三大模式对比,以及主从延迟根因排查(IO/SQL线程瓶颈)与全链路优化方案(架构、主库、从库、SQL四维优化),附实战案例与MyBatis-Plus读写分离实现。
478 3
|
4月前
|
缓存 NoSQL 关系型数据库
毕业设计电商系统怎么快速上线?Spring Boot+Vue架构+阿里云全栈服务部署实战
本文详解电商系统毕设开发与阿里云部署全流程:涵盖模块化架构设计、JWT认证、多级缓存、Redis分布式锁防超卖、OSS文件存储及SLB+RDS+ECS云上部署,提供可复用的生产级项目模板。
|
9月前
通义千问Qwen荣获“领先科技奖”
2025年11月6日,通义千问大模型荣膺世界互联网大会“领先科技奖”。凭借卓越性能与开源贡献,其已开源超300个模型,下载量超6亿次,衍生模型超17万,居全球首位。
1293 153
|
8月前
|
存储 安全 数据管理
没听过冷数据?一文带你读懂冷数据
冷数据指长期不用但需合规保存的历史数据,如旧订单、合同等。它虽不常用,却关乎成本、安全与合规。管理不当将导致存储浪费、系统变慢、审计风险。应通过分类、分级存储、自动归档与索引管理,确保“用时能查”,实现数据治理的精细化与可持续化。

热门文章

最新文章