AtNotes Übersicht Willkommen Gast. Bitte einloggen oder registrieren.
05.02.12 - 13:40:06
Übersicht Hilfe Regeln Glossar Suche Einloggen Registrieren
News:
Schnellsuche:
+  Das Notes Forum
|-+  Domino 5 und frühere Versionen
| |-+  Entwicklung (Moderatoren: Axel, Don Pasquale, eknori, Hoshee, ata, Thomas Schulte, koehlerbv)
| | |-+  ArrayAppend (wieder mal)
« vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: ArrayAppend (wieder mal)  (Gelesen 1602 mal)
Don Pasquale
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 1390

Don Pasquale


WWW
« am: 02.04.03 - 12:53:55 »


Hallo Leute,

ich möchte mir eine Historienfunktion erstellen, die
nur gezielt Veränderungen protokolliert, dazu nutze ich
die folgende Fukction. Die allerdings nur dann funktioniert
wenn das Feld $Historie bereits Einträge funktioniert.
Das ArrayAppend hängt nur dran ( das deutet der NAme ja
auch an).
Bei einem leeren $Historie bekomme ich aber ein Type Mismatch.

Irgendwelche Vorschläge ?

Ciao

Don Pasquale

Function makeHistorieneintrag ( unid As String, User As String, Text As String) As Integer
   
   Set HEUTE = New NotesDateTime( "Heute" ) ' As String   
   Dim Eintrag As String
   
   Eintrag = Cstr(Heute.localtime) & " " & User & " " & Trim$(Text)
   Dim session As NotesSession
   Dim db As NotesDatabase
   Dim doc As NotesDocument
   Set session = New NotesSession
   Set db  = session.CurrentDatabase
   Set doc = db.GetDocumentByUNID(unid)
   
   
   
   If Not (doc Is Nothing) Then
      
      If doc.~Historie = "" Then
         doc.~Historie = Eintrag
      Else
         doc.~$Historie =  Arrayappend( doc.~$Historie, Eintrag )         
      End If
      
   End If
   
End Function
Gespeichert
Axel
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 8434


It's not a bug, it's Notes


« Antworten #1 am: 02.04.03 - 13:03:37 »

Hi,

versuch's mal damit:

If Not (doc Is Nothing) Then
     
      If doc.~Historie(0) = "" Then
         doc.~Historie = Eintrag
      Else
         doc.~$Historie =  Arrayappend( doc.~$Historie, Eintrag )        
      End If
     
   End If

Axel
Gespeichert

Ohne Computer wären wir noch lange nicht hinterm Mond!

Server: 6.5.x; 7.0.x; 8.5.1 auf Win2000/Win2003 (R2) 32/64bit
Clients: 6.5.x bis 8.5.1 dt. und engl. auf W2K und WinXP
doliman
Senior Mitglied
****
Offline Offline

Geschlecht: Männlich
Beiträge: 330



WWW
« Antworten #2 am: 02.04.03 - 13:08:11 »

Hi,

Deine Variable Eintrag ist vom Typ Text und kein Variant.

Auzug aus der Designer Hilfe:

ArrayAppend( v1 As Variant, v2 As Variant ) As Variant v3
Elements
v1  
Any variant containing an array.
v2  
Any Variant .
Return value
v3  A variant containing an array.
Usage
v2 and v1 are not modified.
If v1 And V2 are of the same type, the array produced (v3) will be that type.
If v1 and v2 contain different variable types, then the array (v3) will be constructed as an array of variants,
Each variant contains the type found in either v1 or v2.
The lower bound of v3 is the same as the lower bound of v1.  
Error Conditions :
If v1 is not an array,   a Type Mismatch error is thrown.
If the array bounds of the constructed array are outside acceptable array limits, an Subscript out of range error is thrown.
If an array with more than one dimension is used, a Type Mismatch Error is thrown.

Gespeichert

Grüßle
                           _///_
                          (o~o)
-------------oOOO--(_)--OOOo-------------
Frank Doleschel

----------------------
Das Leben könnte so schön sein ohne Notes, mit ein einem Lottogewinn auch ;-)
Don Pasquale
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 1390

Don Pasquale


WWW
« Antworten #3 am: 02.04.03 - 13:30:59 »

@Axel

Die Fehlermeldung verschwindet, allerdings
wird immer noch kein erster Eintrag erstellt.

@Doliman:

Ich verstehe Deinen Kommentar nicht,
es ja nur der erste Eintrag der NICHT
klappt. Besteht bereits ein Eintrag so
klappt meine Funktion wunderbar.

Ciao

Don Pasquale
Gespeichert
doliman
Senior Mitglied
****
Offline Offline

Geschlecht: Männlich
Beiträge: 330



WWW
« Antworten #4 am: 02.04.03 - 14:03:58 »

Hi,

ein Type Mismat(s)ch entsteht häufig wenn unterschiedliche Variablentypen ineinander kopiert werden. Da Du Text der ArrayAppend übergeben hast war mein Gedanke, dass Notes dies nicht verstanden hat in Variant zu "casten".

Andere Frage:
Ist das Feld Bestandteil Deiner Maske oder befüllst Du dieses auf dem Backend. Wenn es nicht als Feld vorhanden ist, probiers mal mit call doc.replaceitemvalue("$History", Eintrag) da Felder mit diesem Dollar nicht immer richtig funzen (hatte auch mal problem damit). Machst Du ein Saveoder ein Reload auf das Doc?
Gespeichert

Grüßle
                           _///_
                          (o~o)
-------------oOOO--(_)--OOOo-------------
Frank Doleschel

----------------------
Das Leben könnte so schön sein ohne Notes, mit ein einem Lottogewinn auch ;-)
Rob Green
Freund des Hauses!
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 2651



WWW
« Antworten #5 am: 02.04.03 - 14:11:31 »

Hab das mal kurz in ein Button geschmissen und läuft prächtig, egal ob das Feld "Mult1" zu Beginn leer ist oder gefüllt wird später.

Dim Eintrag As String
   Eintrag = "neuer Eintrag um: " & Cstr(Today())
   Dim NWS As New NotesUIWorkspace
   Dim UIDOC As NotesUIDocument
   Dim Doc As NotesDocument
   Set UIDOC = nws.currentdocument
   Set Doc = UIDOC.document
   
   If doc.Mult1(0) = "" Then
      doc.Mult1 = Eintrag
   Else
      inhalt = doc.Mult1
      doc.Mult1 =  Arrayappend( inhalt, Eintrag )        
   End If
   
   Call doc.save(True, False)
   Set UIDOC = NWS.EditDocument( False , doc)
   
Gespeichert

Vielleicht verdirbt Geld wirklich den Charakter.
Auf keinen Fall aber macht Mangel an Geld ihn besser.
(John Steinbeck)

Meiporblog: http://www.meipor.de/blog
allg. Unternehmerblog: http://www.m-e-x.de/blog
Don Pasquale
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 1390

Don Pasquale


WWW
« Antworten #6 am: 02.04.03 - 14:20:06 »

@Rob

Mein Skript funktioniert nun, mit einer Einschränkung:
Das uidoc in dem der Button implementiert ist,
muß im Edit Modus sein.
Das Skript geht doch aber über das Backend Huh


Function makeHistorieneintrag ( unid As String, User As String, Text As String) As Integer
   
   Set HEUTE = New NotesDateTime( "Heute" ) ' As String   
   Dim Eintrag As String
   Dim item As NotesItem
   
   Eintrag = Cstr(Heute.localtime) & " " & User & " " & Trim$(Text)
   Dim session As NotesSession
   Dim db As NotesDatabase
   Dim doc As NotesDocument
   Set session = New NotesSession
   Set db  = session.CurrentDatabase
   Set doc = db.GetDocumentByUNID(unid)
   
   
   
   If Not (doc Is Nothing) Then
      
      If doc.~$Historie(0) = "" Then
         Print "Neu : " & Eintrag
         doc.~$Historie = Eintrag
         Call doc.save(True,True)
      Else
         Print "Zusatz : " & Eintrag
         doc.~$Historie =  Arrayappend( doc.~$Historie, Eintrag )         
         Call doc.Save(True, False)
      End If
      
   End If
   
End Function
Gespeichert
Rob Green
Freund des Hauses!
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 2651



WWW
« Antworten #7 am: 02.04.03 - 14:28:05 »

hm..kratz..was ist groß anders als im ersten Posting bzw. nach dem IF Hinweis von Axel, wo Du ja meintest dat das auch nicht klappt?
Gespeichert

Vielleicht verdirbt Geld wirklich den Charakter.
Auf keinen Fall aber macht Mangel an Geld ihn besser.
(John Steinbeck)

Meiporblog: http://www.meipor.de/blog
allg. Unternehmerblog: http://www.m-e-x.de/blog
Don Pasquale
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 1390

Don Pasquale


WWW
« Antworten #8 am: 02.04.03 - 14:32:50 »

@Rob

Was war anders : doc.~Historie und doc.~$Historie

Ich habe mein Skript nun einmal aus einer Backend Routine angesprochen ( Collection mit dc.unprozessedDocuments),
da funktioniert alles tadellos.

Aus einem Uidoc heraus im Backend was zu verändern klappt nur
wenn das uidoc im edit modus ist


Skript aus dem Backend

   Dim session As New NotesSession    
   Dim view As NotesView
   Dim dc As NotesDocumentCollection
   Dim db As NotesDatabase
   Dim Doc As NotesDocument
   
   Set db = session.CurrentDatabase
   Set dc = db.UnprocessedDocuments
   Set doc = dc.GetFirstDocument
   
   Dim OK As String   
   Dim nnUser As String
   nnUser = Session.CommonUsername
   
   
   While Not ( doc Is Nothing)
      OK = Inputbox ("Hallo",1)
      If OK <> "" Then
         ergebnis =    makeHistorieneintrag ( doc.UniversalID, nnUser, OK  )
      End If
      
      Set doc = dc.GetNextDocument(doc)
   Wend
   

Skript aus dem Frontend

   Dim uiws As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Dim session As New NotesSession
   Dim doc As NotesDocument
   
   Set uidoc = uiws.CurrentDocument
   Set doc = uidoc.Document
   
   Dim nnUser As String
   nnUser = Session.CommonUsername
   Dim OK As String
   OK = Inputbox ("Hallo",1)
   If OK <> "" Then
      ergebnis =    makeHistorieneintrag ( doc.UniversalID, nnUser, OK  )
   End If
End Sub


Identische Funktion für Beide :

Function makeHistorieneintrag ( unid As String, User As String, Text As String) As Integer
   
   Set HEUTE = New NotesDateTime( "Heute" ) ' As String   
   Dim Eintrag As String
   Dim item As NotesItem
   
   Eintrag = Cstr(Heute.localtime) & " " & User & " " & Trim$(Text)
   Dim session As NotesSession
   Dim db As NotesDatabase
   Dim doc As NotesDocument
   Set session = New NotesSession
   Set db  = session.CurrentDatabase
   Set doc = db.GetDocumentByUNID(unid)
   
   
   
   If Not (doc Is Nothing) Then
      
      If doc.~$Historie(0) = "" Then
         Print "Neu : " & Eintrag
         doc.~$Historie = Eintrag
         Call doc.save(True,True)
      Else
         Print "Zusatz : " & Eintrag
         doc.~$Historie =  Arrayappend( doc.~$Historie, Eintrag )         
         Call doc.Save(True, False)
      End If
      
   End If
   
End Function
« Letzte Änderung: 02.04.03 - 14:34:29 von Don Pasquale » Gespeichert
ata
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 4950


drenaiondrufflos


WWW
« Antworten #9 am: 02.04.03 - 14:32:54 »

... da bin ich aber beruhigt, denn ich verwende den Arrayappend in der von dir beschriebenen Weise - die Korrektur von Axel war maßgebend...

ata  Grin
Gespeichert

Grüßle Toni Smiley
Rob Green
Freund des Hauses!
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 2651



WWW
« Antworten #10 am: 02.04.03 - 14:37:46 »

ah ok...dacht schon ich hab Tomaten auf den Augen..hat ich ja.. Cool
Gespeichert

Vielleicht verdirbt Geld wirklich den Charakter.
Auf keinen Fall aber macht Mangel an Geld ihn besser.
(John Steinbeck)

Meiporblog: http://www.meipor.de/blog
allg. Unternehmerblog: http://www.m-e-x.de/blog
Alperen15
Aktives Mitglied
***
Offline Offline

Geschlecht: Weiblich
Beiträge: 184


« Antworten #11 am: 01.06.10 - 14:00:57 »

Hallo,

ich hätte da mal eine Frage.

unzwar habe ich in meiner Maske ein Kontrollkästchen Feld ("fdActivities_1"). Der Inhalt der Kontrollkästchen sind --> training request / process improvement / necessary program failure.

Wenn der user angenommen training request auswählt und auf OK klickt soll dann automatisch eine email an den Bearbeiter gesendet werden wenn er programm failure anklickt dann soll die eimal an die IT gehen. Momentan sieht es so aus quellcode mäßig momentan bin ich nur so weit gekommen

die arrays habe ich deklariert

Dim arr1(3) as String
Dim arr2(3) as string
dimm arr(3) as string

arr1 = training request
arr2 =  process improvement
arr§ =  necessary program failure


   If fdActivities_1(0) = "training requestr" Then
      'arrayappend email.CopyTo <--- it EIMAL ADRESSE
End If


könntet ihr mir weiterhelfen
Gespeichert
atbits
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 634


Bugfree-Development ;-)


WWW
« Antworten #12 am: 01.06.10 - 14:06:47 »

Also auf jeden Fall mal:


Code:
dim arr(3) as string

arr(1) = "training request"
arr(2) =  "process improvement"
arr(3) =  "necessary program failure"

...

Mist im Code gehen keine Formatierungen
« Letzte Änderung: 01.06.10 - 14:08:26 von atbits » Gespeichert

David Schiffer
================================

atBits GmbH & Co. KG - http://www.atbits.de
Softwareentwicklung und Beratung

im Einsatz:
Lotus Domino 6.5.x, 7.x, 8.x, 8.5.x
CooperTeam DesktopManager
Axel
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 8434


It's not a bug, it's Notes


« Antworten #13 am: 01.06.10 - 14:18:45 »

@Alperen15

Warum wärmst du ständig alte Threads wieder auf und das quer durch alle Foren?

Bitte erstelle für deine Probleme neue Threads und zwar in dem Unterforum das deiner eingesetzten Version entspricht.

Axel

PS: Außerdem wäre es schön, wenn du deine Postings mit deinem realen Vornamen unterschreiben würdest.
Gespeichert

Ohne Computer wären wir noch lange nicht hinterm Mond!

Server: 6.5.x; 7.0.x; 8.5.1 auf Win2000/Win2003 (R2) 32/64bit
Clients: 6.5.x bis 8.5.1 dt. und engl. auf W2K und WinXP
Seiten: [1] 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.16 | SMF © 2006, Simple Machines Prüfe XHTML 1.0 Prüfe CSS
Impressum Atnotes.de - Powered by Syslords Solutions - Datenschutz | Partner: Tinte / Toner günstig