Lotus Notes / Domino Sonstiges > Projekt Bereich

@Formula-Befehle in Lotus Script abbilden

<< < (19/21) > >>

TMC:
Zwischenstand:

Wir starten gerade offtopic per PM, erste Scriptvorschläge zu diskutieren.
Wer sich beteiligen möchte an der Diskussion und am "formen" der ersten Functions, bitte kurze PM an mich.
Die ersten Ergebnisse werde ich dann hier posten als Motivation, unsere Library nach und nach zu füllen ;)

Grüße,
TMC

TMC:
********* Projektinfo *********

Hab grad gesehen, dass Axel gerade ein Projekt startet für die Abbildung der Scripts  :D

http://www.atnotes.de/index.php?board=24;action=display;threadid=12702



TMC

TMC:
Hi,

ein Versuch war es mal, Scripts offline zu disktutieren, nur leider verliert man da im PM leicht den Überblick und Zusammenhang.
Daher tendiere ich doch dazu, die Diskussion online weiterzuführen.

Wir haben in Summe jetzt 5 Scripts zur Diskussion.

Mit dem ersten starte ich mal, es ist von Bernhard (koehlerbv) und ein ReplaceSubstring-Derivat:

ACHTUNG ENTWURF - NUR ZUM TESTEN VERWENDEN


--- Code: ---Function ReplaceSubstring (vSource As Variant, vFrom As Variant, vTo As Variant) As Variant
    '===========================================================================================
    ' Purpose: Replaces a specific substring in a string or array of strings with a new substring
    '              The parameters MUST be strings or array of strings !
    '--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    ' Arguments              Type    Description    
    '      vOriginal        |  I/-  |    the source string or string array
    '      vForm            |  I/-  |    the substring (or string array) to replace
    '      szTo            |  I/-  |    the substring (or string array) to insert
    '--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    ' Returns:    String array with replaced values
    '                 NOTE: There is a difference between @ReplaceSubstring and this function !
    '                            If vFrom has more elements as vTo, we replace only the amount of elements in vTo !!!
    '--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    ' Created by: Bernhard Koehler on 08.07.2003        Modified by:  on
    '===========================================================================================
   
    Dim aSource As Variant
    Dim aFrom As Variant
    Dim aTo As Variant
    Dim szSource As String
    Dim vResult As Variant
    Dim iLoop As Integer
    Dim iElementsToChange As Integer
    Dim iFirstStringPos As Integer
    Dim szTo As String
   
    On Error Goto ErrorRoutine
   
    'The default value: Source = Result
    ReplaceSubstring = vSource
   
    'Make sure that all parameters becomes arrays (We have to decide two cases: vSource is String, or any kind of a variant)
    If Datatype (vSource) = V_STRING Then
        Redim aSource (0) As String
        aSource (0) = vSource
    Else
        aSource = vSource    
    End If
   
    If Datatype (vFrom) = V_STRING Then
        'No calculations with an empty FromList:
        If vFrom = "" Then Exit Function        
       
        Redim aFrom (0) As String
        aFrom (0) = vFrom
    Else
        aFrom = vFrom    
    End If
   
    If Datatype (vTo) = V_STRING Then
        Redim aTo (0) As String
        aTo (0) = vTo
    Else
        aTo = vTo    
    End If
   
    'Make the replaces:
    szSource = Implode (aSource, Chr$ (255))        'make a string from the source parameter
   
    'Determine the limit of changes:
    If Ubound (aFrom) > Ubound (aTo) Then
        iElementsToChange = Ubound (aTo)
    Else
        iElementsToChange = Ubound (aFrom)
    End If
   
   
    For iLoop = 0 To iElementsToChange
        While Instr (szSource, aFrom (iLoop)) > 0
            iFirstStringPos = Instr (szSource, aFrom (iLoop))
            If iFirstStringPos = 1 Then
                szSource = aTo (iLoop) & Mid$ (szSource, iFirstStringPos + Len (aFrom (iLoop)) - 0, 255)
            Else
                'szSource = Mid$ (szSource, 1, iFirstStringPos - 1) & aTo (iLoop) & Mid$ (szSource, 1 + iFirstStringPos + Len (aFrom (iLoop)))
                szSource = Mid$ (szSource, 1, iFirstStringPos - 1) & aTo (iLoop) & Mid$ (szSource, iFirstStringPos + Len (aFrom (iLoop)), 255)
            End If
        Wend
    Next
   
    ReplaceSubstring = Explode (szSource, Chr$ (255))
    Exit Function
   
ErrorRoutine:
Call DisplayErrMsg ("ReplaceSubstring")
End Function

--- Ende Code ---

TMC:
OK und hier mein Feedback zum ReplaceSubstring-Derivat:

Ich poste mal direkt ohne Rücksicht auf Höflichkeitsfloskeln (bla bla leider könnte da u.U. vielleicht evtl. ein Fehler sein bla bla...)

- Code-Header: Code-Header "Arguments" stimmt nicht überein mit tatsächlichen Bezeichnungen (vOriginal / vSource , etc.)

- Wenn ich Option Declare setze, bringt der Designer eine Fehlermeldung, dass " V_STRING" nicht deklariert ist.

Testszenario:
R5011 Client, Maske in Bearbeitung, die Textfelder
- Inhalt (dieses Feld soll durchsucht werden)
- Vorgabe_Ist (Wert nach dem gesucht werden soll - also der replaced werden soll)
- Vorgabe_Soll (Wert, der eingefügt werden soll)

Aufruf des Scripts: über Button

Script:

--- Code: ---Sub Click(Source As Button)
   Dim uiws As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument    
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim doc As NotesDocument
   
   'die 3 Felder
   Dim szInhalt As String
   Dim szIst As String
   Dim szSoll As String
   
   Set db = session.CurrentDatabase
   Set uidoc = uiws.CurrentDocument
   Set doc = uidoc.Document
   
   'Feldinhalte holen...   
   szInhalt = doc.Inhalt(0)
   szIst = doc.Vorgabe_Ist(0)
   szSoll = doc.Vorgabe_Soll(0)
   
   'Function ausführen
   doc.Inhalt = ReplaceSubstring(szInhalt, szIst, szSoll)
      
   'Speichere Doc   
   Call doc.save(False, False)   
   
End Sub
--- Ende Code ---

Im Textfeld "Inhalt" steht der Text "Rainer askhfdkjad hkjahdkjas dk"
Im Textfeld "Vorgabe_Ist" steht "Rainer"
Im Textfeld "Vorgabe_Soll" steht "Hans"

Dokument wurde bereits gespeichert und neu im Bearbeitungsmodus geöffnet.

Aufruf
Beim Klick auf den Codebutton
- durchläuft der Debugger sauber die Sub, geht dann normal in die Function, durchläuft die Function
- An der Stelle "If Ubound (aFrom) > Ubound (aTo) Then" springt er danach zum Errorhandler, dann Fehlermeldung "No RESUME"

TMC

Semeaphoros:
Das sieht mir so aus, wie wenn da beim Uebermitteln der Funktion etwas verloren gegangen ist, müsste mal Bernhard zuerst den Code überprüfen und sagen, was Sache ist, natürlich liesse sich das auch so ausmerzen, aber Bernhard soll mal dazu was sagen.

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln