Форум программистов, компьютерный форум, киберфорум
HCL Notes: Программирование
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.90/199: Рейтинг темы: голосов - 199, средняя оценка - 4.90
0 / 0 / 0
Регистрация: 16.02.2007
Сообщений: 403
1

Хитрозамудренный агент.

04.06.2007, 12:04. Показов 35939. Ответов 30
Метки нет (Все метки)

Суть агента:

Есть БД, назовем ее - "Задачи" в которой хранятся ссылки на документы в других разных базах.
В этой базе "Задачи"есть форма - Memo на которой лежат следующие поля:
SendTo (UserNoteName)
SourseUNIDDoc (UNID - документа)
From - (Название базы в которую ведет ссылка по русски)

Юзер видет только свои документы по признаку что он является SendTo
Он открывает документ и в нем есть ссылка на документ из другой БД.
Он нажимет ссылку и знакомится с доком.

Задача написать агент который будет делать следубщее:

Юзер выделяет колекцию своих документов, и реплейсит поля X1; X2 в документах на которые ведут ссыки. Сложность в том что доки лежат в разных базах, но везде есть указаные поля.

Вот за что бы зацепится???
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.06.2007, 12:04
Ответы с готовыми решениями:

Трабла, агент неправильно изменяет другой агент
Ситуация: есть у меня мега агент, который занимается настройкой сервера, проверяет что в системе...

Java-агент Vs Ls-агент — кто быстрее?
Бэк-агента можно написать как на лс, так и на яве. Кто-нибудь обладает достоверной информацией,...

Агент и время
Не могу ни как разобраться в такой проблемме. Есть форма с полем типа Date/Time - CautionDate ...

Java агент
я написал агент, который берет параметры из профайла - селективную формулу и имя поля, затем по...

30
0 / 0 / 0
Регистрация: 04.12.2004
Сообщений: 3,329
04.06.2007, 12:16 2
Имя базы есть?
Тогда:
1. notesSession.GetDatabase
2. notesDatabase.GetDocumentByUNID
3. notesDocument.ReplaceItemValue
0
0 / 0 / 0
Регистрация: 16.02.2007
Сообщений: 403
04.06.2007, 12:38 3
Ага только имя базы в буквальном смысле database title ;)
Как с этим быть?

Есть еще база "Связи" svazi.nsf в коротой есть список баз (title) и их коды реплик.
Может как-то это зацепить?
Только как???
0
0 / 0 / 0
Регистрация: 04.12.2004
Сообщений: 3,329
04.06.2007, 12:48 4
Прописать нормальный путь. Можно в скрытое поле.
Можно еще, наверное, через notesSession.GetDbDirectory, а потом notesDbDirectory.GetFirstDatabase и notesDbDirectory.GetNextDatabase.

<!--QuoteBegin-LIGHT+5:06:2007, 12:25 -->
<span class="vbquote">(LIGHT @ 5:06:2007, 12:25 )</span><!--QuoteEBegin-->Есть еще база "Связи" svazi.nsf в коротой есть список баз (title) и их коды реплик.
Может как-то это зацепить?
Только как???

[snapback]68109" rel="nofollow" target="_blank[/snapback]?[/quote]
Тогда можно попробовать:
notesDbDirectory.OpenDatabaseByReplicaID

Или notesDatabase.OpenByReplicaID.
0
0 / 0 / 0
Регистрация: 16.02.2007
Сообщений: 403
04.06.2007, 12:50 5
На данный момен картина такая.



Sub Click(Source As Button)

Dim s As NotesSession
Dim db As NotesDatabase
Dim uidoc As NotesUIDocument
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Dim w As NotesUIWorkspace
Dim createDate As Variant
Dim i As Variant
***********************************************
Set s = New NotesSession
Set db = s.CurrentDatabase
Set dc = db.UnprocessedDocuments
Set doc = dc.GetFirstDocument
Set w = New NotesUIWorkspace

**********************************************

Do Until doc Is Nothyng Первый документ

Let From1=doc.From(0) Поле FORM
Let SendTo1=doc.SendTo(0) Поле SendTo
Let SUNID=doc.SourceUNIDDoc(0) Поле SendTo

Messagebox( "Документ " + SUNID + " в БД - " + From1 + " Изменен")

Dim s1 As New NotesSession
Dim db1 As NotesDatabase
Set db1 = s.GetDatabase("server", "svazi")
If Not db1.IsOpen Then
Messagebox "Неудалось открыть базу данных"
Else


Messagebox db1.Title,, "Title of svazi.nsf"

Вот тут вопрос как в открытой теперь БД вытащить документ у которого поле Title = From1
А дальше уже когда вытащин документ, в форме есть поля:
ServerDB
FileDB
ReplicalID

End If

Set doc = dc.GetNextDocument (doc)
Loop


End Sub
0
0 / 0 / 0
Регистрация: 04.12.2004
Сообщений: 3,329
04.06.2007, 12:53 6
<!--QuoteBegin-LIGHT+5:06:2007, 12:37 -->
<span class="vbquote">(LIGHT @ 5:06:2007, 12:37 )</span><!--QuoteEBegin-->Вот тут вопрос как в открытой теперь БД вытащить документ у которого поле Title = From1
А дальше уже когда вытащин документ, в форме есть поля:
ServerDB
FileDB
ReplicalID
[snapback]68115" rel="nofollow" target="_blank[/snapback]?[/quote]
Использовать notesView.GetDocumentByKey
0
0 / 0 / 0
Регистрация: 16.02.2007
Сообщений: 403
04.06.2007, 13:20 7
Врезал такой кусок, ругается на неверный тип, не подскажеш на какю мину я наступил?

Код
            Dim session2 As New NotesSession
Dim db2 As NotesDatabase
Dim view2 As NotesView
Dim doc2 As NotesDocument
key = From1
Set db2 = session2.CurrentDatabase
Set view2 = db2.GetView ("DBTitleLookup" ) Моя вьюшка
Set doc2 = view2.GetDocumentByKey (key )
If Not (doc2 Is Nothyng) Then
Messagebox "$" & doc2.GetItemValue ("Title")(0),, _
"Title"
Else
Messagebox "DBTitleLookup " + key,, "Not found"
End If
0
0 / 0 / 0
Регистрация: 04.12.2004
Сообщений: 3,329
04.06.2007, 13:29 8
Для: LIGHT
Ты посмотри в дебаггере на какую строку ругается.
Кстати, вторую сессию (Dim session2 As New NotesSession) не надо создавать. У тебя уже есть - s.
0
0 / 0 / 0
Регистрация: 16.02.2007
Сообщений: 403
04.06.2007, 13:40 9
А что-то дебагер вообще молчит
Но методом тыка вычисли на что он ругается.
На Set doc2 = view2.GetDocumentByKey (key )
При чем Messagebox key нормально выдает.
Вьюшка DBTitleLookup - существует (это к стати алиас, но пробовал и назваине и алиас, один фиг)
0
1 / 1 / 0
Регистрация: 23.04.2006
Сообщений: 226
04.06.2007, 13:53 10
Для: LIGHT
Вьюшка категоризированна???
0
0 / 0 / 0
Регистрация: 16.02.2007
Сообщений: 403
04.06.2007, 14:17 11
Нет там всего 1 колонка - Title
0
1 / 1 / 0
Регистрация: 23.04.2006
Сообщений: 226
04.06.2007, 14:18 12
Для: LIGHT
поробуй её категоризировать
0
0 / 0 / 0
Регистрация: 16.02.2007
Сообщений: 403
04.06.2007, 15:36 13
Я кажись понял в чем дело.
Смотрите:

Нужно же прочитать в базе связей документ! у которого поле Title=From1
Проще всего найти название Title во вьюшке DBTitleLookup
А дальше открыть документ который постоен по форме Databese и на которой лежат поля Title File Replical

Что-то запутался....
0
0 / 0 / 0
Регистрация: 12.10.2006
Сообщений: 185
04.06.2007, 15:38 14
достаточно отсортировать
0
0 / 0 / 0
Регистрация: 16.02.2007
Сообщений: 403
04.06.2007, 16:11 15
Вроде прбедил, насамом деле была ошибка в коде.
На данный момент я благополучно выдрал ReplicaID и Значение поля Address
Но тут возник затык, поле Address много значное
"Adress/Servers"
"FileName.nsf"

Как бы мне выдрать только последнее?

Ой все вопрос снят!!!
0
0 / 0 / 0
Регистрация: 16.02.2007
Сообщений: 403
04.06.2007, 16:22 16
Еще вопрос по теме.
Как проще всего отыскать документ зная его UNID?
0
1 / 1 / 0
Регистрация: 04.08.2006
Сообщений: 2,950
04.06.2007, 16:25 17
<!--QuoteBegin-LIGHT+5:06:2007, 15:09 -->
<span class="vbquote">(LIGHT @ 5:06:2007, 15:09 )</span><!--QuoteEBegin-->Как проще всего отыскать документ зная его UNID?
[snapback]68169" rel="nofollow" target="_blank[/snapback]?[/quote]

...
Set db = s.CurrentDatabase
Set dc = db.AllDocuments
Set doc = dc.GetFirstDocument
While Not(doc Is Nothyng)
If doc.IsResponse Then
Set pdoc = _
db.GetDocumentByUNID(doc.ParentDocumentUNID)
...
0
0 / 0 / 0
Регистрация: 16.02.2007
Сообщений: 403
04.06.2007, 16:31 18
Код
db.AllDocuments
Хм.. а если документов пару сотен тыщ?
0
1 / 1 / 0
Регистрация: 04.08.2006
Сообщений: 2,950
04.06.2007, 16:34 19
Для: LIGHT
Да Вы на это не сматрите, выше код я привел что бы было понятно что такое db - NotesDataBase

Set db = s.CurrentDatabase
...
Set pdoc = _
db.GetDocumentByUNID(doc.ParentDocumentUNID)
- Finds a document in a database, given the document universal ID (UNID).

Syntax
Set notesDocument = notesDatabase.GetDocumentByUNID( unid$ )
0
0 / 0 / 0
Регистрация: 16.02.2007
Сообщений: 403
04.06.2007, 17:06 20
Понял, победил.
Начались заморочки с реплейсами.
К примеру есть много занчное поле
Reviewer
"User1NotesName"
"User2NotesName"
"User3NotesName"
"User4NotesName"

Среди них должен быть (не обязательно) SendTo (UserNoteName) т.е. User заненсенный в поле SendTo в самом первом документе (первый пост в этой ветке)
Как мне удалить эту строку в много значном поле?

Как бы логику понимаю сложность отыскать именно эту строку в многозначнике
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.06.2007, 17:06

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

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

Java - агент
Проблема с использованием i-text (написанной на java тулзе для формирования pdf-документов) ...

Шедулерный агент
Запускаю агента ночью на сервере, утром смотрю в лог вижу ерор - Error creating product object...

Агент и профайлы
Имеется документ (профайл), который править может только пользователь с правами менеджера. Но...


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

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

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