Domino 9 und frühere Versionen > ND6: Entwicklung
Felder auslesen
TorstenK:
Hallo,
was jetzt kommt sind ganz saudumme Fragen, also bitte nicht lachen.
Bin aber kein Entwickler (und wahrscheinlich ist es bei meinen Kenntnissen auch besser, wenn ich es nicht werde ;D ), versuche mich aber langsam weiter zu entwickeln.
Ich habe eine Datenbank zur Erfassung einer Umfrage gebastelt, die auch so weit ganz gut funktionierte, als dass die Leute zwei vers. Formulare haben und diese ausfüllen können.
Leider haben deutlich mehr Mitarbeiter mitgemacht als gedacht, so dass die Auswertung jetzt auch automatisiert werden soll.
Die Zahlenauswertungen hab ich auch schon in Ansichten gut hingekriegt.
Jetzt möchte ich alle Freitextfelder (alles Textfelder) zu einer Frage (also aus einem Feld aus den betroffenen Dokumenten) sammeln und in einer neuen Maske in ein Feld stopfen lassen, damit man alle Antworten zu einer Fragen auf einmal sehen kann. Und da es zwei Fragebögen sind (je nach Funktion der Mitarbeiter), würde ich es gerne jeweils für eine bestimmten Ansicht machen (als Aktion).
Und zusätzlich sollte jeweils der Autor des Dokuments hinter seinen Beitrag zur Frage gesetzt werden.
Wer kann mir helfen?
Es müssen ja noch nicht einmal Codeschnipsel sein (obwohl ich die auch gerne nehme ;D ), es reichen schon Hinweise darauf, unter welchen Punkten ich in der Hilfe gucken kann. Die ist zwar recht schön, wenn man aber von etwas gar keine Ahnung hat, sucht man sich einen Wolf ...
Danke auf jeden Fall schon einmal
Torsten
MadMetzger:
Hm... Wozu die Daten, die du dargestellt haben willst, nochmal in eine neue Maske packen. Das ist in meinen Augen vollkommen überflüssig. Du solltest dir eine Ansicht definieren, die dir in jeweils einer Spalte eben das Textfeld für die verschiedenen Fragen anzeigt. Eventuell musst du noch Zeilenumbrüche etc in den Spalteneigenschaften zulassen, damit du immer den gesamten Text lesen kannst. Damit sollte sich deine Anforderung eigentlich schon erfüllt haben.
Thomas Schulte:
@MadMetzger -> stimmt aber nur wenn keiner auf die Idee gekommen ist seine Antwort logisch zu gliedern und mehr als 9 Zeilenumbrüche im Text hat.
Ansonsten brauchst du einen Agenten oder eine Aktion und ein wenig Richtext Handling. Dann musst du eigentlich nur noch entscheiden ob du das Ganze in Form einer Tabelle
Antwort .................................. Username oder irgendwie anders haben willst.
Die Tabelle kannst du in einem Konfigurationsdokument predefined hinterlegen und dann zum Beispiel so mit Werten füllen:
--- Code: ---Sub Click(Source As Button)
Dim session As New NotesSession
Dim wksp As New notesuiworkspace
Dim db As notesdatabase
Dim uidoc As notesuidocument
Dim doc As notesdocument
Dim Founddoc As NotesDocument
Dim Founddoc1 As notesdocument
Dim Inititem As notesitem
Dim foundfirstitem As NotesItem
Dim foundseconditem As NotesItem
Const Calledfrom = "BasedOnService"
Dim gotrtitem As NotesRichTextItem
Dim thisrtitem As notesrichtextitem
Dim me_reportdoc As notesdocument
Dim me_rtitem As NotesRichTextItem
Dim OK As Boolean
Dim arrRetFieldNames As Variant
Dim ret As Integer
Dim strT As String
Set db = session.CurrentDatabase
Set uidoc = wksp.CurrentDocument
' first find the Specifications
If uidoc.Document.HasItem("RelatedspecificationsUNID") = True Then
Set inititem = uidoc.document.GetFirstItem("RelatedSpecificationsUNID")
If inititem.Text <> "" Then
' lets rock and roll
' at first create a new item for this document
Set thisrtitem = New Notesrichtextitem(uidoc.Document,"ServiceBody")
' find the descriptive document with FormName and a Suffix and build the first entry
' Begin reporting part1
Set me_reportdoc = KeyView.GetDocumentByKey(uidoc.Document.form(0)+ "~" + "BasedOnService")
Set me_rtitem = me_Reportdoc.GetFirstItem("Body")
Set rtnav = me_rtItem.CreateNavigator
Set rtrange = me_rtItem.CreateRange
strTemp = ""
If rtnav.FindFirstString ( TAG_PREFIX, _
RT_FIND_CASEINSENSITIVE) Then
Do
Call rtrange.SetBegin ( rtnav )
strTemp = strTemp + TAG_DELIMITER + Mid ( rtrange.textRun, 3, Instr( rtrange.textRun,TAG_SUFFIX ) -3 )
Loop While rtnav.FindNextString ( TAG_PREFIX, RT_FIND_CASEINSENSITIVE )
End If
arrRetFieldNames = Arrayunique ( Split ( strTemp, TAG_DELIMITER ), 5 )
Set rtrange = me_rtItem.CreateRange
Forall t In arrRetFieldNames
strT = Cstr ( t )
If ( Not strT = "" ) Then
If ItemTextExists ( uidoc.document, strT ) Then
ret = rtrange.FindAndReplace _
( TAG_PREFIX & strT & TAG_SUFFIX,_ ' find
uidoc.document.GetFirstItem( strT ).Text, _ ' replaceWith
RT_REPL_ALL + RT_FIND_CASEINSENSITIVE)
Call me_rtItem.Update ' Must update before looping
End If
End If
End Forall
'End reporting Part1
Call ThisRtitem.AppendRtItem(me_RTItem)
If inititem.Text <> "" Then
Forall v In inititem.Values
' Get all the related documents
Set founddoc = db.GetDocumentByUNID(v)
If Not founddoc Is Nothing Then
' Begin reporting part2
Set me_reportdoc = KeyView.GetDocumentByKey(Founddoc.form(0)+ "~" + "BasedOnService")
Set me_rtitem = me_Reportdoc.GetFirstItem("Body")
Set rtnav = me_rtItem.CreateNavigator
Set rtrange = me_rtItem.CreateRange
strTemp = ""
If rtnav.FindFirstString ( TAG_PREFIX, _
RT_FIND_CASEINSENSITIVE) Then
Do
Call rtrange.SetBegin ( rtnav )
strTemp = strTemp + TAG_DELIMITER + Mid ( rtrange.textRun, 3, Instr( rtrange.textRun,TAG_SUFFIX ) -3 )
Loop While rtnav.FindNextString ( TAG_PREFIX, RT_FIND_CASEINSENSITIVE )
End If
arrRetFieldNames = Arrayunique ( Split ( strTemp, TAG_DELIMITER ), 5 )
Set rtrange = me_rtItem.CreateRange
Forall t In arrRetFieldNames
strT = Cstr ( t )
If ( Not strT = "" ) Then
If ItemTextExists ( founddoc, strT ) Then
ret = rtrange.FindAndReplace _
( TAG_PREFIX & strT & TAG_SUFFIX,_ ' find
founddoc.GetFirstItem( strT ).Text, _ ' replaceWith
RT_REPL_ALL + RT_FIND_CASEINSENSITIVE)
Call me_rtItem.Update ' Must update before looping
End If
End If
End Forall
'End reporting Part2
Call ThisRtitem.AppendRtItem(me_RTItem)
If founddoc.HasItem("RelatedContractsUNID") = True Then
Set Founditem = Founddoc.GetFirstItem("RelatedContractsUNID")
If founditem.text <> "" Then
' at first create a new item for this document
Forall x In founditem.Values
' Get all the related documents
Set founddoc1 = db.GetDocumentByUNID(x)
If Not founddoc Is Nothing Then
' Begin reporting part3
Set me_reportdoc = KeyView.GetDocumentByKey(founddoc1.form(0)+ "~" + "BasedOnService")
Set me_rtitem = me_Reportdoc.GetFirstItem("Body")
Set rtnav = me_rtItem.CreateNavigator
Set rtrange = me_rtItem.CreateRange
strTemp = ""
If rtnav.FindFirstString ( TAG_PREFIX, _
RT_FIND_CASEINSENSITIVE) Then
Do
Call rtrange.SetBegin ( rtnav )
strTemp = strTemp + TAG_DELIMITER + Mid ( rtrange.textRun, 3, Instr( rtrange.textRun,TAG_SUFFIX ) -3 )
Loop While rtnav.FindNextString ( TAG_PREFIX, RT_FIND_CASEINSENSITIVE )
End If
arrRetFieldNames = Arrayunique ( Split ( strTemp, TAG_DELIMITER ), 5 )
Set rtrange = me_rtItem.CreateRange
Forall t In arrRetFieldNames
strT = Cstr ( t )
If ( Not strT = "" ) Then
If ItemTextExists ( founddoc1, strT ) Then
ret = rtrange.FindAndReplace _
( TAG_PREFIX & strT & TAG_SUFFIX,_ ' find
founddoc1.GetFirstItem( strT ).Text, _ ' replaceWith
RT_REPL_ALL + RT_FIND_CASEINSENSITIVE)
Call me_rtItem.Update ' Must update before looping
End If
End If
End Forall
'End reporting Part3
Call ThisRtitem.AppendRtItem(me_rtitem)
End If
End Forall
End If
End If
End If
End Forall
End If
End If
End If
Call uidoc.Document.save(True,False)
Call uidoc.close(True)
End Sub
--- Ende Code ---
Das Beispiel ist jetzt zugegebenermaßen etwas unhandlich und funktioniert Standalone so nicht.
TorstenK:
Die Idee mit der Ansicht ist aber nicht schlecht ... in den Feldern stehen maximal zwei, drei Sätze, die noch nicht mal formatiert sind ...
Wie kriege ich da einen Zeilenumbruch rein? Bei den Zeileneigenschaften finde ich nichts ...
@Thomas Schulte: Danke für soviel Mühe ... ich versuche mal den Code zu verstehen ... vielleicht komme ich bei der Notes Entwicklung doch noch weiter ;) ... wenn ich noch Fragen habe, kann ich mich dann bei Dir melden?
Torsten
MadMetzger:
Die Zeilenumbrüche bekommst du über die Ansichtseigenschaften hin. Und zwar auf dem dritten Reiter des Eigenschaftenfensters bei Zeilen muss in der Option Zeilenhöhe an Inhalt anpassen ein Haken gesetzt werden und dann stellst du darüber noch die maximale Höhe ein.
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln