Autor Thema: ArrayAppend (wieder mal)  (Gelesen 10835 mal)

Offline Don Pasquale

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.390
  • Geschlecht: Männlich
  • Don Pasquale
    • Auf Verlorenem Posten
ArrayAppend (wieder mal)
« 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

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re:ArrayAppend (wieder mal)
« Antwort #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
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline doliman

  • Senior Mitglied
  • ****
  • Beiträge: 332
  • Geschlecht: Männlich
    • www.doleschel.de
Re:ArrayAppend (wieder mal)
« Antwort #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.

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

----------------------
Ein Berufsleben ohne Notes ist zwar möglich aber die Alternativen sind erschreckend ;-)

Offline Don Pasquale

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.390
  • Geschlecht: Männlich
  • Don Pasquale
    • Auf Verlorenem Posten
Re:ArrayAppend (wieder mal)
« Antwort #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

Offline doliman

  • Senior Mitglied
  • ****
  • Beiträge: 332
  • Geschlecht: Männlich
    • www.doleschel.de
Re:ArrayAppend (wieder mal)
« Antwort #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?
Grüßle
                           _///_
                          (o~o)
-------------oOOO--(_)--OOOo-------------
Frank Doleschel

----------------------
Ein Berufsleben ohne Notes ist zwar möglich aber die Alternativen sind erschreckend ;-)

Offline Rob Green

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.651
  • Geschlecht: Männlich
    • Meipor
Re:ArrayAppend (wieder mal)
« Antwort #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)
   
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

Offline Don Pasquale

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.390
  • Geschlecht: Männlich
  • Don Pasquale
    • Auf Verlorenem Posten
Re:ArrayAppend (wieder mal)
« Antwort #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 ???


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

Offline Rob Green

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.651
  • Geschlecht: Männlich
    • Meipor
Re:ArrayAppend (wieder mal)
« Antwort #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?
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

Offline Don Pasquale

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.390
  • Geschlecht: Männlich
  • Don Pasquale
    • Auf Verlorenem Posten
Re:ArrayAppend (wieder mal)
« Antwort #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 »

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re:ArrayAppend (wieder mal)
« Antwort #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  ;D
Grüßle Toni :)

Offline Rob Green

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.651
  • Geschlecht: Männlich
    • Meipor
Re:ArrayAppend (wieder mal)
« Antwort #10 am: 02.04.03 - 14:37:46 »
ah ok...dacht schon ich hab Tomaten auf den Augen..hat ich ja.. 8)
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

Offline Alperen15

  • Aktives Mitglied
  • ***
  • Beiträge: 203
  • Geschlecht: Weiblich
Re: ArrayAppend (wieder mal)
« Antwort #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

Offline atbits

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 708
  • Geschlecht: Männlich
  • sei Du selbst die Veränderung, die Du Dir wünschst
    • atBits
Re: ArrayAppend (wieder mal)
« Antwort #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 »
David Schiffer
================================
atBits GmbH & Co. KG - https://atbits.de
im Einsatz: Lotus Domino 8.5, 9, 10

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: ArrayAppend (wieder mal)
« Antwort #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.
Ohne Computer wären wir noch lange nicht hinterm Mond!

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz