Send API Notification

The requirement includes sending Pending Donation details to the API portal while changing the status of Pending Donation record to “Converted”. The request body contains the following details.

Status, donationId, donationAmount, referenceId, referenceNo, employeeId.

Also, the request body that sends to API portal when the status of Pending Donation record is changed to “Cancelled” contains the following data. Status, donationId, referenceId, transactionDate, employeeId.

/**
 * @NApiVersion 2.1
 * @NScriptType UserEventScript
 */
define(['N/https', 'N/search', 'N/record', 'N/runtime', '../Libraries/jcs_jstn1807_cm_util.js', '../Libraries/jcs_jstn1807_cm_library.js'],
    /**
 * @param{https} https
 * @param{search} search
 *  @param{record} record
 */
    (https, search, record, runtime, jcs_jstn_cm_util, jcs_jstn_cm_library) => {


        "use strict";
        const STATUS_CANCELLED = "D";
        const PENDING_DONATION = "customsale_jcs_pendingdonation";
        const STATUS_CONVERTED = "B";


        const requestBody = (internalId, statusChanges, userDetails) => {
            try {
                let savedSearch = '';
                if (statusChanges === "converted") {
                    savedSearch = search.load({
                        id: 'customsearch_jcs_pending_don_convrt'
                    });
                } else if (statusChanges === "cancelled") {
                    savedSearch = search.load({
                        id: 'customsearch_jcs_pending_don_cancelled'
                    });
                }
                savedSearch.filters.push(search.createFilter({
                    name: 'internalid',
                    operator: search.Operator.IS,
                    values: internalId
                }));
                var searchResultCount = savedSearch.runPaged().count;
                let requestBodyDetails = jcs_jstn_cm_util.dataSets.iterateSavedSearch({
                    searchObj: savedSearch,
                    columns: jcs_jstn_cm_util.dataSets.fetchSavedSearchColumn(savedSearch, 'label'),
                    PAGE_INDEX: null,
                    PAGE_SIZE: 100,
                });
                requestBodyDetails[0].employeeId = userDetails
                return requestBodyDetails


            } catch (err) {
                log.error("error@requestBody", err);
                return [];
            }
        }

        /**
         * Defines the function definition that is executed after record is submitted.
         * @param {Object} scriptContext
         * @param {Record} scriptContext.newRecord - New record
         * @param {Record} scriptContext.oldRecord - Old record
         * @param {string} scriptContext.type - Trigger type; use values from the context.UserEventType enum
         * @since 2015.2
         */
        const afterSubmit = (scriptContext) => {
            try {
                let internalId = scriptContext.newRecord.id;
                let recordType = scriptContext.newRecord.type;
                if (scriptContext.type === scriptContext.UserEventType.EDIT) {
                    let newStatus = scriptContext.newRecord.getValue({ fieldId: 'transtatus' }); // new status of the record
                    let oldStatus = scriptContext.oldRecord.getValue({ fieldId: 'transtatus' }); // old status of the record
                    let linkedIncomingFund = scriptContext.newRecord.getValue({ fieldId: 'custbody_jcs_linkedif' }); // old status of the record
                    let newUser = scriptContext.newRecord.getValue({ fieldId: 'custbody_jcs_current_user' }); // new status of the record
                    let userDetails = {}
                    userDetails.value = newUser;
                    userDetails.text = scriptContext.newRecord.getText({ fieldId: 'custbody_jcs_current_user' });
                    if ((oldStatus !== newStatus) && (jcs_jstn_cm_util.checkForParameter(newStatus))) {
                        let updatedRequestBodyDetails = ''
                        if ((newStatus === STATUS_CANCELLED) && (recordType === PENDING_DONATION)) {
                            updatedRequestBodyDetails = requestBody(internalId, "cancelled", userDetails); // Request Body when the pending contribution converted.
                        } else if ((newStatus === STATUS_CONVERTED) && (recordType === PENDING_DONATION) && jcs_jstn_cm_util.checkForParameter(linkedIncomingFund)) {
                            updatedRequestBodyDetails = requestBody(internalId, "converted", userDetails); // Request Body when the pending contribution converted.
                        }
                        if(jcs_jstn_cm_util.checkForParameter(updatedRequestBodyDetails)){
                            let environmentIs = runtime.envType;
                            let response = jcs_jstn_cm_library.postRequest(updatedRequestBodyDetails, jcs_jstn_cm_library.DONATION_DETAILS.ENDPOINT.SANDBOX)  //jcs_jstn_cm_library.DONATION_DETAILS.environmentIs;
                        }
                    }
                }
            } catch (err) {
                log.error("error@afterSubmit", err);
            }
        }
        return { afterSubmit }
    });

Leave a comment

Your email address will not be published. Required fields are marked *