Форум продуктов IBM Lotus
Общие вопросы => Разработка приложений => Тема начата: K85 от 24 Ноябрь 2009, 12:16:07
-
Добрый день. Появился такой вопрос.
Есть база, в ней создаю документ, нажимаю на кнопку, например Отправить, и пользователю указанному в документе отправляется письмо на почту в виде Задачи (Task). Заполняю Task:
Dim memo As New NotesDocument( db )
memo.Form = "Task"
memo.Subject = note.Title(0)
memo.Importance= note.Priority(0)
memo.CalendarDateTime = note.DateProm(0)
memo.DueDate=note.DateProm2(0)
....
проблема в том, что после того, как пришла задача пользователю и он изменил в самом документе какие-то поля, то в задаче эти изменения не получается отобразить. Подскажите пожалуйста, как это сделать
-
Добрый день. Наконец возвращаюсь к задаче, т.к. не было времени на нее.
Понимаю, что надо проверять было ли изменено какое-либо поле в базе, где создаются документы, а потом менять их в почтовых задачах. Но не знаю как это сделать. Не подскажете?
-
Скажите, может кто-то делал агент, который проверяет соотвествие полей в базе почтовой и еще одной базы. Если делали, то подскажите с чего вообще начать
-
если задачи в почтовом ящике я создаю:
Dim memo As New NotesDocument( db )
memo.Form = "Task"
memo.Subject = db.Title + " : " + note.Title(0)
memo.Importance= note.Priority(0)
memo.CalendarDateTime = note.DateTime(0)
......................
тогда (если я правильно понимаю) мне нужен агент , который будет работать по этому же принципу. Или что-то не то?!
в агенте
для обновления поля - @SetField("pole1" ; обновленное поле);
@True;
SELECT @All
??
а как именно в почтовой базе обновить поле "pole1" ??
-
начал делать агент:
Dim ws As New NotesUIWorkspace
Dim session As New NotesSession
Dim maildb As NotesDatabase
Dim doc As NotesDocument
Dim mailDBName As Variant
Dim uidoc As NotesUIDocument
Set uidoc = ws.CurrentDocument
mailDBName = Evaluate({@MailDbName})
Set maildb = session.GetDatabase(mailDBName(0), mailDBName(1), False)
Set doc = maildb.CreateDocument
doc.Form = "Task"
doc.Subject = uidoc.FieldGetText( "Title" )
Call ws.EditDocument(True, doc, False)
в этой строчке ошибка - doc.Subject = uidoc.FieldGetText( "Title" )
не знаю как надо записать!?
-
Не забывайте приводить текст ошибки!
-
Ошибка: Object variable not set
в строке: doc.Subject = uidoc.FieldGetText( "Title" )
-
Продебажьте, посмотрите почему пустой объект.
-
понял... не в ту сторону начал смотреть.... не подходит такой вариант, его надо запускать в самом доке да и с оздавать новую задачу, а не редактировать старую >:(
-
Dim directory As NotesDbDirectory
Dim db As NotesDatabase
server$ = "NameServer"
Set directory = New NotesDbDirectory( server$ )
dbType% = DATABASE
Set db = directory.GetFirstDatabase( dbType% )
counter% = 0
While Not ( db Is Nothing )
counter% = counter% + 1
Set db = directory.GetNextDatabase
If Cstr(Lcase(Left(db.Filepath, 4))) = "mail" Then
Messagebox db.FilePath,,server$
Dim ProcessDb As New NotesDatabase("", "")
Call ProcessDb.Open(db.Server, db.Filepath)
If ProcesDb.IsOpen Then
Dim collection As NotesDocumentCollection
Set collection = db.Search(.....) мне надо найти документы, которые есть в базе (я так понимаю по их Unid)
If collection.Count > 0 Then
.... ' обновить данные в почтовых базах
End If
End If
End If
Wend
Правильно ли я понял и как найти документы по Unid и обновить данные в почтовых базах?
-
Если известен UNID документа, тогда db.Getdocumentbyunid(Noteunid)
-
пытаюсь проверить...
в строке
Set collection = ProcessDb.Search({Subject = "111"} , Nothing,0)
проверяются все базы, в моей почтовой базе есть задание с такой темой, он доходит до определенного пользователя и выдает ошибку в строке If ProcesDb.IsOpen Then. Ошибка Variant does not contain an object
Не скажете из-за чего?
Агент запускаю админом с Full Access Administration
-
Если добавить "s" к Proces, возможно перестанет.
-
точно спасибо
-
Помогите, пожалуйста. Какой-то ужас с этим агентом.
Не могу сообразить. Сейчас получается, что агент доходит до строки
If ProcesDb.IsOpen Then
и после этой строки, сразу переходит в строку
End If
End If
End If
Wend
Не могу понять, как по полю из рабочей базы искать задачи в почтовой базе пользователей.
-
При записи условия поиска имя поля обрамляется в квадратных скобках:
{[Subject] = "111"}
Причем базы, по которым происходит полнотекстовый поиск должны быть проиндексированы.
А для чего вам нужен ProcessDb? Работайте с db.
-
Помогите, пожалуйста. Какой-то ужас с этим агентом.
Не могу сообразить. Сейчас получается, что агент доходит до строки
If ProcesDb.IsOpen Then
и после этой строки, сразу переходит в строку
End If
End If
End If
Wend
Не могу понять, как по полю из рабочей базы искать задачи в почтовой базе пользователей.
так все-таки ProcesDb или ProcessDb?
-
If ProcessDb.IsOpen Then
Но уже переделываю....
Может поскажете, как найти документы в почтовой базе пользователя, которые имеют одиноковый Unid, с документами в другой базе (в которой и формируется задача)
При сохранении в базе (в которой и формируется задача) документа заполняется NotesId. Если найдена сама почта пользователя Evaluate({@NameLookup([Exhaustive];} + adr + {;"MailFile")}), известен NotesId (Set doc = db.GetDocumentByID(NoteId)), то как потом работать с его базой и как в ней найти домументы?
-
Предлагаю следующий алгоритм:
1. Когда создаете документ в почтовой базе пользователя, получаете UNID создаваемого документа (maildoc.UniversalID).
set maildoc = maildb.CreateDocument
2. Этот UNID сохраняете в специальное поле в документ в рабочей базе (где формируется задача).
Например:
doc.MailDocID = maildoc.UniversalID
call doc.Save (true, true)
3. Если в рабочей базе меняется задача (документ doc) и нужно изменить соответствующую задачу в почтовой базе пользователя, то или создаем агента, запускающегося при изменении документов в рабочей базе, или обрабатываем событие сохранения документа (когда пользователь меняет поля). Агент находит соответствующий документ в почтовой базе по его сохраненному UNID:
set maildoc = maildb.GetDocumentByUNID(doc.MailDocID(0))
maildoc.Subject = doc.Subject(0) 'здесь обновляем задачу в почте
...
call maildoc.save(true,true)
-
В документе при нажатии кнопки указываю, что документ закрыт:
If (note.Status(0)= "0") Then
memo.DueState = 9
memo.DueDateTime=note.DateClosed(0)
memo.Form = "Task"
End If
пробовал memo.DueState = "9"
что не так? на почту приходит письмо, но не указывается, что оно выполненное
-
Form = "TaskNotice" ?
для письма-уведомления вроде бы так должно быть