Willkommen
Gast
. Bitte
einloggen
oder
registrieren
.
24.05.12 - 08:55:37
News:
Schnellsuche:
Das Notes Forum
Lotus Notes / Domino 7
ND7: Entwicklung
(Moderatoren:
eknori
,
Glombi
,
koehlerbv
)
Shared Field
« vorheriges
nächstes »
Seiten:
[
1
]
2
Autor
Thema: Shared Field (Gelesen 1188 mal)
aks
Frischling
Offline
Beiträge: 17
Shared Field
«
am:
03.01.07 - 11:24:42 »
Hi,
ich habe mir eine CD-Datenbank gebastelt.
Nun möchte ich aber dort noch folgendes drin haben:
Field -> Anzahl gesamt CDs:
Field -> CD-Nummer:
Ich dachte ich mach das evtl. über ein Shared Field aber das funzt net so ganz. Ich will quasi beim erstellen eines neuen Eintrages sehen wie viele CD Einträge befinden sich in der DB (Anzahl gesamt CDs) und dann beim Speichern soll als CD-Nummer die Anzahl +1 genommen werden. Natürlich soll dann die Gesamtanzahl auch aktualisiert werden.
Kann mir jemand nen Tip geben wie ich das recht simpel hinbekomme ?
DANKE
Andi
Gespeichert
koehlerbv
Moderator
Gold Platin u.s.w. member:)
Online
Geschlecht:
Beiträge: 19052
Re: Shared Field
«
Antworten #1 am:
03.01.07 - 11:49:31 »
Mit einem shared field bist Du hier vollkommen auf dem Holzweg - shared fields sind wiederverwendbare Felddefinitionen (einmal definiert und in vielen Masken ohne Neudefinition einsetzbar).
Weiterhin ist ein Feld "Anzahl CDs" in einem CD-Dokument sehr verwirrend und eigentlich nichtssagend. Eine CD-Nummer lässt sich auch anders vergeben (vorausgesetzt, diese DB wird nur von einem einzigen Benutzer verwendet!). Du brauchst eine Ansicht nach CD-Nummer, absteigend sortiert. Diese kannst Du dann mit @Subset (@dbColumn (....); 1) auslesen und für das neue Dokument inkrementieren - siehe DesignerHelp.
Bernhard
Gespeichert
aks
Frischling
Offline
Beiträge: 17
Re: Shared Field
«
Antworten #2 am:
03.01.07 - 12:51:43 »
Hi, danke für die Antwort. Die DB soll von mehr als einem User editiert werden. Kann man dann Deine Fromel hierzu abändern, oder wo liegt das Problem wenn mehr als ein user darauf zugreifen ?
Das Feld Anzahl gesamt CDs hatte ich nur angedacht, damit ich die CD Nummer irgendwie hochzählen kann und noch weiß was der letzte Stand war.
Gespeichert
klauss
Gold Platin u.s.w. member:)
Online
Geschlecht:
Beiträge: 5141
.. ich liebe meinen Job...
Re: Shared Field
«
Antworten #3 am:
03.01.07 - 12:54:57 »
Altes Thema, nur neuer Mantel: NEIN, es gibt keine vernünftige Lösung zur fortlaufenden Nummerierung.
Gespeichert
klaus
Operative Hektik ist ein Zeichen von geistiger Windstille.
Die Klugen leben von den Dummen, die Dummen von der Arbeit.
Nur Kinder und einfache Leute mögen lebhafte Farben. (Goethe)
Männer sind primitiv, aber glücklich.
Frauen widerspricht man nicht - man wartet, bis sie es selbst tun.
Demokratie ist, wenn drei Wölfe und ein Schaf entscheiden, was
gefressen werden soll.
Demian
Gold Platin u.s.w. member:)
Offline
Geschlecht:
Beiträge: 565
Re: Shared Field
«
Antworten #4 am:
03.01.07 - 13:03:53 »
Hallo,
hatte mal ein ähnliches Problem. Habe das mit Script im Exiting eines Feldes (Jahr) gelöst. Müsstest du halt ein bissie abändern, z.B. den Code im Postopen der Maske oder so.
Sub Exiting(Source As Field)
'==========================================================
'Beim Verlassen dieses Feldes wird automatisch, das Feld lfdNr gefüllt.
'Hierzu wird in der Ansicht "Ausbildung - Bewerbungen" das eingegebene
'Jahr gesucht, und die Anzahl der vorhanden Dokumente für dieses Jahr
'gezählt. Das Ergebnis wird mit 1 addiert.
'==========================================================
'Allgemein
Dim work As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim s As New notessession
Dim db As NotesDatabase
Dim view As NotesView
Dim doc As NotesDocument
'Vergleich
Dim Jahr As String
'Zähler
Dim i As Long
Dim i2 As Long
'==========================================================
Set uidoc = work.CurrentDocument
'eingegebenes Jahr speichern
Jahr = uidoc.FieldGetText("Jahr")
If Jahr = "" Then
Msgbox "Sie müssen das Ausbildungsjahr eingeben, damit die lfd. Nummer berechnet werden kann!",," "
Exit Sub
End If
'zu durchsuchende View setzen
Set db = s.CurrentDatabase
Set view = db.GetView("Ausbildung - Bewerbungen")
Set doc = view.GetFirstDocument
'Dokumente zählen
For i = 0 To view.AllEntries.Count
If doc Is Nothing Then Exit For
If Right(doc.Jahr(0),4) = Jahr Then i2 = i2 + 1
Set doc = view.GetNextDocument(doc)
Next
'lfd. Nummer setzen
Set doc = uidoc.Document
doc.lfdNr = i2 + 1
End Sub
Gruß
Demian
«
Letzte Änderung: 03.01.07 - 13:09:40 von Demian
»
Gespeichert
Gruß
Demian
Axel
Moderatoren
Gold Platin u.s.w. member:)
Offline
Geschlecht:
Beiträge: 8484
It's not a bug, it's Notes
Re: Shared Field
«
Antworten #5 am:
03.01.07 - 13:08:07 »
Das funktioniert aber auch nur solange, wie die DB nur von
einem einzigen Benutzer
verwendet wird.
Ansonsten gilt die Aussage von Klauss
Und was noch dazu kommt, der Benutzer muss das Feld auch wirklich verlassen.
Was machst du, wenn der User speichert und der Cursor steht noch in diesem Feld. Das Exiting - Event eines Feldes wird nicht immer zuverlässig ausgeführt.
Axel
«
Letzte Änderung: 03.01.07 - 13:11:26 von Axel
»
Gespeichert
Ohne Computer wären wir noch lange nicht hinterm Mond!
Server: 6.5.x; 7.0.x; 8.5.1 auf Win2000/Win2003 (R2) 32/64bit
Clients: 6.5.x bis 8.5.1 dt. und engl. auf W2K und WinXP
DerAndre
Gold Platin u.s.w. member:)
Offline
Geschlecht:
Beiträge: 1597
Ich guck nicht böse!
Re: Shared Field
«
Antworten #6 am:
03.01.07 - 13:24:46 »
Unter Beachtung aller Sicherheitshinweise hätte ich auch noch einen Vorschlag:
Ein Numberingdocument erstellen
Im Querysave-Event auf das Document Zugreifen
Nummer Hochzählen
Nummer Reinschreiben ( in das Numberingdocument und in das aktuelle Zählerfeld )
Numberingdocument speichern
Das sollte einigermassen brauchbar Funktionieren, tut es bei uns zumindest...
Gespeichert
André
Elterninitiative diabetischer Kinder und Jugendlicher e.V.
-----------------------------------------------------------------------------
Fliegen ist die Kunst auf den Boden zu Fallen, aber daneben.
-----------------------------------------------------------------------------
Etwas mehr Hardware dazu zu kaufen ist viel billiger als
Software besser zu machen. ( Niklaus Wirth )
klauss
Gold Platin u.s.w. member:)
Online
Geschlecht:
Beiträge: 5141
.. ich liebe meinen Job...
Re: Shared Field
«
Antworten #7 am:
03.01.07 - 13:27:23 »
Und auch hier gilt:
Zitat
Das funktioniert aber auch nur solange, wie die DB nur von einem einzigen Benutzer verwendet wird.
Gespeichert
klaus
Operative Hektik ist ein Zeichen von geistiger Windstille.
Die Klugen leben von den Dummen, die Dummen von der Arbeit.
Nur Kinder und einfache Leute mögen lebhafte Farben. (Goethe)
Männer sind primitiv, aber glücklich.
Frauen widerspricht man nicht - man wartet, bis sie es selbst tun.
Demokratie ist, wenn drei Wölfe und ein Schaf entscheiden, was
gefressen werden soll.
smoki
Senior Mitglied
Offline
Geschlecht:
Beiträge: 321
Re: Shared Field
«
Antworten #8 am:
03.01.07 - 13:30:01 »
Du kannst auch eine Pseudonummer vergeben bsp -1.
Und nach dem Speichern einen Agenten auf dem Server starten, der alle Dokumente mit -1 durchnummerieren soll (auf basis eines Profildokuments, dass den aktuellen Zähler enthält).
Normalerweise kann niemals ein Agent zweimal gleichzeitig auf dem Server laufen. (Es gibt aber einen Notes.ini Eintrag, der dieses Verhalten verändert!)
Wenn du über mehrere Repliken hinweg arbeitest, muss beachtet werden, dass der Agent nur auf einem Server ausgeführt wird.
Dann bleibt die Laufnummer so lange -1 bis sie auf dem Server der Nummeriert einschlägt. Dort sollte ein periodischer Agent laufen, der den Hochzählagenten startet.
Man kann sich noch mehr aus denken, dann wird es aber immer schwieriger
Ggf. gibt es bei diesen Verfahren Replizierkonflikte aber die treten trotz heftiger Nutzung bei uns fast nie auf;)
Gruss
Christian
Gespeichert
Blog:
http://planetlotus.org/blogs/smoki
Demian
Gold Platin u.s.w. member:)
Offline
Geschlecht:
Beiträge: 565
Re: Shared Field
«
Antworten #9 am:
03.01.07 - 13:43:43 »
Hallo,
zu Axel:
Zitat von: Axel am 03.01.07 - 13:08:07
Das funktioniert aber auch nur solange, wie die DB nur von
einem einzigen Benutzer
verwendet wird.
Naja gut, wenn 2 Leute gleichzeitig die Maske speichern, würde es mit dem Code zu Problemen kommen, aber sonst doch nicht, oder?
Zitat von: Axel am 03.01.07 - 13:08:07
Und was noch dazu kommt, der Benutzer muss das Feld auch wirklich verlassen.
Was machst du, wenn der User speichert und der Cursor steht noch in diesem Feld. Das Exiting - Event eines Feldes wird nicht immer zuverlässig ausgeführt.
Für den Fall frage ich im Querysave der Maske immer ab, ob alle Felder ausgefüllt sind, wenn nicht wird der Speichervorgang mit entsprechendem Hinweis abgebrochen
Gruß
Demian
Gespeichert
Gruß
Demian
Axel
Moderatoren
Gold Platin u.s.w. member:)
Offline
Geschlecht:
Beiträge: 8484
It's not a bug, it's Notes
Re: Shared Field
«
Antworten #10 am:
03.01.07 - 13:46:46 »
Zitat von: Demian am 03.01.07 - 13:43:43
zu Axel:
Zitat von: Axel am 03.01.07 - 13:08:07
Das funktioniert aber auch nur solange, wie die DB nur von
einem einzigen Benutzer
verwendet wird.
Naja gut, wenn 2 Leute gleichzeitig die Maske speichern, würde es mit dem Code zu Problemen kommen, aber sonst doch nicht, oder?
Hab ich ja geschrieben. So lange nur ein User zugreift wird es gut gehen.
Zitat von: Demian am 03.01.07 - 13:43:43
zu Axel:
Zitat von: Axel am 03.01.07 - 13:08:07
Und was noch dazu kommt, der Benutzer muss das Feld auch wirklich verlassen.
Was machst du, wenn der User speichert und der Cursor steht noch in diesem Feld. Das Exiting - Event eines Feldes wird nicht immer zuverlässig ausgeführt.
Für den Fall frage ich im Querysave der Maske immer ab, ob alle Felder ausgefüllt sind, wenn nicht wird der Speichervorgang mit entsprechendem Hinweis abgebrochen
Warum machst du denn dann nicht gleich alles im Querysave-Event?
Axel
Gespeichert
Ohne Computer wären wir noch lange nicht hinterm Mond!
Server: 6.5.x; 7.0.x; 8.5.1 auf Win2000/Win2003 (R2) 32/64bit
Clients: 6.5.x bis 8.5.1 dt. und engl. auf W2K und WinXP
koehlerbv
Moderator
Gold Platin u.s.w. member:)
Online
Geschlecht:
Beiträge: 19052
Re: Shared Field
«
Antworten #11 am:
03.01.07 - 14:18:48 »
Abgesehen davon macht der Einsatz im Exiting-Event die ganze nochmals unsicherer: User A legt Dokument an, verlässt irgendwann das betreffende Feld, trägt hier und da noch was ein - dann klingelt das Telefon. Währenddessen zieht User die Erstellung eines neuen Dokuments flott durch und speichert. Da davon das Dokument von User A "nichts weiss", haben jetzt beide Doks die gleiche Nummer, wenn User A speichert.
Im geposteten Code finde ich übrigens keine Sperre dafür, dass bei einem Verlassen des Dokuments bei erneuter Editierung nicht auch wieder eine neue Nummer vergeben wird.
Die Diskussion um fortlaufende Nummern, die wir hier schon so oft geführt haben, sollten wir aber nicht erneut aufkochen. Wer nach "fortlaufend" oder "sequentiell" sucht, wird entdecken, dass wirklich schon alles hierzu gesagt wurde.
Bernhard
Gespeichert
klauss
Gold Platin u.s.w. member:)
Online
Geschlecht:
Beiträge: 5141
.. ich liebe meinen Job...
Re: Shared Field
«
Antworten #12 am:
03.01.07 - 14:23:31 »
Zitat
Die Diskussion um fortlaufende Nummern, die wir hier schon so oft geführt haben, sollten wir aber nicht erneut aufkochen. Wer nach "fortlaufend" oder "sequentiell" sucht, wird entdecken, dass wirklich schon alles hierzu gesagt wurde.
Aber anscheinend haben das noch nicht alle kapiert
Gespeichert
klaus
Operative Hektik ist ein Zeichen von geistiger Windstille.
Die Klugen leben von den Dummen, die Dummen von der Arbeit.
Nur Kinder und einfache Leute mögen lebhafte Farben. (Goethe)
Männer sind primitiv, aber glücklich.
Frauen widerspricht man nicht - man wartet, bis sie es selbst tun.
Demokratie ist, wenn drei Wölfe und ein Schaf entscheiden, was
gefressen werden soll.
Demian
Gold Platin u.s.w. member:)
Offline
Geschlecht:
Beiträge: 565
Re: Shared Field
«
Antworten #13 am:
03.01.07 - 15:17:01 »
Moin Bernhard,
habe in dem "Jahres-Feld" unter Eingabe aktiviert die Formel "@if(@isnewdoc)".
Werde aber wohl den Vorschlag von Axel umsetzen und alles im Querysave machen. Dann würde es auch bei deinem Beispiel nicht zu Problemen kommen.
Gruß
Demian
Gespeichert
Gruß
Demian
aks
Frischling
Offline
Beiträge: 17
Re: Shared Field
«
Antworten #14 am:
03.01.07 - 15:28:55 »
Danke für die vielen Beiträge. Das Thema fortlaufende Nummer ist ja wohl wirklich etwas schwieriger :-(
Gespeichert
koehlerbv
Moderator
Gold Platin u.s.w. member:)
Online
Geschlecht:
Beiträge: 19052
Re: Shared Field
«
Antworten #15 am:
03.01.07 - 15:51:45 »
Zitat von: Demian am 03.01.07 - 15:17:01
... alles im Querysave machen. Dann würde es auch bei deinem Beispiel nicht zu Problemen kommen.
Benutze die Forumssuche - so findest Du die anderen Beispiele, die zeigen, warum das eine so unsichere Kiste ist. Wie gesagt - es ist alles schon zigmal erläutert worden.
Bernhard
Gespeichert
Demian
Gold Platin u.s.w. member:)
Offline
Geschlecht:
Beiträge: 565
Re: Shared Field
«
Antworten #16 am:
03.01.07 - 16:02:08 »
habe den Beitrag nicht eröffnet. HAbe nur geschrieben, wie ich es gelöst habe. Von daher bin ich mit dem Zusatz von Axel völlig zufrieden
Gespeichert
Gruß
Demian
koehlerbv
Moderator
Gold Platin u.s.w. member:)
Online
Geschlecht:
Beiträge: 19052
Re: Shared Field
«
Antworten #17 am:
03.01.07 - 16:54:57 »
Zitat von: Demian am 03.01.07 - 16:02:08
Von daher bin ich mit dem Zusatz von Axel völlig zufrieden
Na, dann wünsche ich in der Zukunft viel Spass. Auch mit der Forumssuche wirst Du vermutlich folgendes Beispiel nicht finden, weil es spezifisch an den Code gebunden ist, mit dem Du zufrieden bist:
Da Du stur die Dokumente in der Ansicht zählst, bist Du (eher die anderen - Du bist ja zufrieden) unter anderem folgenden Gefahren ausgesetzt:
- Selten: Wegen der Performance-Belastung steigt mit zunehmender Dokumentanzahl das Risiko, dass User A gerade speichert (und Deinen Code ausführt), während User B diesen Prozess erst startet. Wenn dann nicht schnell genug der View-Index wieer aufgebaut ist - bumm.
- Sicher: Irgendwann löscht mal jemand mindestens ein Dokument, welches nicht gerade zufällig das letzte in der Ansicht ist. Da gibt's dann eine doppelte Nummer. Wenn jemand vielleicht sogar mehrere Dokumente löscht ... daran mag ich gar nicht denken
Bernhard
Gespeichert
Demian
Gold Platin u.s.w. member:)
Offline
Geschlecht:
Beiträge: 565
Re: Shared Field
«
Antworten #18 am:
04.01.07 - 08:12:59 »
Der Azubi, der diese Dokumente erstellt, ist per ACL schon vom Löschen von Doks ausgeschlossen. Und er/sie ist der/die einzige, der diese Doks erstellt.
Die anderen können zwar in der Datenbank Doks löschen, aber für diverse Ansichten, unter anderem auch für diese, sind im Datenbankereignis Querydocumentdelete Blockaden drin.
«
Letzte Änderung: 04.01.07 - 08:17:02 von Demian
»
Gespeichert
Gruß
Demian
smoki
Senior Mitglied
Offline
Geschlecht:
Beiträge: 321
Re: Shared Field
«
Antworten #19 am:
08.01.07 - 19:50:12 »
Ich finde mein oben genannter Ansatz mit Server-Agent für die Nummerierung ist doch ein ganz gangbarer Weg... nur nicht sehr trivial...
Kurz nochmal:
Laufende Nummer 0 oder -1 geben und speichern.
Mit RunOnServer einen Agent für die Nummerierung starten.
Ein Agent mit dem selben Namen wird nicht doppelt im Agent-Manager ausgeführt, dass stellt Doppeltnummerierungen sicher.
Mit Clustern ode Replikation muss man natürlich noch paar Dinge mehr beachten....
Gruss
Chris
Gespeichert
Blog:
http://planetlotus.org/blogs/smoki
Seiten:
[
1
]
2
« vorheriges
nächstes »
Gehe zu:
Bitte wählen Sie ein Ziel:
-----------------------------
ATNOTES TEAM
-----------------------------
=> Neuigkeiten - Wichtiges
===> Archiv
-----------------------------
Lotus Notes / Domino 8
-----------------------------
=> ND8: Administration & Userprobleme
=> ND8: Entwicklung
=> ND8: Entwicklung - XPages
-----------------------------
Lotus Notes / Domino 7
-----------------------------
=> ND7: Administration & Userprobleme
=> ND7: Entwicklung
-----------------------------
Lotus Notes / Domino 6
-----------------------------
=> ND6: Administration & Userprobleme
=> ND6: Entwicklung
-----------------------------
Domino 5 und frühere Versionen
-----------------------------
=> Administration & Userprobleme
=> Entwicklung
-----------------------------
Lotus Notes / Domino Sonstiges
-----------------------------
=> Tipps und Tricks
=> Tools & Downloads
=> Projekt Bereich
===> Help-Desk Applikation !!Help!!
=> Java und .NET mit Notes/Domino
=> Companion Products
=> OLE/COM-Programmierung
=> Aus- und Weiterbildung
-----------------------------
Best Practices
-----------------------------
=> At Notes Best Practices
=> Diskussionen zu Best Practices
-----------------------------
Sonstiges
-----------------------------
=> Offtopic
=> Kritik & Vorschläge
=> Infrastruktur
=> Job Suche/Angebote
1 Stunde
1 Tag
1 Woche
1 Monat
Immer
Einloggen mit Benutzername, Passwort und Sitzungslänge
Powered by SMF 1.1.16
|
SMF © 2006, Simple Machines
Impressum Atnotes.de -
Powered by Syslords Solutions -
Datenschutz
| Partner:
Tinte / Toner günstig