前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Salesforce LWC学习(三十六) Quick Action 支持选择 LWC了

Salesforce LWC学习(三十六) Quick Action 支持选择 LWC了

作者头像
冬夜先生
修改于 2021-09-09 02:33:45
修改于 2021-09-09 02:33:45
77800
代码可运行
举报
文章被收录于专栏:csicocsico
运行总次数:0
代码可运行

背景: 我们现在项目越来越多的使用 lwc 进行了前端开发,当然我们知道lwc并不能所有的场景都支持自己玩,比如组件之间的navigation、 quick action等都需要通过aura进行操作,aura套用lwc来实现。好消息是随着salesforce的release对lwc的不断发力,越来越多的功能可以通过lwc来使用。

一. lwc 适配 Quick Action的两个类型

首先我们先想一下我们通过Aura使用到Quick Action的场景,总结起来可以简单的归到2点:

1. 弹出一个popup modal,modal中展示一个UI,不管是一个可以用于修改的表单,还是展示只读内容然后有操作按钮等等,这些都无所谓了,重点是有UI的内容,展示modal;

2. 点击以后执行一个web service或者做一个跳转操作,用户不希望弹出来modal,只是希望进行即可。

当然,不同的甲方不同的需求会有不同的实现方案,但是Quick Action当我们选择 Aura的时候,通常这两个大的类型就可以搞定的。切回到 lwc,同样官方也提供了这两个类似的模式。

  • ScreenAction: 用于声明一个有popup modal的UI的quick action;
  • Action: 无UI的quick action。

这两种配置是配置到js-meta.xml里面。配置信息如下:

ScreenAction: 以下的配置是 ScreenAction的配置,主要有几个点:

  • apiVersion建议选择52.0,如果有后续的release,当然也可以选择这个值即以上,目前来讲,选择52.0,尝试了一下,如果选择50、51也可以保存,但是为了考虑未知的风险,尽量还是按照规矩来;
  • target设置成 lightning__RecordAction:这个是52 release新有的配置项,需要了解的一点是,如果使用 lwc的quick action,只支持 record 的quick action,global action是不支持的;
  • targetConfig中配置的 actionType为 ScreenAction,当然,如果不配置 targetConfig,默认也是 ScreenAction,所以我们在配置时,默认可以不配置targetConfigs部分;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8" ?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
   <apiVersion>52.0</apiVersion>
   <isExposed>true</isExposed>
   <targets>
       <target>lightning__RecordAction</target>
   </targets>
    <targetConfigs>
   <targetConfig targets="lightning__RecordAction">
     <actionType>ScreenAction</actionType>
   </targetConfig>
 </targetConfigs>
</LightningComponentBundle>

Action:和上述的区别只是 actionType为 Action,如果想要选择 Action类型,则下述所有的内容都无法省略。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8" ?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
   <apiVersion>52.0</apiVersion>
   <isExposed>true</isExposed>
   <targets>
       <target>lightning__RecordAction</target>
   </targets>
    <targetConfigs>
   <targetConfig targets="lightning__RecordAction">
     <actionType>Action</actionType>
   </targetConfig>
 </targetConfigs>
</LightningComponentBundle>

 二. ScreenAction的使用

配置篇已经搞定,接下来就搞一下UI,根据官方的demo,我们做一下contact的编辑的一个component quick action。

screenActionSample.js: 主要用于contact的获取数据以及编辑。这里面有两个关键点。

  • CloseActionScreenEvent是salesforce lwc提供的关闭action的事件,类似于aura的e.force:closeQuickAction。同样,如果lwc想要关闭,只需要this.dispatchEvent(new CloseActionScreenEvent());即可,类似于aura的$A.get("e.force:closeQuickAction").fire();
  • 我们无法捕捉到X这个关闭按钮,所以同样也没法在这个操作中监听事件(如果大神们可以监听到,麻烦告知,我这里在修改)。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { LightningElement, api, wire,track } from 'lwc';
import { getRecord, getFieldValue } from 'lightning/uiRecordApi';
import { updateRecord } from 'lightning/uiRecordApi';
import { CloseActionScreenEvent } from 'lightning/actions';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
import FNAME_FIELD from '@salesforce/schema/Contact.FirstName';
import LNAME_FIELD from '@salesforce/schema/Contact.LastName';
import PHONE_FIELD from '@salesforce/schema/Contact.Phone';
import ID_FIELD from '@salesforce/schema/Contact.Id';

const FIELDS = [FNAME_FIELD, LNAME_FIELD, PHONE_FIELD];
export default class screenActionSample extends LightningElement {
    disabled = false;
    @api recordId;
    @api objectApiName;

    contact;

    @track firstName;

    @track lastName;

    @track phone;

    @wire(getRecord, { recordId: '$recordId', fields: FIELDS })
    wiredRecord({ error, data }) {
        if (error) {
            //TODO
        }  else if (data) {
            this.contact = data;
            this.firstName = this.contact.fields.FirstName.value;
            this.lastName = this.contact.fields.LastName.value;
            this.phone = this.contact.fields.Phone.value;
        }
    }

    handleCancel(event) {
       // Add your cancel button implementation here
       this.dispatchEvent(new CloseActionScreenEvent());
    }

    handleChange(event) {
       let source = event.target.name;
       if(source === 'firstName') {
               this.firstName = event.target.value;
       } else if(source === 'lastName') {
               this.lastName = event.target.value;
       } else if(source === 'phone') {
               this.phone = event.target.value;
       }
   }

    handleSubmit(e) {
        // Add your updateRecord implementation
        const fields = {};
        fields[ID_FIELD.fieldApiName] = this.recordId;
        fields[FNAME_FIELD.fieldApiName] = this.firstName;
        fields[LNAME_FIELD.fieldApiName] = this.lastName;
        fields[PHONE_FIELD.fieldApiName] = this.phone;
        const recordInput = { fields };
        console.log(JSON.stringify(recordInput));
        updateRecord(recordInput)
                .then(() => {
                    this.dispatchEvent(
                        new ShowToastEvent({
                            title: 'Success',
                            message: 'Contact updated',
                            variant: 'success'
                        })
                    );
                    this.dispatchEvent(new CloseActionScreenEvent());
                })
                .catch(error => {
                    this.dispatchEvent(
                        new ShowToastEvent({
                            title: 'Error creating record',
                            message: error.body.message,
                            variant: 'error'
                        })
                    );
                });
    }
}

screenAction.html:这里我们看到一个新的组件的面孔: lightning-quick-action-panel。我们查阅官方文档以后,发现这个使用起来很简单,就是基于lightning design system中的modal来实现,属性中可以设置 header属性,代表action的头部,slot设置了footer的placeholder。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template>
    <lightning-quick-action-panel header="Quick Contact Edit">

            <lightning-input label="First Name" name="firstName" value={firstName} class="slds-m-bottom_x-small" onchange={handleChange}></lightning-input>
            <lightning-input label="Last Name" name="lastName" value={lastName} onchange={handleChange} class="slds-m-bottom_x-small" required></lightning-input>
            <lightning-input label="Phone" type="tel" name="phone" value={phone} onchange={handleChange} class="slds-m-bottom_x-small"></lightning-input>

        <div slot="footer">
            <lightning-button variant="neutral" label="Cancel" onclick={handleCancel}></lightning-button>
            <lightning-button variant="brand" class="slds-m-left_x-small" label="Save" type="submit" onclick={handleSubmit} disabled={disabled}></lightning-button>
        </div>
</lightning-quick-action-panel>
</template>

整体展示的效果:

我们来看一下解析的html,这个模型和官方的modal模型是不是很像。

当然,官方除了可以使用 lightning-quick-action-panel组件以外,也支持自己使用html去适配。

三. headless的action效果

headless的action是通过调用 invoke方法来执行,invoke方法前面通过 @api 注解来声明。如果需要异步操作或者需要访问后台等在进行操作,可以将方法声明称异步,即:@api async invoke() {}

举一个官方的demo:用来点击quick action跳转到 contact list

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { LightningElement, track, wire,api } from 'lwc';
import { NavigationMixin } from 'lightning/navigation';
export default class headlessActionSAmple extends NavigationMixin(LightningElement) {
    @api invoke() {
        this[NavigationMixin.Navigate]({
            type: 'standard__objectPage',
            attributes: {
                objectApiName: 'Contact',
                actionName: 'home',
            },
        });
    }
}

四. 问题思考

 优点: 对于优点来说,太显而易见了。 基于modal的设计,支持了lwc,还有什么比这个更好的优点吗

缺点:

1. 和aura弹出modal不同,aura的URL不会改变,lwc会改变URL,两边不统一,针对弹出modal以后的刷新操作,lwc加载数据等可能会有潜在的问题,需要测试和适配。举个例子,上述的ScreenAction的demo,初始化弹出来是正常的,但是当你点击刷新按钮或者点击F5以后,页面将会进入假死状态,这种情况可能要考虑一下优化代码。

2. lwc弹出的modal的宽度是固定的,如果客户希望更改lwc弹出的modal的宽度,则无法实现,这种在aura可以通过 aura:tag注入可以搞定 3. 如果基于screen action的modal,目前 lightning-quick-action-panel 还是beta版,项目要求高的,客户不一定接受。 4. 目前 lwc quick action不支持 salesforce mobile app,有mobile相关的项目,使用前一定要考虑限制,别做完以后电脑端没有问题,手机端是用不了。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
游戏建模经验分享:模型学习方法
最近通过很多师弟的交流,我发现游戏建模初学者大多存在三个大问题,一是工具的使用不够熟练,甚至有些功能还不知道,二是对布线的规范没有太大的要求和了解,三是对游戏制作流程不清晰和板绘下的功力不够,对贴图制作用工少,甚至有些人还处于一直做白膜的阶段
全栈程序员站长
2022/08/30
3010
游戏建模经验分享:模型学习方法
3d游戏建模全解[通俗易懂]
目前市面上随着3D游戏的兴起和VR的盛行,越来越多人对网络游戏越来越热衷,3D游戏建模设计师的需求也越来越广泛,市场缺口大,人才需求供不应求。
全栈程序员站长
2022/08/26
1.1K0
3d游戏建模全解[通俗易懂]
如何快速学从零开始学习3d建模?
大家好,又见面了,我是你们的朋友全栈君。 其实对于初学者来说,3D建模是一个专业性偏强且极其难入手的游戏制作专业技术。如果是无基础从零开始的学习的话,没有一个好的学习方法和好的指导老师的话,还是比较困
全栈程序员站长
2022/08/19
1K0
如何快速学从零开始学习3d建模?
3D建模大神都在用的学习技巧!
整个互联网的形态一直以来都是2D模式的,但是随着3D技术的不断进步,在未来的5年时间里,将会有越来越多的互联网应用以3D的方式呈现给用户,包括网络视讯、电子阅读、网络游戏、虚拟社区、电子商务、远程教育等等。甚至对于旅游业,3D互联网也能够起到推动的作用,一些世界名胜、雕塑、古董将在互联网上以3D的形式来让用户体验,这种体验的真实震撼程度要远超2D环境。我们所接触到的游戏建模,室内建模,数学建模等,包括现在很流行的电子商务,都对3D模式有着很强的需求,可见,未来市场对3D建模这一技术的渴望程度。
全栈程序员站长
2022/08/30
6140
3D建模大神都在用的学习技巧!
3D建模软件中涉及的技术
3D建模可使用建模软件,常用的通用商业3D软件有3Dmax以及Maya,cad 软件有autocad、solidworks、sroe。上面这两类3D软件都可输出3D模型,并导入到ThingJS平台使用。接下来我们来看建模软件中涉及的技术。熟悉了这些,即使你不是专业的3D可视化开发工程师,你是前端工程师,掌握Javascript 语言,便能够在ThingJS平台上自由创作。
要不要吃火锅
2019/10/24
2.4K0
新人如何入行3D游戏建模
所有行业都是一样的,没有什么容易的,只不过这一行是偏向于技术的,一个有好的建模师月薪10k+是很常见的,这个需要有自己刻苦学习的成果。 游戏建模前景在游戏模型行业,你基本不用担心找不到工作,因为游戏模型师人才缺口非常大。举个例子:游戏制作公司的人员配比大多数是这样的:比如100人的三维制作组,可能有60人在做模型贴图,10个人在K动画。只要你保证技能在手,一定是抢手的人才。在几年前游戏建模这个行业不仅仅缺人才,甚至连新手都非常稀缺,那个时候公司愿意招聘实习生,培养他们然后给公司干活,但是工资一定不会给开的很高,所以这些人全部跳槽了,成本牺牲太大。虽然到了今天转行做游戏建模的非常多,新手爆满,但是公司招聘一个有开发经验的人还是非常的难,现在的行情不会还像几年前一样,指望自学几个月还还有很多公司要你,现在公司都是要直接能干活,真正掌握技术的人。
全栈程序员站长
2022/08/26
6550
新人如何入行3D游戏建模
浅谈三维激光点云建模
传统倾斜摄影建模对建筑物复杂区域会出现大面积拉花现象,这是难以避免的。也是光学影像建模的劣势。而结合激光雷达电云建模,可以赋予模型更精细的纹理,再加上原本倾斜摄影的贴图,可以达到精细化建模的成果。
陈南GISer
2024/04/30
1.1K0
浅谈三维激光点云建模
游戏模型建模中使用3DMAX的问答总结
很对小伙伴在进行游戏模型建模中,使用3DMAX都有很多问题。这些问题有一些非常经典,因为很多人都曾遇到过。在此我把这些问题整理出来,希望对于刚接触游戏模型建模的小伙伴有所帮助。
边禾
2018/09/05
1.3K0
游戏模型建模中使用3DMAX的问答总结
Autodesk 3dmax 2023.1【附激活补丁+安装教程】中文免费版下载
3DMAX2023是Autodesk公司最新开发的一款三维建模渲染制作软件。我们可以使用该软件完成工业设计、建筑设计、多媒体制作、游戏开发等工作。3DMAX2023百度云还添加了多种丰富灵活的工具,让您可以提高工作效率。3DMAX2023知识兔版还具有非常强大的三维渲染功能,我们可以利用这个软件来完成已经设计好的三维模型的渲染操作,使模型效果变得更加逼真。3DMAX2023知识兔百度云可用于广告、影视、游戏、建筑、工业等不同领域哦!3DS Max是一个强大的3D建模和动画解决方案,游戏开发者,视觉效果艺术家和图形设计师使用,以创建庞大的世界,惊人的设置,和迷人的虚拟现实(VR)体验。
用户10122115
2022/11/13
2.5K0
虚实之间02 | 构建虚拟数字人的第一步居然需要……降维打击?
构建虚拟人数字的第一步需要进行前期的形象设计以及建模。2D数字虚拟人需要原画等形象设计,3D数字虚拟人需要额外使用三维建模技术生成数字形象,无论是基于IP或者真人设计,都需要进行面部以及身体的建模。高保真建模会带来更好的交互体验,也会避免恐怖谷效应的出现。
GIAIAC
2022/06/27
7920
虚实之间02 | 构建虚拟数字人的第一步居然需要……降维打击?
手把手教你制作机房三维场景(3D效果图)
随着信息技术的不断发展,大量数据中心机房的建设、监控软件已经成为机房管理者的重要武器,特别是机房效果图这一块,从简易的CAD到现在的3D效果图,从静态到三维动态的改进,机房监控软件基本上可以说是从无到有的一个过程,下面本文跟大家分享机房高大上的数据中心三维可视化管理软件的三维场景制作过程(俗称:3D效果图的制作过程)。
全栈程序员站长
2022/09/05
4.8K0
手把手教你制作机房三维场景(3D效果图)
Unity3d场景快速烘焙【2020】
很多刚刚接触Unity3d的童鞋花了大量的时间自学,可总是把握不好Unity3d的烘焙,刚从一个坑里爬出来,又陷入另一个新的坑,每次烘焙一个场景少则几个小时,多则几十个小时,机器总是处于假死机状态,半天看不到结果,好不容易烘焙完了,黑斑、撕裂、硬边、漏光或漏阴影等缺陷遍布,惨不忍睹,整体效果暗无层次,或者苍白无力,灯光该亮的亮不起来,该暗的暗不下去,更谈不上有什么意境,痛苦的折磨,近乎失去了信心,一个团队从建模到程序,都没什么问题,可一到烘焙这一关,就堵得心塞,怎么也搞不出好的视觉效果,作品没法及时向用户交付,小姐姐在这里分享一些自己的经验,希望能帮到受此痛苦折磨的朋友,话不多说,开工!
全栈程序员站长
2022/07/01
4.4K0
Unity3d场景快速烘焙【2020】
游戏场景建模用什么软件?
ZBrush:高模的制作软件,用ZB做角色是很很好的,可是难度系数也挺大,平常要多看看人体的构造,或 找人体写真来把控不一样的人体肌肉转变,多了解多实践。
全栈程序员站长
2022/08/31
2.3K0
影视3D建模和游戏3D建模差异,哪个更有前景?
影视3D建模和游戏3D建模,两者之间最大和最明显的差异是:游戏开发永远有多边形建模预算。影视建模方面,对于多边形数量都没有限制。
全栈程序员站长
2022/08/31
1.3K0
影视3D建模和游戏3D建模差异,哪个更有前景?
玩转C4D丨3D视觉设计必备指南
导语 随着三维视觉逐渐向二维视觉领域渗透,视觉3D化已经成为当下非常热门的一种表现形式 3D技能也已经加入了视觉设计师必备技能包中。如今市面上也有很多3D软件可供设计师进行选择,如3D MAX,MAYA,犀牛等,这些软件在动画,工业设计,游戏等领域,确实有着非常完善的工作流,但是对于从来没接触过3D领域的视觉设计师来说上手难度相对比较高,它们适合更垂直领域的使用人群。 而C4D作为3D软件后起之秀,以其强大的兼容性,易上手的操作模块,超拟真的物理模拟解算等,深得视觉设计师的喜爱,无论是运营,UI,
腾讯ISUX
2021/12/28
1.8K0
从入门到实战丨C4D自学必备指南
导语 近年三维表现已经越来越多的融入到各种商业设计当中,在电商、品牌、UI、影视等各个领域都有广泛的运用。其中一个关键因素是C4D这款软件的出现,大大降低了3D设计的学习门槛。 C4D相对于专业性更强、功能较为复杂的3DMax、Maya、ZBrush等软件,界面更加简洁友好,对于没有接触过3D的的小白,学习成本更低。配合Octane、Redshift等渲染器,可以很快做出强视觉表现力的效果。凭借这种操作友好、易出效果的特性,C4D很快成为了近年最流行的3D设计软件之一。 本文结合作者自身的经验整理了一波自学
腾讯ISUX
2023/02/03
1.4K0
从入门到实战丨C4D自学必备指南
iPad 建模 | 三维形象创意指南
一、序言 3D设计风格已经在越来越多的设计领域被广泛应用,其视觉表现和设计技法,也随着行业发展在不断进化演变着。我们可以发现,今天的3D设计已不仅是“立体感”和“真实性”的代名词,三维设计作品,已进化表现为更细腻多元的质感、更精致的高维建模、更丰富的色彩表现、以及更具艺术性的设计语言。但这些更成熟的表现通常对设计师具有很高的要求,也需要花费很大的精力时间去调试。如果你不是一个专业三维设计师,但却很想涉及这个领域,通常会被各种3D软件、渲染器、以及超高的硬件配置等较高门槛而劝退,或是花费很长时间去学习。但是,
腾讯ISUX
2022/12/24
1.5K0
iPad 建模 | 三维形象创意指南
如何搭建3D虚拟数字人自动捏脸系统
随着数字人产品不断的迭代和发展,对于用户来说,属于自己的个性化的数字人不可或缺,在数字人产品中常见的3D数字人个性化设定的方式主要由3种进行捏脸,模板选择方式、自由调整方式、自动捏脸。首先简单介绍一下模板选择和自由调整方式后,再详细介绍自动捏脸。01
产品言语
2023/09/09
1K0
如何搭建3D虚拟数字人自动捏脸系统
(一) 3D图形渲染管线
渲染简单的理解可能可以是这样:就是将三维物体或三维场景的描述转化为一幅二维图像,生成的二维图像能很好的反应三维物体或三维场景(如图1):
bering
2019/12/02
1.5K0
CPU显卡内存与3DMAX渲染的关系
图形渲染CPU重要还是显卡重要?3D渲染、三维建模速度和显卡有关吗?三维制图电脑配置!3D设计用什么显卡
py3study
2020/01/09
3.6K0
推荐阅读
相关推荐
游戏建模经验分享:模型学习方法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验