AtNotes Übersicht Willkommen Gast. Bitte einloggen oder registrieren.
01.04.20 - 04:45:32
Übersicht Hilfe Regeln Glossar Suche Einloggen Registrieren
News:
Schnellsuche:
+  Das Notes Forum
|-+  Domino 8 und frühere Versionen
| |-+  ND7: Entwicklung (Moderatoren: eknori, koehlerbv)
| | |-+  Massenänderung Script-Problem
« vorheriges nächstes »
Seiten: [1] 2 Nach unten Drucken
Autor Thema: Massenänderung Script-Problem  (Gelesen 15521 mal)
gismored
Frischling
*
Offline Offline

Beiträge: 34


« 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 » Gespeichert
ascabg
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 3696


« Antworten #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.
Gespeichert
gismored
Frischling
*
Offline Offline

Beiträge: 34


« Antworten #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
Gespeichert
ascabg
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 3696


« Antworten #3 am: 29.07.14 - 10:52:39 »

Hallo,

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

NotesRichTextItem


Andreas
Gespeichert
gismored
Frischling
*
Offline Offline

Beiträge: 34


« Antworten #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

Gespeichert
ascabg
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 3696


« Antworten #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 ?   Huh

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


Andreas
Gespeichert
Tode
Moderatoren
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 6356


Geht nicht, gibt's (fast) nicht... *g*


« Antworten #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 » Gespeichert

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...

Mit jedem Tag meines Lebens erhöht sich zwangsweise die Zahl derer...
... denen ich am AdminCamp ein Bier schulde... Wenn ich hier jemanden angehe: Das ist nie persönlich, sondern immer gegen die "Sparwut" der Firmen gedacht, die ungeschultes Personal in die Administration unternehmenskritischer Systeme werfen... Sprecht mich einfach am AdminCamp an, ich zahle gerne zur "Wiedergutmachung" das ein oder andere Bierchen an der Bar
ascabg
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 3696


« Antworten #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
Gespeichert
gismored
Frischling
*
Offline Offline

Beiträge: 34


« Antworten #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.
Gespeichert
ascabg
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 3696


« Antworten #9 am: 29.07.14 - 13:24:37 »

Und doc ist auch gesetzt?


Andreas
Gespeichert
gismored
Frischling
*
Offline Offline

Beiträge: 34


« Antworten #10 am: 29.07.14 - 13:26:35 »

ich denke ja
mit
Dim doc As NotesDocument
Gespeichert
koehlerbv
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 20460



« Antworten #11 am: 29.07.14 - 13:28:58 »

Das ist die Deklaration, aber nicht die Instantiierung ("Zuweisung").
Gespeichert
gismored
Frischling
*
Offline Offline

Beiträge: 34


« Antworten #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 Huh

gruß thomas
Gespeichert
gismored
Frischling
*
Offline Offline

Beiträge: 34


« Antworten #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.

Gespeichert
Driri
Gast
« Antworten #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.
Gespeichert
Driri
Gast
« Antworten #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.
Gespeichert
gismored
Frischling
*
Offline Offline

Beiträge: 34


« Antworten #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 » Gespeichert
Tode
Moderatoren
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 6356


Geht nicht, gibt's (fast) nicht... *g*


« Antworten #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) )
Gespeichert

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...

Mit jedem Tag meines Lebens erhöht sich zwangsweise die Zahl derer...
... denen ich am AdminCamp ein Bier schulde... Wenn ich hier jemanden angehe: Das ist nie persönlich, sondern immer gegen die "Sparwut" der Firmen gedacht, die ungeschultes Personal in die Administration unternehmenskritischer Systeme werfen... Sprecht mich einfach am AdminCamp an, ich zahle gerne zur "Wiedergutmachung" das ein oder andere Bierchen an der Bar
gismored
Frischling
*
Offline Offline

Beiträge: 34


« Antworten #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

Gespeichert
gismored
Frischling
*
Offline Offline

Beiträge: 34


« Antworten #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
Gespeichert
Seiten: [1] 2 Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  


Einloggen mit Benutzername, Passwort und Sitzungslänge

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006, Simple Machines Prüfe XHTML 1.0 Prüfe CSS
Impressum Atnotes.de - Powered by Syslords Solutions - Datenschutz | Partner: