[英]How to compare two dates and give condition as per the selected dates on two date Fields in suitelet script?
我在这里做的是我刚刚创建了一个简单的 suitelet 以及链接的客户端脚本,事情是在这里我收到一个名为意外错误的错误页面。 我不知道它为什么要去那里。 我提供了这两个脚本,请看一下并给我一个解决方案。
define(['N/record','N/ui/serverWidget','N/redirect','N/runtime','N/search','N/url'],function(record,serverWidget,redirect,runtime,search,url){
function onRequest(context){
var Request = context.request;
var Response = context.response;
var name = context.fieldId;
if(Request.method == 'GET') {
var form=serverWidget.createForm({title:"Customer entry Suitelet"});
var primaryinfo=form.addFieldGroup({
label:'Primary Information',
id:'custpage_advs_primary_info',
});
var firstname=form.addField({
label:'First Name',
id:'custpage_advs_first_name',
type:serverWidget.FieldType.TEXT,
container:'custpage_advs_primary_info'
});
firstname.isMandatory=true;
var lastname=form.addField({
label:'Last Name',
id:'custpage_advs_last_name',
type:serverWidget.FieldType.TEXT,
container:'custpage_advs_primary_info'
});
Response.writePage(form);
form.clientScriptModulePath = './advs_cs_datefilter.js';
var fnameValue = Request.parameters.custparam_first_name;
if(fnameValue){
firstname.defaultValue =fnameValue;
var fnamecustomerSearch = search.create({
type:'customrecord_advs_customer_entry_form',
filters:['custrecord_advs_first_name',"startswith",fnameValue],
columns:[
search.createColumn({name: "name"}),
search.createColumn({name: "custrecord_advs_first_name"}),
search.createColumn({name: "custrecord_advs_last_name"}),
search.createColumn({name: "custrecord_advs_email"}),
search.createColumn({name: "custrecord_advs_phone"}),
search.createColumn({name: "internalid"}),
search.createColumn({name: "id"}),
search.createColumn({name:"created"})
]
});
var counter = 0;
fnamecustomerSearch.run().each(function(result) {
log.debug("my result", +result);
var oldfullname = result.getValue('name');
var InternalidVal = result.getValue('internalid');
var firstname=result.getValue('custrecord_advs_first_name');
var lastname=result.getValue('custrecord_advs_last_name');
var email=result.getValue('custrecord_advs_email');
var phone=result.getValue('custrecord_advs_phone');
var recordid=result.id;
mysublist.setSublistValue({
id: 'custpage_advs_sublist_internalid',
line: counter,
value: InternalidVal
});
mysublist.setSublistValue({
id: 'custpage_advs_sublist_fullname',
line: counter,
value:oldfullname //....and so on and whatever I'm getting on the search
}); // I'm setting those on sublist values on the line
return true;
});
}
else if(((startDateValue)&&(endDateValue)) &&((endDateValue>startDateValue))){
startdate.defaultValue =startDateValue;
enddate.defaultValue=endDateValue;
var datecustomerSearch = search.create({
type:'customrecord_advs_customer_entry_form',
filters:[
["created","onorafter",startDateValue],
'or',
["created",'onorbefore',endDateValue],
],
columns:[
search.createColumn({name: "name"}),
search.createColumn({name: "custrecord_advs_first_name"}),
search.createColumn({name: "custrecord_advs_last_name"}),
search.createColumn({name: "custrecord_advs_email"}),
search.createColumn({name: "custrecord_advs_phone"}),
search.createColumn({name: "internalid"}),
search.createColumn({name: "id"}),
search.createColumn({name:"created"})
]
});
var counter = 0;
datecustomerSearch.run().each(function(result) {
log.debug("my result", +result);
var oldfullname = result.getValue('name');
var InternalidVal = result.getValue('internalid');
var firstname=result.getValue('custrecord_advs_first_name');
var lastname=result.getValue('custrecord_advs_last_name');
var email=result.getValue('custrecord_advs_email');
var phone=result.getValue('custrecord_advs_phone');
var recordid=result.id;
const view_url = url.resolveRecord({
recordType:'customrecord_advs_customer_entry_form',
recordId: recordid,
isEditMode: false
});
mysublist.setSublistValue({
id: 'custpage_advs_sublist_internalid',
line: counter,
value: InternalidVal
});
mysublist.setSublistValue({
id: 'custpage_advs_sublist_fullname',
line: counter,
value:oldfullname
});
mysublist.setSublistValue({
id: 'custpage_advs_sublist_fname',
line: counter,
value: firstname
}); // I'm doing the same what I did on last condition
counter++;
return true;
});
}
else // POST part just I'm creating record & setting the values and saving
{
var Fname= Request.parameters.custpage_advs_first_name;
var Lname=Request.parameters.custpage_advs_last_name;
var Email=Request.parameters.custpage_advs_email;
var Phone=Request.parameters.custpage_advs_phone;
var Fullname=Fname+' '+Lname;
var customRecord=record.create({
type:'customrecord_advs_customer_entry_form',
isDynamic:true,
});
customRecord.setValue({
fieldId:'name',
value:Fullname
});
redirect.toSuitelet({
scriptId: 'customscript_advs_ss_datefilter',
deploymentId: 'customdeploy_advs_ss_datefilter',
});
}
}
return{
onRequest:onRequest
}
});
这是我的客户端脚本,只是我对如何给出条件有疑问实际上,我的需要是如果我们 select 这两个日期都符合逻辑,这意味着让我告诉场景
这是我的客户端脚本,我也在证明错误页面的屏幕截图和我的 suitelet 设计
define(['N/currentRecord','N/search','N/record','N/url','N/format'],function(currentRecord,search,record,url,format){
function fieldChanged(context) {
var recordObj=context.currentRecord;
// var name = context.fieldId;
var startDateValue=recordObj.getValue({
fieldId:'custpage_advs_start_date'
});
var endDateValue=recordObj.getValue({
fieldId:'custpage_advs_end_date'
});
if((startDateValue)&&(endDateValue)){
var startresponseDate=format.format({
value:startDateValue,
type:format.Type.DATE
});
var endresponseDate=format.format({
value:endDateValue,
type:format.Type.DATE
});
alert("The Customer entry Records that you have entered is between the dates " +startresponseDate +" and "+endresponseDate +" Click ok to continue " );
var suiteUrl = url.resolveScript({
scriptId: 'customscript_advs_ss_editviewcolumn',
deploymentId: 'customdeploy_advs_ss_editviewcolumn',
returnExternalUrl:false,
params : {
custparam_start_date: startresponseDate,
custparam_end_date: endresponseDate //define a parameter and pass the value to it
}
});
}
else{
return true;
}
setWindowChanged(window,false);
window.location = suiteUrl;
}
return{
fieldChanged:fieldChanged
}
});
请有人帮我解决我的问题
就日期而言,您可能希望通过执行以下操作来获取时间戳: var startresponseDateTs = startresponseDate.getTime();
然后一旦你有了数字,你就可以比较它们了。 在 NS 中,您可以从字面上比较 NS 日期 (date1 > date2),但我不是 100% 地比较那个日期。
*顺便说一下,其中任何一个都可能导致意外错误:
(1) 你的 suitelet 缺少最终返回上方的括号。
(2) 所有“mysublist”似乎都未定义。 需要像创建表单一样创建子列表: var mysublist = form.addSublist({ id: 'custpage_a_sublist_id', type: serverWidget.SublistType.LIST, label: 'Hello Sublist' });
附言。 在代码中添加一个 try {} catch(err){} 块可能会有所帮助。 不总是。 如果它仍然无法正常工作,您将获得使用调试器的大师班:P
您需要在 suitelet 的响应之前/之上调用客户端脚本。 如果您不知道如何为每个变量使用调试器作为客户端脚本执行的测试,请尝试在代码块之后添加警报。 喜欢:-
alert(" startDateValue "+startDateValue);
alert(" endresponseDate"+endresponseDate);
alert("line no 110"); //for line no to get exact line with error.
这样您就可以找到实际出错的那一行。 谢谢
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.