Autor Thema: Felder auslesen  (Gelesen 1504 mal)

Offline TorstenK

  • Frischling
  • *
  • Beiträge: 18
  • Geschlecht: Männlich
Felder auslesen
« am: 23.05.06 - 16:11:05 »
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
2 Domino Server 6.5.4 im Cluster unter Win Serv 2003 St SP1
~100 Notes Clients 6.5.4 unter Win XP Prof. SP2

Die Zeiten, in denen Lügen noch geholfen hat, sind vorbei!

Offline MadMetzger

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.052
  • Geschlecht: Männlich
  • f.k.a. Alexis Pyromanis
Re: Felder auslesen
« Antwort #1 am: 23.05.06 - 16:29:35 »
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.

Offline Thomas Schulte

  • @Notes Preisträger
  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: Felder auslesen
« Antwort #2 am: 23.05.06 - 16:35:24 »
@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


Das Beispiel ist jetzt zugegebenermaßen etwas unhandlich und funktioniert Standalone so nicht.
Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Offline TorstenK

  • Frischling
  • *
  • Beiträge: 18
  • Geschlecht: Männlich
Re: Felder auslesen
« Antwort #3 am: 23.05.06 - 16:44:50 »
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
2 Domino Server 6.5.4 im Cluster unter Win Serv 2003 St SP1
~100 Notes Clients 6.5.4 unter Win XP Prof. SP2

Die Zeiten, in denen Lügen noch geholfen hat, sind vorbei!

Offline MadMetzger

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.052
  • Geschlecht: Männlich
  • f.k.a. Alexis Pyromanis
Re: Felder auslesen
« Antwort #4 am: 23.05.06 - 16:53:33 »
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.

Offline TorstenK

  • Frischling
  • *
  • Beiträge: 18
  • Geschlecht: Männlich
Re: Felder auslesen
« Antwort #5 am: 23.05.06 - 16:56:16 »
Super ... Danke ...

vielleicht komme ich ja doch noch im Hellen nach Hause  ;D
2 Domino Server 6.5.4 im Cluster unter Win Serv 2003 St SP1
~100 Notes Clients 6.5.4 unter Win XP Prof. SP2

Die Zeiten, in denen Lügen noch geholfen hat, sind vorbei!

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz