首页 > 解决方案 > 如何在 xero 中的联系人帐号字段中执行重复检查?

问题描述

我想使用 xero-api 为 xero 帐户中的联系人分配一个 MOD10V05 有效的 Bpay CRN(使用https://github.com/JedWatson/node-bpay生成)。我能够获取联系人并使用生成的 Bpay CRN 更新他们。但我想在更新帐号之前进行检查,以便不存在重复的帐号。

我试图获取联系人并将地图应用于他们,以将没有帐号的联系人的 ContactID 存储到数组(noAccountNumContacts)。然后映射该数组以使用 Bpay CRN 更新联系人。但我无法申请重复检查。

这是代码:

const XeroClient = require("xero-node").AccountingAPIClient;
const bpay = require("bpay");

(async function() {
  let xero = new XeroClient(config);
  let noAccountNumContacts = [];

  const result = await xero.contacts.get();
  const contacts = result.Contacts;

  // push contact with no account no. to array
  contacts.map(contact => {
    const { ContactID, Name, AccountNumber } = contact;
    console.log("Contact ID: ", ContactID);
    console.log("Name: ", Name);
    if (AccountNumber === undefined) {
      noAccountNumContacts.push(ContactID);
    } else {
      console.log("Account no: ", AccountNumber);
    }
  });

  console.log("Contacts to be updated ", noAccountNumContacts);

  // update account number
  if (noAccountNumContacts.length !== 0) {
    noAccountNumContacts.map(async contact => {
      const crn = bpay.generateBpayCRN(7); 
      await xero.contacts.update({
        ContactID: contact,
        AccountNumber: crn
      });
    });
  }
  noAccountNumContacts = [];
})();

我想生成一个新的 Bpay CRN 并检查联系人中是否已经存在。如果存在,则再次生成,否则将其更新为在帐号字段中具有空值的联系人。

标签: node.jsxero-api

解决方案


我认为这样做的方法是尝试匹配帐号并查看是否存在。你能做类似的事情吗

const result = await xero.contacts.get({
AccountNumber: crn
});

然后只看返回的联系人数量?如果它是零,你可以继续,否则有一个重复,你会得到它的 ID。

(我不熟悉 node.js,所以我的语法可能有点过时)。

当然,另一种方法是查看您从update()呼叫中获得的响应,并查看是否为重复的帐号引发了错误,在这种情况下您可以重新生成帐号并重试。我个人不喜欢这种方法,但如果您可以轻松访问响应,它可能会起作用。同样,我不使用 node.js,所以我不确定它是如何完成的。


推荐阅读