我是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);
}
答案 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;
...