在完成的表单中创建记录的链接

时间:2017-07-25 17:36:55

标签: google-app-maker

我是App Maker的新手。我有一个用户完成的表单,名为 CreditApplication (它的链接数据源也称为 CreditApplication )。 此表单有一个“提交”按钮。提交后,我想要一封电子邮件,其中包含刚刚完成的记录链接,可通过电子邮件发送给其他用户。

我在创建此链接时遇到问题。我想要链接将电子邮件用户带到 CreditApplication 表单中的相同记录。 我列出了下面的内容。

CreditApplication 表单有一个提交按钮,其中onClick设置为:

createRequest(widget).

CreditApplication 数据源在 onCreate 事件中包含以下代码:

var to = "jdoe@gmail.com";
var subject = "New Online Credit Application Submission - " + record.FirstName + " (Sales Contact: " + record.SalesContact + ")";
var msg = "A credit application has been submitted for " + record.FirstName + "." + "<br><br>";
var appUrl = ScriptApp.getService().getUrl() + '#CreditApplication?requestId=' + record._key;
msg = msg + appUrl;
MailApp.sendEmail(to, subject, msg, {htmlBody: msg});   

我的客户端javascript代码位于名为ClientScripts的库中,显示如下:

/**
 * Replaces the url history state to reflect the changes upon navigation
 *     from a different screen.
 * @param {String} requestId - id of the selected request.
 */
function replaceUrlForReadRequest(requestId) {
  var params = {
    requestId: requestId
  };
  google.script.history.replace(null, params, app.pages.NewPage1.name);
}

/**
 * Replaces the url history state to reflect the changes upon navigation
 *     from a different screen.
 * @param {Page} page - application page to navigate.
 */
function replaceUrlForPage(page) {
  var params = {};
  google.script.history.replace(null, params, page.name);
}

/**
 * Creates a new request and redirects user to the read screen afterwards.
 * @param {Widget} submitButton - button that triggers the action.
 */
function createRequest(submitButton) {
  if (!submitButton.root.validate()) {
    return;
  }
  var NewPage1 = app.pages.NewPage1;
  submitButton.datasource.createItem(function(record) {    
    if (app.currentPage === NewPage1) {
      replaceUrlForReadRequest(record._key);     
    }
  });  
  app.showPage(NewPage1);
  replaceUrlForPage(NewPage1);
}

2 个答案:

答案 0 :(得分:0)

您可以在通过电子邮件发送URL之前添加标识记录的URL参数。当用户检索页面时,使用该参数调整查询过滤器以加载记录。

可以通过客户端脚本将URL参数添加到URL:

 /**
 * Adds a URL parameter.
 * @param {string} name - name of the URL parameter;
 * @param {string} value - value of the URL parameter;
 */
function addUrlParameter(name, value) {
  google.script.url.getLocation(function(location) {
    var params = location.parameter;
    if (params[name]) {
      console.log('URL parameter already exists');
    } else {
      console.log('Adding URL parameter');
      params[name] = value;
      google.script.history.replace({}, params);
    }
  });
}

以下是onAttach事件处理程序的示例。 &#34;项目&#34;是数据源的名称。它使用内置数据字段&#34; Key&#34;设置查询过滤器。

/**
 * Loads a record based on the "key" parameter in URL.
 */
function loadPageByKey() {
  google.script.url.getLocation(function(location) {
    if ('key' in location.parameter) {
      var datasource = app.datasources.Project;
      datasource.query.clearFilters();
      datasource.query.filters.Key._equals = location.parameter.key;
      datasource.load(function() {
        datasource.query.clearFilters();
      });
    }
  });
}

答案 1 :(得分:0)

一般来说,您的代码看起来不错,但是......:

mathvariant='italic'

实际上,它是onBeforeCreate模型事件,并且在这个时刻&#39; _key&#39;属性还没有设置......我有一种感觉,这个问题应该在最近的时间由App Maker解决。

同时......您可以调整应用工作流程或使用其他字段进行导航。例如,您可以为新记录生成ID ...

// onCreate - actually it is onBeforeCreate
...
var appUrl = ScriptApp.getService().getUrl() +
             '#CreditApplication?requestId=' +
             record._key;
...