我在SSJS中有这个代码块,我正在做一些字段验证: thisDoc是一个NoteXspDocument fld =字段的名称
varchar
当我运行它时,日志有这个:
var thisValue = thisDoc.getValue(fld);
print("Check Text = " + thisValue);
print("Is is a Date " + (thisValue === Date))
在这段代码中,我不知道作为字段名称的fld的数据类型是什么。我检查后端文档并获取NotesItem.Type(),并且该字段在后端是text 1280类型,但NotesXspDocument有一个日期。我需要确定数据类型是什么,thisValue确实像NotesDateTime对象一样,但我在某处做错了什么。 我认为这个问题可能是NotesDateTime和java.util.Date之间的区别,但是它们让我陷入困境。
进一步编辑 -
问题是我有一个字段名称var字段:数组然后我循环并得到Check Text = 09/10/15 12:00 PM
Is is a Date false
所以当我得到字段的值时,它可以是任何文本,日期,数字,所以当我这样做{ {1}}我需要弄清楚我有什么样的价值。我想我可以将fld = Fields[n]
置于试验中,直到找到一个有效的但看起来不是最佳解决方案。
答案 0 :(得分:2)
试试instanceof Date.class
。你得到的不是检查基础类的thisValue
的数据类型,而是检查对象本身。
答案 1 :(得分:1)
因为我正在检索的字段可以是我使用的任何内容
var thisValue = thisdoc.getValue(fld);
我在确定我的数据类型时遇到了很多麻烦。它可能是一个null Date / Number / String所以我做的第一件事就是找出后端数据的类型:
var thisItem:NotesItem = thisDoc.getDocument().getFirstItem(fld);
var type:Integer = thisItem.getType()
如果先前已设置该字段,这会有所帮助,但如果它是新文档或该字段尚未收到值,则它将是类型1280或文本,可能为null。 所以我的fisrt测试是null或""。然后它变得有点困难,因为我需要测试一些值。在我的所有组合框中,我添加了文本" ---选择?????"作为列表中的第一项,所以我试图获得" ---"的子串。但由于数据类型的差异,我需要将其放入try:
try{
if (thisValue.substring(0,3) == "---"){
print("have null Prefix");
rtn = false;
errMsg.push("The field " + fld + " is a Required Field please enter a value");
break;
}catch(e){ etc
然后我在trys中包装了各种其他数据类型测试,现在我已经开始工作了。 可能是一种更好的方式,但这有效。
答案 2 :(得分:0)
使用.getItemValue()
返回向量数组,然后测试数据类型。您也可以尝试.getItemValueString()
返回文字字符串,或.getItemValueDate()
或.getItemValueDateTime()
返回日期/时间。
由于getItemValue()
返回一个数组,因此使用下标来获取第一个元素:
var thisValue = thisDoc.getItemValue(fld);
var thisIsDate = (thisValue[0] instanceof Date);
print("Check Text = " + thisValue[0]);
print("Is this a Date ? " + thisIsDate;