使用SAPUI5工作流程应用程序中的脚本任务从工作流程触发邮件通知

2020-08-21 09:16发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家,

我想从工作流项目中的脚本任务触发邮件通知。 尽管邮件任务是直接选择,但我们的环境不支持该任务。 因此,我试图使用脚本文件来触发邮件。

下面是我试图触发脚本文件中邮件的代码。

我在监视器工作流中收到错误" ReferenceError:在中未定义" Promise""。

任何有关此的建议将非常有帮助。

谢谢

Srinivasan Seetharaman

/*全球邮件承诺*/
/*导出的邮件承诺*/
/* eslint no-undef:"错误" */
/* eslint no-unused-vars:"错误" */
/* eslint no-unused-vars:["错误",{" vars":"本地"}] */
/*不添加阴影:["错误",{"提升":"功能"}] */
/* eslint-env es6 */
 var mailPromise;
 函数http(url){
 var core = {
 ajax:函数(方法,网址,标头,args,mimetype){
 mailPromise =新的Promise(函数(解决,拒绝){
 var client = new XMLHttpRequest();
 var uri = url;
 if(args && method ==='GET'){
 uri + ='?';
 var argcount = 0;
 for(参数中的var键){
 如果(args.hasOwnProperty(key)){
 如果(argcount ++){
 uri + ='&';
 }
 uri + = encodeURIComponent(key)+'='+ encodeURIComponent(args [key]);
 }
 }
 }
 if(args &&(method ==='POST'|| method ==='PUT')){
 var data = {};
 对于(参数中的var keyp){
 如果(args.hasOwnProperty(keyp)){
 data [keyp] = args [keyp];
 }
 }
 }
 client.open(method,uri);
 if(方法==='POST'||方法==='PUT'){
 client.setRequestHeader(" accept"," application/json");
 client.setRequestHeader(" content-type"," application/json");
 }
 用于(标头中的var keyh){
 如果(headers.hasOwnProperty(keyh)){
 client.setRequestHeader(keyh,headers [keyh]);
 }
 }
 如果(数据){
 client.send(JSON.stringify(data));
 }其他{
 client.send();
 }
 client.onload = function(){
 如果(this.status === 200 || this.status === 201){
 var oResult = {
 回应:this.response,
 responseHeaders:client.getResponseHeader(" x-csrf-token")
 };
 resolve(oResult);
 }其他{
 拒绝(this.statusText);
 }
 };
 client.onerror = function(){
 拒绝(this.statusText);
 };
 });
//返回承诺;
 }
 };
 返回{
 'get':函数(标头,参数){
 返回core.ajax('GET',url,headers,args);
 },
 'post':函数(标题,参数){
 返回core.ajax('POST',url,headers,args);
 },
 'put':函数(标题,参数){
 返回core.ajax('PUT',url,headers,args);
 },
 'delete':function(headers,args){
 返回core.ajax('DELETE',url,headers,args);
 }
 };
 }
 函数triggerMail(workflowName,materialApprovedStatus,requesterName,requesterEmail,注释){
 如果(materialApprovedStatus ==="已拒绝"){
 var oMail = {
 来自:" approverUserId",
 到:requesterEmail,
 主题:"工作流程" +工作流程名称+"拒绝邮件",
 正文:"亲爱的" + requesterName +"," +注释
 };
 }否则,如果(materialApprovedStatus ===" reworked"){
 oMail = {
 来自:" masterdata@eagleburgmann.com",
 到:requesterEmail,
 主题:"返工:" +工作流程名称,
 正文:"亲爱的" + requesterName +"," +注释
 };
 }
 var oHeaders = {
 " X-CSRF-TOKEN":"获取"
 };
 http("/img/sendmail")。get(oHeaders).then(function(result){
 oHeaders = {
 " X-CSRF-TOKEN":result.responseHeaders
 };
 http("/img/sendmail")。post(oHeaders,oMail).then(function(){
//sap.ui.core.BusyIndi​​cator.hide();
//var oBundle = this.getView()。getModel(" i18n")。getResourceBundle();
//var sMsg = oBundle.getText(" NotificationSentSuccess");
 alert("邮件成功触发");
 });
 });
 }
 如果($ .context.requestedMaterial.materialApprovedStatus ==="重做"){
//从现有工作流程上下文中读取
 var workingName = $ .context.wftasktitle;
 var materialApprovedStatus = $ .context.materialApprovedStatus;
 var userId = $ .context.requestedMaterial.Userid;
 var requesterEmail = $ .context.requestedMaterial.RequesterEmail;
 var comments = $ .context.requestedMaterial.Comments;
 }
 triggerMail(workflowName,materialApprovedStatus,userId,requesterEmail,注释);
 

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家,

我想从工作流项目中的脚本任务触发邮件通知。 尽管邮件任务是直接选择,但我们的环境不支持该任务。 因此,我试图使用脚本文件来触发邮件。

下面是我试图触发脚本文件中邮件的代码。

我在监视器工作流中收到错误" ReferenceError:在中未定义" Promise""。

任何有关此的建议将非常有帮助。

谢谢

Srinivasan Seetharaman

/*全球邮件承诺*/
/*导出的邮件承诺*/
/* eslint no-undef:"错误" */
/* eslint no-unused-vars:"错误" */
/* eslint no-unused-vars:["错误",{" vars":"本地"}] */
/*不添加阴影:["错误",{"提升":"功能"}] */
/* eslint-env es6 */
 var mailPromise;
 函数http(url){
 var core = {
 ajax:函数(方法,网址,标头,args,mimetype){
 mailPromise =新的Promise(函数(解决,拒绝){
 var client = new XMLHttpRequest();
 var uri = url;
 if(args && method ==='GET'){
 uri + ='?';
 var argcount = 0;
 for(参数中的var键){
 如果(args.hasOwnProperty(key)){
 如果(argcount ++){
 uri + ='&';
 }
 uri + = encodeURIComponent(key)+'='+ encodeURIComponent(args [key]);
 }
 }
 }
 if(args &&(method ==='POST'|| method ==='PUT')){
 var data = {};
 对于(参数中的var keyp){
 如果(args.hasOwnProperty(keyp)){
 data [keyp] = args [keyp];
 }
 }
 }
 client.open(method,uri);
 if(方法==='POST'||方法==='PUT'){
 client.setRequestHeader(" accept"," application/json");
 client.setRequestHeader(" content-type"," application/json");
 }
 用于(标头中的var keyh){
 如果(headers.hasOwnProperty(keyh)){
 client.setRequestHeader(keyh,headers [keyh]);
 }
 }
 如果(数据){
 client.send(JSON.stringify(data));
 }其他{
 client.send();
 }
 client.onload = function(){
 如果(this.status === 200 || this.status === 201){
 var oResult = {
 回应:this.response,
 responseHeaders:client.getResponseHeader(" x-csrf-token")
 };
 resolve(oResult);
 }其他{
 拒绝(this.statusText);
 }
 };
 client.onerror = function(){
 拒绝(this.statusText);
 };
 });
//返回承诺;
 }
 };
 返回{
 'get':函数(标头,参数){
 返回core.ajax('GET',url,headers,args);
 },
 'post':函数(标题,参数){
 返回core.ajax('POST',url,headers,args);
 },
 'put':函数(标题,参数){
 返回core.ajax('PUT',url,headers,args);
 },
 'delete':function(headers,args){
 返回core.ajax('DELETE',url,headers,args);
 }
 };
 }
 函数triggerMail(workflowName,materialApprovedStatus,requesterName,requesterEmail,注释){
 如果(materialApprovedStatus ==="已拒绝"){
 var oMail = {
 来自:" approverUserId",
 到:requesterEmail,
 主题:"工作流程" +工作流程名称+"拒绝邮件",
 正文:"亲爱的" + requesterName +"," +注释
 };
 }否则,如果(materialApprovedStatus ===" reworked"){
 oMail = {
 来自:" masterdata@eagleburgmann.com",
 到:requesterEmail,
 主题:"返工:" +工作流程名称,
 正文:"亲爱的" + requesterName +"," +注释
 };
 }
 var oHeaders = {
 " X-CSRF-TOKEN":"获取"
 };
 http("/img/sendmail")。get(oHeaders).then(function(result){
 oHeaders = {
 " X-CSRF-TOKEN":result.responseHeaders
 };
 http("/img/sendmail")。post(oHeaders,oMail).then(function(){
//sap.ui.core.BusyIndi​​cator.hide();
//var oBundle = this.getView()。getModel(" i18n")。getResourceBundle();
//var sMsg = oBundle.getText(" NotificationSentSuccess");
 alert("邮件成功触发");
 });
 });
 }
 如果($ .context.requestedMaterial.materialApprovedStatus ==="重做"){
//从现有工作流程上下文中读取
 var workingName = $ .context.wftasktitle;
 var materialApprovedStatus = $ .context.materialApprovedStatus;
 var userId = $ .context.requestedMaterial.Userid;
 var requesterEmail = $ .context.requestedMaterial.RequesterEmail;
 var comments = $ .context.requestedMaterial.Comments;
 }
 triggerMail(workflowName,materialApprovedStatus,userId,requesterEmail,注释);
 
付费偷看设置
发送
4条回答
Nir深蓝
1楼-- · 2020-08-21 09:56

Srinivasan,您好,

我很难理解您尝试在何处添加该代码,因为您提到的任何环境都没有以您尝试的方式真正支持它。

a) Monitor Workflows应用程序不支持自定义脚本,因为它是SAP预交付的应用程序。 如果您构建了与此类似的自定义应用程序,则您的环境可能不支持所需的功能,例如 G。 UI5,因此请参见b)

b)UI5不知道$ .context是什么,这只是脚本任务中的CP Workflow API,因此请参见c)

c )CP Workflow脚本任务既没有Promises也没有Ajax支持。 为了调用HTTP服务(类似于Ajax),您必须使用服务任务。


因此,如果您不能使用内置邮件任务,那么我只会看到调用"发送邮件"的方式 服务使用服务任务。 您将需要使用脚本任务构建合适的有效负载并将其存储在工作流上下文中。 在服务任务中,您将上下文的相关部分发送到您的" sendmail"服务。

问候

Tobias

SKY徐
2楼-- · 2020-08-21 09:37

Hi Tobias ,

谢谢您的回复。 我已将此代码添加到工作流项目中脚本任务的文件中。 如果b)不可能,则获取工作流上下文详细信息,并在Request变量中发送上下文的相关部分。 我还有其他几个查询

1。 但是我是否需要使用var oHeaders = {" X-CSRF-TOKEN":" fetch"};来实现Get调用? 在我的POST服务呼叫之前。

2。 我的服务的目的地是" AppToAppSSO"。 工作流是否支持这种类型的服务呼叫目的地。

此致

Srinivasan

奄奄一息的小鱼
3楼-- · 2020-08-21 09:34

Hi Srinivas,

1)服务任务直接支持CSRF令牌管理。 请参阅服务任务中的相应字段。 您只需指定到返回XSRF令牌的端点的相对于目的地的路径即可。

2)App2AppSSO是UI应用程序不需要登录的概念,如果另一个应用程序中已有会话。 但是,服务任务仅通过OAuth2SAMLBearerAssertion目标类型支持类似的身份验证。

请参阅有关目的地的文档以及对主体传播的引用。 对于Neo,请参见此处:

https://help.sap.com/viewer/ f85276c5069a429fa37d1cd352785c25/Cloud/zh-CN/c4eeb034167e4879b2e3cf86f63e5a5e.html

此致

Tobias

Climb_Ma
4楼-- · 2020-08-21 09:45

嗨Tobias,

我将检查您建议的目的地类型。 感谢您提供参考文档。

此致

Srinivasan

一周热门 更多>