添付ファイルを制限する


概要

ServiceNow全体で利用できる添付ファイルの拡張子はシステムプロパティ「glide.attachment.extensions」で制限できる。またファイルサイズの制限も可能である。
https://docs.servicenow.com/bundle/paris-platform-administration/page/administer/form-administration/task/t_DisablingTheDragAndDropFeature.html

インシデントフォームに制限を掛ける

しかし、インシデントフォームのみに制限を掛けたりファイル数を制限する場合は次のようにする。(サービスカタログでは正常に動作しません)

プロパティの作成

添付ファイル数を制限するプロパティ(ozawa.file.attachments.max)と許可する拡張性(ozawa.file.attachments.ext)を作成する。

フォームのクライアントスクリプト

フォームにonSubmit()スクリプトを作成

function onSubmit() {
    var ajax = new GlideAjax('CheckFileAttachments');
    ajax.addParam('sysparm_name', 'validateAttachments');
    ajax.addParam('sysparm_sys_id', g_form.getUniqueValue());
    ajax.getXMLAnswer(function(answer) {
        if (answer != "true") {
            g_form.addErrorMessage('File attachments are illegal');
            return false;
        }
    });
}

スクリプトインクルード

var CheckFileAttachments = Class.create();
CheckFileAttachments.prototype = Object.extendsObject(AbstractAjaxProcessor, {

    validateAttachments: function() {
        var extMax = gs.getProperty('ozawa.file.attachments.max');
        var extList = gs.getProperty('ozawa.file.attachments.ext').split(',');
        var incSysid = this.getParameter('sysparm_sys_id');

        var gr = new GlideRecord('sys_attachment');
        gr.addQuery('table_sys_id', incSysid);
        gr.query();
        if (gr.getRowCount() > extMax) {
            return false;
        }

        while (gr.next()) {
            var filename = gr.file_name;
            var found = false;
            for (var i = 0; i < extList.length; i++) {
                if (filename.endsWith('.' + extList[i])) {
                    found = true;
                    break;
                }
            }
            if (!found) {
                return false;
            }
        }
        return true;
    },

    type: 'CheckFileAttachments'
});

サービスカタログに制限を掛ける

サービスカタログの場合はポータルからだとエラーになりますが、UIからでは次のスクリプトが制限することができます。
サービスカタログの場合はプロパティとスクリプトインクルードは上の同じですがクライアントスクリプトが異なります。

クライアントスクリプト

function onSubmit() {
    var ajax = new GlideAjax('CheckFileAttachments');
    ajax.addParam('sysparm_name', 'validateAttachments');
    ajax.addParam('sysparm_sys_id', g_form.getParameter("sysparm_item_guid"));
    ajax.getXMLAnswer(function(answer) {
        if (answer != "true") {
            g_form.addErrorMessage('File attachments are illegal');
            return false;
        }
    });
}