与Salesforce Canvas集成的Angular 5 Web应用程序中的“获取签名请求”

时间:2018-09-04 06:06:01

标签: canvas salesforce angular5 force.com sfdc

在与Salesforce Canvas集成的Angular 5 Web应用程序中获取签名请求

我正在尝试将现有的Angular 5 Web应用程序集成到Salesforce画布中。我使用OAUTH设置创建了Salesforce连接的应用程序,并提供了画布应用程序URL作为现有angular 5 Web应用程序的路由之一。

当我在“应用程序预览器”中预览画布应用程序时,它确实路由到我们的应用程序(因为我在页面上使用简单的文字),但是我无法读取Salesforce上下文,甚至无法获得“ signed_request”。

这是我尝试获取对“ signed_request”的访问权限的方式,但出现错误,错误为“ ERROR TypeError:无法读取未定义的属性'client'。我确实从canvas-js-sdk导入了“ sfdc”。

import * as sfdc from '@salesforce/canvas-js-sdk';

 sfdc.canvas.client.refreshSignedRequest(function(data) {
      if (data.status === 200) {

        var signedRequest =  data.payload.response;
        console.log(signedRequest);
        var part = signedRequest.split('.')[1];
        var obj = JSON.parse(sfdc.canvas.decode(part));
        console.log(obj);
      }
    });

有人可以告诉我我在这里想念什么吗?还是还有其他方法可以让我获得“ signed_request”?

谢谢。

Salesforce,画布,集成,Web应用程序,Angular 5,sfdc,force.com

1 个答案:

答案 0 :(得分:1)

我相信您只是导入了不正确的JavaScript SDK。 请阅读本文:https://medium.com/@clintpitzak/how-to-use-external-javascript-libraries-in-angular-8-247baacbdccf,希望对您有所帮助。

首先,您需要像脚本js一样在angular.json中声明canvas-app.js。

],
            "scripts": [
              "./node_modules/@salesforce/canvas-js-sdk/js/canvas-all.js"
]

例如,您还可以在index.html文件中提供这些脚本。

<script type="text/javascript" src="scripts.js"></script>

在您的组件中,您应该使用此库对象的全局名称声明一个变量

declare var Sfdc: any;

然后,您就可以在组件中使用Sfdc变量了。

示例:

ngOnInit(): void {

    Sfdc.canvas.oauth.loggedin();

仅此而已!

但是,当您在连接的应用程序中使用“ OAuth Webflow(GET)”访问方法时,您将无法获得已签名的rquest。 是不同的approuch。

至少您可以在JavaScriptSDK中的refreshSignedRequest方法的描述中了解此行为:

@description刷新已签名的请求。按需获取新的签名请求。注意 画布应用的身份验证机制必须设置为SignedRequest而不是OAuth。

因此,您必须使用其他方法,请阅读此article

还有this

我希望。会很有帮助。