Ich habe jetzt in der Sub Querysave ganz am Ende ein Source.refresh eingefügt. Das Problem bleibt aber dasselbe.
Beiträge von HeikoE
-
-
Wie deklaierst du den genau?
Wie bekommst du einen String in dieser Form in die Variable?Oder willst du so einen String aus einem Feld herauslesen?
gruß
heiko -
Hallo zusammen,
ich muss mich erneut an euch wenden.
Ich bin immernoch dabei Dokumente zu erzeugen. Mein problem ist folgendes:
Im Debugger erkenne ich, dass in der Sub LaufendeNummer alles korrekt abgearbeitet wird und auch doc.txtLNummer = neuenummer durchgeführt wird.In der Sub Querysave wird alles korrekt bis zum end sub durchlaufen.
Danach startet die Sub aber wieder in der Zeile Set doc = source.document und läuft erneut durch.
Nun ist das problem, dass in der Methode LaufendeNummer das doc cniht gespeichert wird und daher die txtLNummer nicht im doc übernommen ist, daher wird erneut eine laufende Nummer mit einem neuen Dokument erzeugt.Was mich nun wundert sind 2 Dinge:
1. Wieso wird der Wert nicht ins Doc übernommen?(wenn ich doc.save mache wird es auch nicht übernommen)
2. Wieso läuft das gerade 2x durch?Ich bin über eure Hinweise dankbar, auch andere Nachfragen konnten mir bisher nciht weiterhelfen, sie wundert das ebenso.
Danke
gruß
HeikoCoding der betroffenen Methoden:
Querysave:
CodeSub Querysave(Source As Notesuidocument, Continue As Variant) Dim doc As NotesDocument Set doc = source.document 'Ermöglichen der temporären Sicherung If doc.wfValidationFlag(0)<>"1" Then Exit Sub 'Verhindert das abgeschlossene Dokumente vor dem Beenden auf Fehler geprüft werden If doc.wfStatus(0)<>"Completed" Then Call VorEnde(Source, Continue, doc) End If If Not Continue Then Exit Sub 'Erzeugt eine laufende Nummer für das Dokument If doc.wfAlias(0) ="StartRequest" Then If doc.txtLNummer(0) ="" Then Call LaufendeNummer (doc) End If End If End Sub
LaufendeNummer:
CodeSub LaufendeNummer (doc As NotesDocument) Dim doc2 As NotesDocument Dim db As Notesdatabase Dim session As New NotesSession Dim view As NotesView Dim num As Double Dim note As NotesDocument Dim neunummer As Integer Set db = session.currentDatabase Set view =db.getView("$LaufN") Set note=view.getLastDocument If Not note Is Nothing Then num# = Val(Cstr(note.txtLNummer(0))) Else Set view =db.getView(".AdminSettingsView") Set note =view.getDocumentbyKey("9") num# = Val(Cstr(note.txtLNummer(0))) End If Dim LNdoc As NotesDocument Set LNdoc = db.CreateDocument neunummer = num +1 LNdoc.Form= "LID" LNdoc.txtNummer = doc.txtNummer LNdoc.txtLNummer=neunummer LNdoc.namAuthor = session.username LNdoc.ymdCreatedAt =Now doc.txtLNummer = neunummer Call LNdoc.save(False,False)End Sub
VorEnde:
Code
Alles anzeigenSub VorEnde (Source As NotesUIdocument, Continue As Variant, doc As NotesDocument) Dim meldung As String 'Prüfung ob eine Teilenummer eingegeben wurde (Start Workflow) If doc.wfAlias(0)="StartRequest" Then If doc.txtNummer(0) ="" Then meldung = |Bitte geben Sie eine 12-stellige Teilenummer ein.| Msgbox meldung,0,"Information" Call Source.gotoField("txtNummer") Continue = False Exit Sub End If End If 'Prüfung ob eine Teilenummer und ein KA-Status eingegeben wurde (Planer) If doc.wfAlias(0)="CreateCalc"Then If doc.txtNummer(0) ="" Then meldung = |Bitte geben Sie eine 12-stellige Teilenummer ein.| Msgbox meldung,0,"Information" Call Source.gotoField("txtNummer") Continue = False Exit Sub End If End If If doc.wfAlias(0)="CreateCalc"Then If doc.txtKastatus(0) ="" Then meldung = |Bitte geben Sie einen KA-Status ein.| Msgbox meldung,0,"Information" Call Source.gotoField("txtKastatus") Continue = False Exit Sub End If End If 'Prüfung ob Kern im Gußteil enthalten ist If doc.wfAlias(0)="CheckModel" Then If doc.txtKern(0) ="" Then meldung = |Bitte wählen Sie aus, ob das Teil einen Kern besitzt.| Msgbox meldung,0,"Information" Call Source.gotoField("txtKern") Continue = False Exit Sub End If End If 'Prüfen ob die Unterscheidung zwischen Intern und Extern getroffen wurde If doc.wfAlias(0)="CheckGießerei" Then If doc.txtIntern(0) ="" Then meldung = |Bitte wählen Sie aus, ob das ein Internes oder Externes Teil ist.| Msgbox meldung,0,"Information" Call Source.gotoField("txtIntern") Continue = False Exit Sub End If End If 'Begründung warum eine Rückfrage eingeleitet wurde If doc.txtApprobation(0) ="2" Then If doc.wfComment(0) ="" Then meldung = |Bitte geben Sie eine Begründung für Ihre Rückfrage ein!| Msgbox meldung,0,"Information" Call Source.gotoField("wfComment") Continue = False Exit Sub End If End If 'Prüfung ob der Bearbeiter eine Entscheidung getroffen hat If Not doc.wfAlias(0)="StartRequest"Then If Not doc.wfAlias(0)="Notice" Then If Not doc.wfAlias(0)="CheckUp" Then If Not doc.wfAlias(0)="CreateCalc" Then If doc.txtApprobation(0) ="" Then meldung = |Bitte treffen Sie eine Entscheidung!| Msgbox meldung,0,"Information" Call source.gotoField("txtApprobation") Continue = False Exit Sub End If End If End If End If End If Call Source.close End Sub
-
Und das funktioniert bei dir so?
Ich habe ein ähnliche Funktion und die erstellt mir 2 Neue Dokumente bei jedem Durchlauf. (Ich habe die Querysavefunktion teilweise ausgelagert.)
Gruß
heiko -
Das habe ich gemacht. Es kommen dennoch noch zwei Dateien.
Das VorEnde kann momentan auch keine fehler werfen, Continue steht also nicht auf False.Gruß
heiko -
In Vor Ende werden Felder überprüft:
Code
Alles anzeigenSub VorEnde (Source As NotesUIdocument, Continue As Variant) Dim meldung As String Set doc = source.document 'Prüfung ob Kern im Gußteil enthalten ist If doc.wfAlias(0)="CheckModel" Then If doc.txtKern(0) ="" Then meldung = |Bitte wählen Sie aus, ob das Teil einen Kern besitzt.| Msgbox meldung,0,"Information" Call Source.gotoField("txtKern") Continue = False Exit Sub End If End If 'Prüfen ob die Unterscheidung zwischen Intern und Extern getroffen wurde If doc.wfAlias(0)="CheckGießerei" Then If doc.txtIntern(0) ="" Then meldung = |Bitte wählen Sie aus, ob das ein Internes oder Externes Teil ist.| Msgbox meldung,0,"Information" Call Source.gotoField("txtIntern") Continue = False Exit Sub End If End If 'Begründung warum eine Rückfrage eingeleitet wurde If doc.txtApprobation(0) ="2" Then If doc.wfComment(0) ="" Then meldung = |Bitte geben Sie eine Begründung für Ihre Rückfrage ein!| Msgbox meldung,0,"Information" Call Source.gotoField("wfComment") Continue = False Exit Sub End If End If 'Prüfung ob der Bearbeiter eine Entscheidung getroffen hat If Not doc.wfAlias(0)="StartRequest"Then If Not doc.wfAlias(0)="Notice" Then If Not doc.wfAlias(0)="CheckUp" Then If doc.txtApprobation(0) ="" Then meldung = |Bitte treffen Sie eine Entscheidung!| Msgbox meldung,0,"Information" Call Source.gotoField("txtApprobation") Continue = False Exit Sub End If End If End If End If End Sub
Ja wenn das funktioniert werde ich Nummern generieren lassen, aber dazu muss die Sache ersteinmal funktionieren. Dann kommen da auch noch weitere felder rein.
Grüße
heiko -
In den Methoden Queryclose und Postsave steht nix drin.
Die Methode Querysave sieht so aus:
CodeSub Querysave(Source As Notesuidocument, Continue As Variant) Dim doc As NotesDocument Set doc = source.document Call VorEnde(Source, Continue) If doc.wfAlias(0) ="StartRequest" Then Dim db As Notesdatabase Dim session As New NotesSession Set db = session.currentDatabase Dim doc2 As NotesDocument Set doc2 = db.CreateDocument Print "Erstellt"+ Now doc2.Form= "LID" Call LaufendeNummer (doc2) End IfEnd Sub
Und in der Methode LaufendeNumemr ist das drin:
CodeSub LaufendeNummer (doc2 As NotesDocument) doc2.txtNummer = "Nummer" doc2.txtLNummer="2" Call doc2.save(True,True) End Sub
Mehr gibt es im Moment noch nicht.
-
Ich habe doch noch eine Frage.
Er erstellt mir immer zwei neue Dokumente, obwohl die Methode nur einmal aufgerufen wird. Habe mir das eben mit Print ausgaben lassen wie oft er dort erscheint.
Hast du eine Ahnung wieso das so ist?
-
Danke genau das wars.
Ab und zu sieht man den Wald vor lauter Bäumen nicht.
-
-
Zitat
Diali schrieb:
was ist doc? Dürfte noch objectlos sein. Es fehlt ein Set doc = ...
Wahrscheinlich dürfte es Set doc = Source.Document sein.Gruß
DirkDas stimmt. Ich habe nciht alles aus der Querysave kopiert, denn das andere funktioniert alles. Es geht einzig um den Aufruf der LaufendenNummer.
-
Hallo,
ich muss beim Speichern eines Dokumentes ein neues erzeugen und dazu einige Daten aus dem Dokument in das neue speichern.
Ich habe das im Querysave mit einer Sub eingebunden. Leider kommt die Meldung IlLEGAL USE OF PROPERTY sobald ich das neue Dokument bearbeiten will.
Mein Coding im Querysave:
CodeIf doc.wfAlias(0) ="StartRequest" Then Dim db As Notesdatabase Dim session As New NotesSession Set db = session.currentDatabase Dim doc2 As NotesDocument Set doc2 = db.CreateDocument doc2.Form("LID") Call LaufendeNummer (doc2) End If
Coding in der Sub:
CodeSub LaufendeNummer (doc2 As NotesDocument) doc2.txtNummer = "Nummer" doc2.txtLNummer="2" Call doc2.save(True,True) End Sub
Hinweis: Auch als ich das Dokuemtn in der Sub erzeugt habe ging es nicht.
Ich wäre über jede Hilfe dankbar!
grüße
Heiko
-
Zitat
Diali schrieb:
bau Dir doch eine Fehlerbehandlung ein und setze dann err auf einen Wert ungleich 0.Gruß
DirkSo ich hab jetzt die Lösung gefunden.
Ich habe meinen Agenten so umgebaut, dass er die entsprechende Abfrage bereits im Initialize abfängt und abbricht. -
Hm, mit Fehlerbehandlungen habe ich noch nix gemacht.
Ich werde mal sehen was ich noch so basteln kann.Danke euch beiden.
-
Guten Morgen,
ich versuche einen Agenten mit mehreren Subs zu beenden.
Leider finde ich bisher keinen Befehl den kompletten Agenten zu stoppen, nur Exit Sub und das hilft mir nichts, da es in einer verschachtelten Sub entdeckt wird ob abgebrochen werden soll.Kann ich auch den kompletten Agenten stoppen?
Vielen Dank für Eure Hilfe
grüße
Heiko
-
Den String bekommst du mit
Dim blbla as String
In der Maske muss ein feld dann als TEXTFELD deklariert sein.
Du solltest die Hilfe des Designers lesen, auch nach 2 Wochen ist Notes nicht so schwierig
Fang mit den einfachereren Sachen an, wie dem Aufbau einer Maske und wende dich dann zu den komplizierteren. Sonst wird das nichts.Ich programmiere auch erst seit einem halben Jahr. Habe aber bereits nach 4 Wochen die erste Anwendung fertig, du wirst sehen das lernst du ganz schnell.
-
Deine Maske muss ein String- Textfeld haben in die ließt du den String dann ein. Die Ansicht muss eben alle masken von dem bestimmten Typ anzeigen.
Anstatt dieser Zeile:
Musst du die Zeile in etwa so schreiben:
Unter der Domino Hilfe, bzw hier gibts aber auch schon ettliche Betiträge, die das beschreiben.
-
Du musst den Code natürlich einbauen, zum Beispiel so:
Du musst dann den String, den du bekommen hast in ein neues Doukemtn einfügen und in einer entsprechenden Ansicht ablegen.Code
Alles anzeigenSub Initialize Dim ws As New NotesUiWorkspace Dim FileNum As Integer Dim txtFile As Variant FileNum=Freefile() 'Auswahl der txt-Datei durch Benutzer txtFile = ws.OpenFileDialog( False, "File List", "", "p:") If Not(Isempty(txtFile)) Then 'Öffnen der txt-Datei Open txtFile(0) For Input As FileNum 'Komplettes Einlesen DIM fulfile as String fulFile = Input$(LOF(FileNum), FileNum) 'Zeilenweises einlesen der txt-Datei Do Until Eof (fileNum) 'Einlesen der aktuellen Zeile Line Input #fileNum, ausgabe Loop End If End Sub
-
-
Zitat
notesfan schrieb:
Die Noteshilfe meint dazu:
redim preserve...Danke. Ich sollte doch schneller lesen, als schreiben. :idea:
Bis demnächst