Issue with Duplicate knowledge article numbers while importing XML

lakshmi2
Kilo Contributor

Hi Team,

We are having issue with duplicate knowledge articles creation when we imported new articles.

tried with below business rule (insert) and it is not working. Could someone help me to complete it.

 

var curNum = current.number + '';
var newNum;

if(curNum) {

var recordClass = current.getRecordClassName();
var know_num = new GlideRecord(recordClass);
know_num.addQuery('number', curNum);
know_num.query();
while(know_num.get('number', curNum)) {
newNum = getNextObjNumberPadded();
}
if(newNum){
gs.addInfoMessage("The number " + current.number + " was already used by another article " +
". The number has been changed to " + newNum);
current.number = newNum;

}
}

 

4 REPLIES 4

Troy Riblett
Giga Guru

Importing from XML does not run business rules, so unfortunately there is nothing that we can do to assist with creating a business rule that will solve that. You will have to look into other options.

One of those options is to create a fix script (or a background script) to run after you do an XML import. It would look something like

var knowGR = new GlideRecord("kb_knowledge");
knowGR.orderBy("sys_created_on");
knowGR.query();

while(knowGR.next()){
	var curNum = knowGR.getValue("number");
	var dupKnowGR = new GlideRecord("kb_knowledge");
	dupKnowGR.addQuery("number", curNum);
	dupKnowGR.addQuery("sys_id", "!=", knowGR.getUniqueValue());
	dupKnowGR.query();
	
	while(dupKnowGR.next) {
		newNum = getNextObjNumberPadded();
		dupKnowGR.number = newNum;
		dupKnowGR.update();
		gs.info("The number " + curNum + " was already used by another article " +
	". The number has been changed to " + newNum);
	}
}

@lakshmi Did this solution work for you?

SN developer1
Kilo Contributor

Below error is occuring

Evaluator: org.mozilla.javascript.EcmaError: Cannot read property "sys_meta" from null
   Caused by error in Business Rule: 'getNextObjNumberPadded' at line 9

      6: 						return null;
      7: 				}
      8: 
==>   9: 				var nm = new NumberManager(current.sys_meta.name);
     10: 				return nm.getNextObjNumberPadded();
     11: 			}
     12: 

Evaluator: org.mozilla.javascript.EcmaError: Cannot read property "sys_meta" from null Caused by error in script at line 13 10: dupKnowGR.query(); 11: 12: while(dupKnowGR.next) { ==> 13: var newNum = getNextObjNumberPadded(); 14: dupKnowGR.number = newNum; 15: dupKnowGR.update(); 16: gs.info("The number " + curNum + " was already used by another article " +

chetu7845
Kilo Contributor

Try this will work

 

var knowGR = new GlideRecord('kb_knowledge');
knowGR.orderBy('sys_created_on');
knowGR.query();
while(knowGR.next()){
var curNum = knowGR.getValue('number');
var dupKnowGR = new GlideRecord('kb_knowledge');
dupKnowGR.addQuery('number', curNum);
dupKnowGR.addQuery('sys_id', '!=', knowGR.getUniqueValue());
dupKnowGR.query();

while(dupKnowGR.next) {
var nm = new NumberManager('kb_knowledge');
var newNum = nm.getNextObjNumberPadded();
dupKnowGR.number = newNum;
dupKnowGR.update();
gs.info('The number ' + curNum + ' was already used by another article ' +
'. The number has been changed to ' + newNum);
}
}