Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

Import set transform map should not overwrite target field if source field value is '##' (in example)

Anders Pr_stega
Tera Expert

Hi

I have an import process that uses an attached Excel-file as source. I can then replace that Excel-file to implement changes on demand. As of now "Copy empty fields" is enabled on the transform map, which is fine, but I now need to provide a means to bypass "copy empty fields"  in some cases.

I had the idea that I could simply replace the empty field with a fixed code (ie '##') and then change the field map to a scripted field and do the following:

answer = (function transformEntry(source) {
// Add your code here
if(source.u_asset_tag == '##'){
ignore = true;
}
else{
return source.u_asset_tag;
}
})(source);

 To my surprise this does not prevent the field from an update, as itøs if target.asset_tag is just passed null or an empty string resulting in the value "Undefined".

Some thoughts: How is the "target" dictionary  affected for a record when "Copy empty fields" is NOT enabled. Is the attribute removed from the target table behind the scenes, to prevent the field from being overwritten with a blanc value?

1 REPLY 1

Anders Pr_stega
Tera Expert

Update:

I've fiddled around with this new approach, that could have some potential:

(function runTransformScript(source, map, log, target /*undefined onStart*/ ) {	
	if(action == "update") {
		for (var property in source){
			var targetProperty = property.replace('u_','');
			if (source[property] == '##'){
				gs.log('DEBUG Source property ' + property + ' contains ' + source[property]);
				gs.log('DEBUG Target property ' + targetProperty + ' contains ' + target[targetProperty]);
				delete source[property];
				//_.omit(source,property);
			}
		}
	}
})(source, map, log, target);

The logs in the center of the code works as expected and only when the input has the ## in it.

The line "delete source[property];" does not work unfortunately. I wonder if the source input variable is read-only (as per the documentation the map input variable is read-only).