RPA引擎脚本
1、前言
在编写一些复杂的流程时,往往需要借助“浏览器脚本”或“RPA引擎脚本”来实现一些功能。本文向大家介绍花漾灵动RPA中关于“RPA引擎脚本”流程节点的编写注意事项以及常见操作。
2、注意事项
每个“RPA引擎脚本”流程节点本质是一个单独的NodeJS运行环境,如果在当前“RPA引擎脚本”流程节点中定义了临时变量,该临时变量的声明周期仅在此“RPA引擎脚本”流程节点有效,而流程变量与输入变量则可以在当前流程内有效。需要注意的是:单个“RPA引擎脚本”流程节点的最大执行时间为99秒,故编写定时器以及异步操作需要控制在其时间范围内,否则会造成不可预知的后果。比如日志输出错乱,变量修改不成功等。
3、常见操作
3.1 日期时间格式化
花漾灵动RPA运行环境中引入了 moment
库,可以轻松地解析、验证、操作和显示日期和时间。
// 用法:moment().format(String)
// 引入moment库
var moment = require('moment')
// 返回格式化的日期时间,如2023-10-07 12:00:00
formatted_date = moment().format('YYYY-MM-DD HH:mm:ss')
moment文档说明:http://momentjs.com/docs/
3.2 异步获取数据-Promise
Promise 是 JavaScript 中一种处理异步操作的机制,它可以用来管理和组织回调函数。
如下示例所示, fetchData()
函数返回一个 Promise 对象。在 Promise 构造函数中,我们模拟了一个异步操作(这里使用了 setTimeout
),然后在操作完成后调用 resolve
函数来解决 Promise。在 .then()
方法中,我们定义了一个回调函数,在 Promise 被解决时执行。在 .catch()
方法中,我们定义了一个回调函数,在 Promise 被拒绝时执行。
function fetchData() {
return new Promise((resolve, reject) => {
setTimeout(() => {
// 模拟异步操作
const data = "Hello, world!";
resolve(data); // 解决Promise,并返回数据
}, 2000);
});
}
fetchData()
.then(result => {
console.log(result); // 在Promise被解决时执行此回调函数
})
.catch(error => {
console.error(error); // 在Promise被拒绝时执行此回调函数
});
在花漾灵动RPA引擎脚本中使用Promise需要注意:
如果RPA引擎脚本中存在Promise,必须要返回一个Promise且等待里面的所有Promise完成,否则会造成不可预知的后果。比如日志输出错乱,变量修改不成功等。
为此,采用了自执行的匿名函数,并在其内部定义了一个异步函数。
- 异步函数:使用
async
关键字声明的函数会返回一个 Promise 对象,该函数内部可以使用await
关键字来等待其他异步操作完成。 - 自执行的匿名函数:通过将异步函数放在自执行的匿名函数中,可以立即执行这个异步函数,而不需要显式调用它。
// 示例写法
(async () => {
function saveImg(imageBase64) {
return xxx.request('/image/upload', {
method: 'POST', data
}).then(rs => {
console.log('response: ' + JSON.stringify(rs));
return rs;
}).catch(e => {
console.error('catch: ' + JSON.stringify(e));
return '';
});
}
// ossUrl 为流程变量,用于接收Promise对象返回的结果
ossUrl = await saveImg(base64);
})();
Promise文档说明:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise
3.3 查询字符串的解析与序列化
花漾灵动RPA运行环境中引入了 querystring
库,可以用来解析和格式化URL查询字符串(即URL中“?”后面的部分)。
3.3.1 解析查询字符串
我们可以使用 querystring.parse()
方法来解析查询字符串。查询字符串可以是一个字符串,也可以是一个包含查询字符串的对象。
// 引入querystring库
var querystring = require('querystring');
// 解析查询字符串为一个对象
var parsedQuery = querystring.parse('name=John&age=30'); // { name: 'John', age: '30' }
3.3.2 序列化为查询字符串
我们可以使用 querystring.stringify()
方法将对象序列化为查询字符串。
// 引入querystring库
var querystring = require('querystring');
// 将对象转换为查询字符串
var obj = { name: 'John', age: 30 };
var queryString = querystring.stringify(obj); // name=John&age=30
querystring文档说明:https://www.npmjs.com/package/querystring
3.4 Http请求
在花漾RPA中发送Http请求除了可以使用Http请求流程节点,还可以直接在RPA引擎脚本中编写。花漾灵动RPA运行环境中引入了axios
库,可以用来发送Http请求。需要注意的是,在花漾客户端发送Http请求时,请求会从您的本机的网络出口IP发送出去。
如下示例所示,axios的get方法会向指定的URL发送GET请求,并返回一个Promise对象。在成功时,它会调用then函数并传递服务器响应的数据;在发生错误时,则会调用catch函数。
// 示例写法
(async () => {
// 引入axios库
var axios = require('axios');
// 定义请求URL
var reqUrl=`https://www.fastmock.site/mock/2bb7417a51f02bd62206b5fa4f0f22f6/hytest/test`
// 使用axios发送GET请求
return axios.get(reqUrl)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.error(error);
});
})()
axios文档说明:https://axios-http.com/
4、花漾RPA可引用模块
在花漾RPA集成了以下模块, moment
等模块已在上文举例说明。如了解更多可访问提供的官方文档来进一步使用。
请注意,在使用花漾RPA集成的模块时,需要通过 require()
函数引入后使用。
// 示例写法
var moment = require('moment');
- moment 官方文档:https://momentjs.com
- axios 官方文档:https://axios-http.com
- lodash 官方文档:https://www.lodashjs.com
- form-data 官方文档: https://github.com/form-data/form-data#readme
- querystring 官方文档:https://github.com/Gozala/querystring#readme
- crypto 官方文档:https://nodejs.org/api/crypto.html
5、总结
以上示例介绍了“RPA引擎脚本”的流程节点的常见操作和可引用模块,您可以访问提供的官方文档来进一步学习相关知识。