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完成,否则会造成不可预知的后果。比如日志输出错乱,变量修改不成功等。

为此,采用了自执行的匿名函数,并在其内部定义了一个异步函数。

  1. 异步函数:使用 async 关键字声明的函数会返回一个 Promise 对象,该函数内部可以使用 await 关键字来等待其他异步操作完成。
  2. 自执行的匿名函数:通过将异步函数放在自执行的匿名函数中,可以立即执行这个异步函数,而不需要显式调用它。
// 示例写法
(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');
  1. moment 官方文档:https://momentjs.com
  2. axios 官方文档:https://axios-http.com
  3. lodash 官方文档:https://www.lodashjs.com
  4. form-data 官方文档: https://github.com/form-data/form-data#readme
  5. querystring 官方文档:https://github.com/Gozala/querystring#readme
  6. crypto 官方文档:https://nodejs.org/api/crypto.html

5、总结

以上示例介绍了“RPA引擎脚本”的流程节点的常见操作和可引用模块,您可以访问提供的官方文档来进一步学习相关知识。

最后更新于 2023-10-09 15:17
回到顶部