如何在xero中的联系人的帐号字段中执行重复检查?

时间:2019-09-09 07:32:56

标签: node.js xero-api

我想使用xero-api将MOD10V05有效的Bpay CRN(使用https://github.com/JedWatson/node-bpay生成)分配给xero帐户中的联系人。我能够获取联系人并使用生成的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,并检查联系人中是否已经存在。如果存在,则再次生成,否则将其更新为帐号字段中值为空的联系人。

1 个答案:

答案 0 :(得分:0)

我认为解决方法是尝试匹配帐号并查看是否有帐号。你可以做类似的事情

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

,然后仅查看返回的联系人数量?如果为零,则可以继续进行,否则将重复,并获得ID。

(我对node.js并不熟悉,所以我的语法可能有点不正确)。

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