요청 항목에서 승인으로 또는 그 반대로 특정 첨부 파일 복사

16081 단어 servicenowjavascript
요구 사항은 요청 항목에서 승인 레코드로 또는 그 반대로 첨부 파일을 복사하는 것이었습니다. OOTB API GlideSysAttachment는 매번 한 레코드에서 다른 레코드로 모든 첨부 파일을 복사하지만 이는 원하는 결과가 아닙니다.

모든 첨부 파일 업로드는 스크립트 작업을 통해 연결할 수 있는 'attachment.uploaded'라는 이벤트를 발생시킵니다. SNPros에서 영감을 받은 다음 코드가 사용되었습니다.

스크립트 작업:

// condition-> event.parm1.toString() == 'sc_req_item' || event.parm1.toString() == 'sysapproval_approver'


if (event.parm1.toString() == 'sc_req_item') {

    var reqItemGR = new GlideRecord('sc_req_item');
    reqItemGR.get(event.parm2.toString());

    var approvalGR = new GlideRecord('sysapproval_approver');
    var apprOr = approvalGR.addQuery('sysapproval', event.parm2.toString());
    apprOr.addOrCondition('sysapproval', reqItemGR.request.getValue());
    approvalGR.query()
    while (approvalGR.next()) {
        new attachmentUtils().copySpecificAttachment(current.sys_id.getValue(), 'sysapproval_approver', approvalGR.sys_id.getValue())
    }


} else {
    var approvalGR = new GlideRecord('sysapproval_approver');
    if (approvalGR.get(event.parm2.toString())) {

        if (approvalGR.sysapproval.sys_class_name == 'sc_request') {

            var reqItemGR = new GlideRecord('sc_req_item');
            reqItemGR.addQuery('request', approvalGR.sysapproval.getValue());
            reqItemGR.addQuery('active', true);
            reqItemGR.query();
            while (reqItemGR.next()) {
                new attachmentUtils().copySpecificAttachment(current.sys_id.getValue(), 'sc_req_item', reqItemGR.sys_id.getValue())

            }
        } else {
            new attachmentUtils().copySpecificAttachment(current.sys_id.getValue(), 'sc_req_item', approvalGR.sys_id.getValue())

        }
    }

}



스크립트 포함 'attachmentUtils'

var attachmentUtils = Class.create();
attachmentUtils.prototype = {
    initialize: function () {},

    copySpecificAttachment: function (attachment_id, targetTable, targetSysId) {
        var attRecord = new GlideRecord('sys_attachment');
        if (attRecord.get(attachment_id)) {
            var sourceAttId = attRecord.getValue('sys_id');

            var newAttRecord = this._copyRecord(attRecord);
            newAttRecord.setValue('table_name', targetTable);
            newAttRecord.setValue('table_sys_id', targetSysId);
            newAttRecord.update()

            var attDateRecord = new GlideRecord('sys_attachment_doc');
            attDateRecord.addQuery('sys_attachment', attRecord.getValue('sys_id'));
            attDateRecord.query();

            while (attDataRecord.next()) {
                newDocRecord = this._copyRecord(attDataRecord);
                newDocRecord.setValue('sys_attachment', newAttRecord.getValue('sys_id'));
                newDocRecord.update();
            }

        }

    }

    _copyRecord: function (record) {
        var recordElement;
        var recordElementName;
        var recordTable = record.getTableName();
        var recordFields = record.getFields();
        var newRecord = new GlideRecord(recordTable);
        newRecord.initialize();
        for (var i = 0; i < recordFields.size(); i++) {
            recordElement = recordFields.get(i);
            if (recordElement.getName() != 'sys_id' && recordElement.getName() != 'number') {
                recordElementName = recordElement.getName();
                newRecord.setValue(recordElementName, record.getValue(recordElementName));
            }
        }
        newRecord.insert();
        return newRecord;
    }
}
type: 'attachmentUtils'
};

좋은 웹페이지 즐겨찾기