When payment card id is used in order, CyberSource initiates tokenization. At that time the script deployed in Payment card token record creation will find the Auto-Ship record by matching the mask value and the credit card look field key set on Auto-Ship record and updates the payment card Token field in line record/Auto-Ship
/**
* @NApiVersion 2.1
* @NScriptType UserEventScript
* @NModuleScope SameAccount
*/
/*************************************************************************************************************************/
define( [ 'N/record', 'N/runtime', 'N/search' ],
function ( record, runtime, search )
{
/* CUSTOM RECORD IDS */
const _AUTOSHIP_LINE_RECORD = "customrecord_vv_autoship_record";
const _AUTOSHIP_PYMT_CARD_TOKEN = "custrecord_vv_payment_card_token";
const _AUTOSHIP_CC_PYMT_TOKEN_LOOKUP = "custrecord_vv_autoship_selected_card";
const _AUTOSHIP_CUSTOMER = "custrecord_vv_autoship_customer_src";
/* CUSTOM RECORD IDS */
function afterSubmit ( scriptContext )
{
try
{
if ( scriptContext.type == scriptContext.UserEventType.CREATE)
{
var cardNewRec = scriptContext.newRecord;
var cardNewRecID = cardNewRec.id;
var entityId = cardNewRec.getValue( 'entity' )
var strCardDetails = cardNewRec.getValue( 'mask' )
log.debug( "strCardDetails", strCardDetails )
if ( entityId && strCardDetails )
{
var customrecord_vv_autoship_recordSearchObj = search.create( {
type: _AUTOSHIP_LINE_RECORD,
filters:
[
[ _AUTOSHIP_CC_PYMT_TOKEN_LOOKUP, "is", strCardDetails ],
"AND",
[ _AUTOSHIP_PYMT_CARD_TOKEN, "anyof", "@NONE@" ],
"AND",
[ _AUTOSHIP_CUSTOMER, "anyof", entityId ]
],
columns:
[
search.createColumn( { name: "internalid", label: "Internal ID" } )
]
} );
var searchResultCount = customrecord_vv_autoship_recordSearchObj.runPaged().count;
log.debug( "customrecord_vv_autoship_recordSearchObj result count", searchResultCount );
var lineRecId;
customrecord_vv_autoship_recordSearchObj.run().each( function ( result )
{
lineRecId = result.getValue( customrecord_vv_autoship_recordSearchObj.columns[ 0 ] );
if ( lineRecId )
{
log.debug( "lineRecId", lineRecId )
record.submitFields( {
type: _AUTOSHIP_LINE_RECORD,
id: lineRecId,
values: {
"custrecord_vv_payment_card_token": cardNewRecID
},
options: {
enablesourcing: true,
ignoreMandatoryFields: true
}
} );
}
return true;
} );
}
}
} catch ( e )
{
log.debug( "error@afterSubmit", e );
log.error( "error@afterSubmit", e );
}
}
return {
afterSubmit: afterSubmit
};
} );