Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: wuwu am 08.03.05 - 15:46:49
-
Hallo Profis,
ich habe eine prinzipielle Frage wie ich die folgende Aufgabe lösen sollte bzw. wie ihr soetwas umsetzen würdet!
Ich habe eine Eingabemaske Anfragen, die beinhaltet ein Feld mit dem Namen Kostenträger.
Des weiteren eine Maske(mit Antwortdokumente) die nennt sich Arbeitsschritte, beinhaltet mehrere Felder wie Bezeichnung usw.
Momentan ist es so, in der Maske Anfragen wird der Kostenträger ausgewählt. Und perr Button werden die einzelnen Arbeitsschritte(Antwortdokumente) hinzugefügt- > dargestellt in einer eingebetteten Ansicht - funktioniert alles bestens.
Nun ist es aber so, das pro Kostenträger die Arbeitsschritte meistens immer gleich sind. Wie würdet Ihr das realiseren?
Ziel ist also: Wenn ich einen Kostenträger auswähle, dass er mir dann die einzelnen Arbeitsschritte zum Dokument bzw. eingebettete Ansicht hinzufügt?
Ich hoffe es hilft mir wer, bei der Lösung meines Problems, bin für jeden Rat dankbar!
Mfg Horst
-
Du hast ja sicherlich Gründe, dass Du jeweils mit Antwortdokumenten arbeitest.
Ziel ist also: Wenn ich einen Kostenträger auswähle, dass er mir dann die einzelnen Arbeitsschritte zum Dokument bzw. eingebettete Ansicht hinzufügt?
Ich weiß nicht wie ein Kostenträger ausgewählt wird, aber es ist ein Trigger. Dieser Trigger (oder z.B. separater Button) könnte dann per LotusScript Antwortdokumente erstellen, entsprechend füllen und speichern.
Ergo: Antwortdokumente per LotusScript erstellen, siehe u.a. die MakeResponse Methode der NotesDocument-Klasse.
-
Hallo Horst,
wenn Du mit eingebetteten Ansichten arbeiten möchtest, ist das doch auch überhaupt kein Problem. Und Du erzeugst noch weniger Dokumente.
Erstelle doch Arbeitsschritt-Dokumente, in denen die Arbeitsschritte beschrieben sind. jedes dieser der Dokumente ist einem oder mehrere Kostenträgern zugeordnet.
In der Eingabemaske für die Anfrage fügst Du eine Embedded View ein. Die Single Categorie der View muss sich auf das Feld Kostenträger beziehen.
Die Ansicht muss nach Kostenträger kategorisiert sein.
Wenn der Anwender jetzt die Kostenstelle auswählt, werden die entsprechenden/zugeordneten Arbeitsschritte angezeigt (nach einem refresh des UI-Docs).
Natürlich kann man keine evtl. Bearbeitung in den Arbeitsschrittdokumente machen :-(
Dann geht nur die Lösung von TMC !
Dirk
-
Hallo TMC & Dirk,
die Lösung von TMC gefällt mir sehr gut!
Habe eine Maske Request -> Typ Dokument -> Feld KTR
Habe eine Maske Arbeitsplan -> Typ Dokument -> Feld T_KTR
Wir haben ca. 250 Arbeitspläne erstellt, in dem das Feld t_KTR(Kostenträger) auch ausgewählt wurde.
Ich bin momentan soweit, das wenn ich in ein neues Dokument - Maske Request erstelle und dort ein Kostenträger ausgewählt ist, das er mir nur die Dokumente anzeigt, die auch zum ausgewählten Kostenträger passen.
Script:
Sub Click(Source As Button)
Dim session As New NotesSession
Dim db As NotesDatabase
Dim dc As NotesDocumentCollection
Set db = session.CurrentDatabase
Dim ws As New NotesUIWorkspace
Dim uidoc As notesuidocument
Dim doc As NotesDocument
Set uidoc = ws.CurrentDocument
Set doc = uidoc.Document
If doc.t_ktr(0) = "" Then
Exit Sub
Else
Dim view As notesview
Dim v_doc As NotesDocument
Dim var As String
Set view = db.GetView("$Test")
Set dc = view.GetAllDocumentsByKey(doc.t_KTR(0))
Set v_doc = dc.GetFirstDocument
Do Until v_doc Is Nothing
var = var & v_doc.t_KTR(0) & Chr(10)
Set v_doc = dc.GetNextDocument(v_doc)
Loop
Msgbox var
End If
End Sub
Ich weis jetzt aber nicht wie ich aus den Arbeitsplänen, Antwortdokumente für die Request Maske erstelle. Wenn ich mich nicht richtig ausgedrückt habe bzw. etwas unklar ist, einfach melden!
-
@Horst
In etwa so:
Set docResponse = db.CreateDocument
With docResponse
.Form = "MaskenNamederArbeitsschritte"
REM Hier weitere Werte aus v_doc und doc übergeben
'......
Call .MakeResponse( doc )
Call .Save( True , True )
End With
Die genauen Werte musst Du natürlich noch übergeben. Ich habe Dir nur die Richtung vorgegeben.
Dirk
-
Hallo Dirk,
funktioniert wunderbar, danke viel mals!
Eine Sache hab ich noch, ich habe in der NotesDocumentClass nicht gefunden wie ich die ResponseDokumente noch aktualisieren kann.
Grund ist, es werden Daten automatisch gezogen, wenn ich eine Antwortdokument neu erstelle.
Wie sieht die Funktion dafür aus oder ist das nicht so einfach?
Danke im vorhinein, Horst
-
Da ist Handbetrieb angesagt, Horst. Einen Automatismus gibt es im Backend nicht.
Bernhard
-
Hallo Bernhard,
gibts den da überhaupt keine Möglichkeit, noch ein Problem:
Ich schreibe in ein Autorenfeld was rein, diese Änderungen greifen erst wenn einer mit Editorrechten das Dokument öffnet und speichert!
Das heist, die Antwortdokumente, die ich automatisch erzeugt habe sind momentan nur für Leute editierbar die Editorrechte haben!
Hast Du da eine Lösung oder einen Ansatz? Ich hoffe du läßt mich nicht im Stich!
Mfg Horst ,danke im vorhinein!
-
Die Ursache ist da was anderes: Du füllst ein neu angelegtes Item, sagst diesem aber nicht, das es die Property IsAuthors hat.
Siehe hierzu die NotesItem-Class.
Bernhard
-
@Bernhard,
merci für den Tip, SPITZENKLASSE!
Sollte ich dann jedes Feld mit einer Eigenschaft versehen?
P.S. Was würde ich ohne dieses Forum machen? Ein großes Lob an alle die hier so kompetente Hilfestellungen geben für Leute die Spass daran haben in Lotus Notes zu programmieren!!!
-
Die Item-Properties musst Du nur setzen, wenn diese sich nicht explizit ergeben: IsAuthors, IsReaders, IsNames - diese unterscheiden sich ja sonst nicht von reinen Text-Items.
Bernhard
-
Danke für die Info und Hilfe!
-
Ist ja fast Nachbarschaftshilfe ;)
Bernhard
-
Hallo Bernhard,
nochmals Aktualiserung!!!
Da ist Handbetrieb angesagt, Horst. Einen Automatismus gibt es im Backend nicht.
Bernhard
Gibt es für das keine Lösung? Agent? per Klick auf einen Button?
Bei mir sieht es so aus, Antwortdokumente mit 3 berechneten Feldern.
Diese Antwortdokumente werden bei mir automatisch erzeugt.
Gibt es da was aus deiner(eurer) jahrelangen Erfahrung?
Danke, mfg Horst
-
Ich weiss jetzt nicht genau, wo Deine Frage steckt. Was möchtest Du wissen ?
Bernhard
-
Aktualiserung der Antwortdokumente:
per Button der einen Agenten aufruft oder etwas macht, das die Antwortdokumente automatisch aktualisiert werden.
Das die 3 berechnten Felder nicht per Hand -> Edit -> Save -> Close aktualisiert werden müssen.
Mein Problem, das sind pro Hauptdokument nicht 3 Antwortdokumente, es können schon mal 30 werden!!!
Du hast sicherlich etwas auf Lager aus deinem jahrelangem Wissen, oder?
danke im vorhinein, Horst
-
Entweder, Du berechnest die Ergebnisse selber und füllst die Felder, oder Du verwendest NotesDocument.ComputeWithForm.
Bernhard
-
Ich bin jetzt nicht mehr auf dem laufenden, hast Du die Antwortdokumente in einer NotesDocumentCollection?
Wenn Du auf einen Schlag ein Item in allen Docs der Collection ersetzen willst, bietet sich auch NotesDocumentCollection.StampAll an.
-
Die Antwortdokuemnte werden über eine DC erzeugt, siehe ->
......
Dim view As notesview
Dim v_doc As NotesDocument
Set view = db2.GetView("vwork_plan_details")
Set dc = view.GetAllDocumentsByKey(doc.KTR_Detail(0))
Set v_doc = dc.GetFirstDocument
Do Until v_doc Is Nothing
Set docResponse = db.CreateDocument
'Dim count_response As Integer
'Count_response = count_response+ 10
With docResponse
.Form = "work_plan"
.work_plan = ""
.work_plan_ReqNumber = doc.ReqNumber(0)
.work_plan_autor = session.CommonUserName
.work_plan_piece_scale = Csng(doc.piece_scale(0))
.work_plan_follow_nr = Cint(v_doc.PAPAFO(0))
.work_plan_number = Cint(v_doc.PAPAGA(0))
.work_plan_device_number = Clng(v_doc.PAPMNR(0))
Dim item As NotesItem
Set item = docResponse.GetFirstItem( "work_plan_Autor" )
item.IsAuthors = True
Call .MakeResponse( doc )
Call .ComputeWithForm( False, False )
Call .Save( True , True )
End With
'var = var & v_doc.t_KTR(0) & Chr(10)
Set v_doc = dc.GetNextDocument(v_doc)
Loop
und nun ist eben mein Problem, das ich im erzeugten Antwortdokument 3 berechnete Felder drinnen habe, die ich per Hand aktualisieren mus -> Edit -> Save -> Close.
Ich habe pro Hauptdokument nicht 3 sondern es können schon mal 30 Antwortdok. werden und das ist sehr mühsam!
Danke für eure Hilfen im vorhinein,
Horst
-
Hallo,
so ganz verstehe ich Dein Problem auch nicht ??? :-\
Willst Du die Antwortdokumente aktualisieren, wenn sich etwas am Hauptdokument ändert? -> Dann musst Du die geämdertten Werte manuell in die Antwortdokumente schreiben (über die Collection - doc.Responses) und die Dokumente neue berechnen lassen ( docResponse.ComputeWithForm(...) ).
Wenn in den Antwortdoks beim Anlegen was berechnet werden soll, dann ist deine Lösung schon O.K.
Oder habe ich Dein Problem falsch verstanden ??
Dirk
-
Mein Wunsch ist, beim anlegen sollten Sie aktualisert werden, damit die berechneten Felder auch angezeigt werden!
Ich habe dann mit dem Tip vom Bernhard das .ComputeWithForm(True, False) eingebaut, sie werden aber trotzdem nicht aktualisiert, warum?
Wenn ich das .CompueWithForm(True,True) setzte bekomme ich vom Debugger an dieser Stelle die Fehlermeldung: -> siehe Anhang!
Kann mir da wer auf die Sprünge helfen, danke!
Mfg Horst
-
na du verwendet in irgendeiner Formel eine Zahl an einer Stelle, an der du Text verwenden musst.
In welcher das ist, kannst nur du herausfinden.
-
Danke Thomas,
hab mir die Maske bzw. das Script nochmal unter die Lupe genommen, siehe da, ein Dialogfeld mus man mit Cstr() füllen!
Danke für den Tip!
Ach ja, die Aktualisierung funktioniert somit auch!
@Bernhard, danke auch an dich!
Mfg Horst