济南二手房出售信息:Salesforce LWC学习(十四) Continuation进行异步callout获取数据

admin/2020-03-30/ 分类:科技/阅读:

阳光在线

阳光在线www.jiehuolou888.com(原诚信在线)现已开放阳光在线手机版下载。阳光在线游戏公平、公开、公正,用实力赢取信誉。

,

本篇参考:

https://developer.salesforce.com/docs/component-library/documentation/en/lwc/lwc.apex_continuations

https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_class_System_Continuation.htm#apex_class_System_Continuation

 我们在项目中经常遇到会和后台apex进行交互通过SOQL/SOSL去获取数据展示在前台。当然,有些场景下数据是存储在外部系统,需要apex进行callout操作去获取数据展示前端。lwc针对callout操作可以简单的分成几步走,我们这里以

一. Enable Remote Site

 针对外部系统的交互,我们第一步就是要先在salesforce系统中配置Remote Site,才可以访问,否则会报错。我们以https://th-apex-http-callout.herokuapp.com/这个trailhead提供的callout URL作为 remote site 的配置,这个URL返回的值为: {"trailhead":"is awesome."}

 二. 前后台构建

我们以前做callout通常通过HttpRequest,然后将设置对应的header, url , body等以后然后Http.sendRequest即可实现外部系统callout交互。在lwc中,我们需要使用 Continuation这个salesforce提供的类进行交互,具体使用和文档可以查看最上方的链接。我们在lwc和apex交互需要设置 @AuraEnabled=true,这个同样需要,在这个基础上,需要设置continuation=true,如果请求数据是固定的,可以也设置cacheable=true从而增加效率,都声明情况下写法如下

@AuraEnabled(continuation=true cacheable=true)

除了这里的小变动,另外的改变就是不用Http.sendRequest方式来构建,而是使用 Continuation方式来构建。Continuation构造函数只有一个参数,用来设置time out时间,以秒为单位。他有几个参数,continuationMethod用来设置访问以后对应的回调函数。timeout用来设置超时时间,最多120秒。state设置用来当callout操作完成并且callback方法执行完成以后的状态值。我们可以用这个状态值来确定当前的callout操作是否执行完成。Continuation有三个常用的方法:

addHttpRequest/getRequests()/getResponse()这三个方法的详情描述自行查看上方的API文档。

ContinuationDemoController类描述如下:声明startRequest方法用来callout指定的service URL,然后将response放在callback函数中进行返回。

public with sharing class ContinuationDemoController { // Callout endpoint as a named credential URL // or, as shown here, as the long-running service URL private static final String LONG_RUNNING_SERVICE_URL = 'https://th-apex-http-callout.herokuapp.com/'; // Action method @AuraEnabled(continuation=true cacheable=true) public static Object startRequest() { // Create continuation. Argument is timeout in seconds. Continuation con = new Continuation(40); // Set callback method con.continuationMethod='processResponse'; // Set state con.state='Hello, World!'; // Create callout request HttpRequest req = new HttpRequest(); req.setMethod('GET'); req.setEndpoint(LONG_RUNNING_SERVICE_URL); // Add callout request to continuation  con.addHttpRequest(req); // Return the continuation return con; } // Callback method @AuraEnabled(cacheable=true) public static Object processResponse(List<String> labels, Object state) { // Get the response by using the unique label HttpResponse response = Continuation.getResponse(labels[0]); // Set the result variable String result = response.getBody(); return result; } }
continuationCmp.html:用来展示从远程服务器端的内容
<template> <div> service content: {formattedWireResult} </div> </template>

continuationCmp.js:写法上和访问apex class方法没有任何不同

import { LightningElement,wire } from 'lwc'; import startRequest from '@salesforce/apexContinuation/ContinuationDemoController.startRequest'; export default class ContinuationComponent extends LightningElement { // Using wire service  @wire(startRequest) wiredContinuation; get formattedWireResult() { return JSON.stringify(this.wiredContinuation); } }

结果:将远程服务器内容转换成JSON字符串

 总结:篇中只是简单介绍了Continuation的介绍,还有很多的细节的操作和限制没有在本篇中说出,比如Continuation和DML操作前后关系等限制,相关的limitation等等。篇中有错误的地方欢迎指出,有不懂欢迎留言。

TAG:
阅读:
广告 330*360
广告 330*360

热门文章

HOT NEWS
  • 周榜
  • 月榜
Sunbet_进入申博sunbet官网
微信二维码扫一扫
关注微信公众号
新闻自媒体 Copyright © 2002-2019 Sunbet 版权所有
二维码
意见反馈 二维码