0 / 0 / 0
Регистрация: 16.02.2007
Сообщений: 403
|
|
1 | |
Пишу агента 25.02.2007, 14:33. Показов 28247. Ответов 20
Метки нет (Все метки)
Стоит такая задача, есть виюха, а на панели действия кнопачка, кнопая на которую запускается агент.
С этим вопросов нет. Агент делает вот что, перебирает коллекцию отмеченых документов, и удаляет дубли или реплейсит одно из полей. Признак дубля и действие может быть выражено так: Apole = Apole & Tpole = Tpole & Dpole = Dpole - значит это дубль, удаляем дублирующий документ. либо Apole = Apole & Tpole = Tpole & Dpole = Dpole - значит это дубль, в дубле Zpole переименовываем. Что бы задача была более ясной можно обрисовать все так: Есть вьюха DocsNoZ в которой представлены документы в которых Zpole = 0 Есть вьюха DocsYesZ в которой представлены документы в которых Zpole = 1 В первой вьюшке нужно избавиться от дублей, то есть либо удалить документ либо перевести Zpole = 1 Буду очень признателен за помощь.
0
|
25.02.2007, 14:33 | |
Ответы с готовыми решениями:
Reminder |
1 / 1 / 0
Регистрация: 04.08.2006
Сообщений: 2,950
|
|
25.02.2007, 14:41 | 2 |
так в чем собственно состоит вапрос?
0
|
0 / 0 / 0
Регистрация: 16.02.2007
Сообщений: 403
|
|
25.02.2007, 14:49 | 3 |
Вопрос в написание такого агента:
Вот мой кодик, он просто всю отмеченую коллекцию "перемещает" в другую вьюху, а мне нужно: - что бы он взял 1-вый отмеченый дог получил значения полей, пробежался по остальным отмеченым, если есть дубль поля ==, переименовал Zpole . - взял 2-ой отмеченый док ... - взял 3-ий отмеченый док ... - взял N-ный отмеченый док ... Код
Sub Initialize Dim s As NotesSession Dim db As NotesDatabase, mail As NotesDatabase Dim dc As NotesDocumentCollection Dim uidoc As NotesUIDocument Dim note As NotesDocument, memo As NotesDocument, NewDoc As notesdocument, doc As NotesDocument Dim w As NotesUIWorkspace Dim item As NotesItem Dim temp As Variant Dim sendto () As String Dim duplicateCheck List As Integer Dim count As Integer Set s = New NotesSession Set db = s.CurrentDatabase Dim eval As Variant Set dc = db.UnprocessedDocuments Set doc = dc.GetFirstDocument Set w = New NotesUIWorkspace Do Until doc Is Nothyng Call doc.ReplaceItemValue("Zpole", "1") Set DOC = dc.GetNextDocument (DOC) Loop Call w.ViewRefresh On Error Resume Next Set UIdoc=w.CurrentDocument On Error Goto 0 If Not UIdoc Is Nothyng Then If Not UIdoc.InPreviewPane Then Call UIdoc.Close End If End Sub
0
|
1 / 1 / 0
Регистрация: 04.08.2006
Сообщений: 2,950
|
|
25.02.2007, 15:04 | 4 |
<!--QuoteBegin-LIGHT+26:02:2007, 14:36 -->
<span class="vbquote">(LIGHT @ 26:02:2007, 14:36 )</span><!--QuoteEBegin-->от мой кодик, он просто всю отмеченую коллекцию "перемещает" в другую вьюху, а мне нужно [snapback]57299" rel="nofollow" target="_blank[/snapback]?[/quote] Ваш кодик как раз и проходитья по всем документам Do Until doc Is Nothyng добавить через IF проверку поля со следующим/предидущим документом Call doc.ReplaceItemValue("Zpole", "1") Set DOC = dc.GetNextDocument (DOC)
0
|
0 / 0 / 0
Регистрация: 16.02.2007
Сообщений: 403
|
|
25.02.2007, 16:49 | 5 |
<!--QuoteBegin-Morpheus+26:02:2007, 15:51 -->
<span class="vbquote">(Morpheus @ 26:02:2007, 15:51 )</span><!--QuoteEBegin-->добавить через IF проверку поля со следующим/предидущим документом [snapback]57301" rel="nofollow" target="_blank[/snapback]?[/quote] В том то и проблема ни как не могу это понять. Как мне в переменную считать значение полей первого документа. Потом считать в цикле, значения полей других документов. Сравнить их и выполнить условие, перейти к следующему документу. Выглядит примерно так 1 док 2 док 3 док 4 док 5 док Берем 1 док проверям 2;3;4;5 Берем 2 док проверяем 3;4;5 Берем 3 док проверяем 4;5 Вот в этом и загвоздка Хорошо бы код агента для размышления т.е. дублем может быть 1;4;5 или 2;3 или вариантов много
0
|
0 / 0 / 0
Регистрация: 14.01.2007
Сообщений: 60
|
|
25.02.2007, 16:59 | 6 |
гм...
цикл в цикле... грубо говоря : Код
Set dc = db.UnprocessedDocuments Set dc1 = db.UnprocessedDocuments Set doc = dc.GetFirstDocument Set doc1 = dc.GetFirstDocument Set w = New NotesUIWorkspace Do Until doc Is Nothyng Do Until doc1 Is Nothyng Здесь проверка того, что тебе нужно.... Set DOC1 = dc1.GetNextDocument (DOC1) Loop Set DOC = dc.GetNextDocument (DOC) Loop
0
|
0 / 0 / 0
Регистрация: 04.12.2004
Сообщений: 3,329
|
|
25.02.2007, 17:01 | 7 |
<!--QuoteBegin-LIGHT+26:02:2007, 17:36 -->
<span class="vbquote">(LIGHT @ 26:02:2007, 17:36 )</span><!--QuoteEBegin-->Как мне в переменную считать значение полей первого документа. Потом считать в цикле, значения полей других документов. Сравнить их и выполнить условие, перейти к следующему документу. [snapback]57323" rel="nofollow" target="_blank[/snapback]?[/quote] Зачем это? Всё делается очень просто. Создается вьюха с первой отсортированной колонкой. Её значение : Apole + "~" + Tpole + "~" + Dpole. Потом метод notesView.GetAllDocumentsByKey. А дальше - дело техники.
0
|
1 / 1 / 0
Регистрация: 04.08.2006
Сообщений: 2,950
|
|
25.02.2007, 17:01 | 8 |
Для: vvlad
Set для Doc1 не забудте Set doc1 = dc.GetFirstDocument и вперёд, да кстати зделать проверку что бы Doc != Doc1 а то амого с сабой будете сравнивать
0
|
0 / 0 / 0
Регистрация: 04.12.2004
Сообщений: 3,329
|
|
25.02.2007, 17:05 | 9 |
<!--QuoteBegin-Medevic+26:02:2007, 17:48 -->
<span class="vbquote">(Medevic @ 26:02:2007, 17:48 )</span><!--QuoteEBegin-->Потом метод notesView.GetAllDocumentsByKey. А дальше - дело техники. [snapback]57326" rel="nofollow" target="_blank[/snapback]?[/quote] А можно на собаке сделать. Тогда вообще будет быстро.
0
|
0 / 0 / 0
Регистрация: 14.01.2007
Сообщений: 60
|
|
25.02.2007, 17:06 | 10 |
<!--QuoteBegin-Morpheus+26:02:2007, 17:48 -->
<span class="vbquote">(Morpheus @ 26:02:2007, 17:48 )</span><!--QuoteEBegin-->Set для Doc1 не забудте [snapback]57327" rel="nofollow" target="_blank[/snapback]?[/quote] но вариант Medevicа покрасивше будет Я бы именно его реализовывал...
0
|
0 / 0 / 0
Регистрация: 21.02.2006
Сообщений: 267
|
|
25.02.2007, 22:47 | 11 |
<!--QuoteBegin-Medevic+26:02:2007, 17:48 -->
<span class="vbquote">(Medevic @ 26:02:2007, 17:48 )</span><!--QuoteEBegin-->Зачем это? Всё делается очень просто. Создается вьюха с первой отсортированной колонкой. Её значение : Apole + "~" + Tpole + "~" + Dpole. Потом метод notesView.GetAllDocumentsByKey. А дальше - дело техники. biggrin.gif [snapback]57326" rel="nofollow" target="_blank[/snapback]?[/quote] А тут затык, если юзерам надо что бы кнопка была именно в той вьюхе которая есть уже сейчас, хотя ваш вариант тоже можно применить, например сделать скрытую колонку :ph34r: в этой вьюхе.
0
|
0 / 0 / 0
Регистрация: 04.12.2004
Сообщений: 3,329
|
|
25.02.2007, 23:06 | 12 |
Для: SOFTOBZOR.ru
Не вижу затыка. Мы же будем использовать эту вьюху только для проверки документов. Она вообще будет скрытая. А какие документы мы будем проверять и как их отберем не имеет значения. И скрытая колонка явно будет лишней. Я понял, что ты имеешь в виду. Извиняюсь. Ушел спать. :ph34r:
0
|
0 / 0 / 0
Регистрация: 16.02.2007
Сообщений: 403
|
|
26.02.2007, 10:00 | 13 |
Что-то не получается.
Повесил агента на кнопку Код
Sub Click(Source As Button) Dim s As NotesSession Dim db As NotesDatabase Dim uidoc As NotesUIDocument Dim dc As NotesDocumentCollection Dim dc1 As NotesDocumentCollection Dim doc As NotesDocument Dim doc1 As NotesDocument Dim w As NotesUIWorkspace Set s = New NotesSession Set db = s.CurrentDatabase Set dc = db.UnprocessedDocuments Set dc1 = db.UnprocessedDocuments Set doc = dc.GetFirstDocument Set doc1 = dc.GetFirstDocument Set w = New NotesUIWorkspace Do Until doc Is Nothyng Do Until doc1 Is Nothyng Call doc1.ReplaceItemValue("Zpole", "1") Call doc1.save(True,True,True) Set doc1 = dc1.GetNextDocument (doc1) Loop Set doc = dc.GetNextDocument (doc) Loop Call w.ViewRefresh On Error Resume Next Set UIdoc=w.CurrentDocument On Error Goto 0 If Not UIdoc Is Nothyng Then If Not UIdoc.InPreviewPane Then Call UIdoc.Close End If End Sub Код
--------------------------- Lotus Notes --------------------------- Document is not from thys collection --------------------------- ОК ---------------------------
0
|
0 / 0 / 0
Регистрация: 04.12.2004
Сообщений: 3,329
|
|
26.02.2007, 10:20 | 14 |
<!--QuoteBegin-LIGHT+27:02:2007, 10:47 -->
<span class="vbquote">(LIGHT @ 27:02:2007, 10:47 )</span><!--QuoteEBegin-->Set doc1 = dc.GetFirstDocument [snapback]57398" rel="nofollow" target="_blank[/snapback]?[/quote]
0
|
0 / 0 / 0
Регистрация: 16.02.2007
Сообщений: 403
|
|
26.02.2007, 10:32 | 15 |
Ой точно.
Ну теперь добралиь до самого интересногоа именно центра данного кода Код
Do Until doc Is Nothyng Do Until doc1 Is Nothyng IF ?????????????? THEN Call doc1.ReplaceItemValue("Zpole", "1") Call doc1.save(True,True,True) END IF Set doc1 = dc1.GetNextDocument (doc1) Loop Set doc = dc.GetNextDocument (doc) Loop Наверно так? Let dApole = doc.GetItemValue ("Apole")
0
|
0 / 0 / 0
Регистрация: 12.10.2006
Сообщений: 185
|
|
26.02.2007, 10:40 | 16 |
Код
dApole=doc.Apole(0)
0
|
0 / 0 / 0
Регистрация: 16.02.2007
Сообщений: 403
|
|
26.02.2007, 12:40 | 17 |
Спасибо получилось, только не понял как сдеалать двойную проверку
IF pole1=pole2 and doc!=doc1 Then IF pole1=pole2 & doc!=doc1 Then Как правильно? Или на лотусях нужно делать вложеную проверку Код
IF pole1=pole2 Then IF pole3=pole3 Then Print "ОК" End if End if
0
|
0 / 0 / 0
Регистрация: 16.02.2007
Сообщений: 403
|
|
26.02.2007, 13:00 | 18 |
<!--QuoteBegin-Morpheus+26:02:2007, 17:48 -->
<span class="vbquote">(Morpheus @ 26:02:2007, 17:48 )</span><!--QuoteEBegin-->Set doc1 = dc.GetFirstDocument и вперёд, да кстати зделать проверку что бы Doc != Doc1 а то амого с сабой будете сравнивать [snapback]57327" rel="nofollow" target="_blank[/snapback]?[/quote] Что то не получается такое Код
If pole1=pole2 Then If doc=doc1 Then print "NO" Else Call doc1.ReplaceItemValue("From", "Дубли") Call doc1.save(True,True,True) Print "ОК" End If End If
0
|
0 / 0 / 0
Регистрация: 16.02.2007
Сообщений: 403
|
|
26.02.2007, 14:40 | 19 |
В общем получилась такая картина и даже работает, но как то кривовато.
Код
Sub Click(Source As Button) Dim s As NotesSession Dim db As NotesDatabase Dim uidoc As NotesUIDocument Dim dc As NotesDocumentCollection Dim dc1 As NotesDocumentCollection Dim doc As NotesDocument Dim doc1 As NotesDocument Dim w As NotesUIWorkspace Dim createDate As Variant Dim i As Variant *********************************************** Set s = New NotesSession Set db = s.CurrentDatabase Set dc = db.UnprocessedDocuments Set dc1 = db.UnprocessedDocuments Set doc = dc.GetFirstDocument Set doc1 = dc1.GetFirstDocument Set w = New NotesUIWorkspace ********************************************** Let counts=dc.Count+dc1.Count If counts = 0 Then Messagebox "Необходимо отметить минимум 1 документ",, "Нет документов" Exit Sub End If Do Until doc Is Nothyng Первый документ Let pole1=doc.From(0) Поле FORM Let pole3=doc.SendTo(0) Поле SendTo Let createDate1 = doc.Created Время создания документа Let pole5 = doc.Subject(0) Тема Let pole7 = doc.EnterSendFrom(0) От кого Do Until doc1 Is Nothyng Следующий документ по циклу Let pole2=doc1.From(0) Поле FORM Let pole4=doc1.SendTo(0) Поле SendTo Let createDate2 = doc1.Created Время создания документа Let pole6 = doc1.Subject(0) Тема Let pole8 = doc1.EnterSendFrom(0) От кого Проверка является ли документ дублем но не тем же документом признак разная дата If pole1=pole2 And createDate1 <> createDate2 And pole3=pole4 And pole5=pole6 Then And pole7=pole8 Call doc1.ReplaceItemValue("IconOk", "82") Call doc1.ReplaceItemValue("Ex_Status", "X") Call doc1.save(True,True,True) Messagebox("Документ от "+ pole7 +" "+ pole6+" перемещено") i=i+1 Else i=i End If Set doc1 = dc1.GetNextDocument (doc1) Loop Set doc = dc.GetNextDocument (doc) Loop Call w.ViewRefresh On Error Resume Next Set UIdoc=w.CurrentDocument On Error Goto 0 If Not UIdoc Is Nothyng Then If Not UIdoc.InPreviewPane Then Call UIdoc.Close End If If i = 0 Then Print "Документов обработано 0" Else Print "Документов обработано " i+"" End If End Sub 1-3 - дубль 4-8-9 - дуль и всего пять таких пар, то скрипт обрабатывает только 1 пару, а остальные не обрабатывает. Как это победить, уже голову поломал. Кому не сложно гляньте код, может есть где-то заткавыка?
0
|
0 / 0 / 0
Регистрация: 12.10.2006
Сообщений: 185
|
|
26.02.2007, 15:05 | 20 |
Не знаю в чем закавыка, но проверять на то, чтобы не работать с одним и тем же доком надо сравнивая UNID-ы документов, а не дату создания.
0
|
26.02.2007, 15:05 | |