【问题标题】:Mutating data through API通过 API 修改数据
【发布时间】:2020-02-20 09:04:30
【问题描述】:

每次在 Copper(我的 CRM)中创建新潜在客户时,我都会使用 Zapier 创建 Monday.com 任务。问题是 Zapier 只允许将信息存储在 Monday.com 上的任务名称中。我创建了一个 webhook,它应该从 Monday.com 任务标题中解析出所需的数据,并根据需要更新列值。但是,我的代码目前没有这样做。创建任务但列未正确填充时,我没有收到任何错误。我不确定是什么问题。

代码如下:

const express = require('express')
const path = require('path')
const bodyParser = require('body-parser')
const PORT = process.env.PORT || 5000

const updateMultipleColumnValues = require("./updateMultipleColumnValue").updateMultipleColumnValue;

const app = express();

  app.use( bodyParser.json());
  app.use(bodyParser.urlencoded({extended: true}));
  app.set('views', path.join(__dirname, 'views'));
  app.set('view engine', 'ejs');



  app.post('/', (req, res) => {
    console.log(req.body)
    const { boardId, pulseId } = req.body.event

      let parsedRecord = extractData(req.body.event.pulseName)
      console.log(parsedRecord);

      let newData = {
        "text0": parsedRecord.DURATION
      };

      let stringData = JSON.stringify(newData);

      console.log(boardId);
      console.log(pulseId);
      console.log(stringData);
      updateMultipleColumnValues(boardId, pulseId, stringData);
    res.json(parsedRecord);
  });

  app.listen(PORT, () => console.log(`Listening on ${ PORT }`));





// console.log(extractData(targetStr, fields));

function extractData(str) {
  let fields = ['DATE', 'TIME', 'DURATION', 'TYPE'];

  return str.split(/\s*\|\s*/).reduce((res, entry) => {
    let dat = entry.split(/\s*:\s*/);
    return fields.indexOf(dat[0]) > -1 ? Object.assign(res, { [dat[0]]: dat[1] }) : res;
  }, {});
}

这里是 updateMultipleColumnValue 文件:

const executeMondayQuery = require("./executeMondayQuery").executeMondayQuery;

const updateMultipleColumnValue = async (boardId, itemId, newData) => {
  const updateColumnValueBody = {
    query: `mutation {
                change_multiple_column_values(
                board_id: ${boardId},
                item_id: ${itemId},
                column_values: ${newData}
                ) { id }
            }`
  };

  await executeMondayQuery(updateColumnValueBody);
};

exports.updateMultipleColumnValue = updateMultipleColumnValue;

Monday.com 使用 graphQL

【问题讨论】:

    标签: javascript json graphql monday.com


    【解决方案1】:

    编辑:我们将在下周发布一个新的 Copper 集成,所以如果你不想用 Zapier 重新创建它,你可以等待这个版本。

    无论如何,在此实现中您可能需要解决两件事。

    TL;DR 解决方案

    您需要先转义您的字符串,然后再将其发送到突变中。这应该有效:

    const updateColumnValueBody = {
        query: `mutation {
                    change_multiple_column_values(
                    board_id: ${boardId},
                    item_id: ${itemId},
                    column_values: "${newData.replace(/"/g, '\\"')}"
                    ) { id }
                }`
      };
    

    关于 GraphQL 错误处理的一句话

    我不确定executeMondayQuery 函数内部的逻辑是什么,但是如果在执行 GraphQL 突变期间发生解析错误,HTTP 响应本身仍然有 200 状态码。

    响应正文将包含一个 errors 数组,描述负载中的所有语法错误。

    在 GraphQL JSON 属性中转义字符串

    在这种特定情况下,问题可能是您的newData(最初是stringData)没有转义,也没有用双引号括起来(表明它是一个字符串)。

    在字符串插值之后,你的有效载荷看起来像这样:

    mutation {
      change_multiple_column_values(
        board_id: 12345678,
        item_id: 87654321,
        column_values: {"text": "123"}
      ) { id }
    }
    

    change_multiple_column_valuescolumn_values 属性接受JSON 格式的字符串

    所以你真正想要的是:

    mutation {
      change_multiple_column_values(
        board_id: 12345678,
        item_id: 87654321,
        column_values: "{\"text\": \"123\"}"
      ) { id }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-04-16
      • 2016-01-13
      • 1970-01-01
      • 2012-03-16
      • 1970-01-01
      • 1970-01-01
      • 2015-09-09
      • 1970-01-01
      • 2013-12-14
      相关资源
      最近更新 更多