Ragicでは、デフォルト値を設定することで、日付フィールドにレコードの最終更新日時を自動入力できます。ただし、特定のフィールドに最終更新日時を自動入力したい場合は、スクリプトを追加する必要があります。
スクリプトの追加方法については、こちらのガイドをご参照ください。
シート名を右クリックして「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/accountname/tabname/1の場合
独立フィールド
ポストワークフローに以下のコードを追加する:
setLastModifiedOnField("/tabname/1", 特定のフィールドID, 日付記録フィールド ID);
フィールド IDを確認するには、この文章をご確認ください。
「受注書」を例にとって、以下の画像と表を参照してください:
フィールド | フィールド名 | フィールド ID |
---|---|---|
特定のフィールド | Status | 2000880 |
日付記録フィールド | Status Update Date | 1001110 |
対応するフィールドIDを記入した後のコード:
setLastModifiedOnField("/tabname/1", 2000880, 1001110);
新しいレコードを作成する際、特定のフィールドが空の場合、保存後もレコードの日付フィールドに最終更新日が生成されます。更新時にのみこれをトリガーするには、コードを以下のように調整する:
if(param.getOldNodeId(Specific Field ID) !== -1){ setLastModifiedOnField("/tabname/1", 特定のフィールド ID, 日付記録フィールド ID); }
子テーブルフィールド
ポストワークフローに以下のコードを追加する:
setLastModifiedOnSubtableField("/tabname/1", 子テーブルキー値, 特定のフィールド ID, 日付記録フィールド ID);
備考: 「日付記録フィールド」として選択できるのは、子テーブルのフィールドのみです。
子テーブルキー フィールドはデータベースの定義ファイルで確認できます。
以下の例では、子テーブルキー フィールドは 2001138 となります。.
例えば、上の画像のように:
フィールド | フィールド名 | フィールド ID |
---|---|---|
特定のフィールド | Status | 1001111 |
日付記録フィールド | Update Date | 1001112 |
対応する子テーブルのキー・フィールドとフィールド ID を入力した後のコード:
setLastModifiedOnSubtableField("/tabname/1", 2001138, 1001111, 1001112);
新しいレコードを作成する際、特定のフィールドが空の場合、保存後もレコードの日付フィールドに最終更新日が生成されます。更新時にのみこれをトリガーするには、コードを以下のように調整する:
var paramList = param.getSubtableEntry(Subtable Key Field); var list = paramList.toArray(); for(var i = 0; i < list.length; i ++) { if(paramlist[i].getoldnodeid(Specific Field ID) !== -1){ setlastmodifiedonsubtablefield( tabname 1, Subtable Key Field, Specific Field ID, Record Date Field ID); }
終了する前に変更を保存することをお忘れなく。
保存時にTypeError: null has no such function "addFetchDomains" in at line number 25 のようなエラーが発生した場合は、/タブ名/1が正しいかどうか確認してください。
備考:更新日時は、会社設定の会社の現地時間帯に基づいて記録されます。