Ls Не Видит Айтемы В Документе

HelenHelen

Well-known member
31.08.2011
74
0
#1
Всем доброго времени суток!

Есть проблема.В базе есть документ с большим количеством айтемов (больше 256...). По нему работает две функции, они обращаются к айтему по имени. Код функций практически одинаков, одна сравнивает значения в айтеме по принципу равно, а другая - меньше или равно с некоторым значением (до места, где начинается разница, код не доходит :D ). При работе первой функции все ок - в документе в items от 0 до 255 и многоточие, getFirstItem отрабатывает. Во втором случае в документе у меня дебаггер показывает 24 (!!!) айтема и все, а getFirstItem, соответственно, обламывается, переменная item после присвоения пуста... В свойствах документа все айтемы тоже есть, визуально в форме есть, в других местах (как первая функции) все обращения работают... Я могу, конечно, выложить код, но по-моему, в данном случае это не сильно прояснит дело.

В чем проблема? Ноль идей... Подскажите, пожалуйста! Заранее большое спасибо!
 

hosm

* so what *
18.05.2009
2 442
6
#2
Allow more fields in database - в свойствах БД установить
 

hosm

* so what *
18.05.2009
2 442
6
#3
А если в 1м случае работает - мож, проблема в коде? например, во временный документ отбираются только айтемы определенного типа? Например, только даты.

Добавлено: Еще варианты - меняется контекст и проверяется другой документ с меньшим количеством полей, поля зашифрованы и нет ключа или поля в секции и нет доступа.
 

HelenHelen

Well-known member
31.08.2011
74
0
#4
Код одинаковый практически, в том-то и дело:

<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Работает</div></div><div class="sp-body"><div class="sp-content">
Код:
Function conditionEqual (routeDoc As NotesDocument,doc As NotesDocument) As String
Dim item As NotesItem

conditionEqual = "0"

Set item = doc.Getfirstitem(routeDoc.condActFieldToCheck(0))

Print "conditionEqual " + item.name

ForAll vl In item.Values
If CStr(vl) = CStr(routeDoc.condActValueToCheckFor(0)) Then
conditionEqual = "1"
Exit Function
End If
End ForAll

End Function
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Не работает</div></div><div class="sp-body"><div class="sp-content">
Код:
Function conditionGreaterOrEqual (routeDoc As NotesDocument,doc As NotesDocument) As String
Dim item As NotesItem

conditionGreaterOrEqual = "0"

Print "Поле " + routeDoc.condActFieldToCheck(0)

Set item = doc.Getfirstitem(routeDoc.condActFieldToCheck(0))

Print "conditionGreaterOrEqual" + item.name

ForAll vl In item.Values
If CDbl(vl) >= CDbl(routeDoc.condActValueToCheckFor(0)) Then
conditionGreaterOrEqual = "1"
Exit Function
End If
End ForAll

End Function
Док передается как параметр, поэтому подмену сложно представить. Более того, я по юниду дока снова получала документ из базы, как раз на случай, что он почему-то переопределился - все то же самое. Отбора айтемов тоже никакого нет, это просто то, что видно в документе, когда он загружается в переменную. К тому же там разного типа айтемы присутствуют...
 

savl

Lotus team
28.10.2011
2 136
105
#5
HelenHelen
Где-то я уже это видел... Де жа вю...
В документе точно есть поле, которое содержится тут: routeDoc.condActFieldToCheck(0)
Что это за поле? Какое у него имя?
Между этими функциями ничего не происходит? Может быть идет подмена документа с одного на другой.
Отдельно в кнопке пробовали? Последовательный вызов этих функций.
P.S. В магию я верю, но не в чудеса.
 

HelenHelen

Well-known member
31.08.2011
74
0
#6
routeDoc - документ с настройками, в этом поле указано имя айтема из дока, с которым нужно работать (имя MKK_decision), оно есть в документе.
Они и так последовательно работают.
Что касается подмены, то это 100% не происходит, потому что в базе у всех документов по этой форме столько полей, а то, что документ нужной формы, тоже не вызывает сомнений, потому что в других формах нет тех айтемов, что показываются в документе (те 24)...
 

Мыш

Премиум
12.02.2008
1 097
10
#7
Проблемы с памятью? Перебираете большую коллекцию - а объекты удаляете?
 

savl

Lotus team
28.10.2011
2 136
105
#8
HelenHelen
Если это на конкретном документе:
Возможно это битый документ.
Возможно в нем стоит saveOptions = "1".
Возможно достаточно будет пересохранить документ.
Если на всех: пока загадка...
 
30.05.2006
1 345
11
#9
чОрт.. Дома у меня LN сейчас нету - в док-цию заглянуть.

Что-то меня во втором примере преобразование смущает: CStr определено для всех типов данных и всех значений, а CDbl??

PS: а где обработка ошибок?