netsuite
उपयोगकर्ता ईवेंट: ईवेंट्स सबमिट करने से पहले और बाद में
खोज…
वाक्य - विन्यास
- पहले सबमिट करें (प्रकार) // सबमिट करने से पहले, 1.0
- पहले सबमिट करें (ScriptContext) // सबमिट करने से पहले, 2.0
- afterSubmit (प्रकार) // सबमिट करने के बाद, 1.0
- afterSubmit (scriptContext) // सबमिट करने के बाद, 2.0
पैरामीटर
पैरामीटर | विवरण |
---|---|
सुइटस्क्रिप्ट 2.0 | - |
scriptContext | {Object} |
scriptContext.newRecord | {N/record.Record} डेटाबेस से पढ़े जा रहे रिकॉर्ड का संदर्भ। हम इसका उपयोग रिकॉर्ड पर फ़ील्ड मान को संशोधित करने के लिए कर सकते हैं |
scriptContext.oldRecord | {N/record.Record} रिकॉर्ड की पिछली स्थिति का केवल-पढ़ने के लिए संदर्भ। हम इसका उपयोग नए मूल्यों की तुलना करने के लिए कर सकते हैं |
scriptContext.type | {UserEventType} कार्रवाई के प्रकार का प्रदर्शन किया जा रहा है |
सुइटस्क्रिप्ट 1.0 | - |
type | {String} कार्रवाई का प्रकार प्रदर्शन किया जा रहा है |
टिप्पणियों
beforeSubmit
और afterSubmit
इन दोनों घटनाओं को किसी भी डेटाबेस ऑपरेशन द्वारा रिकॉर्ड पर लिखने से ट्रिगर किया जाता है। किसी भी समय एक उपयोगकर्ता, एक स्क्रिप्ट, एक सीएसवी आयात, या एक वेब सेवा अनुरोध डेटाबेस पर एक रिकॉर्ड लिखने का प्रयास करता है, सबमिट की गई घटनाओं को निकाल दिया जाता है।
रिकॉर्ड क्रियाएं जो दोनों घटनाओं को ट्रिगर करती हैं:
- सृजन करना
- संपादित करें
- हटाएं
- XEdit (इनलाइन संपादन)
- मंजूर
- अस्वीकार
- रद्द करना
- पैक
- समुंद्री जहाज
रिकॉर्ड क्रियाएं जो केवल beforeSubmit
ही ट्रिगर beforeSubmit
हैं:
- पूरा मार्क
- पुन: असाइन करें (समर्थन मामले)
- पूर्वानुमान संपादित करें
रिकॉर्ड कार्य जो केवल के बाद ट्रिगर afterSubmit
हैं:
- dropship
- विशेष ऑर्डर
- चिजें मँगाओ
- बिलों का भुगतान
के लिए विशिष्ट उपयोग मामलों beforeSubmit
- डेटाबेस के लिए प्रतिबद्ध होने से पहले रिकॉर्ड को मान्य करें
- अनुमति और प्रतिबंध की जाँच
- डेटाबेस प्रतिबद्ध करने से पहले अंतिम-मिनट में परिवर्तन
- बाहरी सिस्टम से अद्यतन खींचो
afterSubmit
लिए विशिष्ट उपयोग के मामले
- रिकॉर्ड परिवर्तन की ईमेल अधिसूचना
- ब्राउज़र पुनर्निर्देशन
- निर्भर रिकॉर्ड बनाएं / अपडेट करें
- बाहरी प्रणालियों में परिवर्तन धक्का
उपयोगकर्ता ईवेंट चेन नहीं करते हैं
उपयोगकर्ता ईवेंट में लिखा गया कोड किसी भी उपयोगकर्ता ईवेंट को अन्य रिकॉर्ड पर ट्रिगर नहीं करेगा। उदाहरण के लिए, से जुड़े ग्राहक रिकॉर्ड को संशोधित करने beforeSubmit
एक बिक्री आदेश रिकॉर्ड की ग्राहक रिकॉर्ड की घटनाओं प्रस्तुत ट्रिगर नहीं करेगा।
नेटसुइट एक अनंत लूप में एक दूसरे को ट्रिगर करने वाले उपयोगकर्ता ईवेंट से बचने के लिए ऐसा करता है। यदि आप एक श्रृंखलित अनुक्रम में आग की जरूरत उपयोगकर्ता घटनाक्रम करते हैं, अन्य स्क्रिप्ट प्रकार (जैसे RESTlets, Suitelets, अनुसूचित स्क्रिप्ट) घटनाओं के बीच में इंजेक्ट किया जा करने की आवश्यकता होगी।
ईवेंट हैंडलर्स वापसी void
सबमिट ईवेंट हैंडलर का रिटर्न प्रकार void
। हमारे ईवेंट हैंडलर से लौटाए गए किसी भी डेटा का सिस्टम पर कोई प्रभाव नहीं पड़ता है। हमें अपने हैंडलर फ़ंक्शन से कुछ भी वापस करने की आवश्यकता नहीं है क्योंकि हम वास्तव में इसके लौटे मूल्य के साथ कुछ भी नहीं कर सकते हैं।
!! सावधान !!
पुराने और नए रिकॉर्ड के बीच मूल्यों की तुलना करते समय बहुत सतर्क रहें। पुराने रिकॉर्ड से खाली खेतों को null
रूप में लौटाया जाता है, जबकि नए रिकॉर्ड से खाली खेतों को खाली स्ट्रिंग के रूप में वापस किया जाता है। इसका मतलब है कि आप पुराने की तुलना नए के साथ नहीं कर सकते, या आपको झूठी सकारात्मकता मिलेगी। आपके द्वारा लिखा गया कोई भी तर्क उस मामले को संभालना चाहिए जहां एक null
और एक उचित रूप से एक स्ट्रिंग है।
न्यूनतम: एक संदेश लॉग करें
// 1.0, Revealing Module pattern
var myNamespace = myNamespace || {};
myNamespace.example = (function () {
/**
* User Event 1.0 example detailing usage of the Submit events
*
* @appliedtorecord employee
*/
var exports = {};
function beforeSubmit(type) {
nlapiLogExecution("DEBUG", "Before Submit", "action=" + type);
}
function afterSubmit(type) {
nlapiLogExecution("DEBUG", "After Submit", "action=" + type);
}
exports.beforeSubmit = beforeSubmit;
exports.afterSubmit = afterSubmit;
return exports;
})();
// 2.0
define(["N/log"], function (log) {
/**
* User Event 2.0 example showing usage of the Submit events
*
* @NApiVersion 2.x
* @NModuleScope SameAccount
* @NScriptType UserEventScript
* @appliedtorecord employee
*/
var exports = {};
function beforeSubmit(scriptContext) {
log.debug({
"title": "Before Submit",
"details": "action=" + scriptContext.type
});
}
function afterSubmit(scriptContext) {
log.debug({
"title": "After Submit",
"details": "action=" + scriptContext.type
});
}
exports.beforeSubmit = beforeSubmit;
exports.afterSubmit = afterSubmit;
return exports;
});
सबमिट करने से पहले: डेटाबेस के लिए प्रतिबद्ध होने से पहले रिकॉर्ड को मान्य करें
इस उदाहरण के लिए, हम यह सुनिश्चित करना चाहते हैं कि किसी भी कर्मचारी को, जिसे प्रोजेक्ट संसाधन के रूप में चिह्नित किया गया है, के पास उचित श्रम लागत परिभाषित है।
// 1.0, Revealing Module pattern
var myNamespace = myNamespace || {};
myNamespace.example = (function () {
/**
* User Event 1.0 example detailing usage of the Submit events
*
* @appliedtorecord employee
*/
var exports = {};
function beforeSubmit(type) {
if (!isEmployeeValid(nlapiGetNewRecord())) {
throw nlapiCreateError("STOIC_ERR_INVALID_DATA", "Employee data is not valid", true);
}
}
function isEmployeeValid(employee) {
return (!isProjectResource(employee) || hasValidLaborCost(employee));
}
function isProjectResource(employee) {
return (employee.getFieldValue("isjobresource") === "T");
}
function hasValidLaborCost(employee) {
var laborCost = parseFloat(employee.getFieldValue("laborcost"));
return (Boolean(laborCost) && (laborCost > 0));
}
exports.beforeSubmit = beforeSubmit;
return exports;
})();
// 2.0
define(["N/error"], function (err) {
var exports = {};
/**
* User Event 2.0 example detailing usage of the Submit events
*
* @NApiVersion 2.x
* @NModuleScope SameAccount
* @NScriptType UserEventScript
* @appliedtorecord employee
*/
function beforeSubmit(scriptContext) {
if (!isEmployeeValid(scriptContext)) {
throw err.create({
"name": "STOIC_ERR_INVALID_DATA",
"message": "Employee data is not valid",
"notifyOff": true
});
}
}
function isEmployeeValid(scriptContext) {
return (!isProjectResource(scriptContext.newRecord) || hasValidLaborCost(scriptContext.newRecord));
}
function isProjectResource(employee) {
return (employee.getValue({"fieldId" : "isjobresource"}));
}
function hasValidLaborCost(employee) {
var laborCost = employee.getValue({"fieldId" : "laborcost"});
return (Boolean(laborCost) && (laborCost > 0));
}
exports.beforeSubmit = beforeSubmit;
return exports;
});
ध्यान दें कि हम अपने सत्यापन में नए रिकॉर्ड के संदर्भ में पास करते हैं क्योंकि हमें परवाह नहीं है कि क्या मूल्य हुआ करते थे; हम केवल उन मानों से संबंधित हैं जो डेटाबेस में लिखे जाने वाले हैं। 2.0 में, हम scriptContext.newRecord
संदर्भ के माध्यम से करते हैं, और 1.0 में हम वैश्विक फ़ंक्शन nlapiGetNewRecord
।
जब प्रस्तुत किया जा रहा डेटा मान्य नहीं होता है, तो हम एक त्रुटि बनाते हैं और फेंक देते हैं। एक beforeSubmit
घटना में, डेटाबेस में लिखे जाने से परिवर्तनों को रोकने के लिए, आपके फ़ंक्शन को एक अपवाद throw
होगा। अक्सर डेवलपर्स अपने फ़ंक्शन से return false
कोशिश करते return false
, यह अपेक्षा करते हैं कि पर्याप्त हो, लेकिन यह पर्याप्त नहीं है। 2.0 में N/error
मॉड्यूल का उपयोग करके त्रुटि ऑब्जेक्ट बनाया जाता है, और 1.0 में ग्लोबल nlapiCreateError
फ़ंक्शन का उपयोग करके; फिर हम throw
कीवर्ड के साथ अपनी बनाई गई त्रुटि ऑब्जेक्ट का उपयोग करके एक अपवाद उठाते हैं।
सबमिट करने के बाद: यह निर्धारित करें कि क्या कोई फ़ील्ड बदला गया था
डेटाबेस में रिकॉर्ड संग्रहीत होने के बाद, हम निरीक्षण करना चाहते हैं कि रिकॉर्ड पर क्या बदला गया था। हम यह निरीक्षण पुराने और नए रिकॉर्ड उदाहरणों के बीच मूल्यों की तुलना करके करेंगे।
// 1.0, Revealing Module pattern
var myNamespace = myNamespace || {};
myNamespace.example = (function () {
/**
* User Event 1.0 example detailing usage of the Submit events
*
* @appliedtorecord employee
*/
var exports = {};
function afterSubmit(type) {
notifySupervisor();
}
function notifySupervisor() {
// Old and New record instances are retrieved from global functions
var employee = nlapiGetNewRecord();
var prevEmployee = nlapiGetOldRecord();
// If Employee Status didn't change, there's nothing to do
if (!didStatusChange(employee, prevEmployee)) {
return;
}
// Otherwise, continue with business logic...
}
function didStatusChange(employee, prevEmployee) {
var status = employee.getFieldValue("employeestatus");
var prevStatus = prevEmployee.getFieldValue("employeestatus");
/* !! Caution !!
* Empty fields from the Old record come back as `null`
* Empty fields from the New record come back as an empty String
* This means you cannot simply compare the old and new
*/
return ((prevStatus || status) && (status !== prevStatus));
}
exports.afterSubmit = afterSubmit;
return exports;
})();
// 2.0
define(["N/runtime"], function (runtime) {
/**
* User Event 2.0 example detailing usage of the Submit events
*
* @NApiVersion 2.x
* @NModuleScope SameAccount
* @NScriptType UserEventScript
* @appliedtorecord employee
*/
var exports = {};
function afterSubmit(scriptContext) {
notifySupervisor(scriptContext);
}
function notifySupervisor(scriptContext) {
// Old and New records are simply properties on scriptContext
var employee = scriptContext.newRecord;
var prevEmployee = scriptContext.oldRecord;
// If Employee Status didn't change, there's nothing to do
if (!didStatusChange(employee, prevEmployee)) {
return;
}
// Otherwise, continue with business logic...
}
function didStatusChange(employee, prevEmployee) {
var status = employee.getValue({"fieldId" : "employeestatus"});
var prevStatus = prevEmployee.getValue({"fieldId" : "employeestatus"});
/* !! Caution !!
* Empty fields from the Old record come back as `null`
* Empty fields from the New record come back as an empty String
* This means you cannot simply compare the old and new
*/
return ((prevStatus || status) && (status !== prevStatus));
}
exports.afterSubmit = afterSubmit;
return exports;
});
पुराने और नए रिकॉर्ड के बीच मूल्यों की तुलना करते समय बहुत सतर्क रहें। पुराने रिकॉर्ड से खाली खेतों को null
रूप में लौटाया जाता है, जबकि नए रिकॉर्ड से खाली खेतों को खाली स्ट्रिंग के रूप में वापस किया जाता है। इसका मतलब है कि आप पुराने की तुलना नए के साथ नहीं कर सकते, या आपको झूठी सकारात्मकता मिलेगी। आपके द्वारा लिखा गया कोई भी तर्क उस मामले को संभालना चाहिए जहां एक null
और एक उचित रूप से एक स्ट्रिंग है।