2015-09-18 3 views
0

У меня есть этот блок кода в SSJS, что я делаю некоторые проверки поля материал: thisDoc является NoteXspDocument FLD = имя поляПроверка того, что значение находится в SSJS

var thisValue = thisDoc.getValue(fld); 
print("Check Text = " + thisValue); 
print("Is is a Date " + (thisValue === Date)) 

, когда я запустить журнал имеет следующее:

Check Text = 09/10/15 12:00 PM 
Is is a Date false 

В этом коде я не знаю, что тип данных имеет ДПД, который является именем поля. Я проверяю базовый документ и получаю NotesItem.Type(), и это поле имеет текст типа 1280 в бэкэнд, но у NotesXspDocument есть дата. Мне нужно определить, что тип данных thisValue уверен, действует как объект NotesDateTime, но я что-то делаю неправильно. Я думаю, что проблема может заключаться в различии между NotesDateTime и java.util.Date, но они подталкивают меня к стене.

Дальнейшее редактирование - Проблема заключается в том, что у меня есть Array имен полей var Fields: Array, после чего я получаю fld = Fields[n], поэтому, когда я получаю значение поля, это может быть что угодно. Текст, дата, номер поэтому, когда я делаю var thisValue = thisDoc.getValue(fld) or thisDoc.getItemValue(fld), мне нужно выяснить, какая у меня ценность. Думаю, я мог бы поместить getItem..... в попытку, пока не найду ту, которая работает, но это кажется менее оптимальным решением.

ответ

0

Поскольку поле, которое я извлечение может быть просто о чем я использую

var thisValue = thisdoc.getValue(fld); 

я имел много проблемы, а затем определить, какие данные у меня были. Это может быть пустой Дата/номер/String Итак, первое, что я сделал выяснить, что тип бэкенд данных был:

var thisItem:NotesItem = thisDoc.getDocument().getFirstItem(fld); 
var type:Integer = thisItem.getType() 

Это помогает немного, если поле было ранее установлено, но если это новый документ или поле еще не получили значение, оно будет иметь тип 1280 или текст и, вероятно, значение null. Итак, мой тест fisrt имеет значение null или «". то он становится немного более жестким, потому что мне нужно проверить некоторые значения. Во всех моих списках я добавляю текст «--- Выберите ?????» в качестве первого элемента в списке, так что я пытался получить подстроку «---», но из-за дисперсии в типе данных мне нужно было положить, что в попытке:

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 

я заворачивал различные другой тип данных тесты в попытках, и теперь у меня есть работа. Возможно, это лучший способ, но это работает.

2

Попытка instanceof Date.class. То, что у вас есть, не проверяет тип данных thisValue против базового класса, вместо этого он проверяет сам объект.

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; 
Смежные вопросы