【 】
【JavaScript 解説】 ブラウザ上に FileMaker のレコード内容を表示
document.addEventListener('DOMContentLoaded', function() {
const scheduleData = %JSON%;
loadSchedule(scheduleData);
});
01行目 HTML の初期文書が完全に読み込まれ解釈された時点で発生します
02行目 変数 scheduleData に %JSON% を読み込みます
* %JSON% は FileMakerでJSONデータと置換するための単なる記号です
* %JSON% の生成方法は Webビューアの設定 を参考
03行目 scheduleData を引数としてloadSchedule を実行します(後述)
【JavaScript 解説】 〜にJSON値を表示
function loadSchedule(data) {
const tableBody = document.getElementById('scheduleTable').getElementsByTagName('tbody')[0];
data.forEach(item => {
const row = tableBody.insertRow();
const timeCell = row.insertCell(0);
timeCell.textContent = item.time;
const taskCell = row.insertCell(1);
taskCell.textContent = item.task;
taskCell.setAttribute('data-time', item.time);
taskCell.addEventListener('click', function() {
const input = document.createElement('input');
input.type = 'text';
input.value = this.textContent;
const originalParent = this;
this.innerHTML = '';
this.appendChild(input);
input.focus();
... 以下、Webビューアから FileMaker スクリプトを実行に続く
01行目 function loadSchedule(data) …
loadSchedule に引数 data を渡して実行します
02行目 変数 tableBody に id=”scheduleTable” の tbody をセットします
03行目 変数 data (FileMakerで生成して追加したJSON値)の回数分繰り返し処理をします
* ここからは item という変数を使用して進めます
* forEach はカウントをセットしなくてもデータの先頭から何番目という値が自動追加されます
04行目 変数 tableBody に
05-06行目 変数 timeCell に tableBody の1番目(0)の
07-08行目 変数 taskCell に tableBody の2番目(1)の
09行目 指定された要素の属性の値を設定します
変数 taskCell の data-time 属性に item(先頭からn番目)のtime(時間帯) 値を追加します
10行目 taskCell (予定)のセルのクリックを判定します
11行目 変数 input に<input>タグを割り当てます
12行目 11行目 の<input>タグの属性をテキスト入力とします
13行目 11行目 の<input>タグに表示される値は、元々 taskCell(予定)にあった値とします
14-17行目 11行目 の親ノードに子ノード追加してHTMLタグとして生成しフォーカスします
【JavaScript 解説】 Webビューアから FileMaker スクリプトを実行
実行するスクリプト
ChangeTask
– 引数 –
JSON形式 / 変更した time(時間帯) と task(予定)
例)
{“time”:”09:00″,”task”:”ミーティング”}
input.addEventListener('keypress', function(e) {
if (e.key === 'Enter') {
e.preventDefault();
originalParent.textContent = this.value;
const data = {};
data["time"] = originalParent.getAttribute('data-time');
data["task"] = this.value;
json_data = JSON.stringify( data );
FileMaker.PerformScriptWithOption( "ChangeTask", json_data, "0" );
}
}
01行目 input.addEventListener
JavaScriptからさまざまなイベント処理を実行することができるメソッド
function(e)は 押されたキーを判定
02行目 if(e.key === ‘Enter’){ … }
e.key 押されたキー が Enter の場合、以下のスクリプトを実行
03行目 e.preventDefault
フォームの誤送信を防ぐ一行
04行目 originalParent.textContent
td要素を示します
05 〜 08行目 JSONデータを作成します
例) {“time”:”09:00″,”task”:”ミーティング”}
10行目 FileMaker.PerformScriptWithOption( “ChangeTask”, json_data, “0” );
Web ビューア内の JavaScript から FileMaker のスクリプトを実行
FileMaker スクリプト名 : ChangeTask
スクリプトに渡す引数 : json_data * 05〜08で作成したJSONデータ