• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Мелкие Вопросы Rtfm

  • Автор темы serko
  • Дата начала
S

serko

Search убираем, это жесть.
Делаем вьюху, первая колонка сортированная, значение колонки поле, которое проверяется.
Далее на QuerySave проверяем уникальность:
Получаем вьюху (можно её кешировать, но тогда придется обновлять).
Получаем по вьюхе коллекцию документов.
Если в коллекции более одного документа - "Хьюстон, у нас проблемы"(с)
Если документ один - сравниваем UNID документа из коллекции с UNID документа, который сохраняем.
Если совпадают - даем сохранить, если не совпадают - не даем.
Основной минус - Readers поля, если они есть, то вероятность не увидеть дубликат есть.
Но и этот момент обходится:
1. Если сделать вьюху категоризированной, то можно получить массив значений первой колонки: view.GetColumnValues(0)
Далее сделать ArrayGetIndex(<массив>, <ключ>)
Если результат будут Not IsNull, то значение уже есть.
2. Сделать отдельную базу с "индексом".
При удачно сохранении основного документа в этой базе создать документ, в котором будет значение нашего поля.
readers полей данный документ иметь не должен.
Так же создаем вьюху с сортиорованной колонкой, как я описал выше.
Ну соотвественно проверка меняется немного, теперь надо вьюху получать не в текущей базе, а в этой индексной.

Надеюсь, что моё еще сонное сознание не запутало никого)
[DOUBLEPOST=1424241463,1424241349][/DOUBLEPOST]Проверить новый ли документ или уже созданный можно простым условием:
Код:
if implode(Evaluate({@NoteID},param)) = {NT00000000} then msgbox "Новый документ"
' param - наш документ
Я думал над тем, чтобы создать вьюху, но(!!!) создавать под каждую "формулу" вьюху как-то не айс, если честно
 
S

serko

Кажется, что в данной ситуации проще создать для каждого уникального поля отдельную функцию...
 

savl

Lotus Team
28.10.2011
2 608
313
BIT
279
@serko, таких полей не должно быть много.
Я пока натыкался в своей практике только на 5 максимум.
Одной вьюхи с колонкой, где : Field1 + "~~" + Field2 + "~~" + Field3 + "~~" + Field4 +"~~" + Field5
Было вполне достаточно, документов 32К+, по трем формам.
Самая медленная проверка первый раз, когда индекс может перестроится...
Для каждой формы вьюху можно построить, если формулы разные, да и то можно объединить несколько форм в единое представление.
Тут от требований зависит...
[DOUBLEPOST=1424280444,1424280214][/DOUBLEPOST]о-па, понял свою ошибку... У меня не просто уникальные поля...
У меня совокупность этих полей. То есть группа полей в пределах каждого документа должна быть уникальной.
Чтобы отдельные поля, можно так: Field1:Field2:Field3:Field4:Field5
Сделать в колонке: Show multiple values as separate entries
И если нет ридерских полей - получать уже не документы, а NotesViewEntryColelction и count проверять.
 
  • Нравится
Реакции: serko
S

serko

@serko, таких полей не должно быть много.
Я пока натыкался в своей практике только на 5 максимум.
Одной вьюхи с колонкой, где : Field1 + "~~" + Field2 + "~~" + Field3 + "~~" + Field4 +"~~" + Field5
Было вполне достаточно, документов 32К+, по трем формам.
Самая медленная проверка первый раз, когда индекс может перестроится...
Для каждой формы вьюху можно построить, если формулы разные, да и то можно объединить несколько форм в единое представление.
Тут от требований зависит...
[DOUBLEPOST=1424280444,1424280214][/DOUBLEPOST]о-па, понял свою ошибку... У меня не просто уникальные поля...
У меня совокупность этих полей. То есть группа полей в пределах каждого документа должна быть уникальной.
Чтобы отдельные поля, можно так: Field1:Field2:Field3:Field4:Field5
Сделать в колонке: Show multiple values as separate entries
И если нет ридерских полей - получать уже не документы, а NotesViewEntryColelction и count проверять.
Почему так Search не угодил?
 
S

serko

Хочу в документе перебрать все поля, не зная их имена.
Ищу некую реализацию:
tmp = doc.getfirstfield
do while not tmp is nothing
msgbox tmp.Value
tmp = doc.getnextfield
loop
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 949
609
BIT
259
Код:
items=doc.Items
forall item in items
  item.Name
end forall
 
  • Нравится
Реакции: serko
S

serko

Всем спасибо. Встал вопрос. Есть в документе 2 поля и оба уникальны (не спрашивайте зачем, просто больная прихоть). Пусть это будут field1 и field2. Проверяется field1 вместе с field2. Хочу добиться результата как при формуле:
formula = {field1 = "} & doc.getitemvalue("field1")(0) & {" & field2 = "} & doc.getitemvalue("field2")(0) & {"}
Как это реализовать в одной View? Умею только одно значение проверять в одной View. Отмечу. Надо, чтобы они в паре проверялись, а не по отдельности. Формулы нельзя затрагивать.
 
M

maffl

@serko, такое впечатление, что я уже третий раз в этой теме вижу этот вопрос)
Разве вот это -
Одной вьюхи с колонкой, где : Field1 + "~~" + Field2 + "~~" + Field3 + "~~" + Field4 +"~~" + Field5
Было вполне достаточно...То есть группа полей в пределах каждого документа должна быть уникальной.

не является именно тем, что нужно? Для двух полей оставляете в колонке Field1 + "~~" + Field2, в коде у alldocumentsbykey просите doc.getitemvalue("field1")(0) + "~~" + doc.getitemvalue("field2")(0)
 
  • Нравится
Реакции: serko

garrick

Lotus Team
26.10.2009
1 352
151
BIT
208
Хочу в документе перебрать все поля, не зная их имена.
Ищу некую реализацию:
tmp = doc.getfirstfield
do while not tmp is nothing
msgbox tmp.Value
tmp = doc.getnextfield
loop
Хелп смотреть не пробовали?

 
  • Нравится
Реакции: serko
S

serko

Хочу вызвать диалог(по вьюхе) выбора пользователей и в поле затолкать Notes-имена(поставил галочку "многозначное поле или как-то так" в настройках).
1) Как правильно добавлять в такое поле пользователей? Неправильно будет, наверно, просто присвоить NotesName1 & " " & NotesName2 & " " & ....
2) Как правильно считывать такие поля(Author, многозначное поле)?
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 949
609
BIT
259
многозначные поля - это массив
массив в ЛС - someval=ArrayAppend(someval,{name1})
или Redim Pereserve someval(nextIdx) As String: someval(nextIdx)={name1}
зависит от типа someval
в собаках "name":"name1"
диалоговое окно делается с полем выбора из АК (хотя и необязательно)
 
Последнее редактирование модератором:
  • Нравится
Реакции: serko
S

serko

Хочу средствами LS сделать следующее:
даны поля field1 и field2.
При открытии документа поле field2 не активно или невидимо, суть в том, что пользователь не может это поле заполнить.
При заполнении поля field1 поле field2 становится доступным пользователю для ввода.
Как такое проделать? Интересуют именно свойства поля. Как к нему обращаться и с какими параметрами?
[DOUBLEPOST=1424533689,1424533633][/DOUBLEPOST]Может, есть параметры и будет выглядеть типа field2.disabled = true ?
 
S

serko

Возник еще вопрос. Не понимаю как открыть документ из другой базы, зная unid документа. БД взял, документ по unid взял. Обычно документы открывал через notesuiworkspace.EditDocument (или как-то так), но сейчас я в другой базе нахожусь, поэтому workspace не сработает. Думал через вьюху брать, но там тоже пусто с методами.
 

alexas1

Green Team
10.04.2014
1 202
225
BIT
38
... в другой базе нахожусь, поэтому workspace не сработает...
Эт почемуйто?;)
Set UIDocument = workspace.EditDocument( [editMode] , Document , ....
или
Call workspace.EditDocument([editMode] , Document , ....

workspace, это объект для работы с UI - в нём лежит всё, что видно на экране. Для UI нет понятия "свой\чужой", уям до фонаря, какой док открывать - был бы доступ.
 
  • Нравится
Реакции: serko

alexas1

Green Team
10.04.2014
1 202
225
BIT
38
Интересуют именно свойства поля. Как к нему обращаться и с какими параметрами?
Такое свойство есть только у параграфа.
Доступ к нему напр. через свойства текста или свойства поля (двойной клик на поле в дизайнере) \ предпоследняя вкладка - Hide paragraf if formula is true.
Именно параграф целиком.
Если надо скрывать поля на одной строке - поместить их в разные ячейки таблички.
Чтоб применить формулу видимости - link removed
 
  • Нравится
Реакции: serko
S

serko

Всем спасибо за помощь. Вновь вопрос...
В документе есть 3 поля с типом Date/Time
Выглядит заполненное поле так: 23.02.15 6:39:12
Формула = Date & " " & Time
Все довольно просто.
Вопрос: Как сравнивать эти поля?
Хочу сделать проверку по времени. Будет плохо, если документ создан 23.02.15 6:32:10, а зарегистрирован или отправлен на согласование 23.02.15 6:30:25. Пользователю позволено вносить дату/время вручную
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 949
609
BIT
259
тип данных время может быть преобразован в текст, НО это не нужно
сравнение обычным больше/меньше/равно
 
  • Нравится
Реакции: serko
S

serko

Возник еще вопрос по дате. Как можно быстро сгенерировать дату на 5 дней больше? Если сегодня 24.02.2015 12:10:32, а я хочу получить 29.02.2015 12:10:32.
 
Мы в соцсетях:

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