Domino 9 und frühere Versionen > Entwicklung
neu Nummerierung in einer Maske
koehlerbv:
Wenn wir helfen sollen, brauchen wir endlich Infos von Dir. Was sagt der Debugger (nachdem Du den Code in eine Aktion gepackt hast), oder: Wie sind entscheidendem Moment die Variablen belegt. Usw. usf.
Und: Du hast ein prinzipielles Problem, was mit Notes nix zu tun hat: Der Ansatz Deiner Positionsnummern-Lösung ist falsch.
1. Die Sache ist extrem inperformant.
2. Wenn schon diese Lösung - Warum numerierst Du alles neu um anstatt sich die gelöschte PosNo zu merken und dann alle höheren vorhanden Nummern um eins zu dekrementieren ?
3. Deine PosNos sind durch Dein Verfahren sowieso wertlos. Da Du alles umnumerierst und die Collection Dir keine bestimmte Reihenfolge garantiert, kann es sein, dass Du so mal aus der Nummer 1 die Nummer 6 machst und aus dieser bei der nächsten Aktion die Nummer 3. Warum speicherst Du dann überhaupt die Nummern in den Dokumenten und berechnest diese nicht nur für die Anzeige ?
Diese prinzipielle Problematik halte ich für gravierender als Deine aktuell vorhandenen Schwierigkeiten mit der Notes-Programmierung.
Bernhard
Thomas Schulte:
Ok da ist ein massiver Fehler drin und dann noch ein Menge Folgefehler:
Wo wird denn bitteschön Thisdoc definiert?
Daraus ergeben sich Etliche Folgefehler. Ich hab mal alles was mir Spanisch vorkommt GROSSGESCHRIEBEN.
Sub Click(Source As Button)
Dim collection As NotesDocumentCollection
Dim docDetail As NotesDocument
Dim viewForRefresh As NotesView
Dim strPos As String
Dim i As Integer
Set viewForRefresh = db.GetView( "(BestellPositionen)" )
Set view2 = db.GetView( "(BestellPositionenByKey)")
HIER SIND LAUFZEITPROBLEME BEI VIELEN DOKUMENTEN IN DER DATENBANK ZU ERWARTEN
Call view2.Refresh()
HIER HAST DU DEINEN KARDINALFEHLER
Set collection = view2.GetAllDocumentsByKey(thisDoc.UniversalID)
DAS HIER KANN NICHT LAUFEN WEIL ER GAR KEINE COLLECTION HABEN KANN SIEHE OBEN
Select Case collection.Count
Case 0:
Msgbox "Keine Position vorhanden.", 48, db.title
Case 1:
Set docDetail = collection.GetFirstDocument
Call docDetail.Remove (True)
Case Else:
strPos = Inputbox$( "Welche Position löschen?", "Position löschen", "1" )
If strPos <> "" Then
Call view2.Refresh()
Set docDetail = view2.GetDocumentByKey( thisDoc.UniversalID + "-" + strPos )
Call docDetail.Remove( True)
End If
End Select
REM Positionen neu durchnummerieren
LOGIKFEHLER, WIESO BAUST DU DIE COLLECTION ÜBER EINEN DB.SEARCH NEU AUF DIE GIBT ES DOCH SCHON.
LAUFZEITPROBLEME GIBT ES DA UNTER UMSTÄNDEN AUCH
Set collection = db.Search( |Form = "BestandsabfrageDetail" & ParentUNID = "| + thisDoc.UniversalID + |"|, Nothing, 0 )
NETT ABER WARUM SPEICHERST DU DAS HIER AB?
thisDoc.LastDetailPos= collection.count
Call thisdoc.Save(True, True)
WENN DU ES HIER DIREKT VERGLEICHEN KÖNNTEST!
If thisDoc.LastDetailPos(0) > 1 Then
For i = 1 To collection.count
Set docdetail = collection.GetNthDocument(i)
docDetail.Pos = i
Call docDetail.Save( True, True )
Next
ACH JA UND DAS HIER IST AUCH IDIOTISCH, WARUM SETZT DU EINEN WERT DEN DU SCHON GESETZT HAST IMMER WIEDER?
thisDoc.LastDetailPos = collection.count
DER FOLGENDE ZWEIG IST ABSOLUT UNSINNIG. ENTWEDER HAT DEINE COLLECTION EINEN WERT VON NULL ZURÜCKGELIEFERT ODER NICHT. WENN SIE 1 ZURÜCKGELIEFET HAT HAST DU AUF EINMAL DA NULL DRINSTEHEN. WIE SOLL DAS DENN GEHEN. DU HAST NOCH EINE POSITION UND BEHAUPTEST DU HÄTTEST GAR KEINE MEHR. LOGIKFEHLER IM SCRIPT.
Else
thisDoc.LastDetailPos = 0
End If
Call viewForRefresh.Refresh()
Call uiDoc.Refresh()
End Sub
Das Problem ist übrigens nicht das du fragst, sondern die Art wie. Du gibst uns einfach zu wenig und dann meistens noch die falschen Informationen. Jede Anwendung, jede Sprache hat Ihre Syntax und wenn du dieses Fachchinesisch nicht (noch) sprichst, dann haben die Leute die Tiefer drinstecken in der Materie ein Problem mit dem was du willst.
Thomas
7Stein:
thisDoc ist global deklariert.
Wieso ist das ein Kardinalfehler?
Wenn ich GetAllDocumentsByKey aufrufe, bekomme ich laut designerhilfe doch ein Array aller Werte zurück.
Das ganze läuft ja schon in einer Action, aber die views sind embedded views. Geht das deswegen nicht?
Gelöscht wird das Dokument.
koehlerbv:
Ich fasse es nicht ... Du willst partout nicht begreifen ... Du beantwortest keiner unserer Fragen, gibst uns nicht alle Infos ("thisDoc ist global deklariert." Ach ja ?!?), aber stellst schon wieder neue.
Schon in der DesignerHelp kann man sich schlau machen, was es mit einer embedded view und einem View-Zugriff über's Backend auf sich hat.
Offensichtlich bist Du einfach zu faul, selber zu lesen und dann vor allem zu DENKEN.
Bernhard
7Stein:
DANKE FÜR DIE BLUMEN!!!!!!!
In der Variable
thisDoc.LastDetailPos steht eine 0 drin.
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln