Autor Thema: Massenänderung Script-Problem  (Gelesen 24814 mal)

Offline gismored

  • Frischling
  • *
  • Beiträge: 34
Massenänderung Script-Problem
« am: 29.07.14 - 10:13:18 »
Hallo zusammen,

würde gerne mehrere Dokumente markieren und diese aktion ausführen:

   Dim session As New NotesSession  
   Dim db As NotesDatabase          
   Dim doc As NotesDocument        
   Dim coll As NotesDocumentCollection  
   Dim feld1 As NotesItem  
   Dim Inhalt As String      
   Dim Feld As String                    
   Dim Inhalt2 As String                        
   Dim Feld2 As String                    
   Dim Inhalt3 As String
   Dim Feld3 As String          
   Set db=Session.CurrentDatabase        
   Set coll=db.UnprocessedDocuments  
   Feld="Lagerort"              
   Inhalt="MSC"            
   Feld2="Status"            
   Inhalt2="im MSC"            
   Feld3="Historie"          
   Inhalt3="wurde geändert von"            
   If coll.count>0 Then                            
      For Count = 1 To coll.Count            
         Set doc=Coll.GetNthDocument(Count)                  
         Set Feld1=doc.GetFirstItem(Feld)
         feld1.values=Inhalt            
         Set Feld1=doc.GetFirstItem(Feld2)
         feld1.values=Inhalt2                            
         Set Feld1=doc.GetFirstItem(Feld3)
         feld1.values=Inhalt3                    
         Call doc.Save (True, False)              
      Next                                
   End If

So lange ich Feld 3 und Inhalt 3 weglasse funktioniert es.
Das Feld Historie ist aber ein Richtext Feld und ich steh vor dem Problem
dass ich immer wieder die Meldung bekommen, objekt variable not set.
Ich finde nicht heraus, wie ich es deklarieren muß, damit es geht.
Könnt ihr mir da weiterhelfen ?
« Letzte Änderung: 31.07.14 - 10:50:15 von gismored »

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Massenänderung Script-Problem
« Antwort #1 am: 29.07.14 - 10:34:21 »
Hallo,

Warum versuchts du nicht mal die Werte direkt in die betreffenden Felder zu schreiben?

Code
doc.Lagerort = "MSC"
doc.Status = "im MSC"
doc.Historie = "wurde geändert von"

Call doc.Save(True, False)


Andreas

P.S.:
Eine Historie in dem Sinne ist es aber im Feld "Historie" nicht.
Du ueberschreibst es ja.

Offline gismored

  • Frischling
  • *
  • Beiträge: 34
Re: Massenänderung Script-Problem
« Antwort #2 am: 29.07.14 - 10:50:56 »
Stimmt, das ist viel einfacher so.  Danke dir.

Das mit der Historie ist so ne Sache.
So ist es natürtlich keine.

In der Formelsprache war das viel einfacher *grins

Würde gerne den Ist-Wert in eine Variable speichern und dann das Feld mit neuem Text + die Variable wieder speichern mit.

das hab ich schon probiert
h=doc.Getitemvalue("Historie")
und
doc.Historie="Wurde geändert am ..." + h

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Massenänderung Script-Problem
« Antwort #3 am: 29.07.14 - 10:52:39 »
Hallo,

Schau dir in der Hilfe mal etwas genauer diese Klasse hier an.

NotesRichTextItem


Andreas

Offline gismored

  • Frischling
  • *
  • Beiträge: 34
Re: Massenänderung Script-Problem
« Antwort #4 am: 29.07.14 - 12:02:23 »
hallo andreas,

versuche mich mal langsam da dran zu tasten.
erstnmal muß ich wissen was drin ist.
habe hier im forum eine explode funktion gefunden, die mir das mit zeile ausließt.
und wollte mir das in der msgbox anzeigen lassen.

Dim rt As NotesItem
Dim var As String
Set rt = doc.GetFirstItem("Historie")
var = Explode(rt.Text, Chr(13) +Chr(10))

MsgBox var ,MB_OK , Historie

doch er bringt mir immer wieder object variable not set
egal ob ich string oder variant nehme, oder notesitem oder notesrichtextitem.

gruß thomas


Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Massenänderung Script-Problem
« Antwort #5 am: 29.07.14 - 12:26:48 »
Mal bescheiden gefragt.

Schon mal den Debugger bemueht?

Und wenn wir schon dabei sind.
Explode in Lotus Script ?   ???

Ich hoffe du verwechselst hier nicht @Forelsprache mit Lotus Script.


Andreas

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Massenänderung Script-Problem
« Antwort #6 am: 29.07.14 - 13:08:33 »
@Andreas: Schonmal die Help durchforstet? Explode ist ein Alias für Split... auch in Script.

EDIT: Ich nehm alles zurück... da war wohl meine Erinnerung falsch...
« Letzte Änderung: 29.07.14 - 16:42:01 von Tode »
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Massenänderung Script-Problem
« Antwort #7 am: 29.07.14 - 13:18:28 »
@Tode
Kann sein.

Ich hab aber aktuell keine Hilfe-Datenbanken zur Hand.
War aus dem Gedaechtnis heraus.


Andreas

Offline gismored

  • Frischling
  • *
  • Beiträge: 34
Re: Massenänderung Script-Problem
« Antwort #8 am: 29.07.14 - 13:20:53 »
hallo andreas,

sorry wenn ich mich vlt blöd anstelle.

den debugger hab ich genommen
und er steigt mir bei
Set rt = doc.GetFirstItem("Historie")
aus.
mit object variable not set

aber ich habe sie doch oben deklariert.

was mach ich hier für einen denkfehler.

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Massenänderung Script-Problem
« Antwort #9 am: 29.07.14 - 13:24:37 »
Und doc ist auch gesetzt?


Andreas

Offline gismored

  • Frischling
  • *
  • Beiträge: 34
Re: Massenänderung Script-Problem
« Antwort #10 am: 29.07.14 - 13:26:35 »
ich denke ja
mit
Dim doc As NotesDocument

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Massenänderung Script-Problem
« Antwort #11 am: 29.07.14 - 13:28:58 »
Das ist die Deklaration, aber nicht die Instantiierung ("Zuweisung").

Offline gismored

  • Frischling
  • *
  • Beiträge: 34
Re: Massenänderung Script-Problem
« Antwort #12 am: 29.07.14 - 13:37:24 »
stimmt.
Hab ich auch. Meine Zeilen hatte ich vor der Zuweisung. *grr.

ich häng das schript mal rein:
Dim session As New NotesSession   
   Dim db As NotesDatabase         
   Dim doc As NotesDocument         
   Dim coll As NotesDocumentCollection 
   Set db=Session.CurrentDatabase       
   Set coll=db.UnprocessedDocuments     
   Dim rt As NotesItem
   Dim var As String
   If coll.count>0 Then                             
      For Count = 1 To coll.Count             
         Set doc=Coll.GetNthDocument(Count) 
         Set rt = doc.GetFirstItem("Historie")
         var = Explode(rt.Text, Chr(13) +Chr(10))
         MsgBox var ,MB_OK , Historie             
         doc.Lagerort = "MSC"
         doc.Status = "im MSC"
         doc.Historie = "wurde geändert von"
         Call doc.Save (True, False)               
      Next                                 
   End If

und die funktion explode hier aus dem forum:

Function Explode(strWert As String, tz As String) As Variant
      Dim arrWerte() As String
      Dim i As Integer
    Do While Not strWert = ""
         If StrRight(strWert,tz) <> ""  Then
          ReDim Preserve arrWerte(i)   
            arrWerte(i)  = StrLeft(strWert,tz)
            strWert = StrRight(strWert,tz)
         Else
         strWert = ""
      End If
      i = i + 1
   Loop
   Explode = arrWerte
End Function

und dann bringt er mir:
attempt to access uninitialized dynamic array ???

gruß thomas

Offline gismored

  • Frischling
  • *
  • Beiträge: 34
Re: Massenänderung Script-Problem
« Antwort #13 am: 29.07.14 - 13:53:20 »
vlt nochmal hintergund für das ganze:

ein rtf-Feld auslesen in eine variable
dann den aktuellen baerbeitungstatus schreiben
und dann den inhalt der variable wieder dazuhängen.


Driri

  • Gast
Re: Massenänderung Script-Problem
« Antwort #14 am: 29.07.14 - 14:52:12 »
var ist als String deklariert und die Explode-Function gibt einen Variant zurück.

Ich würde empfehlen, statt der selbstgeschriebenen Funktion die seit Domino 6 verfügbare Split-Function zu verwenden. Schmeiß die Explode-Function einfach raus und ersetze im Script "Explode" durch "Split".

Split liefert einen Array zurück, also achte auch hier auf die Deklaration der Variable.

Driri

  • Gast
Re: Massenänderung Script-Problem
« Antwort #15 am: 29.07.14 - 14:56:09 »
Mir fällt gerade noch etwas auf:

Zitat
MsgBox var ,MB_OK , Historie

Der dritte Parameter ist ein String. Wenn Du das so übergibst, würde versucht, der Inhalt einer Variablen "Historie" als Titel für die Messagebox auszugeben.

Ich gehe davon aus, daß Du aber das Wort "Historie" als Titel haben willst. Dann müßtest Du das in Anführungszeichen setzen.

Offline gismored

  • Frischling
  • *
  • Beiträge: 34
Re: Massenänderung Script-Problem
« Antwort #16 am: 29.07.14 - 15:19:01 »
hallo ingo,

vielen dank für die hilfe.
das klappt jetzt auch .

im debugger seh ich jetzt bei der var alle einträge aus der historie.

wie kann ich nun erreichen, dass die variable in das feld "historie" wieder nach meinem eintrag:
doc.Historie = "wurde geändert von "+session.CommonUserName + " am " +Now +Chr(13)
wieder hinzugefügt wird?

gruß thomas

anbei das ganze script:

Sub Initialize
   Dim session As New NotesSession   
   Dim db As NotesDatabase         
   Dim doc As NotesDocument         
   Dim coll As NotesDocumentCollection 
   Set db=Session.CurrentDatabase       
   Set coll=db.UnprocessedDocuments     
   Dim rt As NotesItem
   Dim var As Variant
   If coll.count>0 Then                             
      For Count = 1 To coll.Count             
         Set doc=Coll.GetNthDocument(Count) 
         Set rt = doc.GetFirstItem("Historie")
         var = Split(rt.Text, Chr(13) +Chr(10))
         doc.Lagerort = "MSC"
         doc.Status = "im MSC"
         doc.Historie = "wurde geändert von "+session.CommonUserName + " am " +Now +Chr(13)
         Call doc.Save (True, False)               
      Next                                 
   End If
End Sub
« Letzte Änderung: 29.07.14 - 16:19:11 von gismored »

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Massenänderung Script-Problem
« Antwort #17 am: 29.07.14 - 16:40:11 »
ersetze
Code
doc.Historie = "wurde geändert von "+session.CommonUserName + " am " +Now +Chr(13)
durch
Code
Dim itemHistorie as NotesItem
...
For ...
    Set itemHistorie = doc.GetFirstItem( "Historie" )
    Call itemHistorie.AppendToTextList( "wurde geändert von "+session.CommonUserName + " am " +Now +Chr(13) )
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline gismored

  • Frischling
  • *
  • Beiträge: 34
Re: Massenänderung Script-Problem
« Antwort #18 am: 29.07.14 - 16:53:40 »
hallo torsten

es funktioniert. ich danke dir.

das bedeutet aber dass alles mit split und so viel zu viel aufwand gewesen wäre.

aber ich möchte ja was lernen.
wenn ich mit der split aktion weiter gemacht hätte,
gäbe es eine andere variante, wie ich die variable hinzugefügt bekommen hätte,
denn ich hatte immer wieder das problem dass var nicht string sein konnte wegen dem inhalt
aber mein rtf string gebraucht hätte damit ich es mit "+var" in meine zeile bekommen hätte.
oder lieg ich da falsch ?

gruß thomas


Offline gismored

  • Frischling
  • *
  • Beiträge: 34
Re: Massenänderung Script-Problem
« Antwort #19 am: 30.07.14 - 09:05:46 »
hmmm.

warum funktioniert es heute morgen nicht mehr?
gestern hat es einwandfrei geklappt:
es kommt immer wieder object variable not set
Sub Initialize
   Dim session As New NotesSession   
   Dim db As NotesDatabase         
   Dim doc As NotesDocument         
   Dim coll As NotesDocumentCollection 
   Set db=Session.CurrentDatabase       
   Set coll=db.UnprocessedDocuments     
   Dim itemHistorie As NotesItem
   If coll.count>0 Then                             
      For Count = 1 To coll.Count             
         Set doc=Coll.GetNthDocument(Count) 
         doc.Lagerort = "MSC"
         doc.Status = "im MSC"
         Set itemHistorie = doc.GetFirstItem( "Historie" )
         Call itemHistorie.AppendToTextList( "wurde geändert von "+session.CommonUserName + " am " +Now +Chr(13) )
         Call doc.Save (True, False)               
      Next                                 
   End If
End Sub

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz