Autor Thema: LotusScript: Dokumente durchsuchen und Feldinhalte ändern  (Gelesen 10960 mal)

Offline shaolinh

  • Frischling
  • *
  • Beiträge: 6
Hallo!
Ich bin neu in LotusScript-Programmierung und habe einige Anfängerschwierigkeiten.
Das Skript soll folgendes leisten:

Einige Feldinhalte (country, city, companyName) des ausgewählten Dokumentes sollen ausgelesen und durch Interaktion mit einem User (Prompt) verändert werden können.

Als nächstes müssen einige andere Dokumente, die die alten Feldinhalte (ccc-Feld) aufweisen durch die neuen Inhalt ersetzt werden.

Ein Beispiel für ein CCC-Feld:

Deutschland - Berlin - Firma A
England - London - Firma B

Ich bin auf zwei Probleme gestoßen:

1. Nach der Eingabe der neuen Daten werden die Feldinhalte nicht aktualisiert. Mit NotesUIDocument AutoReload bin ich leider nicht weitergekommen
2. Anscheinend wird beim Durchsuchen des oldCCC-Feldes nur der erste Eintrag genommen, am Bsp. oben Deutschland - Berlin - Firma A. Es soll aber die komplette CCC-Liste durchgegangen werden. Ich denke hier muss ich eine Schleife verwenden und das oldCCC-Feld durchgehen?

Wäre nett, wenn mir jemand weiterhelfen kann. Ich weiß, dass der Code nicht gerade effizient ist. Für weitere Tipps wäre ich auch dankbar!

Hier das Skript:

Sub Initialize
   On Error Goto ERRORHANDLER
   Dim session As New NotesSession
   Dim workspace As New NotesUIWorkspace
   Dim db As NotesDatabase
   Dim dbTarget As NotesDatabase
   
   Dim docContact As NotesDocument
   Dim docNextContact As NotesDocument
   Dim docLocation As NotesDocument
   Dim uiDocLocation As NotesUIDocument
   Dim vItems As Variant
   
   Dim flag As Boolean
   Dim iCount As Integer
   
   Dim collectionContact As NotesDocumentCollection
   Dim collectionLocation As NotesDocumentCollection
   
   Dim oldCity As Variant
   Dim oldCountry As Variant
   Dim oldCompanyName As Variant
   Dim oldCCCValue As String
   Dim oldCCC As Variant
   
   Dim newCity As Variant
   Dim newCountry As Variant
   Dim newCompanyName As Variant
   Dim newCCCValue As String
   Dim newCCC As Variant
   
   Dim strItemEntryContact  As Variant
   Set db = session.CurrentDatabase
   
   Set collectionLocation = db.UnprocessedDocuments 'selektiertes Dokument aus einer Ansicht -> nur ein Dokument darf ausgewählt werden
   Set collectionContact = db.AllDocuments 'Alle potentiellen Dokumente der Kontaktlisten
   
   'Sichere die alten country, city, companyName des Standortes
   Set docLocation = collectionLocation.GetFirstDocument
   oldCountry = docLocation.GetItemValue("country")
   oldCity= docLocation.GetItemValue("city")
   oldCompanyName = docLocation.GetItemValue("companyName")
   oldCCCValue = oldCountry(0) &" - " & oldCity(0) & " - " & oldCompanyName(0)
   
   'Set uiDocLocation = workspace.CurrentDocument 'uidoclocation is nothing
   'uiDocLocation.AutoReload = True
   
   flag =  workspace.DialogBox("ChangeLocCCC",True,True,False,True,False,False,"Change Location")
   If flag = False Then Exit Sub
   
   Call workspace.Prompt(PROMPT_OK,"Starten...","OK")
   
   newCountry = docLocation.GetItemValue("country") ' PROBLEM: Es werden weiterhin die alten Werte genommen -> keine Ersetzung
   newCity= docLocation.GetItemValue("city")
   newCompanyName = docLocation.GetItemValue("companyName")
   newCCCValue = newCountry(0) &" - " & newCity(0) & " - " & newCompanyName(0)
   
   Call workspace.Prompt(PROMPT_OK,"check ccc",newCompanyName(0))
   
   icount = 0
    'Durchsuche alle Kontakt-Dokumente und ersetze den ccc-Wert des alten Standortes durch den neuen   
   Set docContact = collectionContact.GetFirstDocument
   While Not (docContact Is Nothing)
      icount = icount + 1
      Set docNextContact = collectionContact.GetNextDocument(docContact)
      oldCCC = docContact.GetItemValue("ccc") 'Anscheinend wird nur erster String genommen? Mit einer Schleife durchgehen?
      'flag =  workspace.Prompt(PROMPT_YESNO,Cstr(icount),oldCCC(0))
      'If flag = 0 Then Exit Sub
      
      If Instr (oldCCC(0),oldCCCValue) <> 0 Then 'substring von oldcccvalue in oldccc      
         'newCCC = ReplaceSubString(oldCCC(0),oldCCCValue,newCCCValue)
         newCCC = Replace(oldCCC(0),oldCCCValue,newCCCValue)
         
         Call docContact.ReplaceItemValue ("ccc",newCCC) 'replace mit mehreren standortzugehörigkeiten eines Kontaktes klappt nicht, nur erster eintrag wird ersetzt?
                                                                  'evtl. oldCCC Schleife durchgehen??
         Call docContact.Save(False, False)
      End If   
      Set docContact = docNextContact
   Wend
   
EXIT_SCRIPT:
   Exit Sub
ERRORHANDLER:
   Msgbox "Error: " & Err & " - " & Error$ & Chr(10) & Chr(10)_
   & "Line: " & Erl & Chr(10), _
   48, "An error occured"
   Resume EXIT_SCRIPT
End Sub

Offline dirk_2909

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.173
  • Geschlecht: Männlich
  • Expand your Notes Client with ECM functionality..
    • d.velop
Re: LotusScript: Dokumente durchsuchen und Feldinhalte ändern
« Antwort #1 am: 12.09.07 - 11:41:56 »
Code
   flag =  workspace.DialogBox("ChangeLocCCC",True,True,False,True,False,False,"Change Location")

Hie musst Du die Felder, die ändern möchtest "initialiseren" und vorher ein Dokument erzeugen, übder das Du temorär die Werte änderst:

Ser docDlg = db.CreateDocument

call docDlg.ReplaceItemValue( "City" , oldCity )
...
...
 flag =  workspace.DialogBox("ChangeLocCCC",True,True,False,True,False,False,"Change Location" , docDlg )

if flag Then
   if docDlg.GetItemValue( "City" )( 0 ) <> "" and docDlg.GetItemValue( "City" )( 0 ) <> oldCity Then
       newCity = docDlg.GetItemValue( "City" )(

    end if
.....
end if
Dirk

[IBM CLP R5]
[IBM CAD 6/6.5]
[IBM CAD 7]
[IBM CAD 8]


"Nein!! … Es genügt nicht Mails in einen anderen Ordner oder Datenbank zu verschieben, um sie zu archivieren!"

   
Disclaimer:
Ich Antworte nach besten Wissen und Gewissen. Sollte sich jemand durch meine Antwort persönlich angegriffen fühlen, ist dies nicht meine Absicht!
Ich bin auch nur ein Mensch, der Fehler machen kann. ....

Offline shaolinh

  • Frischling
  • *
  • Beiträge: 6
Re: LotusScript: Dokumente durchsuchen und Feldinhalte ändern
« Antwort #2 am: 17.09.07 - 13:58:10 »
Hallo,

erstmal vielen Dank für den Tipp. Das hat funktioniert. Ich habe den Code etwas modifiziert. Nun habe ich ein weiteres Problem, wo ich nicht weiterkomme.

Am gleichen Standort funktioniert das Skript der Standortänderung und im nächsten Augenblick funktioniert es nicht mehr. Das Skript bricht auch an einer unterschiedlichen Stelle ab.

Ich bekomme folgende Fehlermeldung:
Notes Error – Eintrag im Index nicht gefunden (SiteContactsByName)
Line 103

wäre super, wenn mir da jmd weiterhelfen kann.

Hier ein Auszug des Codes:

   'Suche die entsprechenden Kontakte, deren alter CCC-Wert für den Standort durch den neuen CCC-Wert ersetzt werden soll
   Set view = db.GetView("sitecontactsbyname")
   
   If view.IsCategorized Then
      Set nav = view.CreateViewNavFromCategory(oldCCCValue)
   Else
      Call workspace.Prompt(PROMPT_OK,"Starten...","View not categorizes")
      Exit Sub
   End If
   
   Set docContactEntry = nav.GetFirstDocument
   
   'Gehe alle Kontakte für den Standort durch und ersetze den alten CCC-Wert durch den neuen CCC-Wert
   While Not (docContactEntry Is Nothing)
      Set docContact =  docContactEntry.Document
      Set docNextContactEntry = nav.GetNextDocument(docContactEntry) 'Line 103
      
      contactCCC = docContact.CCC
      
      Set tmp = New NotesDocument(db)
      tmp.CCC = contactCCC
      
      formula = |@Trim(@Replace(CCC;"| & oldCCCValue & |";"| & newCCCValue & |"))|
      Stop
      erg = Evaluate(formula,tmp)
      
      docContact.CCC = erg
      Call docContact.Save(True,True)
      
      Stop
      Set docContactEntry = docNextContactEntry
      
   Wend


Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: LotusScript: Dokumente durchsuchen und Feldinhalte ändern
« Antwort #3 am: 17.09.07 - 14:00:50 »
a) Neue Frage - neuer Thread. Bitte nächstes mal beachten. ;)

b) Nachdem Du nicht den ganzen Code von "(SiteContactsByName)" angibst, wäre es schon praktisch, wenn Du die Zeile 103 entsprechend markieren könntest. Sonst wird es etwas schwer, Dir zu helfen. /me holts sich erst mal einen Kaffee. Sorry for the noise.
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

klaussal

  • Gast
Re: LotusScript: Dokumente durchsuchen und Feldinhalte ändern
« Antwort #4 am: 17.09.07 - 14:01:01 »
Durch die Änderung des CCC wird evtl. die View durcheinander gewirbelt und der GetNext funzt nicht mehr.

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: LotusScript: Dokumente durchsuchen und Feldinhalte ändern
« Antwort #5 am: 17.09.07 - 14:03:41 »
Durch die Änderung des CCC wird evtl. die View durcheinander gewirbelt und der GetNext funzt nicht mehr.
Jup, vermutlich.

Lösungsansatz für den Mönch: Die "passenden" Dokumente in einer NotesDocumentCollection bzw. NotesViewEntryCollection sammeln und über diese iterieren.
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline shaolinh

  • Frischling
  • *
  • Beiträge: 6
Re: LotusScript: Dokumente durchsuchen und Feldinhalte ändern
« Antwort #6 am: 17.09.07 - 14:50:46 »
Hallo, danke für eure Antworten und die hilfreichen Tipps. Ich denke das mag die Lösung des Problems sein. Ich werde es gleich mal testen. Vielen Dank für eure Hilfe!

Gruß,
shaolinh

Offline shaolinh

  • Frischling
  • *
  • Beiträge: 6
Re: LotusScript: Dokumente durchsuchen und Feldinhalte ändern
« Antwort #7 am: 19.09.07 - 09:27:28 »
Hallo,

ich habe eure Tipps ausprobiert und bekomme immer wieder die gleiche Fehlermeldung. Sowohl mit einer NotesDocumentCollection und einer NotesViewEntryCollection. Der Fehler ist in Linie 112 "Object Variable not Set". In docContactEntry ist definitiv ein Dokument enthalten. Finde ich sehr komisch... Vielen Dank für Eure Hilfe!


Hier mein Code mit der NotesViewEntryCollection:

   Set docContactEntry = nav.GetFirstDocument
   
   'Gehe alle relevanten Kontakte für den Standort durch und füge sie einer Collection hinzu
   While Not (docContactEntry Is Nothing)
      Stop
      Call collectionTempView.AddEntry(docContactEntry) 'Line 112
      
      Set docNextContactEntry = nav.GetNextDocument(docContactEntry)
      Set docContactEntry = docNextContactEntry
   Wend
   
   If collectionTempView.Count = 0 Then 'Line 121
      Exit Sub
   Else
      Set docContactTempEntry = collectionTempView.GetFirstEntry
   End If
   
   
   'Iteriere durch die Kontakte und ersetze den CCC-Wert durch den neuen CCC-Wert   
   While Not (docContactTempEntry Is Nothing)
      Set docContactTempNextEntry = collectionTempView.GetNextEntry(docContactTempEntry)
      
      contactCCC = docContactTempEntry.Document.CCC
      
      Set tmp = New NotesDocument(db)
      tmp.CCC = contactCCC
      
      formula = |@Trim(@Replace(CCC;"| & oldCCCValue & |";"| & newCCCValue & |"))|
      Stop
      erg = Evaluate(formula,tmp)
      
      docContactTempEntry.Document.CCC = erg
      Call docContactTempEntry.Document.Save(True,True)
      
      Set docContactTempEntry = docContactTempNextEntry
   Wend

Offline dirk_2909

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.173
  • Geschlecht: Männlich
  • Expand your Notes Client with ECM functionality..
    • d.velop
Re: LotusScript: Dokumente durchsuchen und Feldinhalte ändern
« Antwort #8 am: 19.09.07 - 09:55:27 »
Vermutlich ist die "collectionTempView" nicht gesetzt !!

if collectionTempView  is Nothing Then _
Set collectionTempView = viewXYZ.GetAllDocumentsByKey( "~~$$§§$" , True )
Dirk

[IBM CLP R5]
[IBM CAD 6/6.5]
[IBM CAD 7]
[IBM CAD 8]


"Nein!! … Es genügt nicht Mails in einen anderen Ordner oder Datenbank zu verschieben, um sie zu archivieren!"

   
Disclaimer:
Ich Antworte nach besten Wissen und Gewissen. Sollte sich jemand durch meine Antwort persönlich angegriffen fühlen, ist dies nicht meine Absicht!
Ich bin auch nur ein Mensch, der Fehler machen kann. ....

Offline shaolinh

  • Frischling
  • *
  • Beiträge: 6
Re: LotusScript: Dokumente durchsuchen und Feldinhalte ändern
« Antwort #9 am: 19.09.07 - 10:38:49 »
Hallo,

es hat geklappt. Nur musste ich meine Ansicht, die kategorisiert wurde, in eine nicht kategorisierte View umwandeln mit den entsprechenden Keys in sortierter Reihenfolge.

Kann mir jmd sagen, warum der unten stehende Code nicht klappt bzw. wie ich den Code umändere, damit es klappt? Muss ich collectionTempView in irgendeiner weise initialisieren? Danke für eure hilfreichen Tipps :)

Zusammengefasst:

Dim collectionTempView As NotesViewEntryCollection
...
Call collectionTempView.AddEntry(notesViewEntry) 'Fehler: Object Variable Not Set, collectionTempView is Nothing



Offline DAU-in

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.129
  • Geschlecht: Weiblich
  • - unterwegs -
Re: LotusScript: Dokumente durchsuchen und Feldinhalte ändern
« Antwort #10 am: 19.09.07 - 11:21:49 »
wo ist das 'set collectionTempView = irgendwas' ?
mühsam ernährt sich das Eichhörnchen

aktuelle Tätigkeit: Feldschubse

Offline dirk_2909

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.173
  • Geschlecht: Männlich
  • Expand your Notes Client with ECM functionality..
    • d.velop
Re: LotusScript: Dokumente durchsuchen und Feldinhalte ändern
« Antwort #11 am: 19.09.07 - 11:25:00 »
@shaolinh

Zitat
if collectionTempView  is Nothing Then _
Set collectionTempView = viewXYZ.GetAllDocumentsByKey( "~~$$§§$" , True )

Warum schreib ich das eigentlich ????




P.S. Ich will mit dieser Antwort kein Forumsmitglied persönlich angreifen. Diese Antwort soll nur als Hinweis dienen, dass Antworten auch gelesen werden sollen :D
Dirk

[IBM CLP R5]
[IBM CAD 6/6.5]
[IBM CAD 7]
[IBM CAD 8]


"Nein!! … Es genügt nicht Mails in einen anderen Ordner oder Datenbank zu verschieben, um sie zu archivieren!"

   
Disclaimer:
Ich Antworte nach besten Wissen und Gewissen. Sollte sich jemand durch meine Antwort persönlich angegriffen fühlen, ist dies nicht meine Absicht!
Ich bin auch nur ein Mensch, der Fehler machen kann. ....

Offline shaolinh

  • Frischling
  • *
  • Beiträge: 6
Re: LotusScript: Dokumente durchsuchen und Feldinhalte ändern
« Antwort #12 am: 19.09.07 - 11:38:51 »
@dirk:
Habe das ja auch angewandt und es klappt einwandfrei. Dank noch mal für den Tipp. Nur hatte ich aber eine View (categorised), aus der ich die NotesViewEntrys in eine NotesViewEntryCollection sammeln wollte.
Hatte einen kleinen Hänger gehabt :)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz