Решено Локальная Реплика Архива

R4z0R

Green Team
06.08.2009
269
7
BIT
0
Приветствую, форумчане!
Тоха подсказал, что локальную реплику архива можно сделать агентом. Я только с @-формулами знаком, поправьте если что не так.
Есть сервер с архивами ARC/DOM/ORG и почтовый сервер MAIL/DOM/ORG, архивы в стандартном формате archives/a_familiaio.nsf, нужно при открытии ПЯ создать локальную реплику в папке Data/archives/a_familiaio.nsf
За основу я взял
Код:
Sub Initialize

Dim session As New NotesSession

Dim adminp As NotesAdministrationProcess

Set adminp = _

session.CreateAdministrationProcess("ARC/DOM/ORG")

noteid$ = adminp.CreateReplica("ARC/DOM/ORG", _

"archives/a_familiaio.nsf", _

"Local")

If noteid$ <> "" Then

Dim db As New NotesDatabase("ARC/DOM/ORG", "admin4")

Dim ws As New NotesUIWorkspace

Call ws.EditDocument(False, db.GetDocumentByID(noteid$))

End If

End Sub
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
1. прекращай писать с "_"
2. попробуй запустить и посмотреть что получится.

Но думаю что ничего не получится. Если ничего не путаю - это метод междусерверной репликации.
Думаю имеет смысл посмотреть другой метод
Код:
Set notesDatabaseReplica = notesDatabase .CreateReplica( newServer$ , newDbFile$ )
 

R4z0R

Green Team
06.08.2009
269
7
BIT
0
не нашел примера, как сделать локальную реплику. Подскажите код для агента (или кнопки), чтобы при открытии почты (нажатии на кнопку) архив с сервера реплицировался в аналогичную папку в Data у юзера на компе. Или ткните в пример
 

erdi

Green Team
20.08.2008
264
17
BIT
0
Код:
 Dim ses As New NotesSession
Dim db As NotesDatabase
Dim replica As NotesDatabase
Set db = ses.CurrentDatabase
Set replica = db.CreateReplica( "", db.FilePath )
 

R4z0R

Green Team
06.08.2009
269
7
BIT
0
для моего случая надо подредактировать так?:
Код:
Dim ses As New NotesSession
Dim db As NotesDatabase
Dim replica As NotesDatabase
Set db = ses.CurrentDatabase
Set replica = db.CreateReplica( "ARC/DOM/ORG ", "archives\a_"+db )
[DOUBLEPOST=1438346726,1438346553][/DOUBLEPOST]ругается на эту строчку
Set replica = db.CreateReplica( "ARC/DOM/ORG ", "archives\a_"+db )
 

duchan

Green Team
20.09.2006
128
11
BIT
249
во-первых, "db" - это объект типа NotesDatabase и плюсаовать его к строке нельзя (!)
во-вторых, Вам реплика нужна на "ARC/DOM/ORG " или локально? если локально, то надо первый параметр "", а так вы пытаетесь создать реплику на "ARC/DOM/ORG ", где пользователю вероятно не даны права на создание реплик (ну и пробел убирите в конце на всякий случай)
 
Последнее редактирование модератором:

R4z0R

Green Team
06.08.2009
269
7
BIT
0
т.е нужно так?
Код:
Dim ses As New NotesSession
Dim db As NotesDatabase
Dim replica As NotesDatabase
Set db = ses.CurrentDatabase
Set replica = db.CreateReplica( "", "archives\a_"+ses.CurrentDatabase)
мне нужно создать локальную реплику архива, находящегося на ARC/DOM/ORG в папке archives с префиксом "a_"
 
Последнее редактирование модератором:
B

Baneslaer

я же вам ответил на "соседнем" форуме про то каким должен быть алгоритм для решения этой задачи.

Цитирую:

Если ничего не забыл, то алгоритм будет выглядеть так:
1. Получаем коллекцию архивных профайл документов из ПЯ пользователя
2. Из этих документов получаем путь к архивному серверу, а также к архивным базам пользователя (их может быть далеко не одна).
Для каких нужно делать реплику - решайте сами.
3. Из нотес.ини пользователя получаем путь к data directory
4. Создаем реплику по пути data directory + "путь к архивной бд"
5. Исправляем в доке профайла архивный сервер на Local
6. Добавляем обработчик ошибок.
 

R4z0R

Green Team
06.08.2009
269
7
BIT
0
я же вам ответил на "соседнем" форуме про то каким должен быть алгоритм для решения этой задачи.
...
спасибо за ответ, но нужен не алгоритм, а код агента, т.к в программировании я не силен. Архив у всех один единственный, они все лежат в одной папке на сервере, префикс у всех одинаковый
 

R4z0R

Green Team
06.08.2009
269
7
BIT
0
Если db - это и есть архив на сервере ARC/DOM/ORG, то
Set replica = db.CreateReplica( "", db.FilePath)
нет, вот тут для меня и загвоздка. Грубо говоря искомая база - это "a_"+текущая база. Они имеет имя a_familiaio.nsf, а текущая база familiaio.nsf
 

erdi

Green Team
20.08.2008
264
17
BIT
0
Код:
 Dim ses As New NotesSession
Dim db As NotesDatabase
Dim dba As NotesDatabase
Set db=ses.CurrentDatabase
Set dba=New NotesDatabase(db.Server, "archives\a_"+db.FileName)
If dba.Title="" Then Messagebox "БД не найдена"
Call dba.CreateReplica("",dba.FilePath)
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
470
нет, вот тут для меня и загвоздка. Грубо говоря искомая база - это "a_"+текущая база. Они имеет имя a_familiaio.nsf, а текущая база familiaio.nsf
БД сервера - уже обозначена (как объект) и какой её путь - уже не суть (после получения объекта)
сервер задается по имени, в случае с "локальной" машиной - пустая строка
имя БД - задаете сами - если есть на то определенное воззрение
[DOUBLEPOST=1438609447,1438609359][/DOUBLEPOST]
Set dba=New NotesDatabase(db.Server, "archives\a_"+db.FileName)
If dba.Title="" Then Messagebox "БД не найдена"
Call dba.CreateReplica("",dba.FilePath)
здесь чего-то напутано
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
470
@erdi, если БД не найдена - от чего будет реплика?
 

erdi

Green Team
20.08.2008
264
17
BIT
0
если БД не найдена - от чего будет реплика?
звиняйте.....забыл exit sub
Код:
Dim ses As New NotesSession
Dim db As NotesDatabase
Dim dba As NotesDatabase
Set db=ses.CurrentDatabase
Set dba=New NotesDatabase(db.Server, "archives\a_"+db.FileName)
If dba.Title="" Then 
Messagebox "БД не найдена"
exit sub
end if
Call dba.CreateReplica("",dba.FilePath)
 

R4z0R

Green Team
06.08.2009
269
7
BIT
0
Код:
 Dim ses As New NotesSession
Dim db As NotesDatabase
Dim dba As NotesDatabase
Set db=ses.CurrentDatabase
Set dba=New NotesDatabase(db.Server, "archives\a_"+db.FileName)
If dba.Title="" Then Messagebox "БД не найдена"
Call dba.CreateReplica("",dba.FilePath)
на эту строку ругается
Код:
If dba.Title="" Then Messagebox "БД не найдена"
 

duchan

Green Team
20.09.2006
128
11
BIT
249
Код:
 Dim ses As New NotesSession
Dim db As NotesDatabase
Dim replica As NotesDatabase
Set db = ses.CurrentDatabase
Set replica = db.CreateReplica( "", "archives\a_"+db.FileName )
 

erdi

Green Team
20.08.2008
264
17
BIT
0
пора вносить ясность....а то все понимают по-разному что требуется.....еще раз перечитал все что было написано......
я понял, что есть 2 сервера: почтовый и архивный. На архивном уже содержится архив(ы) почтовых ящиков. Необходимо при открытии ПЯ пользователя - делать реплику с архивного сервера на локальный сервер.
Я правильно описал задачу? А то мы все предлагаем правильные решения и в то же время они не правильные
если я все правильно описал, то тогда мой ранее код необходимо подредактировать
Код:
Dim ses As New NotesSession
Dim db As NotesDatabase
Dim dba As NotesDatabase
Set db=ses.CurrentDatabase
Set dba=New NotesDatabase("ARC/DOM/ORG", "archives\a_"+db.FileName)
If dba.Title="" Then
Messagebox "БД не найдена"
exit sub
end if
Call dba.CreateReplica("",dba.FilePath)
 
  • Нравится
Реакции: R4z0R
Мы в соцсетях:

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