Не удается получить поле с lotusscript - PullRequest
1 голос
/ 13 марта 2019

У меня есть документ заметок с полями.В этом документе я создал новое поле (назовите его Status), которое имеет следующее текстовое значение: QUEUED.Теперь, если я получу документ из представления по:

Set nvwQueuedOrderLines = dbCurrent.Getview("QueuedOrderLines")
Dim docOrderRegel As NotesDocument
Set docOrderRegel = nvwQueuedOrderLines.GetFirstDocument

И, в конце концов, получу данные:

If docOrderRegel.Status(0) = "QUEUED" Then

...

Затем при проверке пунктовdocOrderRegel в отладчике я не вижу элемента / поля статуса. Но когда щелкаю правой кнопкой мыши свойства документа в документе (в клиенте Lotus), я вижу элемент / поле статуса со значением. Все остальные поля я вижу в отладчике.но только не это поле состояния.Что нужно сделать, чтобы получить поле также в моем объекте docOrderRegel.

Ответы [ 2 ]

4 голосов
/ 15 марта 2019

Я предполагаю, что поле / элемент есть, но вы просто не видите его в сеансе отладчика.

Как обсуждалось в комментариях выше: отладчик LotusScript имеет ограничение на количество элементов, отображаемых в объекте документа. Видимо, это ограничение составляет 256 пунктов. Любой элемент, хранящийся в позиции индекса выше 255 в массиве элементов, не обрабатывается отладчиком.

Одним из решений для вас было бы добавить временный код, подобный следующему:

Dim itemStatus as NotesItem
...
Set itemStatus = docOrderRegel.GetFirstItem("Status")

Таким образом, вы создаете выделенный объект NotesItem из поля Status, делая его независимым от описанного ограничения. После этого вы сможете увидеть содержимое элемента в сеансе отладчика.

3 голосов
/ 14 марта 2019

В Notes / Domino Form (= Design) и Document разные и (более или менее) независимые вещи.

Каждый раз, когда вы создаете документ, он принимает форму НА ЭТОМ МОМЕНТЕ и создает элементы для всех полей, которые находятся в форме при создании документа.

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

НО: они не сохраняются в документе, прежде чем вы это явно сделаете.

Этот процесс - чистый интерфейс.

Примечания НИКОГДА не изменяет существующие документы автоматически только потому, что вы изменили что-то в соответствующей форме (то есть создайте новое поле «Статус» со значением «QUEUED»). Вот почему ваш сценарий не получает элемент (если вы не откроете документ, а поле в форме не станет элементом).

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

Вы можете обновить документы с помощью агента Формулы. Просто выберите «Нет» в качестве цели (это важно, поскольку нам нужно использовать @Commands, а они не работают ни с одной целью) и введите в формулу:

@ Command ([ToolsRefreshSelectedDocs])

затем выберите документы для обновления и запустите на них агент.

Вы также можете использовать LotusScript Agent. Этот нужно запустить на выбранных документах:

Dim ses as New NotesSession
Dim db as NotesDatabase
Dim dc as NotesDocumentCollection
Dim doc as NotesDocument

Set db = ses.CurrentDatabase
Set dc = db.UnprocessedDocuments
Set doc = dc.GetFirstDocument()
While not doc is Nothing
  Call doc.ComputeWithForm( False, False )
  Call doc.Save( True, true, True )
  Set doc = dc.GetNextDocument( doc )
Wend

Конечно, вместо обновления всех документов вы можете добавить этот код в существующий код:

Set nvwQueuedOrderLines = dbCurrent.Getview("QueuedOrderLines")
Dim docOrderRegel As NotesDocument
Set docOrderRegel = nvwQueuedOrderLines.GetFirstDocument

If not docOrderRegel.HasItem( "Status" ) then
  Call docOrderRegel.ComputeWithForm( False, False )
End If

If docOrderRegel.Status(0) = "QUEUED" Then
...