请求|自定义行为(custom-action)

通过编写 Javascript 代码来自定义小程序的业务逻辑。

行为简介

操作前提

非聚焦模式 (双击空白位置,回到初始界面)

按钮位置

左侧工具栏第六个按钮
自定义行为

创建自定义行为

创建

输入:行为需要接收的参数

  • 名称: 参数名字,通过 context.getArg('入参名字') 获取输入的参数
  • 类型: 输入的参数类型
    • INTEGER(整数)对应 js 的 number
    • TEXT、FLOAT8、DATE 等 d 对应 string,需要转化才能使用

输入

输出: 行为返回的结果,一个结果都没有时,使用该行为没有返回值也无法使用成功时的回调

输出

逻辑: 对某个行为通过写js代码对方式自定义逻辑

逻辑

代码

const inputValue = context.getArg('inputKey');
// js code
context.setReturn('outputKey', outputValue);

操作指南

添加行为: 自定义行为 -> 下拉选择已经定义好的行为(sum) -> 给入参参数赋值 -> 在成功时里面可以使用结果数据

操作步骤

场景示例

年龄计算

年龄计算

const now = new Date(context.getArg('now'));
const birthday = new Date(context.getArg('birthday'));
const age = Math.floor((now.getTime() - birthday.getTime())/(1000*3600*365*24));
context.setReturn('age', age);

带小数点的数字计算

  • 输入
    • rate:无限精度小数
    • num1:整数
    • num2:整数
  • 输出
    • result:无限精度小数
const rate = Number(context.getArg('rate')); 
const num1 = context.getArg('num1');
const num2 = context.getArg('num2');
const result = ((num1 + num2) * rate).toFixed(2);  
context.setReturn('result', result);

时间格式转化

  • 输入
    • date:日期
    • time:时间(带时区)
  • 输出
    • sdate:文本
    • stime:文本
    • timeStampNum:文本
    • timeStamp:时间戳(带时区)
const date = context.getArg('date');
const time = context.getArg('time');
console.log('date===', date);    // 2021-12-21
console.log('time===', time);    // 18:30:00+08:00
const timestampNum = Math.floor(Date.parse(date + ' ' + time) / 1000) + '';
console.log('timestampNum===', timestampNum);   // 1640082600000
console.log('sdate===', date.replace(/-/g, '')); // 20211221
console.log('stime===', time.replace(/:/g, '').substr(0, 6)); //183000
console.log('timestamp===', date + 'T' + time);  // 2021-12-21T18:30:00+08:00
context.setReturn('timestampNum', timestampNum);
context.setReturn('sdate', date.replace(/-/g, ''));
context.setReturn('stime', time.replace(/:/g, '').substr(0, 6));
context.setReturn('timestamp', date + 'T' + time);
  • 备注: 传的时间自带时区

使用action flow调用gql

使用 action flow 调用 gql,主要是用 context 里面的 runGql 方法。
runGql 参数声明:

  • operationName: 就是 gql 的名字,需要和 gql 里面的名字保持一致
  • gql:就是 graphql 的 query content, 名字必须和 operationName 一样
  • variables: 如果gql里面使用了参数声明,则这个参数不能为空,意义同 graphql request 中的 variables
  • permission: 声明去调用 gql 的角色
    以下示例都以 account 来举例
    示例1:不使用参数声明的 gql
query QueryAccount{
  account(where: {id: {_eq:1}}) {
    id
    username
  }
}

// 则其对应的operationName为QueryAccount,
// variables可以为{},
// permission为{role:'admin'}

示例2:使用参数声明的gql

query QueryAccount($where:account_bool_exp){
  account(where: $where) {
    id
    username
  }
}

// 对应的operationName='QueryAccount',
// variables={id:{_eq:1}};
// permission={role:'admin'};

上述两种query返回的结果一模一样

最佳实践

最佳实践|生成海报

需要更多帮助

未能解决您的问题?跳转社区进行话题讨论

2022-06-22
2 0