Das Notes Forum
Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: Boox am 10.02.15 - 10:36:03
-
Hallo alle zusammen! Ich brauche etwas "Starthilfe" von Euch. Ich habe eine Datenbank mit Betreuungseinheiten und zugeordneten Kunden, ein Kunde kann mehreren Einheiten zugeordnet sein. In der Ansicht sieht das etwa so aus:
Betreuungseinheit A
- Kunde 1
- Kunde 2
- Kunde 3
Betreuungseinheit B
- Kunde 2
- Kunde 4
- Kunde 6
Betreuungseinheit C
- Kunde 1
- Kunde 2
- Kunde 6
....
Für jeden Eintrag gibt es ein Dokument, also ich gehe nicht über Mehrfachwerte (das führte an anderer Stelle zu Problemen, daher ist dieser Weg besser für mein Vorhaben). Nun möchte ich eine Schaltfläche bauen um Kunden in eine andere Einheit zu verschieben, also beispielsweise Kunde 6 in die Einheit A. Gleichzeitig möchte ich aber auch, dass der Kunde 6 aus der Betreuungseinheit C entfernt (bzw. aus der Ansicht ausgeblendet) wird, also anschließend nur noch in A vorhanden ist.
Das Verschieben von B nach A ist ja kein Problem und auch mit Formelsprache machbar (@SetField("Einheit"; Zieleinheit), für den Rest benötige ich vermutlich Script?! Da bin ich allerdings (immer) noch Anfänger...
Ich möchte hier nicht um "fertigen Code" betteln, ich benötige einfach nur ein paar Denkanstöße über welche Klassen/Methoden das am besten zu bewerkstelligen ist :)
Viele Grüße
Gregor
-
Hallo,
Prinzipiell ist dein Vorhaben auch mit @Formeln realisierbar.
Nur eine kleine Frage haette ich.
Was passiert, wenn du z.B. deinen Kunden 1 der Betreuungseinheit B und C zuordnen willst?
Andreas
-
Halo Andreas,
ich habe vergessen zu erwähnen: Am Ende soll ein Kunde nur in einer Einheit auftauchen. Also man würde ihn dann einfach nur verschieben!
Viele Grüße
Gregor
-
Wenn ein Kunde nur einer Einheit angehört, hast Du doch kein Problem, denn wenn Du die Einheit des Kunden 6 von C auf A änderst, steht der Kunde nicht mehr unter C.
In Deinem Beispiel hast Du aber mehrere Einheiten einem Kunden zugeordnet. Falls das Altlasten sind, müsste da wohl jemand mal drin aufräumen.
EDIT: Falls das das Problem ist, was Du lösen willst
Mit NotesDatabase.Search nach den doppelten Dokumenten suchen (gleicher Kunde), die dann löschen (wäre fatal, wenn das ginge, denn dann hätten die User Löschrechte in der Datenbank) bzw. mit einem Flag versehen, dass die nicht mehr in den Ansichten erscheinen und später von einem Admin oder periodischen Agenten gelöscht werden.
Als Search übergibst Du eine Selektionsformel, wie in einer Ansicht. Also alle Dokumente mit der gleichen Kundennummer, wie der des aktuellen Dokuments, aber nicht mit der ID. Etwa so
Set col = db.Search (|Kunde = "| & doc.Kunde (0) & | " @Text (@DocumentUniqueID) != "| & doc.UniversalID & |"|, Nothing, 0)
Danach ein Flag mit StampAll einfügen oder mit RemoveAll alle löschen (siehe oben)
-
Hallo Peter,
Genau um das Aufräumen geht es ja ;) Oder besser gesagt: Neustrukturierung.
Zu deinem Hinweis: Dann steht der Kunde aber noch unter B. Und das soll möglichst "automatisch" gelöst werden, ohne dass ich den Kunden 6 unter B nochmal anfassen muss. In dem Beispiel ist das ja schnell gemacht, aber es gibt Kunden, die in 20 Einheiten sind.
-
siehe mein EDIT im Post oben
-
Ah, das klingt doch gut, werde ich mir mal anschauen! Vielen Dank!
P.S: Natürlich sollen (und dürfen) sie auch nicht löschen, mache das selbstverständlich über nen Flag :D
-
So, dank Peters Hilfe bin ich einen großen Schritt weiter! Aus dem Dokument heraus klappt das schon mal. Allerdings möchte ich es gerne auch aus der Ansicht heraus erledigen.
Ich habe es bisher jedoch nicht hinbekommen. Mein Problem: Wie kann ich denn das ausgewählte Dokument in der Ansicht "greifen", so dass ich dann auf die Felder zugreifen kann? Vom Gefühl her hätte ich gesagt, über die NotesUIView gibt's bestimmt sowas wie eine "GetDocument"-Methode...da finde ich jedoch nichts...nur in der DocumentCollection-Klasse, aber die Collection habe ich ja noch gar nicht. Oder habe ich da einfach nen Denkfehler?
Hier schon mal mein Code, der aus dem geöffneten Dokument funktioniert.
Sub Click(Source As Button)
Dim workspace As New NotesUIWorkspace
Dim session As New NotesSession
Dim db As NotesDatabase
Dim collection As NotesDocumentCollection
Dim doc As NotesDocument
Dim uidoc As NotesUIDocument
Set uidoc = workspace.CurrentDocument
Set doc=uidoc.document
Set db=session.CurrentDatabase
Set collection = db.Search (|kd_kdnr = | & doc.kd_kdnr (0) & | & @Text (@DocumentUniqueID) != "| & doc.UniversalID & |"|, Nothing, 0)
Call collection.StampAll("Test", "2")
End Sub
-
Hallo,
Ein Ansatz waere NotesDatabase.UnprocessedDocuments
Andreas
-
Und dann mit NotesDocumentCollection.Count = 1 prüfen, ob da wirklich nur ein Dokument gewählt wurde (dafür reicht es auch, den Cursor einfach auf das Dokument zu stellen, Haken ist nicht erforderlich). Nicht, dass da vorher schon Dokumente ausgewählt wurden, die dann für den User klammheimlich mit umgebogen werden.
Bernhard
-
Es klappt, vielen Dank, Andreas! Da muss man aber auch erstmal drauf kommen ;)
Und danke auch an Bernhard, baue das gleich mal rein!