Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: frankie07 am 15.10.07 - 12:37:51

Titel: Problem mit Datenübergabe
Beitrag von: frankie07 am 15.10.07 - 12:37:51
Hallo zusammen,

ich bin ein ziemlicher Script Neuling und brauche mal eure Hilfe.
Ich habe folgenden Code, mit dem ich beim klicken auf eine Schaltfläche ein ganz bestimmtes Dokument öffne:

Dim session As New notessession
Dim db As notesdatabase
Dim doc As notesdocument
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
   
Set db = session.currentdatabase
Set doc = db.getDocumentByUNID ("78E5B66BE7BA1B27C1257313002AE7EF")
Call ws.EditDocument(True, doc)


Jetzt würde ich noch gerne ein paar Werte aus dem ersten Dokument an das über die Schaltfläche geöffnete Dokument übergeben. Kann mir da jemand helfen?
Titel: Re: Problem mit Datenübergabe
Beitrag von: DAU-in am 15.10.07 - 12:50:45
welches ist das erste Dokument?
Titel: Re: Problem mit Datenübergabe
Beitrag von: frankie07 am 15.10.07 - 12:54:02
Das erste Dokument ist das, in dem die Schaltfläche ist und aus dem ich Werte in das gerade geöffnete übergeben will.
Hast du das gemeint?
Titel: Re: Problem mit Datenübergabe
Beitrag von: bikerboy am 15.10.07 - 13:00:30
dein Dokument ist doch das uidoc ....


Also

uidoc.Feldname = doc.getitemValue("FeldName")(0)

Titel: Re: Problem mit Datenübergabe
Beitrag von: frankie07 am 15.10.07 - 13:08:25
... wie gesagt, bin kein guter Scripter :-(

des schaut jetzt so aus:
Dim session As New notessession
Dim db As notesdatabase
Dim doc As notesdocument
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
   
Set db = session.currentdatabase
Set doc = db.getDocumentByUNID ("78E5B66BE7BA1B27C1257313002AE7EF")
Call ws.EditDocument(True, doc)
uidoc.test = doc.getitemValue("avd_kont_art")(0)


Funktioniert aber nicht. das Feld "test" ist in dem gerade geöffneten Dokument. Das Feld "avd_kont_art" will ich übergeben.
Titel: Re: Problem mit Datenübergabe
Beitrag von: DAU-in am 15.10.07 - 13:10:32
das uidoc ist aber noch gar nicht gesetzt, fahrradlbua!


Er besorgt sich ein Dokument im Backend und öffnet es im Frontend.

wenn das erste das bereits geöffnete sein soll und mit dem uidoc angesprochen werden soll, muss er das uidoc erst einmal setzen, dann das backend dokument holen,  dann die Werte aus dem Frontend in das Backenddokument übertragen (also genau andersrum als bei dir ) und dann das Backenddokument öffnen.

aber ich bezweifle, dass das wirklich die gewünschte Reihenfolge ist.
Titel: Re: Problem mit Datenübergabe
Beitrag von: DAU-in am 15.10.07 - 13:12:21
... wie gesagt, bin kein guter Scripter :-(

des schaut jetzt so aus:
Dim session As New notessession
Dim db As notesdatabase
Dim doc As notesdocument
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
   
Set db = session.currentdatabase
Set doc = db.getDocumentByUNID ("78E5B66BE7BA1B27C1257313002AE7EF")
Call ws.EditDocument(True, doc)
uidoc.test = doc.getitemValue("avd_kont_art")(0)


Funktioniert aber nicht. das Feld "test" ist in dem gerade geöffneten Dokument. Das Feld "avd_kont_art" will ich übergeben.

sorry, aber was sagt dein Debugger zu dem Ganzen?
Titel: Re: Problem mit Datenübergabe
Beitrag von: bikerboy am 15.10.07 - 13:20:18
hmmm ich hatte nur kurz auf die Deklaration geachtet,

dachte wir haben hier nur Snippets.

Dann holt er sich halt das aktuelle uidoc mit

Code
Set uidoc = ws.currentdocument


das sollte ja dann das Dokument sein in dem er den Knopf gedrückt hat.
Titel: Re: Problem mit Datenübergabe
Beitrag von: Axel am 15.10.07 - 13:21:51
uidoc.test = doc.getitemValue("avd_kont_art")(0)

So kann das schon mal überhaupt nicht funktionieren.

Wenn du das mit dem uidoc machen willst, dann so:

Call uidoc.FieldSetText("Test", doc.getitemValue("avd_kont_art")(0))


Axel
Titel: Re: Problem mit Datenübergabe
Beitrag von: DerAndre am 15.10.07 - 13:42:02
Ich hätte da mal ne Frage. Mit Formula hast Du schon gearbeitet?
Wieviel Erfahrung hast Du in der Notesprogrammierung?

Was soll da eigentlich erreicht werden? Für mich sieht das aus, als das da was für eine Anzeige übergeben werden soll. Warum also nicht Notes die Arbeit machen lassen? Felder mit gleichem Namen und Werte automatisch übergeben?
Titel: Re: Problem mit Datenübergabe
Beitrag von: DerAndre am 15.10.07 - 13:52:32
Dominoforum (http://www.dominoforum.de/modules/newbb/viewtopic.php?topic_id=16809&forum=47)

Bitte nochmal die Regeln lesen...  :P

X-Post (http://atnotes.de/projekte/bp/team/tmc/_forumsregeln/rules001.html#23)
Titel: Re: Problem mit Datenübergabe
Beitrag von: frankie07 am 15.10.07 - 15:55:21
Wenn ich das jetzt so mache:

Dim session As New notessession
Dim db As notesdatabase
Dim doc As notesdocument
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
   
Set db = session.currentdatabase
Set doc = db.getDocumentByUNID ("78E5B66BE7BA1B27C1257313002AE7EF")
Call ws.EditDocument(True, doc)
Call uidoc.FieldSetText("Test", doc.getitemValue("avd_kont_art")(0))


Kommt die Meldung: "Object Variable not set"??????
Titel: Re: Problem mit Datenübergabe
Beitrag von: DAU-in am 15.10.07 - 16:06:54
weil du das uidoc nicht setzt.

ich fürchte, dir fehlen jegliche Grundlagen für die Programmierung.
Titel: Re: Problem mit Datenübergabe
Beitrag von: pete_bla am 15.10.07 - 16:21:06
Hi,

hast du jetzt das mit dem X-Posting verstanden ?
(ich glaub nicht ganz - ich hab zumindest noch keinen verweis im "domino-forum" auf dieses Posing gefunden)

Dominoforum (http://www.dominoforum.de/modules/newbb/viewtopic.php?topic_id=16809&forum=47)

Bitte nochmal die Regeln lesen...  :P

X-Post (http://atnotes.de/projekte/bp/team/tmc/_forumsregeln/rules001.html#23)

Ansonsten wird Dir sicher gleich Deine Problemlösung verraten...  ;)

Nur nochmal so viel zu deinem Script:
doc ist ja das Dokument, dass du öffnen willst.
UIDoc hast du Deklariert (Dim uidoc As NotesUIDocument )
aber noch nicht zugewiesen, ich vermute du willst das aktuelle, aus dem Du die Schaltfläche betätigst. -> gleich nach dem Dim ein "Set UIDoc = WS.CurrentDocument"

Ausserdem musst du noch das UIDoc des geöffneten zuweise. (Du hast es zwar als doc aber eben noch nicht als UIDoc. Nennen wir es besser UIDoc2 - sonst wirds nachher verwirrend!)

Das ganze wäre aber auch ohne LSC lösbar.

Mehr aber erst, wenn Du Dich an die Regeln hälst!

Gruss, Pete(r)
Titel: Re: Problem mit Datenübergabe
Beitrag von: frankie07 am 16.10.07 - 08:09:44
Jetzt hab ichs verstanden. Sorry, ich wollt gegen keine Regeln verstoßen, war keine Absicht!!!!

Hier der Link: http://www.dominoforum.de/modules/newbb/viewtopic.php?topic_id=16809&forum=47 (http://www.dominoforum.de/modules/newbb/viewtopic.php?topic_id=16809&forum=47)

Titel: Re: Problem mit Datenübergabe
Beitrag von: bikerboy am 16.10.07 - 08:42:49
Ich persönlich bin kein Freund des uidocs, deswegen würde ich die dein Uidoc so intanzieren

Set uidoc = ws.currentDocument.document

du solltest aber deine Dekleration auf

Dim uidoc as NotesDocument

ändern sonst fliegt es dir um die ohren.

Die Änderungen werden dann trotzdem im geöffneten Document angezeigt. Falls dies nicht der Fall sein sollte kannst mit einem

call ws.currentdocument.refresh

nachhelfen
Titel: Re: Problem mit Datenübergabe
Beitrag von: DerAndre am 16.10.07 - 08:53:56
Mach in Deinen Options auf jeden Fall ein

Option Declare

damit wirst Du gezwungen alle Variablen zu deklarieren und Bau eine Fehlerbehandlung ein, das erleichtert Dir die Suche bei Fehlern ungemein.

Dim uidoc as notesdocument

ist verwirrend. Variable mit präfix ui ( also Frontend ) und dann als notesdocument ( also Backend ) deklarieren ist nix.

Titel: Re: Problem mit Datenübergabe
Beitrag von: DAU-in am 16.10.07 - 08:55:36
also, mit uidoc ein Backenddokument zu bezeichnen halte ich für ziemlich gefährlich, Fahradlbua.
Wenn ich von einem anderen Code übernehme, und die Variablen beginnen mit ui, dann erwarte ich ein Frontentobjekt und kein Backend.
Titel: Re: Problem mit Datenübergabe
Beitrag von: bikerboy am 16.10.07 - 09:17:36
ein spiel mit dem feuer ich weiss, aber man muss ja nur einmal einen blick auf die deklaration werfen oder da ich ein kompromissbereiter mensch bin :

Dim currentDoc as NotesDocument

Set  uidoc = ws.currentDocument

Set currentDoc = uidoc.Document

Mir ging es ja nur darum dass er nicht den überblick bei seinen variablen verliert.
Titel: Re: Problem mit Datenübergabe
Beitrag von: Driri am 16.10.07 - 09:19:11
Sehe ich anders. So etwas sollte man sich gar nicht erst angewöhnen. Das mag bei kurzen Scripten noch gutgehen, aber spätestens bei umfangreichen Skriptbibliotheken schaut da niemand mehr durch - auch der Entwickler des Scriptes i.d.R. nicht mehr.
Titel: Re: Problem mit Datenübergabe
Beitrag von: DAU-in am 16.10.07 - 09:34:48
ein spiel mit dem feuer ich weiss, aber man muss ja nur einmal einen blick auf die deklaration werfen

Bei etwas verzwickteren Sachen ist der Blick auf die Deklaration nicht immer einfach - vor allem, wenn du mehrere Scriptlibrarys hast und dazu global definierte Variablen.
Titel: Re: Problem mit Datenübergabe
Beitrag von: Andrew Harder am 16.10.07 - 10:06:24
Verstehe ich das richtig? Beim drücken auf einen Knopf in dem Dokument, soll ein anderes Dokument geöffnet werden und dabei ein Feldwert übertragen werden?
Ich habe mal gar keine Ahnung woher Du die ID des Dokumentes nimmst, aber das soll mal nicht hier das Hauptthema sein.
Versuche mal so etwas:
Code
Option Declare

Dim session As NotesSession
Dim dbCurrent As NotesDatabase

Sub Initialize
	Set session = New NotesSession
	Set dbCurrent = session.CurrentDatabase
End Sub
Sub Click(Source As Button)
	'
	On Error Goto ErrorHandler
	'
	Dim uiws As NotesUIWorkspace
	Dim uidoc As NotesUIDocument
	Dim docCurrent As NotesDocument
	Dim docEdit As NotesDocument
	Dim sDocUNID As String
	'
	Set uiws = New NotesUIWorkspace
	Set uidoc = uiws.CurrentDocument
	Set docCurrent = uidoc.Document
	Let sDocUNID = "78E5B66BE7BA1B27C1257313002AE7EF" ' woher kommt die?
	Set docEdit =  dbCurrent.GetDocumentByUNID( sDocUNID )
	Call docEdit.CopyItem( docCurrent.GetFirstItem( "avd_kont_art" ), "test" )
	Call uiws.EditDocument( True, docEdit )
	'
end_S:
	Exit Sub
	'
ErrorHandler:
	Print "ERORR in line " + Cstr(Erl) + ": " + Error$(Err) + " (" + Cstr(Err) + ")"
	Resume end_S
	'
End Sub
Titel: Re: Problem mit Datenübergabe
Beitrag von: frankie07 am 16.10.07 - 11:16:07
Hallo zusammen,

vielen Dank für eure schnelle und kompetente Hilfe. Aber ich muss ganz ehrlich gestehen, dass mich das alles schon ein wenig verwirrt  ???

Ich habe bis jetzt folgenden Code:
Sub Click(Source As Button)
     Dim session As New notessession
     Dim db As notesdatabase
     Dim doc As notesdocument
     Dim ws As New NotesUIWorkspace
     Dim uidoc As NotesUIDocument
   
     Set db = session.currentdatabase
     Set doc = db.getDocumentByUNID ("78E5B66BE7BA1B27C1257313002AE7EF")

     Call ws.EditDocument(True, doc)
End Sub


Wenmn ich auf die Schaltfläche klicke, öffnet sich auch wunderbar das gewünschte Dokument. Jetzt will ich eben nur noch einen Wert in das gerade geöffnete Dokument übergeben.
Titel: Re: Problem mit Datenübergabe
Beitrag von: pete_bla am 16.10.07 - 11:35:15
Hi,

also wie schon angedeutet fehlt Dir das 2. UIDokument, das Du nun neu öffnen willst.
Hast Du schonmal in der Desingerhilfe nachgesehen ? (immer informativ, im desinger einfach auf F1 drücken.)
Sieh mal unter "NotesUIDocument" "NotesUIWorkspace" nach!

Deines Lösels Rätzung ist:
Code
     Dim uidoc As NotesUIDocument ' das Aktuell vorliegenden UIDokument für Quelle
' neu: ---->
     Dim uidoc2 As NotesUIDocument ' zu öffnendes UIDokument für Ziel der Daten
     set UIDoc = WS.CurrentDocument '  falls Du das nicht schon haben solltest
' <-----   
     Set db = session.currentdatabase 
     Set doc = db.getDocumentByUNID ("78E5B66BE7BA1B27C1257313002AE7EF")

' streichen:    Call ws.EditDocument(True, doc)[/s]
' erstezen durch:
     Set UIDoc2 = ws.EditDocument(True, doc)
' neu: ---->
     If not UIDoc2.Editmode = TRUE then 
         Messagebox "Kann das Dokument nicht bearbeiten!"
         Exit sub ' oder Function oder was du grade hast
     End if
' frontend aus frontend variante:
     Call UIDoc2.FieldSettext("Feld1", UIDoc.FieldGetText("Feld1") )
' oder: frontend aus backend variante:
     Call UIDoc2.FieldSettext("Feld1", Doc.Feld1(0) )


' noch ein refresh:
     Call UIDoc2.Refresh()

Du solltest Deine Daten in das neu geöffnete UIDokument schreiben, da dann auch auch die regulären Funktionen des Zieldokuments verwendet werde.
Eingabefehler, Falsche Felder... (ist hier gewollt!)

Falls Du noch Fragen hast, stell sie.

Grüsse, Pete(r)

PS. noch vermisse ich Deinen Link vom Domino-Forum hierher.