• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Computed For Display Field

  • Автор темы iivvnn
  • Дата начала
I

iivvnn

Странная ситуация:
при создании документа прописываю в поле City значение. Открыл сохраненный документ ScanEZ - все норма поле есть (текст) - с значением "Москва".
На форме есть еще мультиполе lstPeople типа cmpfordsp в формуле которого @DbLookup берет значения из колонки вида, ключем для поиска является значение поля City.
При открытии документа выдает ошибку "lstPeople entry not Found in index"
убрал формулу поля - в постопен документа вывожу мессежбоксом значение поля City - виводит пустую строку!!!!! Куда смотреть?
 
N

nvyush

Формулы вычисляются слева-направо-сверху-вниз, т.е. cfd поле должно быть после поля City. Далее, проверьте "C" и "y" — не кириллица ли случайно?
 
I

iivvnn

наверно первое значние пустышка - а её в виде нет, вот и ругается
Ладно отбросим cfd поле.
Как такое может быть: в списке полей есть текст поле, которому присвоено значение (смотрю и через ScanEZ и через свойства документа - все четко).
На форме есть соотв поле (текст) с аналогичным названием - открываю документ - отображается пусто. Ту же пустоту выдает MessageBox(uidoc.document.City(0))
Имена полей перепроверил 100 раз. Уже 3 часа бьюсь над этой мистикой!!! Хелп ми!!!
 
T

turumbay

в постопен документа вывожу мессежбоксом значение поля City - виводит пустую строку
С полем можно вытворить массу удивительных вещей на открытии формы...
А чего кажет этот messageBox, если его двинуть в queryOpen?
 
N

nvyush

Случайно нет на форме cfd поля с формулой @SetField или FIELD City := "" | @DeleteField | @Unavailable
 
D

doka

Если все так, как рассказываешь, то самое простое и первоочередное - перегрузиться и грохнуть cache.ndk :)
 
D

doka

а дебагер, как и сканЕз, тоже поле отображает нормально?

.....
set perem = doc.getitemvalue("City")(0)
msgbox "Название города - " + perem

perem тоже пустая?
 
T

TIA

>Как такое может быть: в списке полей есть текст поле, которому присвоено значение (смотрю и через ScanEZ и через свойства документа - все четко).
>На форме есть соотв поле (текст) с аналогичным названием - открываю документ - отображается пусто. Ту же пустоту выдает MessageBox(uidoc.document.City(0))

Есть масса вариантов. Например, если это самое поле на форме с аналогичным названием является вычисляемой для показа (CFD) и формула у него - пустая строка. Пока документ не открыт в интерфейсе, формула не работает и отображается хранимое значение. Как только документ открыл в интерфейсе - применилась формула поля и перезатёрла храниемое значение. Поэтому и интерфейсный метод UIdoc.document.City(0) возвращает пустоту
 
D

doka

если UIdoc.document.City(0) возвращает пустоту, то и ScanEz по идеи должен вернуть пустоту, разве нет?
 
H

hosm

не факт, может быть вариант, если значение мультивалью и пустое только 0-е значение City(0), а заполнено, например, City(1). Такое может быть при ошибочном использовании NotesItem.AppendToTextList
 
I

iivvnn

Второй день долбусь - ничего из вышеперечисленного не подходит.
Ситуация: есть два документа - созданные по одной форме. У обеих есть и заполненное (одно и то же значение) поле City. (показывает ScanEZ и через свойства документа)
cfd поле (lstPeople) на форме берет в качестве ключа это поле City. Один документ открывается нормально, второй выдает ошибку Field lstPeople: Entry not found in index
На квериопен messagebox для первого документа выдает значение поля City для второго видает пусто.
Беру втупую через ScanEZ удаляю поле City из глючного дока и копирую это поле сюда же из первого. Та же самая хрень!!!!

формула lstPeople @DbLookup формирует список из вьюхи ключем для поиска и есть поле City
 
D

doka

А через дебагер в "глючном" документе поле City пустое?
 
D

doka

Заполнено?! А doc.getItemValue("City")(0) при этом возвращает пусто???
 
I

iivvnn

Заполнено?! А doc.getItemValue("City")(0) при этом возвращает пусто???
Да!!!! Я вижу поле в документе (обычное текстовое поле - не массив), вижу что там значение "Донецк", но
MessageBox(uidoc.Document.GetItemValue("City")(0)) = "" (сам в шоке)
 
R

RAJ

Да!!!! Я вижу поле в документе (обычное текстовое поле - не массив), вижу что там значение "Донецк", но
MessageBox(uidoc.Document.GetItemValue("City")(0)) = "" (сам в шоке)

и не увидите, в бекэнд-документе поля Computed for Display не будет.

получайте через uidoc.FieldGetText("City")
 
D

doka

;)

НУ а если так, то что выводит?

Dim per, per1 as variant
Set uidoc = ws.Currentdocument
Set doc = uidoc.Document

per = uidoc.Fieldgettext("City")
MsgBox per

per1 = doc.Getitemvalue("City")
MsgBox(Join(per1))

Добавлено: >и не увидите, в бекэнд-документе поля Computed for Display не будет.

Так City же Editable
 
I

iivvnn

и не увидите, в бекэнд-документе поля Computed for Display не будет.

получайте через uidoc.FieldGetText("City")
Отойдем от cfd поля (lstPeople).
Поле City это не cfd поле! Это обичное computed поле (текст), значение которого вносится во время создания документа:
Добавлю последовательность действий:
set doc = new notedocument (db)
doc.City = "Донецк"
Потом я открываю doc через dialogbox (на квериопен формы по которой открываю doc повесил messabox(Source.Document.City(0)))
сообщение показывает "Донецк" - все путем.
Вношу пару значений в форму диалога (парметер пердавать поля в док) - Ок
В дебаггере видно по прежнему что doc.City = "Донецк"
call doc.Save(true, false)
Открываю этот сохранившийся док во вьюхе - опять срабатывает квериопен - хера - пусто!!! (хотя через scanEZ вижу City = "Донецк")
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!