Domino 9 und frühere Versionen > ND6: Entwicklung

Übernahme von Feldwerten per Lotus Script

(1/4) > >>

tinchen222:
Hallo ANotes Gemeinde,

ich habe folgendes Problem, zu dem ich bisher hier im Forum nichts vergleichbares finden konnte:

In unserer Firma werden in einer Datenbank alle Eigenschaften eingetragen, die ein neu zu produzierendes Produkt haben muß. Das nennen wir hier "Lastenheft". Verschiedene Abteilungen prüfen dann nacheinander ob das neue Produkt diese Eigenschaften erfüllen kann. Das Problem beginnt bei der ersten Abteilung - der Vertrieb - der für alle anderen die Vorgaben macht. In einer Maske habe ich für jede Abteilung einen Reiter angelegt und wird dann das Dokument an die erste zu prüfende Abteilung weitergegeben, werden alle Werte, die der Vertrieb eingegeben hat, auf die anderen Reiter in der gleichen Maske auf die entsprechenden Abteilungen verteilt. Da es sich bei dieser Übernahme von Feldwerten um ca. 350 Felder handelt, dauert es - mit meiner Programmierung - entsprechend lange bis alles gespeichert wurde. Die Anwender sind daher genervt, weil sie während dessen nicht weiter in Notes arbeiten können. Verständlich.
Die Feldübernahme realisiere ich wie folgt:

doc.FeldA = getItemValue("FeldB")(0)

Bei 350 Feldern warten die Anwender gut und gerne 8 Minuten. Ich bin der Meinung, dass das nicht effizient ist und besser gehen muß, aber da ich leider auch kein professioneller Programmierer bin wollte ich mal fragen ob jemand zu diesem Problem eine Idee hat. Dazu noch folgender Hinweis: Die Feldübernahme habe ich nicht mit berechneten Feldern lösen können, weil die Felder von den zu prüfenden Abteilungen bearbeitbar sein sollen. Die aus dem Vertrieb kommende Vorgabe muß also überschreibbar sein.

Für alle Ideen schon mal im voraus Danke.

Tina

m3:
Ich würde keine Tabs machen sondern eigene Dokumente, dann könntest Du mit "notesDocument.CopyAllItems()" arbeiten.

Ansonsten poste mal ein bissl mehr von dem Codeteil, in dem Du kopierst. 8 Minuten kommt mir schon sehr lange vor, ev. hast Du wo einen Gedankenknoten. ;)

tinchen222:
Das mit den Tabs ist vom Vertrieb extra gewünscht. Man soll in einem Dokument alle Informationen beisammen haben und nicht nochmal in ein extra Dokument springen müssen. Deshalb auch kein "CopyAllItems", was mir stundenlange Programmierarbeit erspart hätte. :)
Ich kann unmöglich das gesamte Coding der Schaltfläche einstellen, denn dieses umfasst zu viele Zeilen. Anbei deshalb ein Auszug, der hoffentlich ausreichend ist (Punkte sollen kennzeichnen, dass es in analoger Weise weitergeht):

Sub Click(Source As Button)
   Dim thisws As New NotesUIWorkspace   
   Dim session As New NotesSession
   Dim db As NotesDatabase
   …
   
   Dim protokoll As String
   Dim autor As String
   Dim vpruefer As String      'vorhergehender Prüfer
   Dim npruefer As String      'nächster Prüfer
   Dim qw As String
   Dim entwicklung As String
   …

   Set thisdb = thisws.CurrentDatabase
   Set thisdoc = thisws.CurrentDocument
   Set db = session.CurrentDatabase
   Set doc = thisdoc.document
   Set maildoc = New NotesDocument( db )
   Set link = New NotesRichtextItem( maildoc, "Body")
   
   
   'Globale Werte aus Feldern auslesen
   entwurf = doc.GetItemValue("entwurf")(0)
   status = doc.GetItemValue("status")(0)   
   Pruefer_QW = doc.GetItemValue("Pruefer_QW")(0)   
   Pruefer_Entwicklung = doc.GetItemValue("Pruefer_Entwicklung")(0)
      Pruefer_Produktion = doc.GetItemValue("Pruefer_Produktion")(0)   
   Pruefer_Druck = doc.GetItemValue("Pruefer_Druck")(0)   
   Pruefer_Dispo = doc.GetItemValue("Pruefer_Dispo")(0)   
   Pruefer_Einkauf = doc.GetItemValue("Pruefer_Einkauf")(0)   
   Pruefer_Etikettierung = doc.GetItemValue("Pruefer_Etikettierung")(0)   
   Pruefer_Vertrieb = doc.GetItemValue("Pruefer_Vertrieb")(0)   
   Materialbeschreibung = doc.GetItemValue("Materialbeschreibung")(0)   
   
   currentuser = session.username   
   berechtigung = "false"
   j=0
   
   'Prüfung ob lokal oder am Server gearbeitet wird (Außendienstler)
   If ( db.Server = "" ) Then
      Set nab = New NotesDatabase ("", "unseradressbuch.nsf")                            'Lokale hbnames.nsf
   Else
      Set nab = New NotesDatabase ("servername", "names.nsf")   
   End If            
   
   Set view = nab.GetView ("Groups")     
   Set viewentry = view.GetEntryByKey("ZHB_Lastenheft_Vertrieb")
   Set person = viewentry.Document
   
   
   Forall item In person.GetItemValue("members")
      user(i)=item
      If user(i) = currentuser Then
         berechtigung = "true"
      End If         
      
   End Forall
   
   
   If berechtigung = "false" Then
      Messagebox "Sie sind nicht berechtigt ein Dokument zur Prüfung einzureichen",64,"Achtung"
      Exit Sub
   Else
      continue = True
   End If
   
   
      
   
   'Pfichtfelder prüfen  --------------
   Print "Status des Dokuments wird überprüft ..."
   
   If status = "vertrieb" Then   
      Print "Pflichtfelder für Vertrieb werden geprüft ..."
      
      Forall item In doc.GetItemValue("UmweltaspekteVertrieb")
         UmweltaspekteVertrieb (j) = item
         j=j+1
      End Forall
      
   …
      
   End If

   'Prüfung Pflichtfelder Ende ----------
   
   'Feldwerte in andere Bereiche überführen

   Print "Felder werden in andere Bereiche übertragen ... Bitte warten..."
   
   doc.DLastenheft1 =  doc.GetItemValue("Lastenheft1")(0)
   doc.ELastenheft1 = doc.GetItemValue("Lastenheft1")(0)
   
   doc.DLastenheft2 = doc.GetItemValue("Lastenheft2")(0)
   doc.ELastenheft2 = doc.GetItemValue("Lastenheft2")(0)
   
   doc.DZeichung = doc.GetItemValue("Zeichung")(0)
   doc.EZeichung = doc.GetItemValue("Zeichung")(0)
   
   …
   
      
   'QW
   doc.QualitaetHygieneText1 = doc.GetItemValue("VQualitaetHygieneText1")(0)
   doc.QualitaetHygieneText2 = doc.GetItemValue("VQualitaetHygieneText2")(0)
   doc.QualitaetHygieneText3 = doc.GetItemValue("VQualitaetHygieneText3")(0)
   
   'Entwicklung
   doc.Schrumpffolie = doc.GetItemValue("VSchrumpffolie")(0)
   doc.MonaxialBiaxial = doc.GetItemValue("VMonaxialBiaxial")(0)
   …
         
   'Druck
   doc.dpfd =  doc.GetItemValue("pfd")(0)
   doc.ppfd =  doc.GetItemValue("pfd")(0)
   …


   'Produktion
   doc.MaschinenNrP =  doc.GetItemValue("VMaschinenNr")(0)
   doc.DMaschinenNrP =  doc.GetItemValue("VMaschinenNr")(0)
   …
   
   'Disposition
   doc.DNadelperforation2 =  doc.GetItemValue("VNadelperforation2")(0)
   doc.DPerforationsart2 =  doc.GetItemValue("VPerforationsart2")(0)
   doc.DLochung2 =  doc.GetItemValue("VLochung2")(0)
   …
   
      
   'Feldwerte in andere Bereiche übertragen Ende -------
   
   'Entwurfsmodus des Dokuments beenden
   Call doc.Replaceitemvalue("entwurf", "nein")
   
   'Das Protokollfeld füllen
   autor = doc.GetItemValue("Display_Autor")(0)   
   protokoll = "Zur Prüfung eingereicht am " + Now() + " von " + session.CommonUserName
   materialnummer = doc.GetItemValue("Materialnummer")(0)
   i=0
   
   'Den ersten Prüfer ermitteln
   qw =    doc.GetItemValue("Pruefer_QW")(0)   
   entwicklung = doc.GetItemValue("Pruefer_Entwicklung")(0)   
   produktion = doc.GetItemValue("Pruefer_Produktion")(0)   
   …
   
   thisdoc.EditMode = True
   
   
   'Nächsten Prüfer ermitteln
   Print "Prüfer werden ermittelt ..."
   If qw <> "Keine Prüfung" Then
      npruefer = "ZHB_Lastenheft_QW"
      status = "qw"
      recipients = "ZHB_Lastenheft_QW"
   Elseif entwicklung <> "Keine Prüfung" Then
      npruefer = "ZHB_Lastenheft_Entwicklung"
      status = "entwicklung"
      recipients = "ZHB_Lastenheft_Entwicklung"
   Elseif produktion <> "Keine Prüfung" Then
      …
      
   End If
   
   'Felder setzen
   Call doc.Replaceitemvalue("vpruefer", "ZHB_Lastenheft_Vertrieb")
   Call doc.Replaceitemvalue("npruefer", npruefer)
   Call doc.Replaceitemvalue("status", status)
   
   
   'Protokoll ausfüllen
   Print "Protokoll ausfüllen..."
   Forall item In doc.GetItemValue("protocol")
      neuesProtokoll(i)=item
      i=i+1
   End Forall
   
   neuesProtokoll(i) = protokoll    
   
   Call doc.Replaceitemvalue("protocol", neuesProtokoll)
   Call thisdoc.Save
   Call thisdoc.Close
   
   
     'Mailversand
   maildoc.Form = "Memo"
   maildoc.Subject = "Ein Lastenheft liegt für Sie zur Bearbeitung vor (" + Materialbeschreibung + ")"
   maildoc.SendTo = recipients
   Call link.AppendText("Das folgende Lastenheft liegt für Sie zur Bearbeitung vor!")
   Call link.AddNewLine( 2 )
   Call link.AppendText("Hier ein direkter Link = > ")
   Call link.AppendDocLink(doc, doc.Subjekt (0))
   maildoc.Send( False)   
   
   
   'Infobox
   Messagebox "Dokument wurde zur Prüfung eingereicht",64, "Hinweis"
   Call thisdoc.Close
   
End Sub

Glombi:
Erstmal musst Du das AutoReload des Dokuments verhindern, denn sonst aktualisiert Notes nach jedem Feldsetzen die Darstellung des Dokuments und das kann dauern.


Also
Set thisdoc = thisws.CurrentDocument
thisdoc.AutoReload = false
...

Andreas

tinchen222:
Das hört sich doch schon mal nach einem guten Tipp an. Von der Funktion habe ich bisher noch nie was gehört. Hab´s jetzt eingebaut und werde es die Anwender testen lassen. Aber: Wenn es wirklich so einfach war die Wartezeit zu reduzieren, dann wird es echt peinlich für mich :(.

Trotzdem erstmal danke. Weitere Infos folgen nach dem Test.

Tina

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln