Ragic では、デフォルト値を設定することで、レコードの最終更新日時を Date フィールドに自動入力できます。
ただし、レコード内の特定のフィールドの最終更新日時を自動入力したい場合は、スクリプトを追加する必要があります。
以下の手順に従ってスクリプトを追加してください。
任意のシート名を右クリックして Javascript ワークフロー を選択するか、任意のタブを右クリックして Global Javascript ワークフロー を選択します。
独立フィールド
function setLastModifiedOnField(pathSheet, observeField, recordField) {
if (param.getOldValue(observeField) !== param.getNewValue(observeField) || param.isCreateNew()) {
var today = new Date(new Date().getTime() + account.getTimeZoneOffset());
function pad2(n) { return n < 10 ? '0' + n : n }
var fmtValue = today.getFullYear() + "/" +
pad2(today.getMonth() + 1) + "/" +
pad2(today.getDate()) + " " +
pad2(today.getHours()) + ":" +
pad2(today.getMinutes()) + ":" +
pad2(today.getSeconds());
var query = db.getAPIQuery(pathSheet);
query.addFetchDomains(recordField);
var entry = query.getAPIEntry(response.getRootNodeId());
entry.setFieldValue(recordField, fmtValue);
entry.save();
}
}
子テーブルフィールド
function setLastModifiedOnSubtableField(pathSheet,observeSubtableKeyField, observeSubtableField, recordField) {
var list = param.getSubtableEntry(observeSubtableKeyField);
var entry = param.getUpdatedEntry();
var today = new Date(new Date().getTime() + account.getTimeZoneOffset());
function pad2(n) { return n < 10 ? '0' + n : n }
var fmtValue = today.getFullYear() + "/" +
pad2(today.getMonth() + 1) + "/" +
pad2(today.getDate()) + " " +
pad2(today.getHours()) + ":" +
pad2(today.getMinutes()) + ":" +
pad2(today.getSeconds());
for (var i = 0; i < list.length; i++) {
if(list[i].getOldValue(observeSubtableField) != list[i].getNewValue(observeSubtableField) && (list[i].getOldValue(observeSubtableField) !== null || list[i].getNewValue(observeSubtableField) !== "" )){
var subRootNodeId = list[i].getSubRootNodeId();
entry.setSubtableFieldValue(recordField, subRootNodeId, fmtValue);
entry.save();
}
}
}

シート URL が
https://www.ragic.com/データベースアカウント名/タブ名/1?PAGEID=wSM
の場合(?PAGEID=wSM の部分は無視してください)、以下のように設定します。
独立フィールドの場合:
ポストワークフロー に次のコードを追加してください。
setLastModifiedOnField("/タブ名/1", 特定のフィールド番号, 記録の日付フィールド番号);
フィールド番号(Field ID)の確認方法については、こちらの記事をご参照ください。
「受注書」を例にすると、以下の画像と表のとおりです。

| フィールド | フィールド名 | フィールド番号 |
|---|---|---|
| 特定のフィールド | 状態 | 1000002 |
| 記録の日付フィールド | 状態更新日 | 1002217 |
対応する Field ID を入力した後のコードは次のようになります。
setLastModifiedOnField("/タブ名/1", 1000002, 1002217);
新規レコード作成時、特定フィールドが空でも、保存後にレコード日時フィールドへ最終更新日時が入力されます。更新時のみ動作させたい場合は、次のようにコードを調整してください。
if(param.getOldNodeId(Specific Field ID) !== -1 || param.getNewValue(Specific Field ID)){
setLastModifiedOnField("/タブ名/1", 特定のフィールド番号, 記録の日付フィールド番号);
}
子テーブルフィールドの場合:
ポストワークフロー に次のコードを追加してください。
setLastModifiedOnSubtableField("/タブ名/1", 子テーブルキーフィールド, 特定のフィールド番号, 記録の日付フィールド番号);
備考: 「記録の日付フィールド」として選択できるのは、子テーブルフィールドのみです。
子テーブルのキーフィールドは、データベースの定義ファイルをダウンロードして確認できます。以下の例では、子テーブルのキーフィールドは 1000020 です。

たとえば、上記画像の例では以下のとおりです。
| フィールド | フィールド名 | フィールド番号 |
|---|---|---|
| 特定のフィールド | 状態 | 1002218 |
| 記録の日付フィールド | 状態更新日 | 1002219 |
対応する子テーブルのキーフィールドと フィールド番号 を入力した後のコードは次のようになります。
setLastModifiedOnSubtableField("/タブ名/1", 1000020, 1002218, 1002219);
新規レコード作成時に、特定フィールドが空でも、保存後にレコード日時フィールドへ最終更新日時が入力されることがあります。更新時のみ動作させたい場合は、コードを次のように調整してください。
var paramList = param.getSubtableEntry(子テーブルキーフィールド);
var list = paramList.toArray();
for(var i = 0; i < list.length; i ++) {
if(paramList[i].getOldNodeId(特定のフィールド番号) !== -1 param.getNewValue(特定のフィールド番号) !== ""){
setLastModifiedOnSubtableField("/タブ名/1" , 子テーブルキーフィールド, 特定のフィールド番号, 記録の日付フィールド番号);
}
}
備考:
1. 保存時に TypeError: null has no such function "addFetchDomains" in at line number 25 のようなエラーが発生した場合は、/タブ名/1 の指定が正しいか確認してください。
2. 更新日時は、会社設定で設定されている会社のローカルタイムゾーンに基づいて記録されます。