Перемещение документов в другую базу

Lesik

Well-known member
06.08.2009
76
0
#1
Здравствуйте,
появилась необходимость сделать что-то вроде архивации писем. Хочу попробовать написать агента по переносу выделенных документов с базы 1 в базу 2 по кнопке.
В Lotus scriptе я пока новичек. Изрыл хелп, ничего по переносу не нашёл(((
 
K

Klido

#2
CopyToDatabase method
Copies a document into the specified database.

Defined in
NotesDocument
 

Cleric-Lviv

Lotus team
03.01.2008
600
0
#3
Здравствуйте,
появилась необходимость сделать что-то вроде архивации писем. Хочу попробовать написать агента по переносу выделенных документов с базы 1 в базу 2 по кнопке.
В Lotus scriptе я пока новичек. Изрыл хелп, ничего по переносу не нашёл(((
вчера писал подобное... только мне надо било респонзи:)

а вот для вас пример с сайта, адрес которого я предлагаю виучить наизусть www.openntf.org

Код:
(Declarations)

Dim ns As NotesSession
Dim ndb As NotesDatabase
Dim ArchiveDb as NotesDatabase
Dim collection As NotesDocumentCollection
Dim kidDocs as NotesDocumentCollection
Dim kid as NotesDocument
Dim parent As NotesDocument
Dim switchDoc As NotesDocument

Sub Initialize

Set ns = New NotesSession
Set ndb = ns.CurrentDatabase
Set ArchiveDb = ns.GetDatabase('your code here')
Set collection = ndb.UnprocessedDocuments
Set parent = collection.GetFirstDocument

If ArchiveDb.Title = "" Then
Msgbox("Couldn't find the Archive Database. Please contact the Notes Admins.")
ExitSub
End If

Do Until parent is Nothing
Call parent.CopyToDatabase(ArchiveDb)
Set kidDocs = parent.Responses
Set kid = kidDocs.GetFirstDocument
Do Until kid is Nothing
Call kid.CopyToDatabase(ArchiveDb)
Set switchDoc = kid
Set kid = kidDocs.GetNextDocument(kid)
Call switchDoc.Remove(True)
Loop
Set switchDoc = parent
Set parent = collection.GetNextDocument(parent)
Call switchDoc.Remove(True)
Loop

End Sub
 

hosm

* so what *
18.05.2009
2 442
6
#5
TIA, в очередной раз спасибо за внимательность :angry2:
Cleric-Lviv - вот тема Как сделать, что б при удалении документа в БД, сразу же удалялись все его респонсы, там есть ссылка на пример из КБ
(там в квери непонятно - вроде могут быть баги при переборе документов коллекции, если респонсы туда попадут вместе с основными, но в DeleteResponses вроде корректный рекурсивный обход респонсов (не совсем поняла, правда, зачем надо Call resp.Save(True, True))
но это так, навскидку, одним взглядом, код не пробовала...)
 

Cleric-Lviv

Lotus team
03.01.2008
600
0
#6
TIA

я просто превел пример, чтоб человек посмотрел хоть в какую степь надо ити,....

что человек хотел? перенести письма из бази "А" в базу "Б"
в коде есть строки которие ему нужни, надобно просто изучить ккод.

Set ndb = ns.CurrentDatabase - база "А"
Set ArchiveDb = ns.GetDatabase('your code here') - База "Б"
Set collection = ndb.UnprocessedDocuments - колекция документов - просто пример какой может бить колекция
Call parent.CopyToDatabase(ArchiveDb) - как скопировать документ

так в чем плохой пример? тем что не готовий код? дальше если что не вийдет, человек напишет.......


OKEN

ви наверно ето для Lesik писали :angry2:
 

Lesik

Well-known member
06.08.2009
76
0
#8
Спасибо Klido :rolleyes: Направил на путь истинный)))
после небольших манипуляций с образцом из хелпа получил следующий вариант:

Код:
Sub Initialize
Dim session As New NotesSession
Dim db As NotesDatabase
Dim db2 As NotesDatabase
Dim doc As NotesDocument
Dim doccoll As NotesDocumentCollection
Set db = session.CurrentDatabase
Const dbfile="база.nsf"
Dim flag
Set db2 = New NotesDatabase("", "")

Set doccoll = db.UnprocessedDocuments
If doccoll.Count>0 Then
Set doc=doccoll.GetFirstDocument
flag = db2.Open( "сервер", dbfile )
While Not doc Is Nothing
Call doc.CopyToDatabase(db2)
Set doc=doccoll.GetNextDocument(doc)
Wend			
Call doccoll.RemoveAll( False)
End If
End Sub
 

Lesik

Well-known member
06.08.2009
76
0
#9
В ходе архивирования возникла проблема: хоть письма и переносятся в базу но попадают они в allDocument. Пришлось в базе "Б" делать перенос документов следующим образом:

Код:
Sub Initialize

Dim s As New NotesSession
Dim db As NotesDatabase
Dim fDoc As NotesDocument 
Dim W As New NotesUIWorkspace
Dim ad As NotesView 
Dim aDoc As NotesDocument 
Dim fUNID() As String 
Dim i As Long 
Dim deldate As NotesItem
Dim Chair1 As NotesItem

i =0
Set db = s.CurrentDatabase

ReDim fUNID(0) 


ForAll view In db.views
If view.IsFolder And Not view.Name=("($All)") Then
Set fDoc = view.GetFirstDocument
While Not fDoc Is Nothing
ReDim Preserve fUNID(i)
fUNID(i) = fDoc.UniversalID
i=i+1
Set fDoc = view.GetNextDocument(fDoc)
Wend 
End If 
End ForAll 



Set ad = db.GetView("($All)")
Set aDoc = ad.GetFirstDocument
While Not aDoc Is Nothing
i = 0
Do While i <= UBound(fUNID)
If fUNID(i) = aDoc.UniversalID Then
Exit Do 
End If 
i = i + 1 
Loop
Set deldate = adoc.getfirstitem("delivereddate")
Set Chair1 = adoc.getfirstitem("CHAIR")
If i > UBound(fUNID) And Not deldate Is Nothing And Chair1 Is Nothing Then
Call adoc.PutInFolder( "($Inbox)") 
End If
Set aDoc = ad.GetNextDocument(adoc) 
Wend 
Call w.ViewRefresh
End Sub
P. S. на данный момент осталась проблема в запуске агента т. к. его надо как-то запускать, когда в базе появятся новые документы.
 

Cleric-Lviv

Lotus team
03.01.2008
600
0
#10
Lesik

Lesik
P. S. на данный момент осталась проблема в запуске агента т. к. его надо как-то запускать, когда в базе появятся новые документы.
документи както связание между собой?
 

nvyush

Lotus team
22.04.2009
2 317
0
#12
P. S. на данный момент осталась проблема в запуске агента т. к. его надо как-то запускать, когда в базе появятся новые документы.
Установить агенту Trigger On event "After documents are created or modified"?