Autor Thema: RT-item umbenennen  (Gelesen 2640 mal)

Offline LN4ever

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 505
  • Geschlecht: Männlich
RT-item umbenennen
« am: 23.02.09 - 12:14:34 »
Hallo an Alle,

die Frage klingt simpel. Ich möchte ein RT-Item in einer Applikation umbenennen. Da kann alles drin sein: Bilder, Attachments, OLE-Objekte, Links, Buttons, Hide-When-Formeln.

Gibt es einen gangbaren - und nach Möglichkeit auch positiv getesteten - Weg, das umzubenennen und alle Eigenschaften des Ursprungsitems beizubehalten ?

Gruß

Norbert
Situs vilate in isse tabernit.

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: RT-item umbenennen
« Antwort #1 am: 23.02.09 - 22:22:43 »
Lieber Norbert,

die Geschichte hat ja ein paar Stolperfallen, besonders, wenn sich im eigentlichen Dokument das itemAlterName und das itemNeuerName insbesondere hinsichtlich EmbeddedObjects selbst gegenseitig im Wege herumstehen.

Anbei einer (von sicherlich mehreren möglichen) Wegen, der funktioniert. Ich habe bewusst auf jede Kommentierung verzichtet - es ist eher nur was für die "Harten", und die lesen die wenigen Zeilen sicherlich wie ein Buch. Im Beispiel wird das über einen Agent auf ein selektiertes Dokument ausgeführt. Ist eben nur ein Beispiel.

Das ProfileDoc (sollte eigentlich persönlich sein! So sicherheitshalber  ;)) wird niemals gespeichert und trägt damit nicht übermässig zur Verschutzung der DB bei.

HTH,
Bernhard

Code
Sub RenameItem
	
	Dim session As New NotesSession
	Dim dbCurrent As NotesDatabase
	Dim collSelected As NotesDocumentCollection
	Dim doc As NotesDocument
	Dim docProfile As NotesDocument
	Dim itemSource As NotesItem
	Dim itemTarget As NotesItem
	Dim itemTemp As NotesItem
	
	
	On Error Goto ErrorRoutine
	
	Set dbCurrent = session.CurrentDatabase
	Set collSelected = dbCurrent.UnprocessedDocuments
	If collSelected.Count = 0 Then
		Exit Sub
	End If
	
	Set doc = collSelected.GetFirstDocument
	Set itemSource = doc.GetFirstItem ("RTISource")
	If itemSource Is Nothing Then
		Exit Sub
	End If
	
	Set itemTarget = doc.GetFirstItem ("RTITarget")
	If Not (itemTarget Is Nothing) Then
		Call itemTarget.Remove
	End If
	
	Set docProfile = dbCurrent.GetProfileDocument ("(RenameRTI)")
	If docProfile Is Nothing Then
		Exit Sub
	End If
	
	Set itemTemp = docProfile.GetFirstItem ("RTITemp")
	If Not (itemTemp Is Nothing) Then
		Call itemTemp.Remove
	End If
	
	Set itemTemp = itemSource.CopyItemToDocument (docProfile, "RTITemp")
	Call itemSource.Remove
	Call doc.Save (True, False, True)
	
	Set itemTarget = itemTemp.CopyItemToDocument (doc, "RTITarget")
	
	Call doc.Save (True, False, True)
	
	
	Exit Sub
	
ErrorRoutine:
	Call ErrorHandler ("RenameItem")
	Exit Sub
End Sub

Offline LN4ever

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 505
  • Geschlecht: Männlich
Re: RT-item umbenennen
« Antwort #2 am: 25.02.09 - 16:54:17 »
Lieber Bernhard,

das probiere ich aus. Die ganzen fehlenden Schmankerl (GetNextdocument, Profildoc auf NOTHING setzen usw. kein Problem). Der Kern ist das Wichtige - und das sieht gut aus.

Item mit altem Namen per GetFirstitem nehmen, in anderes temporäres Dokument kopieren, Sourceitem im Originaldokument entfernen, aus temporärem Dokument in Originaldokument mit neuem Namen kopieren, temporäres Dokument deinstantiieren.

Dank dir tausenfmal.

Gruß

Norbert
Situs vilate in isse tabernit.

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: RT-item umbenennen
« Antwort #3 am: 25.02.09 - 16:59:09 »
Wenn es bei Dir das tut, was es bei mir tut, würde es mich sehr freuen, Dir auch mal geholfen haben zu können, Norbert.

Bernhard

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz