ServiceNow created 2 records via inbound actions with same record number but different sys_ids

Community Alums
Not applicable

I created a inbound actions which should create new record in ServiceNow based on certain conditions. The " When to Run " type is selected as "None". So use case is like if someone sends a reply/fwd email as well to SN , then also it should create new record.

Issue is when I'm sending a new email,  its working fine. But If I'm sending reply on the same email its creating new record with different sys_id however the record number remains the same. So as per my customizations it should create new record always (If Record number i not mentioned in email subject line) with unique record number.

To be noted there is a time gap between both the emails received in SNOW.

Example : For both cases CASE000xxxx11 is created with 2 different sys_ids.

 

Need inputs if there is gap at my end or need to take help of ServiceNow.

11 REPLIES 11

Mike_R
Kilo Patron
Kilo Patron

Are you using both a field action and script? If so that could be causing the duplicates. See https://support.servicenow.com/kb?id=kb_article_view&sysparm_article=KB0825579

Community Alums
Not applicable

Hi Mike, 

No I'm using scripts only.

Can you please post your script here

Community Alums
Not applicable

(function runAction( /*GlideRecord*/ current, /*GlideRecord*/ event, /*EmailWrapper*/ email, /*ScopedEmailLogger*/ logger, /*EmailClassifier*/ classifier) {
//Retrieves user account.
try {
var contactDetails;
// Get Assignmentment group based on support mailbox
var groupInfo = this.getAssignmentGroup(email.direct);
var assignmentGroupObj = new GlideRecord('sys_user_group');
assignmentGroupObj.get('name', groupInfo);

//Check for valid user details
if (sys_email.user_id) {
contactDetails = this.checkUser(sys_email.user_id.email.toString(), groupInfo);
if (contactDetails) {
var userAccount = contactDetails.account;
var contactSysId = contactDetails.sysId;
}
}

//recognised user
if (contactDetails && sys_email.user_id) {
current.account = userAccount;
current.contact = contactSysId;
current.state = 10;
current.description = "Email From: " + sys_email.user_id.email + "\n\n" + "Email Body: " + sys_email.body_text;
current.comments = "Email From: " + sys_email.user_id.email + "\n\n" + "Email Body: " + sys_email.body_text;
//unrecognised valid user
} else if (sys_email.user_id) {
current.state = 1;
current.comments = "Email From: " + sys_email.user_id.email + "\n\n" + "Email Body: " + sys_email.body_text;
current.description = "Email From: " + sys_email.user_id.email + "\n\n" + "Email Body: " + sys_email.body_text;
} else {
//unrecognised user
current.state = 1;
current.comments = "Email From: " + sys_email.user + "\n\n" + "Email Body: " + sys_email.body_text;
current.description = "Email From: " + sys_email.user + "\n\n" + "Email Body: " + sys_email.body_text;
}
current.assignment_group = assignmentGroupObj.sys_id;
current.short_description = sys_email.subject;
current.priority = 3;
current.category = 1;
current.contact_type = 'email';
current.correlation_display = "xxx:" + sys_email.direct;
current.insert();
} catch (error) {
gs.error("email: " + error);
}

})(current, event, email, logger, classifier);

function checkUser(email, assignmentGroup) {
var result = '';
var contactObj = new GlideRecord('customer_contact');
contactObj.addQuery('email', email);
contactObj.query();
while (contactObj.next()) {
var contactAccount = contactObj.account.sys_id.toString();
var osp = new global.xxxOSPUtils().getOSPNameFromCustomer(contactAccount);
if (osp == assignmentGroup) {
var contactDetails = {};
contactDetails.account = contactAccount;
contactDetails.sysId = contactObj.sys_id.toString();
result = contactDetails;
break;
}
}
return result;
}

function getAssignmentGroup(mailBoxId) {
var mappingObj = new GlideRecord('x_teeag_payload_pr_integration_column_data_mapping');
mappingObj.addQuery('integration_name', 'xxxx Email');
mappingObj.addQuery('source', 'xxxx');
mappingObj.addQuery('source_value', mailBoxId);
mappingObj.query();
if (mappingObj.next()) {
return mappingObj.target_value.toString();
}
}