JournalEntry フィールドの操作


スクリプトで JournalEntry フィールドを操作する必要がある場合があります.プラットフォームが提供するOOTB

//GlideRecord.<fieldName>.getJournalEntry(<numberOfEntries2Fetch>)

var gr = new GlideRecord('incident');
gr.get('<sys_id');

gr.comments.getJournalEntry(-1) //get all comments



OOTB メソッドは、必要に応じて機能を拡張するために使用できます.エントリの配列、json 形式、またはある種の html を取得する必要が生じたとします. OOTB メソッド呼び出しをカプセル化し、API を公開することで、次のことが可能になります.

テスト GlideRecords

var dml = new GlideRecord('dsl');
dml.get('31a60f4bdb2a70109c9268d35b96196e');

var incident = new GlideRecord('incident');
incident.get('57af7aec73d423002728660c4cf6a71c');



テストケース

gs.debug(JSON.stringify(JournalEntry(dml)
    .field('notes')
    .toJSON(1)));

/* get the latest entry in JSON format from journal field 'notes' in record GlideRecord<dsl>

-> {"2021-09-16 21:18:43 - System Administrator":"\nnoted"} 
*/

gs.debug(JournalEntry(incident)
    .field('work_notes')
    .toHTML(-1));

/* get all of the entries in "HTML" format from journal field 'work_notes' in record incident

-> "<div>2021-09-16 21:13:03 - System Administrator (Work notes)<br />worked notes<br /><br />2018-12-12 23:30:24 - System Administrator (Work notes)<br />Changed the priority of the Incident<br /><br /></div>"
*/

gs.debug(JournalEntry(incident)
    .field('comments')
    .toArray(2));

/* get latest 2 entries as an array from journal field 'comments' in record incident

-> ["2021-09-16 19:18:52 - System Administrator (Additional comments)\nthis is another comment\r\n\r\n\r\nand another","2021-09-16 12:24:57 - System Administrator (Additional comments)\nBecause we need them",""]
*/

gs.debug(JournalEntry(dml)
    .field('notes')
    .toString(-1));

/* get all entries as a string from journal field 'notes' from GlidRecord<dsl>. Same as OOTB

-> "2021-09-16 21:18:43 - System Administrator (Notes)\nnoted\n\n"
*/


各出力のフォーマットは、次のようなユーティリティで調整できます.

var JournalEntry = function JournalEntry (gr) {
    var data = {
        "gr": gr,
        "fieldName": null,
        "count": -1
    };

    return {
        "field": setFieldName,
        "toHTML": toHtml,
        "toJSON": fromArrayToJSON,
        "toString": toString,
        "toArray": toArray
    };


    /*************************** public members ***********************/

    function toString (count) {
        return _journalFieldEntries(data, count);

    }

    function toArray (count) {
        var ootbEntryDelimiter = '\n\n';

        return _journalFieldEntries(data, count)
            .split(ootbEntryDelimiter);

    }

    function toHtml (count) {
        var anyReturnOrNewLine = /\n|\r/g;
        var brTag = '<br />';

        var entries = _journalFieldEntries(data, count)
            .replace(anyReturnOrNewLine, brTag);

        return _betweenDivTag(entries);

    }

    function fromArrayToJSON (count) {

        return toArray(count)
            .reduce(_toKeyPair(_keyRegex(data.gr)), {});

    }

    function setFieldName (x) {
        data.fieldName = x;

        return this;
    }



    /*************************** private members ***********************/

    function _journalFieldEntries (data, count) {
        var x = count || data.count;

        return data.gr[data.fieldName]
            .getJournalEntry(x);

    }


    function _keyRegex (gr) {
        var fieldLabel = gr.getElement(data.fieldName)
            .getLabel();

        return new RegExp('\\(' + fieldLabel + '\\)', 'i');

    }


    function _toKeyPair (splitPattern) {
        return function applyToKeyPair (reducer, element) {
            var pair = element.split(splitPattern);
            var key = pair[0].trim();

            reducer[key] = pair[1];

            return reducer;
        };
    }


    function _betweenDivTag (value) {
        return "<div>" + value + "</div>";
    }
};



メソッド「field」は、GR のどのフィールドからエントリ値を取得するかを指定します.

メソッド「toHTML」、「toJSON」、「toArray」、および「toString」は、取得するエントリ数を指定する整数値を指定してジャーナル フィールド エントリを返すターミナル メソッドです. -1 はすべて、正の整数は日付の降順で特定の数のエントリを取得します.

ハッピースノーイング...