• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Отображение задачи в календаре

  • Автор темы oleg7
  • Дата начала
O

oleg7

агент запускаю админом, проверяю и если указать админа (т.е. открывается база админа) и лично себя выбираю в Исполнителях, все равно пишет false
maildb данные указываются [False, "_пользователь_", "", "",...]
проиндексировал почтовую базу, все равно пишет False в Msgbox "IsOpen" =+Cstr(mailDB.IsOpen)
параметр ISOPEN в maildb равен TRUE, если смотреть дебагером
 
H

hosm

проиндексировал почтовую базу, все равно пишет False в Msgbox "IsOpen" =+Cstr(mailDB.IsOpen)
параметр ISOPEN в maildb равен TRUE, если смотреть дебагером
так не бывает :)
проверьте Msgbox "IsOpen=" & Cstr(mailDB.IsOpen) после Set mailDB = s.GetDatabase(...)
 
O

oleg7

OKEN
да ISOpen=TRUE, на 20-м проходе в дебагере до меня дошло, где была ошибка


Добавлено: если далее выполнить
Код:
Set collection = mailDB.Search({(DocUNID="} & doc.UniversalId & {")}, Nothing, 0)
то в collection определяется UniversalId документа, который в БД1
А как в этом документе обновить данные?
 
O

oleg7

насколько я понял, то после Msgbox "IsOpen=" & Cstr(mailDB.IsOpen)
необходимо найти документ и обновить необходимые поля. Делаю так:
Код:
Set maildoc = mailDB.Search({(DocUNID="} & doc.UniversalId & {")}, Nothing, 0)
maildoc.Subject = doc.Title(0)
выдает ошибку: instance member Subject does not exist
Что делаю не так?
 
N

nvyush

насколько я понял, то после Msgbox "IsOpen=" & Cstr(mailDB.IsOpen)
необходимо найти документ и обновить необходимые поля. Делаю так:
Код:
Set maildoc = mailDB.Search({(DocUNID="} & doc.UniversalId & {")}, Nothing, 0)
maildoc.Subject = doc.Title(0)
выдает ошибку: instance member Subject does not exist
Что делаю не так?

У коллекции доков нет свойства Subject ;)
Должно быть что-то вроде
Код:
Set maildocs = mailDB.Search({(DocUNID="} & doc.UniversalId & {")}, Nothing, 0)
Set maildoc = maildocs.GetFirstDocument
Do Until maildoc Is Nothing
Call maildoc.ReplaceItemValue("Subject", doc.GetItemValue("Title"))
Set maildoc = maildocs.GetNextDocument(maildoc)
Loop

З.Ы. Да почитайте наконец справку хотя бы по классам NotesDatabase, NotesDocument, NotesDocumentCollection ;)
 
H

hosm

внутри цикла после изменения документа его сохранять надо, т.е. примерно так:
Код:
 Call maildoc.ReplaceItemValue("Subject", doc.GetItemValue("Title"))
call maildoc.Save(True, True)
Set maildoc = maildocs.GetNextDocument(maildoc)
 
O

oleg7

OKEN и nvy огромное Вам спасибо!!!
получилось. Агент обновляет поля поля
 
N

nvyush

OKEN и nvy огромное Вам спасибо!!!
получилось. Агент обновляет поля поля

Только не забудьте убрать msgbox из агента, нужно было только для отладки. Чтобы обновлялись почтовые базы других пользователей, агент нужно запускать RunOnServer с соответствующими правами. Не вдаваясь в подробности — установите на второй вкладке свойств агента run on behalf of... имя сервера и подпишите сервером. Возможно, придётся поднять security level (там же). Удачи.
 
O

oleg7

помогите, пожалуйста еще. В этом агенте поле тема обновляется:
Call maildoc.ReplaceItemValue("Subject", doc.GetItemValue("Title"))

А если также пытаюсь обновить поле Даты, то ничего не происходит.
Call maildoc.ReplaceItemValue("DueDate", doc.GetItemValue("dDate"))
Как правильно записать обновление даты?
 
N

nvyush

помогите, пожалуйста еще. В этом агенте поле тема обновляется:
Call maildoc.ReplaceItemValue("Subject", doc.GetItemValue("Title"))

А если также пытаюсь обновить поле Даты, то ничего не происходит.
Call maildoc.ReplaceItemValue("DueDate", doc.GetItemValue("dDate"))
Как правильно записать обновление даты?
Проверьте правильность имён и типов полей. Кстати, а вызов
Код:
Call maildoc.ReplaceItemValue("DueDate", doc.GetItemValue("dDate"))
случайно не после
Код:
Call maildoc.Save(True, True)
? Должно быть перед, иначе не сохраняются внесенные изменения.
 
H

hosm

проверьте в свойствах на Вашем документе у поля dDate Data Type (Time/Date) и его значение (самая нижняя строчка), т.е. типа такого:

Field Name: dDate
Data Type: Time/Date
...
Field Flags: SUMMARY

12.01.2010 18:34:45 ZE2
 
O

oleg7

а как сделать, чтобы: если в поле Status 0 (т.е. Закрыта), тогда в почтовой в Task в поле DisplayStatus должно быть Завершенная , если Status=1, тогда DisplayStatus - Выполняющаяся
делаю так :
Код:
If doc.GetItemValue("Status")=0 Then 
Call maildoc.ReplaceItemValue("DisplayStatus", "Завершенная")
End If
.........
Выдает ошибку Type mismatch
Поле Status - Dialog list (Computed when compose) - В работе | 1, Закрыта | 0 ....
 
H

hosm

кстати, если анализировать больше одного-двух значений, может, стоит посмотреть в сторону такой конструкции:
select case doc.GetItemValue("Status")(0)
case "0"
...
case "1"
...
end select
 
O

oleg7

столкнулся с такой проблемой: если пользователь изменит ФИО в поле, в котором указан исполняющий задачу, то задача будет созданна у нового исполнителя и у него все будет выполнятся правильно. а вот у того, кто был указан первоночально в поле, задача останется мертвой.
Удалить ее я не могу, т.к. агент работает по ФИО из поля испосполнителя
Что можно сделать?
 
N

nvyush

столкнулся с такой проблемой: если пользователь изменит ФИО в поле, в котором указан исполняющий задачу, то задача будет созданна у нового исполнителя и у него все будет выполнятся правильно. а вот у того, кто был указан первоночально в поле, задача останется мертвой.
Удалить ее я не могу, т.к. агент работает по ФИО из поля испосполнителя
Что можно сделать?
Можно при открытии документа в БД1 на редактирование запоминать "старый" список исполнителей во временном computed-for-display поле. При сохранении документа сравнивать с новым списком исполнителей и тем, кто выбыл, удалять задачу.
 
H

hosm

как вариант: действие при смене исполнителя (уже после создания задачи для исполнителей) должно сохранять прежнего исполнителя, и после изменения значения (и сохранения документа) проверить, изменился ли исполнитель или нет.
Если изменился, найти задачу прежнего исполнителя и если она еще не выполнена, то отмечать ее как выполненную (посмотреть в стандартном шаблоне, что делается при выполнении задачи), либо вообще задачу удалять?


Добавлено: nvy
cfd разве что с @thisvalue покатит - оно ж при уи-сохранении пересчитывается...
наверно, можно при открытии запихнуть прежних в глобальную переменную на форме, если документ не переоткрывается кодом?
 
O

oleg7

запоминать "старый" список
такое поле есть в документе. То есть необходимо сравнивать содержимое старого поля и нового и потом в почтовых ящиках тех, кто не совпал удалять задачу?
:ya_lamo:

OKEN
можно конечно и ставить пометку о выполнении, но в принципе пользователь задачу не выполнил. а просто задача была перенаправлена
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!