Getting an error null value is getting passed

Prasun Sarkar7
Tera Expert

There is a Ui button on a ootb table sn_shop_purchase_requisition where there is a Ui button and a code is written here. 

PrasunSarkar7_0-1793113385579.png

I want to perform the same thing in background script but I am getting an error 

PrasunSarkar7_1-1793113461368.pngPrasunSarkar7_2-1793113465079.png

this is the script include code OOTB:


var UpdatePurchaseOrder = Class.create();

/* eslint-disable vars-on-top, max-len, no-inline-comments */
UpdatePurchaseOrder.prototype = {
initialize: function(requisition) {
if (requisition instanceof GlideRecord) {
this._requisitionGr = requisition;
this._requisitionId = requisition.getUniqueValue();
} else {
this._requisitionId = requisition;
var req = new PurchaseRequisition().getById(requisition);
this._requisitionGr = req;
}
},

/**
* Update:
* - perform requisition validation
* - if successful then invoke order updation
* @returns {GlideRecord}
*/
update: function() {
var validReq = true;
validReq = new PurchaseRequisitionUtil(this._requisitionId).validateRequisition();
if (validReq) {
var order = this.updatePurchaseOrder();
return (gs.nil(order) ? null : order.getValue("sys_id"));
}

return null;
},

/**
* Revert:
* - revert back the status of purchase order
* when revised requisition's state is either closed cancelled or closed rejected
*/
revert: function() {
var isSuccess = false;
var requisitionGr = new PurchaseRequisition().getById(this._requisitionId);
if (!gs.nil(requisitionGr[PurchaseRequisition.PURCHASE_ORDER])) {
new PurchaseOrderUtil(requisitionGr[PurchaseRequisition.PURCHASE_ORDER]).refreshOrderState();
isSuccess = true;
}
return isSuccess;
},

/**
* UpdatePurchaseOrder:
* - update purchase order from revision requisition data.
* - shows on screen message to user for success or failure
* - sends notification to business owner for success
* @returns {GlideRecord}
*/
updatePurchaseOrder: function() {
var success = true; // Success flag

// Get original order
var currentOrderGr = new PurchaseRequisitionUtil(this._requisitionId).getBackingOrder();
if (!gs.nil(currentOrderGr) && currentOrderGr.isValidRecord()) {

var historyOrderGr = this._createOrderHistory(currentOrderGr);
if (gs.nil(historyOrderGr) || !historyOrderGr.isValidRecord()) {
success = false;
}

// Update purchase order from requisition data
if (success) {
success = this._updatePOLines(currentOrderGr.getUniqueValue());
if (success) {
currentOrderGr = this._updatePO();
}
}
} else
success = false;


if (success) { // No error, do post success processing
this._handleOrderSuccess(currentOrderGr);
} else { // Order creation failed
this._handleOrderFailure(currentOrderGr);
}
return currentOrderGr;
},

/**
* _createOrderHistory:
* @Param {requisitionGr}
* @returns {Object}
* @private
*/
_createOrderHistory: function(currentPOGr) {
var orderPayload = {};

var currentOrderId = currentPOGr.getValue("sys_id");
var backingRequisitionId = currentPOGr.getValue(PurchaseOrder.PURCHASE_REQUISITION);

orderPayload[PurchaseOrder.NUMBER] = currentPOGr.getValue(PurchaseOrder.NUMBER);
orderPayload[PurchaseOrder.BUSINESS_OWNER] = currentPOGr.getValue(PurchaseOrder.BUSINESS_OWNER);
orderPayload[PurchaseOrder.COST_CENTER] = currentPOGr.getValue(PurchaseOrder.COST_CENTER);
orderPayload[PurchaseOrder.PURCHASE_REQUISITION] = backingRequisitionId;
orderPayload[PurchaseOrder.TOTAL_AMOUNT] =
currentPOGr.getElement(PurchaseOrder.TOTAL_AMOUNT + ".currency") +
";" +
currentPOGr.getElement(PurchaseOrder.TOTAL_AMOUNT + ".amount");
orderPayload[PurchaseOrder.SUPPLIER] = currentPOGr.getValue(PurchaseOrder.SUPPLIER);
orderPayload[PurchaseOrder.STATUS] = PurchaseOrder.STATE_CLOSED_CANCELED;
orderPayload[PurchaseOrder.ERP_NUMBER] = currentPOGr.getValue(PurchaseOrder.ERP_NUMBER);
orderPayload[PurchaseOrder.LEGAL_ENTITY] = currentPOGr.getValue(PurchaseOrder.LEGAL_ENTITY);
orderPayload[PurchaseOrder.ERP_SOURCE] = currentPOGr.getValue(PurchaseOrder.ERP_SOURCE);
orderPayload[PurchaseOrder.CREATED] = currentPOGr.getValue(PurchaseOrder.CREATED);
orderPayload[PurchaseOrder.VERSION] = currentPOGr.getValue(PurchaseOrder.VERSION);
orderPayload[PurchaseOrder.MINIMUM_SPEND] = currentPOGr.getElement(PurchaseOrder.MINIMUM_SPEND + ".currency") +
";" +
currentPOGr.getElement(PurchaseOrder.MINIMUM_SPEND + ".amount");
orderPayload[PurchaseOrder.DISCOUNT_PERCENTAGE] = currentPOGr.getValue(PurchaseOrder.DISCOUNT_PERCENTAGE);
orderPayload[PurchaseOrder.PURCHASE_ORDER_TYPE] = currentPOGr.getValue(PurchaseOrder.PURCHASE_ORDER_TYPE);
orderPayload[PurchaseOrder.RELEASED] = currentPOGr.getValue(PurchaseOrder.RELEASED);
orderPayload[PurchaseOrder.DISPLAY_NAME] = currentPOGr.getValue(PurchaseOrder.DISPLAY_NAME);
orderPayload[PurchaseOrder.ESTIMATED_TAX] = currentPOGr.getElement(PurchaseOrder.ESTIMATED_TAX + ".currency") +
";" +
currentPOGr.getElement(PurchaseOrder.ESTIMATED_TAX + ".amount");
orderPayload[PurchaseOrder.ESTIMATED_SHIPPING] = currentPOGr.getElement(PurchaseOrder.ESTIMATED_SHIPPING + ".currency") +
";" +
currentPOGr.getElement(PurchaseOrder.ESTIMATED_SHIPPING + ".amount");
orderPayload[PurchaseOrder.PURCHASING_ENTITY] = currentPOGr.getValue(PurchaseOrder.PURCHASING_ENTITY);
orderPayload[PurchaseOrder.PAYMENT_TERM] = currentPOGr.getValue(PurchaseOrder.PAYMENT_TERM);
orderPayload[PurchaseOrder.REMAINING_BALANCE] = currentPOGr.getValue(PurchaseOrder.REMAINING_BALANCE);
orderPayload[PurchaseOrder.SALES_ORDER_NUMBER] = currentPOGr.getValue(PurchaseOrder.SALES_ORDER_NUMBER);

var historyOrderGr = new PurchaseOrderHistory().create(orderPayload);
var orderHistoryId = historyOrderGr.getUniqueValue();

// Loop through and create order line history
var encodedQuery = PurchaseOrderLine.PURCHASE_ORDER + "=" + currentOrderId;
var orderLineGr = new PurchaseOrderLine().get(encodedQuery);

while (orderLineGr.next())
this._createOrderLineHistory(orderHistoryId, orderLineGr);

return historyOrderGr;
},

/**
* _createOrderLineHistory:
* @Param {requisitionGr}
* @returns {Object}
* @private
*/
_createOrderLineHistory: function(orderHistoryId, orderLineGr) {
var orderLinePayload = {};

orderLinePayload[PurchaseOrderLine.PURCHASE_ORDER] = orderHistoryId;
orderLinePayload[PurchaseOrderLine.BUSINESS_OWNER] = orderLineGr.getValue(PurchaseOrderLine.BUSINESS_OWNER);
orderLinePayload[PurchaseOrderLine.NUMBER] = orderLineGr.getValue(PurchaseOrderLine.NUMBER);
orderLinePayload[PurchaseOrderLine.PRODUCT_TYPE] = orderLineGr.getValue(PurchaseOrderLine.PRODUCT_TYPE);
orderLinePayload[PurchaseOrderLine.PURCHASED_QUANTITY] = orderLineGr.getValue(PurchaseOrderLine.PURCHASED_QUANTITY);
orderLinePayload[PurchaseOrderLine.GOODS_RECEIPT_REQUIRED] = orderLineGr.getValue(PurchaseOrderLine.GOODS_RECEIPT_REQUIRED);
orderLinePayload[PurchaseOrderLine.SUPPLIER] = orderLineGr.getValue(PurchaseOrderLine.SUPPLIER);
orderLinePayload[PurchaseOrderLine.SUPPLIER_PRODUCT] = orderLineGr.getValue(PurchaseOrderLine.SUPPLIER_PRODUCT);
orderLinePayload[PurchaseOrderLine.GENERAL_LEDGER_ACCOUNT] = orderLineGr.getValue(PurchaseOrderLine.GENERAL_LEDGER_ACCOUNT);
orderLinePayload[PurchaseOrderLine.EXPECTED_DELIVERY_DATE] = orderLineGr.getValue(PurchaseOrderLine.EXPECTED_DELIVERY_DATE);
orderLinePayload[PurchaseOrderLine.START_DATE] = orderLineGr.getValue(PurchaseOrderLine.START_DATE);
orderLinePayload[PurchaseOrderLine.END_DATE] = orderLineGr.getValue(PurchaseOrderLine.END_DATE);
orderLinePayload[PurchaseOrderLine.TOTAL_LINE_AMOUNT] =
orderLineGr.getElement(PurchaseOrderLine.TOTAL_LINE_AMOUNT + ".currency") +
";" +
orderLineGr.getElement(PurchaseOrderLine.TOTAL_LINE_AMOUNT + ".amount");
orderLinePayload[PurchaseOrderLine.UNIT_PRICE] =
orderLineGr.getElement(PurchaseOrderLine.NEGOTIATED_UNIT_COST + ".currency") +
";" +
orderLineGr.getElement(PurchaseOrderLine.NEGOTIATED_UNIT_COST + ".amount");
orderLinePayload[PurchaseOrderLine.UOM] = orderLineGr.getValue(PurchaseOrderLine.UOM);
orderLinePayload[PurchaseOrderLine.STATUS] = PurchaseOrderLine.STATE_CLOSED_CANCELED;
orderLinePayload[PurchaseOrderLine.ERP_LINE_NUM] = orderLineGr.getValue(PurchaseOrderLine.ERP_LINE_NUM);
orderLinePayload[PurchaseOrderLine.RECIPIENT] = orderLineGr.getValue(PurchaseOrderLine.RECIPIENT);
orderLinePayload[PurchaseOrderLine.RECEIVED_QUANTITY] = orderLineGr.getValue(PurchaseOrderLine.RECEIVED_QUANTITY);
orderLinePayload[PurchaseOrderLine.REQUEST_LINE] = orderLineGr.getValue(PurchaseOrderLine.REQUEST_LINE);
orderLinePayload[PurchaseOrderLine.SERVICE_ACK] = orderLineGr.getValue(PurchaseOrderLine.SERVICE_ACK);
orderLinePayload[PurchaseOrderLine.RECEIVED_PERCENTAGE] = orderLineGr.getValue(PurchaseOrderLine.RECEIVED_PERCENTAGE);
orderLinePayload[PurchaseOrderLine.RECEIVED_AMOUNT] =
orderLineGr.getElement(PurchaseOrderLine.RECEIVED_AMOUNT + ".currency") +
";" +
orderLineGr.getElement(PurchaseOrderLine.RECEIVED_AMOUNT + ".amount");
orderLinePayload[PurchaseOrderLine.LOCATION] = orderLineGr.getValue(PurchaseOrderLine.LOCATION);
orderLinePayload[PurchaseOrderLine.ADDRESS] = orderLineGr.getValue(PurchaseOrderLine.ADDRESS);
orderLinePayload[PurchaseOrderLine.CITY] = orderLineGr.getValue(PurchaseOrderLine.CITY);
orderLinePayload[PurchaseOrderLine.STATE_OR_PROVINCE] = orderLineGr.getValue(PurchaseOrderLine.STATE_OR_PROVINCE);
orderLinePayload[PurchaseOrderLine.COUNTRY] = orderLineGr.getValue(PurchaseOrderLine.COUNTRY);
orderLinePayload[PurchaseOrderLine.ZIP_OR_POSTAL_CODE] = orderLineGr.getValue(PurchaseOrderLine.ZIP_OR_POSTAL_CODE);
orderLinePayload[PurchaseOrderLine.PAYMENT_SCHEDULE] = orderLineGr.getValue(PurchaseOrderLine.PAYMENT_SCHEDULE);
orderLinePayload[PurchaseOrderLine.PREPAID_ACCOUNT] = orderLineGr.getValue(PurchaseOrderLine.PREPAID_ACCOUNT);
orderLinePayload[PurchaseOrderLine.PREPAY_REQUIRED] = orderLineGr.getValue(PurchaseOrderLine.PREPAY_REQUIRED);
orderLinePayload[PurchaseOrderLine.INVOICED_AMOUNT] =
orderLineGr.getElement(PurchaseOrderLine.INVOICED_AMOUNT + ".currency") +
";" +
orderLineGr.getElement(PurchaseOrderLine.INVOICED_AMOUNT + ".amount");
orderLinePayload[PurchaseOrderLine.AMOUNT_PAID] =
orderLineGr.getElement(PurchaseOrderLine.AMOUNT_PAID + ".currency") +
";" +
orderLineGr.getElement(PurchaseOrderLine.AMOUNT_PAID + ".amount");
orderLinePayload[PurchaseOrderLine.TERM_VALUE] = orderLineGr.getValue(PurchaseOrderLine.TERM_VALUE);
orderLinePayload[PurchaseOrderLine.TERM_LENGTH] = orderLineGr.getValue(PurchaseOrderLine.TERM_LENGTH);
orderLinePayload[PurchaseOrderLine.ESTIMATED_TAX] =
orderLineGr.getElement(PurchaseOrderLine.ESTIMATED_TAX + ".currency") +
";" +
orderLineGr.getElement(PurchaseOrderLine.ESTIMATED_TAX + ".amount");
orderLinePayload[PurchaseOrderLine.ESTIMATED_SHIPPING] =
orderLineGr.getElement(PurchaseOrderLine.ESTIMATED_SHIPPING + ".currency") +
";" +
orderLineGr.getElement(PurchaseOrderLine.ESTIMATED_SHIPPING + ".amount");
orderLinePayload[PurchaseOrderLine.SHORT_DESC] = orderLineGr.getValue(PurchaseOrderLine.SHORT_DESC);
orderLinePayload[PurchaseOrderLine.ACCOUNT_ASSIGN_CATEGORY] = orderLineGr.getValue(PurchaseOrderLine.ACCOUNT_ASSIGN_CATEGORY);
orderLinePayload[PurchaseOrderLine.ASSET_CATEGORY] = orderLineGr.getValue(PurchaseOrderLine.ASSET_CATEGORY);
orderLinePayload[PurchaseOrderLine.INTERNAL_ORDER] = orderLineGr.getValue(PurchaseOrderLine.INTERNAL_ORDER);
orderLinePayload[PurchaseOrderLine.WBS_ELEMENT] = orderLineGr.getValue(PurchaseOrderLine.WBS_ELEMENT);
orderLinePayload[PurchaseOrderLine.SALES_ORDER_LINE_NUMBER] = orderLineGr.getValue(PurchaseOrderLine.SALES_ORDER_LINE_NUMBER);
orderLinePayload[PurchaseOrderLine.INDIVIDUAL_UNIT_COST] =
orderLineGr.getElement(PurchaseOrderLine.INDIVIDUAL_UNIT_COST + ".currency") +
";" +
orderLineGr.getElement(PurchaseOrderLine.INDIVIDUAL_UNIT_COST + ".amount");
orderLinePayload[PurchaseOrderLine.NEGOTIATED_SAVINGS] =
orderLineGr.getElement(PurchaseOrderLine.NEGOTIATED_SAVINGS + ".currency") +
";" +
orderLineGr.getElement(PurchaseOrderLine.NEGOTIATED_SAVINGS + ".amount");

orderLinePayload[PurchaseOrderLine.TOTAL_INDIVIDUAL_UNIT] = orderLineGr.getValue(PurchaseOrderLine.TOTAL_INDIVIDUAL_UNIT);

var historyOrderLineGr = new PurchaseOrderLineHistory().create(orderLinePayload);
return historyOrderLineGr;
},

/**
* _updatePO:
* @Param {requisitionGr}
* @returns {Object}
* @private
*/
_updatePO: function() {
var currentOrderGr = new PurchaseOrder().getById(this._requisitionGr.getValue(PurchaseRequisition.PURCHASE_ORDER));
var orderPayload = PurchaseOrder.prepareOrderPayload(this._requisitionGr);
orderPayload[PurchaseOrder.VERSION] = parseInt(currentOrderGr.getValue(PurchaseOrder.VERSION)) + 1;

currentOrderGr = new PurchaseOrder().update(currentOrderGr, orderPayload);

return currentOrderGr;
},


/**
* _updatePOLines:
* @Param {requisitionGr}
* @returns {Object}
* @private
*/
_updatePOLines: function(orderId) {
// Fetch approved Request lines data
var encodedQuery = PurchaseRequestLine.PURCHASE_REQUISITION + "=" + this._requisitionId +
"^" + PurchaseRequestLine.STATE + "=" + PurchaseRequestLine.STATE_APPROVED;
var requestLineGr = new PurchaseRequestLine().get(encodedQuery);

var orderLineConverter = new PurchaseToOrderLineConverter(orderId);
while (requestLineGr.next()) // Request line loop
if (!orderLineConverter.convert(requestLineGr))
return false;

// Closed cancelling lines which are not approved
encodedQuery = PurchaseRequestLine.PURCHASE_REQUISITION + "=" + this._requisitionId +
"^" + PurchaseRequestLine.STATE + "!=" + PurchaseRequestLine.STATE_APPROVED;
requestLineGr = new PurchaseRequestLine().get(encodedQuery);

while (requestLineGr.next()) { // Request line loop
var orderLineId = requestLineGr.getValue(PurchaseRequestLine.PURCHASE_ORDER_LINE);
if (!gs.nil(orderLineId)) {
var payload = {};
payload[PurchaseOrderLine.STATUS] = PurchaseOrderLine.STATE_CLOSED_CANCELED;

// Cancellation details, cancel on POL from shoppinghub proceed through revision PRL's so stamping cancel details from revision PRL to POL
payload[PurchaseOrderLine.CANCELLATION_REASON] = requestLineGr[PurchaseRequestLine.CANCELLATION_REASON];
payload[PurchaseOrderLine.CANCELLED_BY] = requestLineGr[PurchaseRequestLine.CANCELLED_BY];

if (!gs.nil(requestLineGr[PurchaseRequestLine.CANCELLED_BY]))
payload["comments"] = gs.getMessage("{0}'s cancel reason: {1}", [requestLineGr[PurchaseRequestLine.CANCELLED_BY].getDisplayValue(), requestLineGr[PurchaseRequestLine.CANCELLATION_REASON]]);

new PurchaseOrderLine().update(orderLineId, payload);
}
}

return true;
},

/**
* _handleOrderSuccess:
* @Param {GlideRecord}
* @returns {}
* @private
*/
_handleOrderSuccess: function(orderGr) {
// Start order submission
PurchaseOrderLine.updateLineStatus(orderGr.getUniqueValue(), PurchaseOrderLine.STATE_PENDING_SUBMISSION);
new PurchaseRequisitionUtil(orderGr.getValue("purchase_requisition")).moveToPendingSubmission();
},

/**
* _handleOrderFailure:
* @Param {GlideRecord}
* @returns {}
* @private
*/
_handleOrderFailure: function(order) {
// Clean up created purchase order lines
var encodedQuery = PurchaseOrderLine.PURCHASE_ORDER + "=" +
order.getUniqueValue();
new PurchaseOrderLine().deleteMultiple(encodedQuery);

// Clean up created purchase order
new PurchaseOrder().deleteRecord(order.getUniqueValue());
},

type: "UpdatePurchaseOrder"
};
/* eslint-enable vars-on-top, max-len, no-inline-comments */

 

I actually trying to build in a custom integration trying to call this SI to update the requisition. Thanks in advance

 

2 REPLIES 2

Utpal Dutta
Tera Guru

Hi Prasun,

It seems like on line 315 of "updatePurchaseOrder" script include it is receiving null that's why it is throwing an error in background script.

Why don't you add a "gs.info" at line 16 of UI action script? You can write "gs.info(orderId)" and then click on the UI action where it is located on the form.

 

Go to system logs and check if you've received a log there.

 

I hope my answer helps, if it does then please accept my answer & mark it helpful.

 

Best,

Utpal

So when I am clicking the Ui button it is working as expected but when I am trying the script include in background script its throwing that error