The object name "Application" does not exist ...

Das Forum soll der Ablage von Lösungen für immer wieder auftauchende Problemstellungen dienen. // This forum contains solutions to problems that frequently occur.
Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

The object name "Application" does not exist ...

Beitrag von dave » 14.03.2011, 21:53:25

Nabend,

Ich bin dabei, einen ProduktManager in Anlehnung an das UMGT zu erstellen.

Sieht soweit auch alles chic aus. Nur wenn ich nun ein Produkt in der DB abspeichere, wird dieses zwar eingetragen, jedoch die Composition zur Application kommt nicht zustande. Folgende Uncaught Exception erhalte ich:
The object name "Application" does not exist in the mapping table! Hence, your object cannot be saved! Please check your object configuration.
Wenn ich mich recht an meine Sucher vorhin erinnere, hatte Well ein ähnliches Problem, jedoch ein Update auf die aktuelle Version von 1.9 auf 1.10/1.11 hat schon das passende Ergebnis geliefert.

Ich liefere hier mal mal ein paar Codefragmente, damit ihr es evtl. besser nachvollziehen könnt. Wie gesagt, stark an das UMGT angelehnt ;):

Nachdem das Eingabeformular erfolgreich abgesendet wurde, wird die Methode saveProdukt des ProduktManager aufgerufen:

Code: Alles auswählen

            $pmgt = &$this->__getAndInitServiceObject('modules::produktmanagement::biz', 'ProduktManager', 'Default');
            $produkt = new GenericDomainObject('Produkt');

            $produkt->setProperty('ProduktName', RequestHandler::getValue('NameProdukt'));

            $produkt = $pmgt->saveProdukt($produkt); 

Die Methode sieht folgend aus:

Code: Alles auswählen

    public function saveProdukt(GenericDomainObject &$produkt) {
        // get the mapper
        $oRM = &$this->__getORMapper();

        // save produkt and return it's id
        $app = $this->__getCurrentApplication();
        $produkt->addRelatedObject('Application2Produkt', $app);
        return $oRM->saveObject($produkt);
    }
 
Die momentane Application wird, wie beim UMGT auch, so geholt: und hat durch die Config sowie im Kopf des ProduktManager die ID 2. In der Db.Table ent_application ist diese auch mit der ID 2 sowie dem Display-Name ProduktManager eingegeben.

Code: Alles auswählen

    protected function __getCurrentApplication() {
        $app = new GenericDomainObject('Application');
        $app->setProperty('ApplicationID', $this->__ApplicationID);
        return $app;
    }
 

Wie gesagt, die Daten aus dem Formular kommen an, nur die Composition kommt nicht zu stande.

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: The object name "Application" does not exist ...

Beitrag von Megger » 15.03.2011, 09:04:11

Wie sieht denn deine *objects.ini aus?
Dort muss Application ebenfalls vorkommen
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: The object name "Application" does not exist ...

Beitrag von dave » 15.03.2011, 17:35:57

Hi Megger,

genau das wars! Die Application-Definition hat in meiner *objects.ini gefehlt. Das finde ich aber auch ziemlich interessant. Wieso muss das so sein? Ich habe doch die Applicatiopn schon in der *objects.ini des UMGT definiert. Ich muss ja auch kein Datenbank-Update durchführen ... finde ich etwas komisch, dieses verhalten ;).

Aber danke, funktioniert! :)

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: The object name "Application" does not exist ...

Beitrag von Screeze » 15.03.2011, 17:44:31

Dann musst du, wenn du den GORM beziehst eben ALLE configs mit angeben - auch die des umgt, dann kennt die aktuelle GORM-instanz auch dieses Objekt.

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: The object name "Application" does not exist ...

Beitrag von dave » 15.03.2011, 17:56:56

Ok, ich wusste nicht, das sowas auch möglich ist.

Wenn ich nun aber eine weitere config mit einbinde wirkt sich das (zwar geringfügig aber prinzipiell) auf die Performance aus. Daher definiere ich einfach in jeder *.ini die Application.

@ Christian: Vielleicht sollten wir einen entspechenden Hinweis noch in der GORM-Doku aufnehmen?

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: The object name "Application" does not exist ...

Beitrag von dr.e. » 15.03.2011, 20:39:03

Hallo dave,

wie soll der Hinweis den aussehen? Für das UMGT brauchst du schlicht die Konfiguration, die mitgeliefert ist. Für eigene Implementierungen musst du dann dafür sorgen, dass die entsprechenden Objekte für deine GORM-Instanz definiert sind. Das lässt sich schwer in einen Hinweis formulieren... Oder verstehe ich dich falsch?
Viele Grüße,
Christian

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: The object name "Application" does not exist ...

Beitrag von dave » 15.03.2011, 21:00:56

Naja, du hast es in deinem Post ja schon so geschrieben. ;)

Ich würde es so machen:
Hinweis: Auch wenn eine 'Application' für eine Implementierung/Anwendung bereits existiert, muss eine weitere 'Application' für eine andere Implementierung/Anwendung ebenfalls definiert werden!

Aber im Prinzip unnötig, wenn man erstmal den GORM einigermassen verstanden hat.

Mein Problem war halt, dass ich die Definition 'Application' ja schon in der *objects.ini des UMGT hatte und daher dachte, sowas benötige ich nicht nochmal, weil die Tabelle ent_application ja schon existiert! Weiter dachte ich: "Trägst du einfach manuell über phpMyAdmin eine ID2 mit ProduktManager in der ent_application ein, schon wirds passen", aber Pustekuchen ;).

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: The object name "Application" does not exist ...

Beitrag von Megger » 16.03.2011, 08:49:11

Vielleicht einen Hinweis in der Art, dass der GORM nur die Elemente aus der ini kennt die ihm übergeben wurde oder per addMapppingConfiguration zusätzlich bekannt gemacht wurde

PS.: Ich hasse die Notebook Tastatur
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: The object name "Application" does not exist ...

Beitrag von dr.e. » 17.03.2011, 00:40:12

Hallo zusammen,

ich habe nun unter http://adventure-php-framework.org/Seit ... -von-Daten einen entsprechenden Hinweis aufgenommen und mit dem Thread hier verlinkt. Damit sollte die Information entsprechend verfügbar sein.
Viele Grüße,
Christian

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: The object name "Application" does not exist ...

Beitrag von dave » 17.03.2011, 13:05:04

Cool, damit sollte es klar sein :)

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: The object name "Application" does not exist ...

Beitrag von dave » 30.03.2011, 13:36:47

Dummerweise bin ich heute wieder daran hängen geblieben ... Und habe das auch gleich mal ins Wiki mit aufgenommen:
http://wiki.adventure-php-framework.org ... index:_xyz

Habe das um eine Fehlerursache 1 und Fehlerurscahe 2 erweitert.

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: The object name "Application" does not exist ...

Beitrag von Megger » 30.03.2011, 13:39:54

Anstatt die Stellen zu kopieren, kann man dem GORM auch per addMappingConfiguration die Konfiguration noch mitgeben (kommt halt auf die Menge an). Dadurch habe ich dann auch nicht das gleiche Objekt an 2 verschiedenen Stellen stehen
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: The object name "Application" does not exist ...

Beitrag von dave » 30.03.2011, 13:47:25

Kannst du das etwas genauer erläutern?

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: The object name "Application" does not exist ...

Beitrag von Megger » 30.03.2011, 14:11:57

Wenn du zum Beispiel 2 Konfigurationen hast

A (config/testa/test/DEFAULT_test_objects.ini)

Code: Alles auswählen

[Application]
DisplayName = "VARCHAR(100)"
B (config/testb/test/DEFAULT_test_objects.ini)

Code: Alles auswählen

[User]
DisplayName = "VARCHAR(100)"

[Group]
DisplayName = "VARCHAR(100)"

[Role]
DisplayName = "VARCHAR(100)"

[Permission]
DisplayName = "VARCHAR(100)"
Wenn man nun in testa noch User, Group und Role braucht, dann kann man das entweder kopieren, allerdings hat man dann das Problem, dass man vielleicht mal in testb etwas ändert und dies dann in testa vergisst. Für solche Dinge gibt es die Methode addMappingConfiguration(...)

Code: Alles auswählen

$GORMa = $GORMF->getGenericORMapper('testa', 'test', 'MySQL');
$GORMa->addMappingConfiguration('testb', 'test');
 
Dadurch hast du dann sowohl auf testa, als auch auf testb Zugriff allerdings solltest du darauf achten, dass Elemente überschrieben werden, ein Application in testb überschreibt ein Application in testa
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: The object name "Application" does not exist ...

Beitrag von dave » 30.03.2011, 14:13:52

Ok, sehr gut, vielen Dank!
Lasse mir das noch weiter durch den Kopf gehen und werds dann implementieren und ins Wiki packen :)


[EDIT]
Ist nun im Wiki optimiert! +Danke für den Hinweis! ;)

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste