Форум продуктов IBM Lotus

Продукты IBM Lotus => IBM Lotus Notes & Domino => Тема начата: Mabuta от 26 Апрель 2011, 13:08:12

Название: Проблемы при работе с Folders
Отправлено: 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

Заранее спасибо!!!
Название: Re: Проблемы при работе с Folders
Отправлено: Alla Makshanova от 26 Апрель 2011, 13:39:23
Попробуйте.
Поочередно проверяем каждый документ из коллекции, начиная с первого.  Поле "Заработная плата" документа назовем 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. Там же будут ссылки на примеры
Название: Re: Проблемы при работе с Folders
Отправлено: Mabuta от 26 Апрель 2011, 13:55:17
Спасибо за ответ
Нл на этой строчке скрипт вылетает Set doc = collection.Getfirstdocument(), так как не может получить паремтр Getfirstdocument по сути.
А в хелпе по PutInFolder ничего про удаление нету, я уже смотрел
Название: Re: Проблемы при работе с Folders
Отправлено: Alla Makshanova от 26 Апрель 2011, 14:08:04
Я прошу прощения, отпечатка.
Надо написать без скобочек

Set doc = collection.Getfirstdocument

В Хелп наберите
NotesDocumentCollection class

Там есть список методов, как их правильно использовать
Название: Re: Проблемы при работе с Folders
Отправлено: Mabuta от 26 Апрель 2011, 14:22:51
Я прошу прошения, а можно использовать вот это

Set collection = db.AllDocuments или такого как AllDocuments нету?

И еще если выдаеться ошибка  "Type mismatch" при обращении к строке 

If doc.Zarplata(0) < 4000 Then

чтобы это могло значить?
Название: Re: Проблемы при работе с Folders
Отправлено: Alla Makshanova от 26 Апрель 2011, 14:53:35
AllDocuments есть, использовать можно. В Хелп можно набрать NotesDatabase class, он там перечислен. Ошибка Type mismatch возникает по разным причинам:
1. Попытка оперировать переменными с конфликтующими типами данных.
2. Попытка присвоить значение переменной, которая имеет другой тип данных, если LotusScript не может преобразовать его автоматически.
3. Вы передаете значение как аргумент, который имеет по-разному объявленные типы данных.
4. Вы используете строку как начальное значение.

А поле Zarplata имеет какой тип данных? Текстовый или числовой?
Название: Re: Проблемы при работе с Folders
Отправлено: Alla Makshanova от 26 Апрель 2011, 15:06:02
А чтобы документы не отображались в определенном представлении, можно создать на форме какое-нибудь поле-флажок, менять его значение в цикле проверки уровня заработной платы (например, менять значение с 0 на 1), а в формуле выборки нужного представления указать Select (Form="Форма") & (Поле!=1)
Название: Re: Проблемы при работе с Folders
Отправлено: Mabuta от 26 Апрель 2011, 15:26:50
Спасибо, сечас посмотрю!!!

Zarplata у меня числовой, но я менял на текстовый все равно пишет ту же ошибку.

Ставил Dim Zarplata As Integer, все равно таже ошибка

А на счет удаления с представления, это мне нужно чтоб при повторной выборке по заплате те документы которые мы уже отобрали в папку не участвовали в следущей проверке.

Zarplata мне нужна чтоб сравнивать ее с другой зарплатой (с другого документа).
Просто хочется посмотреть как заработает предложеный Вами скрипт, тогда на основе уже будется делаться все остальное

Заранее спасибо


Название: Re: Проблемы при работе с Folders
Отправлено: Alla Makshanova от 26 Апрель 2011, 15:46:15
Гм, поле зарплата должно быть числовым. Т.к. это поле документа, то оно рассматривается как его свойство, объявлять его Integer в коде бессмысленно.
Тогда воспользуйтесь, например, перед перед циклом If
   MsgBox ("Зарплата = " & doc.Zarplata(0))
Что он выведет? Зарплата ведь не целое число? Скорее всего проблема с типами.
А чтобы документы, отобранные в папку, не участвовали в дальнейших сравнениях, используйте переменную NotesView, т.е. представление, для которого поменяли формулу выборки.

Dim view As NotesView
Set view = db.GetView( "Представление без документов в папке" )
Название: Re: Проблемы при работе с Folders
Отправлено: Mabuta от 26 Апрель 2011, 15:53:17
Оно мне выдало:

Просто False
Название: Re: Проблемы при работе с Folders
Отправлено: Alla Makshanova от 26 Апрель 2011, 16:08:03
А поле типа Number? Или в нем выбраны какие-то дополнительные опции, установлено значение по умолчанию? Если значения в нем имеют формат 0,00? Проблемы с полем
Название: Re: Проблемы при работе с Folders
Отправлено: Alla Makshanova от 26 Апрель 2011, 16:21:46
Формат поля какой (вторая вкладка в свойствах поля)? Decimal?
Название: Re: Проблемы при работе с Folders
Отправлено: Mabuta от 26 Апрель 2011, 17:16:48
Все проверил, да все так как ты и сказал, убрал нули после запитой и все остальное, но все равно ошибка 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
Название: Re: Проблемы при работе с Folders
Отправлено: Mabuta от 26 Апрель 2011, 17:24:40
Скорей всего именно

doc не присваиваеться правильно, может где-то надо указать название этого документа?
Название: Re: Проблемы при работе с Folders
Отправлено: Alla Makshanova от 26 Апрель 2011, 17:33:29
А, так ты в кавычки не то слово взял. Надо

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, затем выполни агент.
Название: Re: Проблемы при работе с Folders
Отправлено: Mabuta от 26 Апрель 2011, 17:46:41
Я сделал дебагером, ошибка вот в чем он невидит переменной Zarplata

Zarplata =

То есть пустое значение
Название: Re: Проблемы при работе с Folders
Отправлено: Alla Makshanova от 26 Апрель 2011, 18:04:10
Нужно написать
If doc.Zarplata(0)< 50000 Then

иначе не видит

Название: Re: Проблемы при работе с Folders
Отправлено: Mabuta от 26 Апрель 2011, 18:24:43
Так а при чем сдесь размер, просто он не видит по идее документ, а затем уже и его свойство Zarplata
Я сечас ищу в хелпе как правильно вытащить документ и его свойство, но пока ничего.

Можна попробовать

zp = doc.Getitemvalue("Zarplata"), но как достать именно вот этот  doc
Название: Re: Проблемы при работе с Folders
Отправлено: Alla Makshanova от 27 Апрель 2011, 10:20:26
Я показываю не на размер, а на 0 в скобочках после Zarplata. Это важно в пространстве значений. А использовать item не очень удобно. Какой вид имеет код агента на данный момент?