每次在Copper(我的CRM)中创建新的销售线索时,我都在使用Zapier创建Monday.com任务。问题在于Zapier仅允许将信息存储在Monday.com的任务名称中。我创建了一个Webhook,该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
最佳答案
编辑:下周我们将发布一个新的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 }
}
但是
column_values
的change_multiple_column_values
属性接受JSON格式的字符串因此,您真正想要的是:
mutation {
change_multiple_column_values(
board_id: 12345678,
item_id: 87654321,
column_values: "{\"text\": \"123\"}"
) { id }
}
关于javascript - 通过API突变数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58534326/