laufende Nr. als Zahl speichern

  • Hi,


    ich versuche ein Dokument mit laufender Nr. zu erstellen. Dazu habe ich mir eine Ansicht gebastellt auf der die Zahlen Dokumente nacheinander sortiert sind und ich wähle das Letzte Dokument aus, dessen Nr. ich um einen erhöhe.


    Das klappt alles auch ganz gut, nur das er mir die Zahl nicht als Zahl sondern nur als String speicht.
    Alle vorherigen Zahlen sind Zahlen. Öffne ich nun das Dokument wird folgender Code im Postopen ausgeführt.



    Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim view As NotesView
    Dim doc As NotesDocument
    Set db = session.CurrentDatabase
    Set view = db.GetView("(laufendeNr)")
    Set doc = view.GetLastDocument

    [i]If Source.IsNewDoc Then


    Forall x In doc.HM_DokNr
    x = x + 1
    If Typename ( x ) <> "STRING" Then
    Call Source.FieldSetText( "HM_DokNr",Str( x ) )
    Else
    Call Source.FieldSetText( "HM_DokNr", x )
    End If
    End Forall
    End If
    End Sub[\i]


    vorher habe ich es mit einem


    [i]Forall x In doc.HM_DokNr
    x = x + 1
    Call Source.FieldSetText( "HM_DokNr", x )
    End Forall[\]


    versucht und er bringt mir den Fehler: "String expected"
    Das Feld selber ist ein Zahlenfeld!!



    Kann mir dieses Phänomen jemand erklären? oder noch besser, mir eine Lösung geben?



    Gruß und Dank
    Christian

  • hm,


    mein problem ist ja nicht das ich es als Text übergebe, sondern das er einen Text erwartet. Das Feld ist ein Zahlenfeld und alle laufendenNr. sind auch Zahlen. Dennoch will er mir meine weiteren Nr. nicht als Zahl sondern als String speichern.


    Übergebe ich ihm die werte, ohne sie vorher in einen String umzuwandeln gibt er mir die Error-Meldung: String erwartet aus.



    Gruß
    Christian

  • Nichts!!
    Ich zeige die laufende Nr. nur an.


    Wenn ich sie als String speichere ist er zufrieden.
    Das witzige daran ist das, sobald ich @Command([toolsrefreshalldocuments]) anwende er die String-Zahlen in Zahlen umwandelt, da sie ja in einem Zahlenfeld stehen.

  • also ich persönlich würde das ganze im postsave abhandeln!


    hat den grossen vorteil das beim gleichzeitigen erstellen von dokumenten die nummer nicht doppelt vergeben wird.


    dann kannst du auch die laufende nummer problemlos direkt im backend schreiben.

    bunt ist das dasein und granatenstark. volle kanne hoshi's!


    IBM Certified Advanced System Administrator (R5, D6, D7)
    IBM Certified Advanced Application Developer (R5, D6, D7, D8)

  • Eigentlich schon. Es ist ein echt komischer Fehler und ich habe 0 Ahnung woran er liegen könnte.



    Und was für eine Bedingung würdest du ihm im Postsave geben? IsNewDoc funzt da ja nicht mehr.
    Aber die Idee ist gut, ich habs mal ins Querysave geschoben

  • Vermeide ich die doppelspeicherung einer Nr. nicht schon durchs Querysave? Dort erstellt er die Nr. doch auch erst direkt vorm speichern.



    PS: seit ich die Zahl im Querysave erstelle wandelt er sie direkt nach dem Übergeben in eine Zahl um.
    Irgendwas muß ich da vorher falsch gemacht haben, ich weiß nur nicht was :-?

  • Nur so am Rande bemerkt:
    Das Verfahren funktioniert nur mit einer einzigen Replik der DB und vielleicht im Cluster, wenn er schnell genug ist.
    Und wenn der Ansichtsindex der "Nummern-Ansicht" immer schnell genug aktualisiert wird.


    Will sagen: Für deinen Einsatzzweck mag es funktionieren, aber dies ist keine Methode, die man prinzipiell hernehmen kann.

    Bye
    Torsten


    IBM Advanced Certified System Administrator - Lotus Notes and Domino 8.5

  • na ja. query is halt die anfrage zum speichern. wenn da was schief geht, könnte es halt evtl. zu doppelbelegung kommen.


    post is halt wenns auf jeden fall schon einmal gespeichert wurde.


    neuberechnung der nummer einfach wenn die nummer = 0 ist.


    problematisch wirds wenn du repliken auf mehrere server verteilst. dann musst du dir eh was anderes einfallen lassen. das thema wurde übrigens schon hier im forum diskutiert.

    bunt ist das dasein und granatenstark. volle kanne hoshi's!


    IBM Certified Advanced System Administrator (R5, D6, D7)
    IBM Certified Advanced Application Developer (R5, D6, D7, D8)