よくある質問
なんか問題がある?心配しないで、答えは全部ここにいる。
全サイト検索

レコード内の特定フィールドの最終更新日時を生成する方法

Ragic では、デフォルト値を設定することで、レコードの最終更新日時を Date フィールドに自動入力できます。

ただし、レコード内の特定のフィールドの最終更新日時を自動入力したい場合は、スクリプトを追加する必要があります。

以下の手順に従ってスクリプトを追加してください。

ステップ 1:Ragic ワークフローエディターを開く

任意のシート名を右クリックして Javascript ワークフロー を選択するか、任意のタブを右クリックして Global Javascript ワークフロー を選択します。

ステップ 2:「Global Workflow」の編集画面に切り替える

ステップ 3:以下のコードを貼り付けて保存する

独立フィールド

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

ステップ 4:対象シートの「ポストワークフロー」編集画面に切り替える

シート 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" , 子テーブルキーフィールド, 特定のフィールド番号, 記録の日付フィールド番号); 
    }
}

ステップ 5:ポストワークフローを保存する

終了する前に、変更内容を忘れずに保存してください。


備考:

1. 保存時に TypeError: null has no such function "addFetchDomains" in at line number 25 のようなエラーが発生した場合は、/タブ名/1 の指定が正しいか確認してください。

2. 更新日時は、会社設定で設定されている会社のローカルタイムゾーンに基づいて記録されます。

Ragic にフィードバックを送る

ご意見をお聞かせください(必須・複数選択可)

上記の項目について、詳細をご記入ください:

フィードバック理解のため、スクリーンショットをご提供ください:

貴重なご意見をありがとうございます!

    無料でRagicを始める

    Googleアカウントに登録

    Ragic 株式会社
    1-888-666-8037
    info@ragic.com
    利用規約 | プライバシーポリシー