• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Помогите разобраться с проблемой....

  • Автор темы alexstudent
  • Дата начала
A

alexstudent

Есть отчет на форме, по событию (по нажатию кнопки), по формуле (FIELD DivisionTitle := @Unique(@DbColumn("":"NoCache"; ""; "StaffByPeriodName"; 3))) в многозначное поле записываются BIDs(UNIDs) документов с разделителями, на 8 версии все отлично работает, на 7 выдает ошибку (ОШИБКА: Неверный тип данных для оператора или @-функции: ожидался текстовый):
7 версия -
8 версия -
Как можно решить данную проблему? Такое ощущение что это только из-за различий версий!
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
Очевидно, что одно из возвращаемых значений не текст. А @Unique нужен только текст.
Решение: проверить значения или попробовать использовать @Text.
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
alexstudent
в виде StaffByPeriodName убедиться что в 3 колонке чисто текст, если там униды то обязательно проверить чтобы они были текстовые
например сделать в столбце формулу @Text(@DocumentUnigueID)
 
A

alexstudent

Воспользовался @Text, но проблема не ушла! Повторюсь, что в 8 версии все ок, а на 7 не хочет работать.
 
H

hosm

может, сделать проверку @isError(@dbColumn()) ?
 
T

turumbay

Воспользовался @Text, но проблема не ушла! Повторюсь, что в 8 версии все ок, а на 7 не хочет работать.
а вот если явно привести результат лукапа к тексту?
Код:
lookupResult := @DbColumn("":"NoCache"; ""; "StaffByPeriodName"; 3);
REM {error handling};
@If( @IsError( lookupResult );
@Do(
@Prompt([OK];"Error";"Error:" + @Text(lookupResult) );
@Return("")
);
""
);
REM {принудительно преобразуем результат в текст}
lookupResult := @Text( lookupResult );
uniqueLookupResult := @Unique( lookupResult );
FIELD DivisionTitle := uniqueLookupResult;
 
A

alexstudent

Попробовал явно привести в 7 версии ошибка Error:mad:ERROR, а в 8 версии всё ок!
 
A

alexstudent

С явным прописыванием Сервера тоже не получается!!! В поле примерно 70 значений может размер поля? Может быть такое что он увеличен в 8 версии?
 
T

turumbay

С явным прописыванием Сервера тоже не получается!!! В поле примерно 70 значений может размер поля? Может быть такое что он увеличен в 8 версии?
70 значений какого размера? точная версия r7? есть упоминания, что фиксили в семерке какой-то баг с dbcolumn:
 
A

alexstudent

Версия 7.0.1! Явное указывание сервера и базы не работает, @IsError тоже не работает, пробовал на скрипте:

Dim session As New notessession
Dim ws As New NotesUIWorkspace
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim view As NotesView
Dim staff As Variant

Set db = session.CurrentDatabase
Set doc = ws.CurrentDocument.Document
Set view = db.GetView("StaffByPeriodName")

ef$ = {@Unique(@DBColumn("":"NoCache"; "MeetingEXV/P...":"EXV//IT//asup.nsf"; "StaffByPeriodName";3))}
staff = Evaluate(ef$, doc)

n% = 1
For m% = Lbound(staff) To Ubound(staff)
nm$ = nm$ + Cstr(staff(m%)) + ";"
n% = n% + 1
Next

' Заполнение поля в документе
Call doc.replaceItemValue("DivisionTitle", Fulltrim(Split(nm$, ";")))

и так не работает, пишет ошибку Type mismatch! Блин сил нет.
 
D

Darker

FIELD DivisionTitle := @Unique(@DbColumn("":"NoCache"; "":""; "StaffByPeriodName"; 3))
попробуй так
 
T

turumbay

Версия 7.0.1! Явное указывание сервера и базы не работает, @IsError тоже не работает, пробовал на скрипте:
и так не работает, пишет ошибку Type mismatch! Блин сил нет.
Итак, имеем: dbcolumn возвращает ошибку, без указания подробностей. Поведение похоже на превышение лимитов.
Вы точно не вываливаетесь по размеру возвращаемых данных? Добавьте колонку (с тоталом) @Length( @Implode( @Text( _Сюда формулу третьей колонки вида_) ) ) - что кажет тотал по такой колонке?
 
A

alexstudent

В общем результат, который возвращает @Dblookup = 2243 символа.
 
T

turumbay

В общем результат, который возвращает @Dblookup = 2243 символа.
Какого собако-лукапа? Речь вроде была про @dbcolumn. Формулу лукапа в студию. иначе непонятно что лукапите.
2243 - это длина поля в одном документе, или все-таки общий размер колонки? Ответьте на простой вопрос:чего тотал-то кажет?. Сразу станет ясно - туда копаю или нет.
P.S. Готов спорить: 2243 = 68*32 + 67, т.е. 68 unid-ов с разделителями.
У вас в поле одного документа лежат 70 юнидов? И сколько таких документов в виде?
 
A

alexstudent

Тотал в колонке показывает - 937 536. Да, прости ошибся... не лукап, а колумн!
Формула колумна: FIELD DivisionTitle := @Unique(@DbColumn("":"NoCache"; ""; "StaffByPeriodName"; 3)). По поводу 68 unid-ов с разделителями ты прав, колумн возвращает их и записывает в поле, вот здесь как раз и ошибка в 7 версии (ОШИБКА: Неверный тип данных для оператора или @-функции: ожидался текстовый))! Документов в виде - 29 299!!!
 
T

TIA

Тотал в колонке показывает - 937 536.
Ну правильно, Вы пытаетесь получить 937536 байт, а @DbColumn может вернуть максимум 64кб (чуть меньше чем 65535 байт).
Замените @DbColumn на проход скриптом по вьюшке через NotesView.getFirstDocument и NotesView.getNextDocument с получением notesDocument.ColumnValues(2).
Рассмотрите, не лучше ли применить NotesDatabase.Search.

P.S. Вы уверены, что под 8ой @DbColumn вернул ВСЕ значения?
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 933
609
BIT
177
да и NoCache можно заменить на ReCache (ежели собаками) - хотя на работоспособности это не скажется ;)

и ежели колонка с неуникальными значениями - мобуть категоризировать её и нафигатором "бежать" по сиблинг энтрисам?!
 
Мы в соцсетях:

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