自定义行为:自定义业务逻辑

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

前提:位于初始界面 (如果不在,双击空白位置,就可以回到初始界面)

1. 按钮位置

点击左边栏第六个按钮。

2. 创建行为

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

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

4. 输出

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

5. 逻辑

对某个行为通过写js代码对方式自定义逻辑 ,下面示例不对数据库进行操作,了解更多
const inputValue = context.getArg('inputKey'); // javascript code context.setReturn('outputKey', outputValue);

6. 使用

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

7. 场景示例

  • 计算年龄
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)); // Math.floor(); 向下取整; Math.ceil(); 向上取整 context.setReturn('age', age);
  • 带小数点的数字运算
const rate = Number(context.getArg('rate')); // 将string类型转数字 const num1 = context.getArg('num1'); const num2 = context.getArg('num2'); const result = ((num1 + num2) * rate).toFixed(2); // 四舍五入取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); // 传递的时间自带时区

8. 使用 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 返回的结果一模一样 示例:
const gql = `mutation update { update_jobseeker( _set: {name: "holy", post: "shift"}, where: {id: {_eq: 10}} ) { __typename } } ` ; context.runGql('update_jobseeker', gql, {}, {role: 'admin'});
2022-03-24
0 0