2017-07-25 10 views
0

私はApp Makerにとってかなり新しいです。私はユーザーが完了したフォームをCreditApplicationと呼んでいます(リンクされたデータソースはCreditApplicationとも呼ばれます)。
このフォームには[送信]ボタンがあります。提出すると、完了したレコードへのリンクを含むメールが別のユーザーに電子メールで送信されます。完成したフォームでレコードへのリンクを作成する

このリンクの作成に問題があります。私は、電子メールのユーザーをCreditApplicationフォームの同じレコードにリンクさせたいと思います。 私は以下に挙げたものを挙げました。

CreditApplicationフォームは、onClickのがに設定されて [送信]ボタンを持っている:

createRequest(widget). 

CreditApplicationのデータソースがあるのonCreateイベントに以下のコード:

var to = "[email protected]"; 
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コードがClientScというライブラリにあります次のように表示されます。

/** 
* 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

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イベントハンドラの例です。 「プロジェクト」はデータソースの名前です。これは、組み込みのデータフィールド "Key"を使用してクエリフィルタを設定します。一般的に

/** 
* 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(); 
     }); 
    } 
    }); 
} 
0

あなたのコードがよさそうだが...:

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

実は、それはonBeforeCreateモデルイベントであり、時間のこの時点で「_key」プロパティがまだ設定されていません...私は、この問題が最も近い時間にApp Makerによって対処されるべきだという気持ちを持っています。

一方、アプリのワークフローを調整するか、ナビゲーションのために他のフィールドを使用することができます。たとえば、新しいレコードのIDを生成することができます。

関連する問題