Перебор документов во View по полю

P

PeNgViN213

Есть View "Menu", в ней находятся сохраненные документы. Мне нужно написать Агента, который будет перебирать документы по полю, пока не найдет в поле три буквы А. Вот мой код, помогите пожалуйста.


Sub Initialize
Dim ses As New NotesSession
Dim ws As New NotesUIWorkspace
Dim db As NotesDatabase
Dim view As NotesView
Dim doc As NotesDocument
Dim kolvo As Integer
Dim i As Integer

Set db = ses.Currentdatabase
Set view = db.GetView ("Menu")
Set doc = view.Getfirstdocument()
doc = view.GetDocumentByKey(ws.CurrentDocument.FieldGetText(doc), True)
For i = 1 To Len(doc)
If LCase(Mid(doc, i, 1)) Like "[А]" Then
kolvo = kolvo + 1
End If
Next i
If Str(kolvo) = 3 Then
MsgBox "Отправляем сообщение, количесво А=" + Str(kolvo)
Call doc.Send( False, "____" )
Else
Exit Sub
End if
End Sub
 
Последнее редактирование модератором:
A

Anatoly

Что такое doc?
- Set doc = view.Getfirstdocument() ? Ссылка на NotesDocument
- .CurrentDocument.FieldGetText(doc) ? Переменная с именем какого-то поля
- doc = view.GetDocumentByKey( ? Здесь опять NotesDocument
- Mid(doc, i, 1) ? Тут снова как-бы String

Непонятно, через что собираетесь работать: в фоновом режиме через View или в UI через UIView...
 
P

PeNgViN213

Что такое doc?
- Set doc = view.Getfirstdocument() ? Ссылка на NotesDocument
- .CurrentDocument.FieldGetText(doc) ? Переменная с именем какого-то поля
- doc = view.GetDocumentByKey( ? Здесь опять NotesDocument
- Mid(doc, i, 1) ? Тут снова как-бы String

Непонятно, через что собираетесь работать: в фоновом режиме через View или в UI через UIView...
Спасибо за ответ, я новенький, подскажите а в чем различие View и UIView?
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 980
611
BIT
429
Спасибо за ответ, я новенький, подскажите а в чем различие View и UIView?
главный вопрос - почему меняете, бесконтрольно, тип переменной?!
и почему перебираете через цикл (совсем как 1Це проггры ;) )
оператор Like - поддерживает шаблоны, что мешало написать сравнение {*A*A*A*} ?
[doublepost=1500379401,1500379327][/doublepost]
в чем - программировании?
 
P

PeNgViN213

главный вопрос - почему меняете, бесконтрольно, тип переменной?!
и почему перебираете через цикл (совсем как 1Це проггры ;) )
оператор Like - поддерживает шаблоны, что мешало написать сравнение {*A*A*A*} ?
[doublepost=1500379401,1500379327][/doublepost]в чем - программировании?
Спасибо вам за ответ, не могли бы вы мне исправить как нужно, я очень хочу научиться правда!
Я новенький в программировании. Я буду очень благодарен вам.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 980
611
BIT
429
Спасибо вам за ответ, не могли бы вы мне исправить как нужно, я очень хочу научиться правда!
Я новенький в программировании. Я буду очень благодарен вам.
так это, здесь, не работает ;)
обучение - это не суть написания кода за вас
еще момент- задача не ясна и решается странным способом
как следует сделать:
-сформулировать абстрактную задачу (что имеем, чего хотим достичь), типа: есть информация в документах, её надо выбрать по критерию, вывести туда-то
-далее уточняем... Где и какие данные, как к ним осущ. доступ (возможно лучше создать отдельную вьюшку)
 
P

PeNgViN213

так это, здесь, не работает ;)
обучение - это не суть написания кода за вас
еще момент- задача не ясна и решается странным способом
как следует сделать:
-сформулировать абстрактную задачу (что имеем, чего хотим достичь), типа: есть информация в документах, её надо выбрать по критерию, вывести туда-то
-далее уточняем... Где и какие данные, как к ним осущ. доступ (возможно лучше создать отдельную вьюшку)
Вот задача:
Есть документы, в каждом документе есть поля. необходимо чтобы код сделал перебор по этим документам, посмотрел каждое поле, и если в словах, введенных в этих полях в сумме выходит три буквы а, то отправить этот документ текущему пользователю
 

Kizarek86

Green Team
20.07.2007
873
7
BIT
86
Код:
Dim session As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim doc As NotesDocument
Dim j As Long
Set db = session.CurrentDatabase
Set view = db.GetView("Menu")
j = view.FTSearch( "*AAA*", 0 )
Set doc = view.GetFirstDocument()
While Not(doc Is Nothing)
   Call doc.Send( False, "____" )
   Set doc = view.GetNextDocument(doc)
Wend
Call view.Clear

MsgBox "Отправляем сообщение, количесво А=" + Str(j)
 
  • Нравится
Реакции: PeNgViN213
P

PeNgViN213

Код:
Dim session As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim doc As NotesDocument
Dim j As Long
Set db = session.CurrentDatabase
Set view = db.GetView("Menu")
j = view.FTSearch( "*AAA*", 0 )
Set doc = view.GetFirstDocument()
While Not(doc Is Nothing)
   Call doc.Send( False, "____" )
   Set doc = view.GetNextDocument(doc)
Wend
Call view.Clear

MsgBox "Отправляем сообщение, количесво А=" + Str(j)
Спасибо вам за ответ и за потраченное время. Достаточно было мне написать что можно использовать FTSearch, это я как понял поиск в документе. Большое спасибо вам.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 980
611
BIT
429
это я как понял поиск в документе
нет - это полнотекстовый поиск в базе, причем туда (в результат) попадут и РТ поля в документах и аттачи (если есть)!
если буквы д.б. именно "a" то можно сделать вьюшку с отбором полю/ям (кот. анализируем)
типа: SELECT form="myform" & @Like(@UpperCase(field1:field2);"%A%A%A%")
полей, в формуле, может быть и больше, как и форма м.б. не одна...
в случае с формами form=("myform1":"myform2")
 
Последнее редактирование:
P

PeNgViN213

нет - это полнотекстовый поиск в базе, причем туда (в результат) попадут и РТ поля в документах и аттачи (если есть)!
если буквы д.б. именно "a" то можно сделать вьюшку с отбором полю/ям (кот. анализируем)
типа: SELECT form="myform" & @Like(@UpperCase(field1:field2);"%A%A%A%")
полей, в формуле, может быть и больше, как и форма м.б. не одна...
в случае с формами form=("myform1":"myform2")
Кстати я сделал по-другому, через docItemValue, только столкнулся с проблемой, вот код:
Код:
Forall txt in docitemValue ("otvet_1") 'где otvet_1 название поля
For i = 1 To Len(txt)
If LCase(Mid(txt, i, 1)) Like "[А]" Then
kolvo = kolvo + 1
End If
и как мне заставить сделать так, чтобы взялось следующие поле ("otvet_3")

P.S. человек сказал, чтобы я перебирал текст через цикл, не осуждайте.
 
Последнее редактирование модератором:

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 980
611
BIT
429
оформляйте код соответ. тегом (код - там есть LotusScript)
upload_2017-7-21_18-33-48.png

[doublepost=1500651418,1500651259][/doublepost]
человек сказал, чтобы я перебирал текст через цикл, не осуждайте.
ну тогда пусть сам и перебирает
ЗЫЖ это уже превращается в абсурд... если таким способом вас пытаются "научить" - мне в этом процессе участвовать не интересно
 
  • Нравится
Реакции: Сергей Попов
Мы в соцсетях:

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