Google App Maker如何从Google通讯录创建数据源

Col*_*lin 3 google-app-maker

使用GoogleAppMaker如何从谷歌联系人创建数据源.有一个员工HR示例应用程序,但我想类似地管理联系人(添加,修改,删除)和使用选择标准.

Pav*_*nik 10

此时,此任务在App Maker中并不简单,而且非常通用.我们可以改变问题措辞CRUD operations with 3rd party datasources.让我们把它分成更小的部分并分别解决它们.

阅读/列出联系人

这项任务相对容易.您需要使用计算模型来代理Apps Scripts Contacts API响应.使用Contact响应创建包含字段子集的模型后,您可以为模型创建数据源并将其绑定到List或Table小部件.您还可以尝试在计算模型样本中找到一些灵感.

字段

数据源

// Server side script
function getContacts_() {
  var contacts = ContactsApp.getContacts();

  var records = contacts.map(function(contact) {
    var record = app.models.Contact.newRecord();

    record.FirstName = contact.getGivenName();
    record.LastName = contact.getFamilyName();

    var companies = contact.getCompanies();

    if (companies.length > 0) {
      var company = companies[0];

      record.Organization = company.getCompanyName();
      record.Title = company.getJobTitle();
    }

    var emails = contact.getEmails();

    if (emails.length > 0) {
      record.Email = emails[0].getAddress();
    }

    var phones = contact.getPhones();

    if (phones.length > 0) {
      record.Phone = phones[0].getPhoneNumber();
    }

    return record;
  });

  return records;
}
Run Code Online (Sandbox Code Playgroud)

创建/更新/删除

由于计算模型有一些限制,我们需要打开我们的想象力来创建,更新和删除其数据源中的记录.基本策略是调用服务器端脚本进行CUD操作,以响应客户端的用户操作.要从UI获取用户输入,我们需要使用页面的自定义属性,每个Contact字段有一个属性: 自定义属性

以下是一些可以解释这个想法的片段

创建

// Client script
function onSubmitContactClick(submitButton) {
  var props = submitButton.root.properties;

  var contact = {
    FirstName: props.FirstName,
    LastName: props.LastName,
    Organization: props.Organization,
    ...
  };

  google.script.run
    .withSuccessHandler(function() {
      // Most likely we'll need to navigate user back to the
      // page with contacts list and reload its datasource
      // to reflect recent changes, because our `CUD` operations
      // are fully detached from the list datasource
      app.showPage(app.pages.Contacts);
      app.datasources.Contacts.load();
     })
    .withFailureHandler(function() {
       // TODO: Handle error
     })
    .createContact(contact);
}


// Server script
function createContact(contactDraft) {
 var contact = ContactsApp.createContact(contactDraft.FirsName,
                                         contactDraft.LastName,
                                         contactDraft.Email);

  contact.addCompany(contactDraft.Organization, contactDraft.Title);
  contact.addPhone(ContactsApp.Field.WORK_PHONE, contactDraft.Phone);
}
Run Code Online (Sandbox Code Playgroud)

更新

更新联系人记录的想法与新的联系人创建流程非常相似,所以我暂时跳过它.

删除

假设删除按钮位于联系人表格行内.

// Client script
function onDeleteContactClick(deleteButton) {
  var email = deleteButton.datasource.item.Email;

  google.script.run
    .withSuccessHandler(function() {
      // To update contacts list we can either reload the entire
      // datasource or explicitly remove deleted item on the client.
      // Second option will work way faster.
      var contactIndex = deleteButton.parent.childIndex;
      app.datasources.Contacts.items.splice(contactIndex, 1);
     })
    .withFailureHandler(function() {
      // TODO: Handle error
     })
    .deleteContact(contact);
}


// Server script
function deleteContact(email) {
  var contact = ContactsApp.getContact(email);
  ContactsApp.deleteContact(contact);
}
Run Code Online (Sandbox Code Playgroud)