Datenaustausch zwischen zwei geöffneten Formularen

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Datenaustausch zwischen zwei geöffneten Formularen

Re: Datenaustausch zwischen zwei geöffneten Formularen

von hinki » Fr, 05.11.2010 13:57

Aloha ʻauinalā und Mahalo

ja, DPunch, so ist es. Dieses Problem ist damit behoben.

Vielen Dank für Deine Hilfe.

Ich durfte wieder etwas lernen - und das finde ich richtig gut. :D

Viele Grüße

Uli

Re: Datenaustausch zwischen zwei geöffneten Formularen

von DPunch » Fr, 05.11.2010 13:03

Aloha

Wenn eine Fehlermeldung ala
Type:com.sun.star.container.NoSuchElementException
ausgespuckt wird, obwohl Du Dir sicher bist, das dieses Element in dem entsprechenden Container (in diesem Fall dem Formular, bzw dem 1. Formular des Formulars) ist, kannst Du in aller Regel davon ausgehen, dass Du Dich im falschen Container befindest.

In Deinem Fall liegt das Problem konkret an diesen Codezeilen:

Code: Alles auswählen

ThisDatabaseDocument.FormDocuments.getByName("5_UTicket_Eingabe").open 'Formular 5_UTicket_Eingabe öffnen
oDoc2 = ThisComponent
oForm2 = ThisComponent.drawpage.forms.getbyindex(0)
Du öffnest zwar ein anderes Formular, hast aber nirgendwo eine Referenzierung darauf - mit thisComponent sprichst Du noch immer das Formular an, aus dem das Makro gestartet wurde. Würdest Du Dir im 1. Formular testweise ein Textfeld mit dem Namen "UKnd_ID" anlegen, gäbe es keine Fehlermeldung mehr, denn dann würde er das Element finden.

Das inkonsistente Verhalten von OOo Basic in Bezug auf "thisComponent" bietet immer Platz für Fehler, daher sollte man nach Möglichkeit generell auf das mehrmalige Verwenden dieser Konstanten innerhalb eines Makros verzichten.
Es liefern jedoch alle mir bekannten Methoden zum Öffnen eines Files eine Referenzierung auf das geöffnete Element zurück, so dass eine Änderung der benannten Codezeilen in

Code: Alles auswählen

oDoc2 = ThisDatabaseDocument.FormDocuments.getByName("5_UTicket_Eingabe").open 'Formular 5_UTicket_Eingabe öffnen
oForm2 = oDoc2 .drawpage.forms.getbyindex(0)
Dein Problem beheben dürfte.

Datenaustausch zwischen zwei geöffneten Formularen

von hinki » Fr, 05.11.2010 09:24

Hallo

da kommt auch schon die nächste Frage an das Forum

Die Situation
Ich habe zwei Formulare (4_Ticket_Eingabe und 5_UTicket_Eingabe), die dazu dienen für einen Auftrag (oder Ticket) ein Unterauftrag (oderUnterticket) einzugeben. Es gibt zur Identifikation der Unteraufträge zwei Felder, die zwischen den beiden Formularen identisch sein müssen. 1. Die Kunden_ID (Knd_ID) und 2. die Ticket_Nr.
Um Tipp- oder sonstige Fehler zu vermeiden, möchte ich diese Werte beim Aufruf des 2. Formulars (5_UTicket_Eingabe) automatisch füllen.
Also Werte aus den Feldern des 1. Formulars auslesen, 2. Formular öffnen und dort in die vorgesehenen Felder eintragen.

Lösungsversuch

Code: Alles auswählen

 oDoc = ThisComponent
    oForm = ThisComponent.drawpage.forms.getbyindex(0) 'Noch in der Ticket_Eingabe  
   oFeld = oForm.getByName("Kunden_ID") 'Das Feld Kunden_ID auswählen
   sKunde = oFeld.getCurrentValue 'Inhalt von Kunden_ID der Variablen sKunde zuordnen
   MsgBox "Daten gleich " + sKunde 'Kontrolle durch MsgBox
   oFeld2 = oForm.getByName("txtTicket_Nr") 'Das Feld Ticket_Nr auswählen
   sTicket = oFeld2.getCurrentValue 'Inhalt von Ticket_Nr der Variablen sTicket zuordnen
   MsgBox "Daten gleich" + sTicket 'Kontrolle durch MsgBox
   
 ThisDatabaseDocument.FormDocuments.getByName("5_UTicket_Eingabe").open 'Formular 5_UTicket_Eingabe öffnen
 
  oDoc2 = ThisComponent
    oForm2 = ThisComponent.drawpage.forms.getbyindex(0)
    aufnahmeFeld = "UKnd_ID" 'Der Variablen aufnahmeFeld den Formularfeldnamen UKnd_ID zuweisen
    MsgBox "Daten gleich" + aufnahmeFeld 'Kontrolle durch MsgBox
   oForm2.getByName(aufnahmeFeld).text = sKunde 'in das Feld aufnahmeFeld (UKnd_ID) den Wert eintragen
    'oForm2.getByName(aufnahmeFeld).value = sKunde 'in das Feld aufnahmeFeld (UKnd_ID) den Wert eintragen
   oForm2.getByName(aufnahmeFeld).commit(true)'Ticket_Nr festschreiben
Frage

Dieser Code funktioniert bis zur Zeile

----> oForm2.getByName(aufnahmeFeld).text = sKunde 'in das Feld aufnahmeFeld (UKnd_ID) den Wert eintragen <-----

In dieser Zeile erscheint die Fehlermeldung:

BASIC-Laufzeitfehler
Es ist eine Exception aufgetreten.
Type:com.sun.star.container.NoSuchElementException
Message:.

Das Feld "UKnd_ID" ist sicher in dem Formular "5_UTicket_Eingabe" vorhanden und ist auch genau so benannt.

Was mache ich falsch?

Meine Suche nach Lösungen hat bis jetzt zu keinem wirklichen Ergebnis geführt, so dass ich mit meiner Frage hier gelandet bin.
Und ich bin aufgrund der guten Erfahrungen gerne hier im Forum - muss ja mal gesagt werden.

Danke im Voraus für die Mühe.

Viele Grüße

Nach oben