首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Salesforce How To Refresh Page Data in Lightning Web Component(三)

Salesforce How To Refresh Page Data in Lightning Web Component(三)

原创
作者头像
repick
发布于 2022-05-03 04:51:37
发布于 2022-05-03 04:51:37
50800
代码可运行
举报
文章被收录于专栏:SalesforceSalesforce
运行总次数:0
代码可运行

使用Lwc打开一个新的浏览器窗口,当关闭窗口时也可以进行刷新操作,如下,点击加号按钮,打开登录画面,当登录成功时刷新ListView列表。

Window open() 方法

用于打开一个新的浏览器窗口或查找一个已命名的窗口。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
window.open(URL,name,specs,replace)

具体登录事件操作如下,当登录成功,关闭子画面时,使用refreshApex()方法刷新画面

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
handleCreateClick() {
        let __self = this;
        let openUrl = '/s/contactcreatedata';
        let target = '_blank';
        let w = 680;
        let h = 580;
        let newWindow = window.open(openUrl, target, 'width=' + w + ',height=' + h)
            let iv = window.setInterval(function () {
                if (newWindow.closed) {
                    refreshApex(__self.wiredRecordList);
                    clearInterval(iv);
                }
            }, 1000);
    }

1.登录画面做成

contactCreateData.html

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template>
    <lightning-record-edit-form object-api-name={objectApiName} onsuccess={handleSuccess}>
        <header class="slds-modal__header">
            <h2 class="title slds-text-heading--medium slds-hyphenate">{tittle}</h2>
        </header>
        <lightning-messages> </lightning-messages>
        <lightning-input-field field-name="Name"> </lightning-input-field>
        <lightning-input-field field-name="Email"> </lightning-input-field>
        <lightning-input-field field-name="Phone"> </lightning-input-field>
        <lightning-input-field field-name="Birthdate"> </lightning-input-field>
        <footer class="slds-modal__footer">
            <lightning-button class="slds-m-top_small" label="Cancel" onclick={handleReset}></lightning-button>
            <lightning-button class="slds-m-top_small" label="Save" type="submit"></lightning-button>
        </footer>
    </lightning-record-edit-form>
</template>

contactCreateData.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { LightningElement, api, track } from 'lwc';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';

export default class ContactCreateData extends LightningElement {
    @api recordId;
    @track contactId;
    @track objectApiName = 'Contact';
    @track tittle;

    connectedCallback() {
        this.tittle = '新規作成';
    }
    handleSuccess(event) {
        this.contactId = event.detail.id;
        this.dispatchEvent(
            new ShowToastEvent({
                title: 'Success!',
                message: 'Contact is Create Succeeded',
                variant: 'success'
            })
        );
        setTimeout(() => {
            window.close();
        }, 2000);
    }
    handleReset(event) {
        const inputFields = this.template.querySelectorAll(
            'lightning-input-field'
        );
        if (inputFields) {
            inputFields.forEach(field => {
                field.reset();
            });
        }
    }
}

contactCreateData.js-meta.xml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>54.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__RecordPage</target>
        <target>lightningCommunity__Page</target>
        <target>lightningCommunity__Default</target>
    </targets>
    <targetConfigs>
        <targetConfig targets="lightningCommunity__Default,lightning__RecordPage">
            <property name="recordId" type="String" label="Record ID" default="{!recordId}"/>
        </targetConfig>
    </targetConfigs>
</LightningComponentBundle>

2.Experiences上做一个新的Page,装载上边的登录画面。

3.ListView画面调用子画面(登录画面)

basicDatatable.html

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template>
    <div style="background-color: white; border-bottom-style:double;">
        <lightning-layout multiple-rows="true" horizontal-align="center" vertical-align="center">
            <lightning-layout-item padding="around-small" size="5" style="position: absolute; left: 0%;">
                <span class="slds-var-p-right_x-small" style="font-size: 16px; font-weight: bold;">担当者</span>
                <span class="slds-var-p-right_x-small" style="font-size: 32px; font-weight: bold;">{recordLength}</span>
                <span class="slds-var-p-right_x-small" style="font-size: 16px; font-weight: bold;"></span>
            </lightning-layout-item>
            <lightning-layout-item padding="around-small" size="2">
                <span>&nbsp;</span>
            </lightning-layout-item>
            <lightning-layout-item padding="around-small" size="5" style="position: absolute; left: 80%;">
                <a style="background-color: #333333; color: white; padding: 10px; display: inline;" onclick={refresh}>
                    <lightning-icon class="slds-button__icon
                    slds-icon-utility-down slds-icon_container forceIcon" icon-name="utility:refresh" size="x-small">
                    </lightning-icon>
                </a>
                <span>&nbsp;</span>
                <a style="background-color: #333333; color: white; padding: 10px; display: inline;" onclick={handleDeleteClick}>
                    <lightning-icon class="slds-button__icon
                    slds-icon-utility-down slds-icon_container forceIcon" icon-name="utility:delete" size="x-small">
                    </lightning-icon>
                </a>
                <span>&nbsp;</span>
                <a style="background-color: #333333; color: white; padding: 10px; display: inline;" onclick={handleCreateClick}>
                    <lightning-icon class="slds-button__icon
                    slds-icon-utility-down slds-icon_container forceIcon" icon-name="utility:add" size="x-small">
                    </lightning-icon>
                </a>
            </lightning-layout-item>
        </lightning-layout>
    </div>
    <div style="height: 300px;">
        <lightning-datatable
                show-row-number-column
                max-row-selection="1"
                onrowselection={handelSelection}
                key-field="id"
                data={records}
                columns={columns}>
        </lightning-datatable>
    </div>
</template>

basicDatatable.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { LightningElement, wire, track } from 'lwc';
import getContactListView from '@salesforce/apex/MC_ContactListViewController.getContactListView';
import { loadStyle } from 'lightning/platformResourceLoader';
import COMMON_STATIC from '@salesforce/resourceUrl/common_sfdc_css';
import { refreshApex } from '@salesforce/apex';
import { deleteRecord } from 'lightning/uiRecordApi';
const columns = [
    { label: 'Name', fieldName: 'name', type: 'text' },
    { label: 'Email', fieldName: 'email', type: 'text' },
    { label: 'Phone', fieldName: 'phone', type: 'text' },
    { label: 'OwnerName', fieldName: 'ownerName', type: 'text' },
    { label: 'Birthdate', fieldName: 'birthdate', type: 'date' },
];

export default class BasicDatatable extends LightningElement {
    columns = columns;
    @track refreshFlag = false;
    @track wiredRecordList = [];
    @track records;
    @track recordLength;
    @track selectedRecord;

    renderedCallback() {
        Promise.all([
            loadStyle(this, COMMON_STATIC + '/mcCommon.css')
        ]);
    }
    // eslint-disable-next-line @lwc/lwc/no-async-await
    async connectedCallback() {
    }

    @wire(getContactListView, {refreshFlag : '$refreshFlag'})
    wireRecords(result) {
        console.log('>>>>>result>>'+JSON.stringify(result));
        this.refreshFlag = false;
        this.wiredRecordList = result;
        if (result.data) {
            this.records = result.data;
            this.recordLength = result.data.length;
        } else if (result.error) {
            // エラー
        }
    }
    // refresh
    refresh() {
        refreshApex(this.wiredRecordList);
    }
    handelSelection(event) {
        if (event.detail.selectedRows.length > 0) {
            this.selectedRecord = event.detail.selectedRows[0].id;
        }
    }
    handleDeleteClick() {
        deleteRecord(this.selectedRecord)
        .then(() => {
            refreshApex(this.wiredRecordList);
        })
        .catch(error => {
        })
    }

    handleCreateClick() {
        let __self = this;
        let openUrl = '/s/contactcreatedata';
        let target = '_blank';
        let w = 680;
        let h = 580;
        let newWindow = window.open(openUrl, target, 'width=' + w + ',height=' + h)
            let iv = window.setInterval(function () {
                if (newWindow.closed) {
                    refreshApex(__self.wiredRecordList);
                    clearInterval(iv);
                }
            }, 1000);
    }
}

MC_ContactListViewController.cls

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public with sharing class MC_ContactListViewController {
    @AuraEnabled(cacheable=true)
    public static List<ContactWrapper> getContactListView(Boolean refreshFlag){
        List<ContactWrapper> wappers = new List<ContactWrapper>();
        List<Contact> resultList = [SELECT Id,Name,Email,Phone,Birthdate,Owner.Name
                        FROM Contact
                        LIMIT 100];

        if (resultList!=null && resultList.size() > 0) {
            for (Contact con : resultList) {
                ContactWrapper wapper = new ContactWrapper();
                wapper.id = con.Id;
                wapper.name = con.Name;
                wapper.email = con.Email;
                wapper.phone = con.Phone;
                wapper.ownerName = con.Owner.Name;
                wapper.birthdate = con.Birthdate;
                wappers.add(wapper);
            }
        }
        return wappers;
    }

    public class ContactWrapper {
        @AuraEnabled
        public String id;
        @AuraEnabled
        public String idLink;
        @AuraEnabled
        public String name;
        @AuraEnabled
        public String email;
        @AuraEnabled
        public String ownerName;
        @AuraEnabled
        public String phone;
        @AuraEnabled
        public Date birthdate;
    }
}

4.效果展示

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
暂无评论
推荐阅读
024android初级篇之Android常用调试命令
会有从开机之后详细的dumpsys,dumpstate和logcat信息,是一份完整的日志记录。对分析用户行为,异常信息,系统状态有很大的参考作用
上善若水.夏
2018/09/28
9100
Android逆向|修改apk资源实现去广告
本篇是《Android逆向入门教程》的第二章第6节,更多章节详细内容及实验材料可通过加入底部免费的【Android逆向成长计划】星球获得!
辞令
2021/08/19
7.2K0
查看Android应用包名、Activity的几个方法
直接打开AndroidManifest.xml文件,找到包含android.intent.action.MAIN和android.intent.category.LAUNCHER对应的activity。
流柯
2018/09/11
4.5K0
查看Android应用包名、Activity的几个方法
APK安装流程详解1——有关"安装ing"的实体类概述
该类包含了从AndroidManifest.xml文件中收集的所有信息。 PackageInfo.java源码地址 通过源码我们知道PackageInfo是实现Parcelable接口,所以它可以在进程间传递
隔壁老李头
2018/08/30
1.7K0
APK安装流程详解1——有关"安装ing"的实体类概述
玩转ADB命令(ADB命令使用大全)
我相信做Android开发的朋友都用过ADB命令,但是也只是限于安装应用push文件和设备重启相关,更深的就不知道了,其实我们完全可以了解多一点,有一些不常用的场景我们至少应该知道它可以做到,比如,我们知道adb install 却不知道adb shell am start。前者是用来安装软件,后者用来打开软件,后者的一个使用场景让我对他重视:公司定制Android系统,在调试屏幕的时候要看是否满屏验证驱动是否正常,比较麻烦的做法是要拿到Android开发者手里用eclipse或者其他ide安装打开。显然相对于驱动人员连上数据线使用adb命令要复杂得多。因此,了解多一点还是很有必要的。
全栈程序员站长
2022/08/27
10.3K0
玩转ADB命令(ADB命令使用大全)
使用am start命令启动android apk应用程序
启动tbox service test apk adb root adb shell am start -n com.demo.hmi.xxxservices.xxx/.MainActivity
天天Lotay
2023/10/15
3.1K0
如何读取APK的Activity(Python实现)
adb是我们日常工作每天都会接触的,也是最简单有效。通过adb命令我们可以查看当前手机内应用的包名和Activity信息。常用的命令例如:
用户5521279
2020/05/08
2.9K0
[Android][Framework] 全方位理解Android权限之Android权限系统1
我们知道,Android应用都运行在沙盒中,默认情况下这些应用只能访问他们自己的域,即自己的文件和非常少量的系统服务。为了能够和系统或者其他应用交互,app就需要申请额外的一些权限。
wOw
2020/01/20
8.3K1
[Android][Framework] 全方位理解Android权限之Android权限系统1
Android仿比心1对1直播源码开发,开机自动启动的实现
在开发仿比心1对1直播源码过程中,常会要求仿比心1对1直播源码在系统开机时可以自动启动。这里,我将实现方法和遇到的一些问题总结于下文。
云豹科技程序员
2021/06/22
5320
ADB 操作命令详解及用法大全(一)
如果只有一个设备/模拟器连接时,可以省略掉 [-d|-e|-s <serial-number>] 这一部分,直接使用 adb <command>。
雷子
2024/03/25
1.1K0
ADB 操作命令详解及用法大全(一)
Android 开发者必知必会的权限管理知识
导语 本文主要讲解了Android 权限管理方面几个点: Android 权限背景知识; 权限检查及权限兼容; 跳转到app管理权限页面 一、Android 权限背景知识 提到Android 权限管理,业内人士都知道Google 在Android 6.0时提出了运行时权限管理机制,在Android 6.0之前,所申请的权限只需要在AndroidManifest.xml列举就可以,从而容易导致一些安全隐患,因此,在Android 6.0 时,Google 为了更好的保护用户隐私提出了新的权限管理机制(官网
腾讯Bugly
2018/03/23
1.9K0
移动应用常见Bug汇总及预防方法
没有Bug是任何产品上线前都无法达到的一个目标,包括拥有资深的测试工程师也不能保证上线后100%没问题,因为我们谁也不能把所有功能的操作、运用场景想周全,做周全。
TestOps
2022/04/04
1.4K0
从 am start 的 --user 参数说到 Android 多用户
本文的讨论围绕一个 java.lang.SecurityException 展开,异常的关键词是权限 android.permission.INTERACT_ACROSS_USERS_FULL。
mzlogin
2020/04/16
2.9K1
从 am start 的 --user 参数说到 Android 多用户
Android逆向分析大全
Android程序的特点相比在于使用混淆方式打包,将包名、类名、函数名改成不易看懂的字母,从而使生成的apk小很多(android studio提供了release编译方式,使用proguard混淆),因此反编译apk最多的工作在于重构这些名称,这一点和pc上一致,对于android native程序(jni)则和pc上基本一致,不同之处在于常见的是arm汇编。
bosh123
2020/12/22
3.8K0
Android6.0蓝牙开发中获取附近低功耗蓝牙设备结果权限问题分析
问题描述: fang_fang_story 近期做一个扫描附近低功耗蓝牙设备获取到rssi并进行一系列的相对的定位的功能。在开发前期一直使用低版本(Android6.0以下)的手机进行测试,没有任何问题。在运行到Android6.0的手机上后,出了一个问题。 每当扫描到附近ble设备并进行回调时都会报错,根本获取不了扫描的结果,报错如下: D/BluetoothLeScanner: onClientRegistered() - status=0 clientIf=5 W/Binder: Caught a
fanfan
2018/01/24
1.8K0
新手安卓开发详细教程视频_安卓手机解锁激活成功教程教程
1. 在Package Explorer栏右键点击, New → Android Application Project
全栈程序员站长
2022/11/16
1.9K0
新手安卓开发详细教程视频_安卓手机解锁激活成功教程教程
干货 | Trip.com Android 11 适配之旅
Google Play 商店在 2021 年第 3、4 季度正式加强对应用 targetSdkVersion 的限制,要求应用必须以 API 级别 30 (Android 11) 或更高版本为目标运行环境。
携程技术
2021/09/10
1.8K0
干货 | Trip.com Android 11 适配之旅
Android 12 适配攻略
2022年2月11日,谷歌发布了首个 Android 13 开发者预览版。2022年7月,发布了Beta 4版本,接下来就是Final Relase版本了。是时候适配一波Android12了,为后面项目适配铺平道路。
八归少年
2022/09/28
3.5K0
Android 12 适配攻略
让Android自动化辅助APP成为设备所有者(一)
我们之所以需要将Android自动化测试的辅助APP设置成设备所有者是为了更好的控制系统的一些行为从而让整个测试过程更稳定。
岛哥的质量效能笔记
2021/08/18
2.1K0
让Android自动化辅助APP成为设备所有者(一)
必须掌握的ADB命令 | 让你的测试事半功倍
ADB的全称是Android Debug Bridge,是一个与模拟器或者连接设备通讯的桥梁。ADB是CS结构包含三个部分:
京东技术
2018/07/30
8.9K0
必须掌握的ADB命令 | 让你的测试事半功倍
推荐阅读
相关推荐
024android初级篇之Android常用调试命令
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档