Форум программистов, компьютерный форум, киберфорум
HCL Notes: Программирование
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.85/106: Рейтинг темы: голосов - 106, средняя оценка - 4.85
1

Агент по расписанию (изменение в другой базе)

01.03.2006, 11:14. Показов 19656. Ответов 10
Метки нет (Все метки)

Есть агент, который запускается по расписанию.
Он ищет просроченные доки и возвращает их авторам.
При этом должны меняться значения в связанных доках в другой базе, но почему-то ничего не меняется.
Базы лежат в одной папке. Агент подписан сервером и права на вторую базу имеет.


Код
Sub Initialize
On Error Resume Next
Dim session As New NotesSession
Dim db As NotesDatabase
Dim sdb As NotesDatabase
Dim collection As NotesDocumentCollection
Dim doc, bdoc As NotesDocument
Dim ndoc As NotesDocument
Dim memo As NotesDocument
Dim view As NotesView
Dim sview As NotesView
Dim mail(1 To 3) As String

Set db = session.CurrentDatabase
Dim dateTime As New NotesDateTime("12/01/94")
SearchString$ = {Form = "Request" & Status="5" & Priznak_FS!="Признак наличия документов в ФС" & Visible!="0"}
Set collection = db.Search(SearchString$,dateTime,0)
Set db2=session.GetDatabase("","New EPS.NSF",False)
sums=Split(doc.GetFirstItem("RBudgetSum").text,";")

Msgbox collection.Count
If collection.Count>0 Then
Dim dateTimeNow As New NotesDateTime( Now )
tnow=dateTimeNow.DateOnly
tnow=Cdat(tnow)

Call dateTimeNow.AdjustDay( -6 )
tnext=dateTimeNow.DateOnly
tnext=Cdat(tnext)
Msgbox Str(tnow)+" "+Str(tnext)

For i=1 To collection.Count
Set doc = collection.GetNthDocument(i)
Dim dateTimeNow1 As New NotesDateTime( doc.BOKDate(0) )
cdate=dateTimeNow1.DateOnly
cdate=Cdat(cdate)
Msgbox Str(tnow)+" "+Str(tnext)+" "+Str(cdate)+" "+doc.BossName_Ok(0)+" "+Str(tnext-cdate)

If tnext>=cdate Then
Msgbox "Пошло"
Уведомление
Set mdoc = db.CreateDocument
mdoc.Form = "Memo"
mdoc.SendTo = doc.OwnerNotesName(0)
mdoc.BlindCopyTo = "Yulia Neverova/BWD@CORP"
Set rtitem = New NotesRichTextItem( mdoc, "Body" )
Call rtitem.AddNewLine(2)
Call rtitem.AppendText("Ссылка на документ -> ")
Call rtitem.AppendDocLink( doc, "документ " )
Call rtitem.AddNewLine(1)
If tnext-cdate=0 Then
mdoc.Subject = "Уведомление о скором истечении срока заявки"
Call rtitem.AppendText("Заявка находится в статусе <К оплате> 7 дней, документы в ФЭС отсуствуют.")
Call rtitem.AddNewLine(1)
Call rtitem.AppendText("При отсуствии документов, завтра заявка будет возвращена автору автоматически.")
Call rtitem.AddNewLine(1)
mail(1) = doc.ManagerNotesName(0)
Elseif  tnext-cdate>1 Then
mdoc.Subject = "Уведомление об истечении срока заявки"
Call rtitem.AppendText("Заявка находилась в статусе <К оплате> больше 7 дней, а документов в ФЭС на нее не поступало.")
Call rtitem.AddNewLine(1)
Call rtitem.AppendText("По этой причине она возвращена Вам на доработку.")
Call rtitem.AddNewLine(1)
value = Evaluate({FIELD Returned:="Возвращено";FIELD HistoryWhen:=@Now;FIELD HistoryWho:="автоматически";FIELD HistoryAction:="Возвращен";FIELD History:=History:(@Text(HistoryWhen) + " " + HistoryWho + ": "+HistoryAction+": истек срок ожидания документов в ФЭС");@SetField("Status";"0");@SetField("Priznak_FS";"Нет документов");},doc)
Call doc.Save(True, True)

-----------------------------------------------------------------------------------------------
sums=Split(doc.GetFirstItem("RBudgetSum").text,";")
j=0
ids=Arrayunique(Split(doc.GetFirstItem("RIDBudget").text," "))
Forall id In ids
Set bdoc=db2.GetDocumentByUNID(id)
If bdoc.GetFirstItem("RACHistory") Is Nothyng Then Call bdoc.AppendItemValue("RACHistory","")
Set item=bdoc.GetFirstItem("RACHistory")
Call item.AppendToTextList(Cstr(Now) +" возвращено "+Cstr(sums(j)+" "+session.UserName+" -> "+doc.GetFirstItem("RequestDescription").text))
Call bdoc.ReplaceItemValue("RARemainder",Cstr(Cdbl(bdoc.GetFirstItem("RARemainder").text)+Cdbl(sums(j))))
j=j+1
Call bdoc.Save(True, True)
End Forall
-----------------------------------------------------------------------------------------------

mail(1) = doc.ManagerNotesName(0)
End If
mdoc.CopyTo =  mail
Call mdoc.Send(False)
End If
Next
End If
End Sub
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.03.2006, 11:14
Ответы с готовыми решениями:

Агент по расписанию.
Помогите, пожалуйста, разобраться почему не работает агент по расписанию. Раньше с агентами не...

Агент по расписанию
Необходимо чтобы агент запускался три раза в день. Я выбрал &quot;More then once a day&quot;, выставил &quot;Run...

Агент по расписанию..
Всем здравствуйте! Столкнулся вот с такой штукой! У меня есть агент вот его код: Option Public...

Агент по расписанию
Проблема вот такая: Есть агент который запускается по времени и делает backup БД(копирование БД),...

10
06.03.2006, 10:54 2
Так никто не знает из-за чего может быть невыполнение таких команд как измениние значений в поле документа другой базы в агенте по расписанию?
0 / 0 / 0
Регистрация: 04.12.2004
Сообщений: 3,329
06.03.2006, 11:19 3
Используй NotesLog, чтобы отследить действия агента.
Агент может свалится на какой-нибудь ошибке. Например, поле не найдет. Или при использовании метода notesDocument.Send на несуществующем адресате. Т.е. в поле может быть имя, а реально этого человека уже нет.
0
06.03.2006, 13:55 4
Для: Medevic
Сообщения-то как раз отлично высылаются.
Единственное, что не работает (причем все прекрасно работает если запускаешь агент вручную) - это изменение во второй базе данных.
Ок. Попробую.
0 / 0 / 0
Регистрация: 04.12.2004
Сообщений: 3,329
06.03.2006, 14:28 5
Все таки глянь, что с правами. От имени кого запускается агент (свойство Run on behalf of) ?
Может не меняются только richtext поля ?
0
0 / 0 / 0
Регистрация: 28.10.2005
Сообщений: 32
09.03.2006, 10:05 6
Нужна помощь! Есть сервер на нем установлен Domino. клиент в котором есть локальная база с агентом этот агент не запускается по шедулу на локале от имени того кто запускает. Также не запускается по шедулу от имени админа на самом сервере. При запуске руками и тесте - все нормально!!!!
0
12.03.2006, 16:37 7
Может в агенте использоуются UI-классы?
0 / 0 / 0
Регистрация: 05.10.2007
Сообщений: 154
29.04.2008, 23:28 8
привет Всем!
Не могу понять агент работает отлично когда я запускаю в ручную
когда я его поставила по рассписанию ругается на строчке
Set db=ses.GetDatabase("","Dep")
Dim query As String
query=(Form="Profile" & Status="1")
Set coll=db.Search(query, Nothyng, 0)

не понимаю почему, когда вручную запускаю все отлично срабатывает.
и как подписать агент что бы он от сервера работал?

Помогите разобратся плз.
0
0 / 0 / 0
Регистрация: 28.10.2005
Сообщений: 32
01.05.2008, 00:59 9
Цитата Сообщение от nila
привет Всем!
Не могу понять агент работает отлично когда я запускаю в ручную
когда я его поставила по рассписанию ругается на строчке
Set db=ses.GetDatabase("","Dep")
Dim query As String
query=(Form="Profile" & Status="1")
Set coll=db.Search(query, Nothyng, 0)

не понимаю почему, когда вручную запускаю все отлично срабатывает.
и как подписать агент что бы он от сервера работал?

Помогите разобратся плз.
попробуйте выделить значение строковой переменной query символами {},
query={(Form="Profile" & Status="1")}
0
0 / 0 / 0
Регистрация: 05.10.2007
Сообщений: 154
01.05.2008, 05:28 10
Разобралась!
Взяла в профайл установила настроики пути на сервер где база находится.
А вот можете подскзать.
Это всегда надо полный путь прописывать... и что только выход--- в профайле задавать путь?
Или какие то еще другие обходы с этим есть...?




Цитата Сообщение от Fan13tom
попробуйте выделить значение строковой переменной query символами {},
query={(Form="Profile" & Status="1")}
Да за это спасибо!!! буду знать... а то часто так пишу и оно на кавычки ругается!)
сенкс
0
0 / 0 / 0
Регистрация: 28.10.2005
Сообщений: 32
01.05.2008, 10:48 11
Цитата Сообщение от nila
Разобралась!
Взяла в профайл установила настроики пути на сервер где база находится.
А вот можете подскзать.
Это всегда надо полный путь прописывать... и что только выход--- в профайле задавать путь?
Или какие то еще другие обходы с этим есть...?

Да за это спасибо!!! буду знать... а то часто так пишу и оно на кавычки ругается!)
сенкс
На самом деле строка:
Set db=ses.GetDatabase("","Dep")
должна выглядеть так:
Set db=ses.GetDatabase(Name_of_server,DB_name,[Create_on_fail]),
где Name_of_server - имя сервера где лежит БД (может указываться "" если сервер, где выполняется данная сессия и где лежит файл БД, текущий), Domino/RU
DB_name - полный путь к базе (она должна лежать в папке или подпапке папки Data, каталога установки Notes (если код запущен на клиенте) или Domino (если код запущен на сервере)) (например Names.nsf)
[Create_on_fail]) создавать базу если ее нет в указанном месте. boolean true или false.
Советую также поставить Option Declare и явно объявлять все переменные.
Также нужно поставить в код on error.
И дополнительные проверки на непустоту переменных, например if (db is nothyng) then Goto End.
Что касается профайла, то это совсем не обязательно если код нужен для однократного выполнения, то можно все переменные захардкодить, хорошим же тоном useability приложений считается создание документа настроек, как вариант в виде профайла. можно и просто не профайл документ создавать и там указывать настройки. Либо в Нотес.ини (не самый лучший вариант). Все зависит от конкретной задачи.
Успехов в программировании
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.05.2008, 10:48

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Агент по расписанию
Доброго времени!! Сталкнулся с такой проблемкой.Возникла необходимость запускать агента по...

Агент по расписанию
Необходимо создать агент, который будет запускаться только в последние 2 недели и только по средам...

Не работает агент по расписанию
Добрый день! Есть агент, который отправляет файлы по адресу из папки. Так вот по расписанию он...

Java агент по расписанию
Написал агентик который отправляет информацию из документа на ActiveMq сервер. С локальной машины...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.