Форум продуктов IBM Lotus
Продукты IBM Lotus => IBM Lotus Notes & Domino => Тема начата: Mabuta от 26 Апрель 2011, 13:08:12
-
Добрый день уважаемы знатоки!
Может пишу не в том разделе, если чего перенесу.
У меня такая проблема:
У меня есть view с документами, мне нужно выбирать документы по условию, ну допустим зарплата < 5000 грн и помещать этот документ в созданый заранее Folder, при этом удалять этот документ из view.
Пока я выбираю документы таким образом:
Sub Click(Source As Button)
Dim session As New NotesSession
Dim db As NotesDatabase
Dim collection As NotesDocumentCollection
Set db = session.CurrentDatabase
Set collection = db.UnprocessedDocuments
Call collection.PutAllInFolder( "Відповідні вакансії резюме" )
End Sub
Подскажите пожалуйста в каком хотя бы направлении идти, или ссылку на источник, ОЧЕНЬ нужна помощь!!!
Вот мыло garnett@bigmir.net
Заранее спасибо!!!
-
Попробуйте.
Поочередно проверяем каждый документ из коллекции, начиная с первого. Поле "Заработная плата" документа назовем Pay, поменяйте его имя на Ваше
Dim doc As NotesDocument
Dim doc1 As NotesDocument
Set doc = collection.Getfirstdocument()
While Not(doc Is Nothing)
Set doc1 = collection.GetNextDocument(doc)
If doc.Pay(0)<5000 Then 'проверяем размер зарплаты
Call doc.PutInFolder("имя папки",True)
End If
Set doc = doc1 'переходим к следующему документу
Wend
В дизайнере откройте, пожалуйста, Help>Help Contents и наберите PutInFolder method. Там же будут ссылки на примеры
-
Спасибо за ответ
Нл на этой строчке скрипт вылетает Set doc = collection.Getfirstdocument(), так как не может получить паремтр Getfirstdocument по сути.
А в хелпе по PutInFolder ничего про удаление нету, я уже смотрел
-
Я прошу прощения, отпечатка.
Надо написать без скобочек
Set doc = collection.Getfirstdocument
В Хелп наберите
NotesDocumentCollection class
Там есть список методов, как их правильно использовать
-
Я прошу прошения, а можно использовать вот это
Set collection = db.AllDocuments или такого как AllDocuments нету?
И еще если выдаеться ошибка "Type mismatch" при обращении к строке
If doc.Zarplata(0) < 4000 Then
чтобы это могло значить?
-
AllDocuments есть, использовать можно. В Хелп можно набрать NotesDatabase class, он там перечислен. Ошибка Type mismatch возникает по разным причинам:
1. Попытка оперировать переменными с конфликтующими типами данных.
2. Попытка присвоить значение переменной, которая имеет другой тип данных, если LotusScript не может преобразовать его автоматически.
3. Вы передаете значение как аргумент, который имеет по-разному объявленные типы данных.
4. Вы используете строку как начальное значение.
А поле Zarplata имеет какой тип данных? Текстовый или числовой?
-
А чтобы документы не отображались в определенном представлении, можно создать на форме какое-нибудь поле-флажок, менять его значение в цикле проверки уровня заработной платы (например, менять значение с 0 на 1), а в формуле выборки нужного представления указать Select (Form="Форма") & (Поле!=1)
-
Спасибо, сечас посмотрю!!!
Zarplata у меня числовой, но я менял на текстовый все равно пишет ту же ошибку.
Ставил Dim Zarplata As Integer, все равно таже ошибка
А на счет удаления с представления, это мне нужно чтоб при повторной выборке по заплате те документы которые мы уже отобрали в папку не участвовали в следущей проверке.
Zarplata мне нужна чтоб сравнивать ее с другой зарплатой (с другого документа).
Просто хочется посмотреть как заработает предложеный Вами скрипт, тогда на основе уже будется делаться все остальное
Заранее спасибо
-
Гм, поле зарплата должно быть числовым. Т.к. это поле документа, то оно рассматривается как его свойство, объявлять его Integer в коде бессмысленно.
Тогда воспользуйтесь, например, перед перед циклом If
MsgBox ("Зарплата = " & doc.Zarplata(0))
Что он выведет? Зарплата ведь не целое число? Скорее всего проблема с типами.
А чтобы документы, отобранные в папку, не участвовали в дальнейших сравнениях, используйте переменную NotesView, т.е. представление, для которого поменяли формулу выборки.
Dim view As NotesView
Set view = db.GetView( "Представление без документов в папке" )
-
Оно мне выдало:
Просто False
-
А поле типа Number? Или в нем выбраны какие-то дополнительные опции, установлено значение по умолчанию? Если значения в нем имеют формат 0,00? Проблемы с полем
-
Формат поля какой (вторая вкладка в свойствах поля)? Decimal?
-
Все проверил, да все так как ты и сказал, убрал нули после запитой и все остальное, но все равно ошибка False, вот
Sub Click(Source As Button)
Dim session As New NotesSession
Dim db As NotesDatabase
Dim collection As NotesDocumentCollection
Set db = session.CurrentDatabase
Set collection = db.AllDocuments
Dim doc As NotesDocument
Dim doc1 As NotesDocument
Set doc = collection.GetFirstDocument
While Not(doc Is Nothing)
Set doc1 = collection.GetNextDocument(doc)
Msgbox (Зарплата = "& doc.Zarplata(0)")
If doc.Zarplata < 5000 Then 'проверяем размер зарплаты
Call doc.PutInFolder("Відповідні вакансії резюме",True)
End If
Set doc = doc1 'переходим к следующему документу
Wend
End Sub
-
Скорей всего именно
doc не присваиваеться правильно, может где-то надо указать название этого документа?
-
А, так ты в кавычки не то слово взял. Надо
Msgbox ("Зарплата = " & doc.Zarplata(0))
А у тебя
Msgbox (Зарплата = "& doc.Zarplata(0)")
Вот он и понять не может, что это за строковая переменная
Проверь, что он выведет
А по поводу присвоения doc попробуй тогда со скобочками
Set doc = collection.GetFirstDocument()
как в примере из Хелп
Sub Initialize
Dim session As New NotesSession
Dim db As NotesDatabase
Dim collection As NotesDocumentCollection
Dim doc As NotesDocument
Set db = session.CurrentDatabase
Set collection = db.AllDocuments
Set doc = collection.GetFirstDocument()
While Not(doc Is Nothing)
If doc.HasEmbedded Then
Call detachFiles( doc )
End If
Set doc = collection.GetNextDocument(doc)
Wend
End Sub
Прогони пошагово. В Notes Client выбери Tools>Debug LotusScript, затем выполни агент.
-
Я сделал дебагером, ошибка вот в чем он невидит переменной Zarplata
Zarplata =
То есть пустое значение
-
Нужно написать
If doc.Zarplata(0)< 50000 Then
иначе не видит
-
Так а при чем сдесь размер, просто он не видит по идее документ, а затем уже и его свойство Zarplata
Я сечас ищу в хелпе как правильно вытащить документ и его свойство, но пока ничего.
Можна попробовать
zp = doc.Getitemvalue("Zarplata"), но как достать именно вот этот doc
-
Я показываю не на размер, а на 0 в скобочках после Zarplata. Это важно в пространстве значений. А использовать item не очень удобно. Какой вид имеет код агента на данный момент?