Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: john doh am 02.07.08 - 15:17:35
-
Hallo,
ich mach es kurz. Ich habe eine Datenbank "test.nsf". Enthalten ist eine Maske "testmaske", mit den Textfeldern "kartennr", "betr", "status", "puffer". Der Agent heißt "okay", er wird über einen Button aufgerufen und das ist sein Code:
Sub Initialize
Dim uiws As New NotesUIWorkspace
Dim session As New notessession
Dim db As notesdatabase
Dim doc As notesdocument
Dim view As NotesView
Dim fileNum As Integer
Dim fileName As Variant
Dim InputStr As String
Dim delimiter As String
Dim FieldArray As Variant
Dim knrar As String
Dim pufferar As String
Dim statusrar As String
Set db = session.currentdatabase
Set view = db.GetView ("testview")
fileNum% = Freefile()
fileName = uiws.OpenFileDialog(True, "CSV-Datei auswählen", "CSV Files|*.CSV", "C:\")
delimiter = ";"
Open fileName(0) For Input As fileNum%
Line Input #1, InputStr$
Do While Not Eof(fileNum%)
Line Input #1, InputStr$
FieldArray = Split(InputStr$,delimiter)
knrar = Replace(FieldArray(0) ,Chr(34),"")
statusar = Replace(FieldArray(1) ,Chr(34),"")
pufferar = Replace(FieldArray(2) ,Chr(34),"")
If Not Isempty(FieldArray) Then
Set doc = view.GetDocumentByKey(knrar)
If Not doc Is Nothing Then
Call doc.ReplaceItemValue("status", statusar)
Call doc.ReplaceItemValue("puffer", pufferar)
Call doc.Save(True,True)
End If
End If
Loop
Close fileNum%
End Sub
Das ist der Inhalt der CSV-Datei:
"15";"Rechnungsbetrag";15,99
"15";"";
"15";"";5,99
"12";"";2,99
"12";"";
"12";"Rechnungsbetrag";12,99
"10";"";10,99
"10";"Rechnungsbetrag";20,99
"10";"";
Und so sieht die Ansicht "testview" nach Aufrufen des Agenten aus:
kartennr betr status puffer
10 11,99
11 12,99
12 13,99 Rechnungsbetrag 12,99
13 14,99
14 15,99
15 16,99 5,99
16 17,99
17 18,99
18 19,99
19 20,99
19 20,99
Soweit klappt alles, ich hab da "nur" noch zwei Probleme.
1. Momentan liest mir der Agent alle Zeilen der CSV ein. Ich möchte aber, dass er mir nur die Zeilen einliest, mit dem Wert "Rechnungsbetrag".
2. Momentan bin ich in der Ansicht "testview" darauf angewiesen, dass die Kartennr sortiert in der 1. Spalte stehen. Ich möchte aber, dass sie z.B. in der 4. Spalte unsortiert sind.
Hab gerade erst mit Lotus Script angefangen und brauche jetzt HILFE.
Danke!
-
Wunderschöne Erklärung.
1) Und Du scheiterst jetzt woran? Wie lautet Deine konkrete Frage?
2) Was hat eine View mit dem Import der Daten zu tun? Das mit dem View geht nicht anders, wie Du der Designer-Hilfe zum Thema "GetDocumentByKey" entnehmen kannst.
-
Zu 1)
Du müßtest vor dieser Zeile hier
Set doc = view.GetDocumentByKey(knrar)
noch eine Prüfung einbauen, ob der statusar = "Rechnungsbetrag" ist. Also einfach noch eine If-Bedinung vorher einfügen.
Zu 2)
Die Frage habe ich nicht verstanden. Was meinst Du genau ?
-
Zu 1) Du möchtest Dir die LS-Function "Instr" anschauen.
Zu 2) Hier hat Martin nicht Recht - Du verwendest ja GetDocumentByKey (Achtung - hier fehlt der Parameter 'exactmatch'!!). Nur - wenn Du das verwendest, muss auch die View entsprechend sortiert sein.
Dein Problem 2) verstehe ich allerdings überhaupt nicht - mach' Dir eben eine zweite View nach Deinem Gusto.
Bernhard
PS: Ein ansprechbarer Name ist hier eigentlich Usus und bestimmt durchaus das Antwortverhalten der Hilfswilligen.
-
Zu 2) Hier hat Martin nicht Recht - Du verwendest ja GetDocumentByKey (Achtung - hier fehlt der Parameter 'exactmatch'!!). Nur - wenn Du das verwendest, muss auch die View entsprechend sortiert sein.
Dein Problem 2) verstehe ich allerdings überhaupt nicht - mach' Dir eben eine zweite View nach Deinem Gusto.
Bernhard, da sagt die Designer-Hilfe aber etwas anderes:
GetDocumentByKey finds a document based on its column values within a view. You create an array of keys, where each key corresponds to a value in a sorted column in the view.
...
For the GetAllDocumentsByKey method to work, you must have at least one sorted column for each key.
Die Kartennummer muss also in der ersten sortierten Spalte stehen (auch wenn das die vierte Spalte der View ist).
-
Das ist schon klar, Martin - aber er will das ja dann unsortiert haben. Aber das hast Du ja schon bestätigt.
Bernhard
-
Danke für die schnellen Antworten.
zu 1.
Wenn der Agent so ausgeführt wird, schreibt er mir doch die komplette CSV in ein Array. Richtig? Ich möchte aber, dass er mir nur die Zeilen reinschreibt mit dem Wert "Rechnungsbetrag". Wie bekomme ich das hin?
Zu 2.
Fieldarray(0) wird doch durch den Befehl "GetDocumentByKey" mit der ersten sortieren Spalte verglichen. Richtig? Welcher Befehl veranlasst Fieldarray(0) sich mit der z.B. 4. Spalte zu vergleichen?
Habt etwas Nachsicht mit mir, ich bringe mir Lotus Script seid 1 1/2 Wochen selber bei.
-
Zu 1) Liest Du auch, was man Dir antwortet?
2) Es bleibt bei der Methode GetDocumentByKey und der Tatsache, dass der Wert in der ersten sortierten Spalte gesucht wird. Egal, ob das die erste oder die vierte ist.
Und der Name fehlt immer noch. Mit john doh mag ich mich nicht unterhalten.
Bernhard
-
Hallo
@Bernhard, da muss ich Dich leider korrigieren:
Und der Name fehlt immer noch. Mit john doh mag ich mich nicht unterhalten.
Mathias hat (wie von Dir empfohlen) seinen Vornamen mit "MfG" in den Footer.
@Matthias, dann musst Du eben die Ansicht für Deine Zwecke umbauen.
Gruß Werner
-
@Bernhard
Ja, ich lese mir alle Antworten durch, nur wie ich schon schrieb, bin ich totaler Anfänger was Script angeht. Und um ehrlich zu sein, weiß ich nicht wirklich, wie ich die Vorschläge zu meinem ersten Problem einbinden soll.
Das zweite Problem ist gelöst, vielen Dank an alle, hatte das mit der ersten Spalte falsch verstanden.
Knicks
Matthias
-
Die Logik musst Du schon selbst einbringen, Matthias, aber was Du brauchst, ist ein
If Instr (InputStr$, "Rechnungsbetrag") > 0 Then
HTH,
Bernhard
-
ES FUNKTIONIERT (nicht das ich jemals dran gezweifelt hätte). ;D
Danke für die schnelle Hilfe!
Danke für die Aufmerksamkeit!
Danke für die Geduld!
Danke für das herzliche Aufnehmen im Forum! ;D
Danke für die Blumen!
Aber jetzt mal ernsthaft, vielen Dank an alle, Ihr habt mir sehr weitergeholfen.
Alle Anforderungen an den Agenten sind erfüllt und mein Chef ist zufrieden.
Entschuldigt vielmals meinen schlechten Start im Forum.
Matthias
-
Entschuldigt vielmals meinen schlechten Start im Forum.
Hallo Matthias,
dafür gibt es überhaupt keinen Grund - alles passt doch (incl. Deiner dankenswerten Rückmerldung).
In diesem Sinne: Gerne wieder (wenn wir helfen können).
Bernhard