CSVデータをインシデントのフィールドに自動でセットする方法

Ereshkigal
Tera Contributor

コミュニティの皆様

いつもお世話になっております。

 

私は、添付ファイルに特定のCSV(状態=差分)が登録されると、インシデントのレコードを起票し、
short_descriptionにCSVデータの項目をセットするという要件があります。

 

Business Ruleを作成し動作を確認したところ、ログにエラーが表示され、処理が失敗していました。

まだスクリプトやCSVについて知見が乏しく、

エラーの内容もよくわかりませんので、どこが問題かご教示頂きたいです。

Business Rule:
・Table:sys_attachment

・When:before

・Insert:true

・Script:

(function executeRule(current, previous /*null when async*/ ) {
	var grAtt = new GlideRecord("sys_attachment");
	grAtt.addQuery("file_name", "ENDSWITH", ".csv");
	grAtt.query();
	
	while(grAtt.next()){
		getCsv(grAtt);
	}
    function getCsv(grAtt) {
        //CSV読み取り
        var gsAttachment = new GlideSysAttachment();
        var csvLine;
        var delimiter = ','; // 区切り文字
        var quoteCharacter = '"'; // csv file の項目
        var csvParser = new sn_impex.CSVParser();

        var record = csvParser.parseLineToArray(csvLine, delimiter, quoteCharacter);
        var rec = new GlideRecord("incident");
        if (record[0] == "差分") {
            rec.short_description = record[1];
            rec.insert();
            gs.log("【UAL確認】レコード作成成功");
        }
        gs.log("【UAL確認】レコード作成失敗");
    }

})(current, previous);

ログに表示されたエラー内容:

JavaScript evaluation error on:
(function executeRule(current, previous /*null when async*/ ) {
var grAtt = new GlideRecord("sys_attachment");
grAtt.addQuery("file_name", "ENDSWITH", ".csv");
grAtt.query();

while(grAtt.next()){
getCsv(grAtt);
}
function getCsv(grAtt) {
//CSV読み取り
var gsAttachment = new GlideSysAttachment();
var csvLine;
var delimiter = ','; // 区切り文字
var quoteCharacter = '"'; // csv file の項目
var csvParser = new sn_impex.CSVParser();

var record = csvParser.parseLineToArray(csvLine, delimiter, quoteCharacter);
var rec = new GlideRecord("incident");
if (record[0] == "差分") {
rec.short_description = record[1];
rec.insert();
gs.log("【UAL確認】レコード作成成功");
}
gs.log("【UAL確認】レコード作成失敗");
}

})(current, previous);
Root cause of JavaScriptException: com.glide.csv.parser.CSVParserException
: com.glide.csv.parser.CSVParserException: CSVParser: Empty CSV record: com.glide.script.fencing.ScopedCSVParser.nilCSVRecordCheck(ScopedCSVParser.java:49)
com.glide.script.fencing.ScopedCSVParser.jsFunction_parseLineToArray(ScopedCSVParser.java:36)
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.base/java.lang.reflect.Method.invoke(Method.java:566)
org.mozilla.javascript.MemberBox.invoke(MemberBox.java:138)
org.mozilla.javascript.FunctionObject.doInvoke(FunctionObject.java:670)
org.mozilla.javascript.FunctionObject.call(FunctionObject.java:614)
org.mozilla.javascript.ScriptRuntime.doCall(ScriptRuntime.java:2609)
org.mozilla.javascript.Interpreter.interpretLoop(Interpreter.java:1518)
org.mozilla.javascript.Interpreter.interpret(Interpreter.java:830)
org.mozilla.javascript.InterpretedFunction.lambda$call$0(InterpretedFunction.java:152)
com.glide.caller.gen.sys_script_b10a7e142f6ed1109c8bd8ddf699b692_script.call(Unknown Source)
com.glide.script.ScriptCaller.call(ScriptCaller.java:18)
org.mozilla.javascript.InterpretedFunction.call(InterpretedFunction.java:151)
org.mozilla.javascript.ScriptRuntime.doCall2(ScriptRuntime.java:2678)
org.mozilla.javascript.ScriptRuntime.doCall(ScriptRuntime.java:2617)
org.mozilla.javascript.Interpreter.interpretLoop(Interpreter.java:1518)
org.mozilla.javascript.Interpreter.interpret(Interpreter.java:830)
org.mozilla.javascript.InterpretedFunction.lambda$call$0(InterpretedFunction.java:152)
com.glide.caller.gen.sys_script_b10a7e142f6ed1109c8bd8ddf699b692_script.call(Unknown Source)
com.glide.script.ScriptCaller.call(ScriptCaller.java:18)
org.mozilla.javascript.InterpretedFunction.call(InterpretedFunction.java:151)
org.mozilla.javascript.ScriptRuntime.doCall2(ScriptRuntime.java:2678)
org.mozilla.javascript.ScriptRuntime.doCall(ScriptRuntime.java:2617)
org.mozilla.javascript.Interpreter.interpretLoop(Interpreter.java:1518)
org.mozilla.javascript.Interpreter.interpret(Interpreter.java:830)
org.mozilla.javascript.InterpretedFunction.lambda$call$0(InterpretedFunction.java:152)
com.glide.caller.gen.sys_script_b10a7e142f6ed1109c8bd8ddf699b692_script.call(Unknown Source)
com.glide.script.ScriptCaller.call(ScriptCaller.java:18)
org.mozilla.javascript.InterpretedFunction.call(InterpretedFunction.java:151)
org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:563)
org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3459)
org.mozilla.javascript.InterpretedFunction.exec(InterpretedFunction.java:164)
com.glide.script.ScriptEvaluator.execute(ScriptEvaluator.java:354)
com.glide.script.ScriptEvaluator.evaluateString(ScriptEvaluator.java:177)
com.glide.script.ScriptEvaluator.evaluateString(ScriptEvaluator.java:111)
com.glide.script.fencing.GlideScopedEvaluator.evaluateScript(GlideScopedEvaluator.java:322)
com.glide.script.fencing.GlideScopedEvaluator.evaluateScript(GlideScopedEvaluator.java:226)
com.glide.script.fencing.GlideScopedEvaluator.evaluateScript(GlideScopedEvaluator.java:213)
com.glide.script.BusinessRule.runScript(BusinessRule.java:443)
com.glide.script.BusinessRule.runSyncBusinessRule(BusinessRule.java:325)
com.glide.script.BusinessRule.runBusinessRule(BusinessRule.java:218)
com.glide.script.BusinessRule.run(BusinessRule.java:194)
com.glide.script.GlideRecordBusinessRules.run(GlideRecordBusinessRules.java:255)
com.glide.script.GlideRecord.runScripts(GlideRecord.java:1422)
com.glide.script.GlideRecord.runScriptsAndEngines(GlideRecord.java:1356)
com.glide.script.GlideRecord.insert(GlideRecord.java:5032)
com.glide.script.GlideRecord.insert(GlideRecord.java:4962)
com.glide.ui.SysAttachmentOutputStream.close(SysAttachmentOutputStream.java:268)
com.glide.ui.SysAttachment.streamData(SysAttachment.java:1920)
com.glide.ui.SysAttachment.streamData(SysAttachment.java:1834)
com.glide.ui.SysAttachment.write(SysAttachment.java:1691)
com.glide.ui.SysAttachment.write(SysAttachment.java:1658)
com.glide.ui.SysAttachment.write(SysAttachment.java:1654)
com.glide.ui.SysAttachment.write(SysAttachment.java:1649)
com.glide.ui.SysAttachment.write(SysAttachment.java:1423)
com.glide.ui.SysAttachment.writeParts(SysAttachment.java:457)
com.glide.ui.SysAttachment.processRequest(SysAttachment.java:387)
com.glide.processors.AttachmentProcessor.process(AttachmentProcessor.java:93)
com.glide.processors.AProcessor.runProcessor(AProcessor.java:612)
com.glide.processors.AProcessor.processTransaction(AProcessor.java:274)
com.glide.processors.ProcessorRegistry.process0(ProcessorRegistry.java:184)
com.glide.processors.ProcessorRegistry.process(ProcessorRegistry.java:172)
com.glide.ui.GlideServletTransaction.process(GlideServletTransaction.java:46)
com.glide.sys.Transaction.run(Transaction.java:2468)
com.glide.ui.HTTPTransaction.run(HTTPTransaction.java:27)
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
java.base/java.lang.Thread.run(Thread.java:829)
com.glide.ui.ServletErrorListener	

2022-10-11 17:40:02
Error	com.glide.csv.parser.CSVParserException: CSVParser: Empty CSV record: org.mozilla.javascript.JavaScriptException: com.glide.csv.parser.CSVParserException: CSVParser: Empty CSV record: org.mozilla.javascript.Context.makeJavaScriptException(Context.java:1952)
org.mozilla.javascript.Context.throwAsScriptRuntimeEx(Context.java:1938)
org.mozilla.javascript.MemberBox.invoke(MemberBox.java:143)
org.mozilla.javascript.FunctionObject.doInvoke(FunctionObject.java:670)
org.mozilla.javascript.FunctionObject.call(FunctionObject.java:614)
org.mozilla.javascript.ScriptRuntime.doCall(ScriptRuntime.java:2609)
org.mozilla.javascript.Interpreter.interpretLoop(Interpreter.java:1518)
org.mozilla.javascript.Interpreter.interpret(Interpreter.java:830)
org.mozilla.javascript.InterpretedFunction.lambda$call$0(InterpretedFunction.java:152)
com.glide.caller.gen.sys_script_b10a7e142f6ed1109c8bd8ddf699b692_script.call(Unknown Source)
com.glide.script.ScriptCaller.call(ScriptCaller.java:18)
org.mozilla.javascript.InterpretedFunction.call(InterpretedFunction.java:151)
org.mozilla.javascript.ScriptRuntime.doCall2(ScriptRuntime.java:2678)
org.mozilla.javascript.ScriptRuntime.doCall(ScriptRuntime.java:2617)
org.mozilla.javascript.Interpreter.interpretLoop(Interpreter.java:1518)
org.mozilla.javascript.Interpreter.interpret(Interpreter.java:830)
org.mozilla.javascript.InterpretedFunction.lambda$call$0(InterpretedFunction.java:152)
com.glide.caller.gen.sys_script_b10a7e142f6ed1109c8bd8ddf699b692_script.call(Unknown Source)
com.glide.script.ScriptCaller.call(ScriptCaller.java:18)
org.mozilla.javascript.InterpretedFunction.call(InterpretedFunction.java:151)
org.mozilla.javascript.ScriptRuntime.doCall2(ScriptRuntime.java:2678)
org.mozilla.javascript.ScriptRuntime.doCall(ScriptRuntime.java:2617)
org.mozilla.javascript.Interpreter.interpretLoop(Interpreter.java:1518)
org.mozilla.javascript.Interpreter.interpret(Interpreter.java:830)
org.mozilla.javascript.InterpretedFunction.lambda$call$0(InterpretedFunction.java:152)
com.glide.caller.gen.sys_script_b10a7e142f6ed1109c8bd8ddf699b692_script.call(Unknown Source)
com.glide.script.ScriptCaller.call(ScriptCaller.java:18)
org.mozilla.javascript.InterpretedFunction.call(InterpretedFunction.java:151)
org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:563)
org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3459)
org.mozilla.javascript.InterpretedFunction.exec(InterpretedFunction.java:164)
com.glide.script.ScriptEvaluator.execute(ScriptEvaluator.java:354)
com.glide.script.ScriptEvaluator.evaluateString(ScriptEvaluator.java:177)
com.glide.script.ScriptEvaluator.evaluateString(ScriptEvaluator.java:111)
com.glide.script.fencing.GlideScopedEvaluator.evaluateScript(GlideScopedEvaluator.java:322)
com.glide.script.fencing.GlideScopedEvaluator.evaluateScript(GlideScopedEvaluator.java:226)
com.glide.script.fencing.GlideScopedEvaluator.evaluateScript(GlideScopedEvaluator.java:213)
com.glide.script.BusinessRule.runScript(BusinessRule.java:443)
com.glide.script.BusinessRule.runSyncBusinessRule(BusinessRule.java:325)
com.glide.script.BusinessRule.runBusinessRule(BusinessRule.java:218)
com.glide.script.BusinessRule.run(BusinessRule.java:194)
com.glide.script.GlideRecordBusinessRules.run(GlideRecordBusinessRules.java:255)
com.glide.script.GlideRecord.runScripts(GlideRecord.java:1422)
com.glide.script.GlideRecord.runScriptsAndEngines(GlideRecord.java:1356)
com.glide.script.GlideRecord.insert(GlideRecord.java:5032)
com.glide.script.GlideRecord.insert(GlideRecord.java:4962)
com.glide.ui.SysAttachmentOutputStream.close(SysAttachmentOutputStream.java:268)
com.glide.ui.SysAttachment.streamData(SysAttachment.java:1920)
com.glide.ui.SysAttachment.streamData(SysAttachment.java:1834)
com.glide.ui.SysAttachment.write(SysAttachment.java:1691)
com.glide.ui.SysAttachment.write(SysAttachment.java:1658)
com.glide.ui.SysAttachment.write(SysAttachment.java:1654)
com.glide.ui.SysAttachment.write(SysAttachment.java:1649)
com.glide.ui.SysAttachment.write(SysAttachment.java:1423)
com.glide.ui.SysAttachment.writeParts(SysAttachment.java:457)
com.glide.ui.SysAttachment.processRequest(SysAttachment.java:387)
com.glide.processors.AttachmentProcessor.process(AttachmentProcessor.java:93)
com.glide.processors.AProcessor.runProcessor(AProcessor.java:612)
com.glide.processors.AProcessor.processTransaction(AProcessor.java:274)
com.glide.processors.ProcessorRegistry.process0(ProcessorRegistry.java:184)
com.glide.processors.ProcessorRegistry.process(ProcessorRegistry.java:172)
com.glide.ui.GlideServletTransaction.process(GlideServletTransaction.java:46)
com.glide.sys.Transaction.run(Transaction.java:2468)
com.glide.ui.HTTPTransaction.run(HTTPTransaction.java:27)
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
java.base/java.lang.Thread.run(Thread.java:829)

CSV:

Ereshkigal_0-1665478987787.png

 

2 REPLIES 2

Anil Lande
Kilo Patron

Hi,

Can you please share what data your have in CSV? (Any sample data will work)

 

Please appreciate the efforts of community contributors by marking appropriate response as correct answer and helpful, this may help other community users to follow correct solution in future.
Thanks
Anil Lande

Joel Dias
Kilo Sage

Hello,

 

It seems your csvLine is passed in empty. You need to read a line from the file before parsing.

I think GlideTextReader.readLine would do the trick.

https://developer.servicenow.com/dev.do#!/reference/api/tokyo/server/no-namespace/c_GlideTextReaderS...

Then you would need to loop on the lines. The code snippet for readLine shows exactly that.