Ankündigung

Einklappen
Keine Ankündigung bisher.

OData Funktion mit Parameter aufrufen

Einklappen
X

OData Funktion mit Parameter aufrufen

Einklappen
  • Filter
  • Zeit
Alles löschen
neue Beiträge

  • OData Funktion mit Parameter aufrufen

    Guten Tag,

    ich habe ein mir unerklärliches Phänomen beim definieren eines OData Service.
    Ich habe für Intrexx 7 einen Service angelegt, wie im Handbuch beschrieben unter Daten anbieten.
    Habe meine Datengruppe und die Filter definiert.
    Dann konnte ich auch Problemlos auf die Daten zugreifen.
    Jetzt möchte ich noch ein paar Funktionen implementieren.
    Diese werden jedoch nur Aufgerufen, wenn ich keinen Parameter übergebe.
    Dazu erhalte ich dann im portal.log folgende Exception:

    Code:
    ERROR 2016-11-15 08:11:57,656 - de.uplanet.lucy.server.odata.producer.command.handler.GetEntitiesCommandHandler[qtp1792084820-3960]
    
    java.lang.NullPointerException
        at de.uplanet.lucy.server.odata.producer.model.IxMetadataMapping.getPkFieldValues(Unknown Source)
        at de.uplanet.lucy.server.odata.producer.command.handler.GetEntitiesCommandHandler.getEntity(Unknown Source)
        at de.uplanet.lucy.server.odata.producer.command.GetEntityCommand.execute(Unknown Source)
        at de.uplanet.lucy.server.odata.producer.command.GetEntityCommand.execute(Unknown Source)
        at org.odata4j.command.ChainCommand.execute(ChainCommand.java:51)
        at org.odata4j.command.CommandExecution$1.execute(CommandExecution.java:23)
        at org.odata4j.producer.command.CommandProducer.executeCommand(CommandProducer.java:40)
        at org.odata4j.producer.command.CommandProducer.getEntity(CommandProducer.java:75)
        at org.odata4j.producer.resources.EntityRequestResource.getEntityImpl(EntityRequestResource.java:296)
        at org.odata4j.producer.resources.EntityRequestResource.getEntity(EntityRequestResource.java:268)
        at sun.reflect.GeneratedMethodAccessor747.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:483)

    Funktion "test" habe ich als "GET" definiert. Rückgabe "Edm.Int32" Parameter ["TestParam" "Edm.Int32"]
    Mein Aufruf sieht wie folgt aus:
    http://127.0.0.1:9090/MeinService.sv...(TestParam=123)

    Groovy Code:
    Code:
    def l_param = g_oFunctionParameters['TestParam']
    def l_ret = l_param
    return l_ret
    Sobald ich http://127.0.0.1:9090/MeinService.svc/test() aufrufe, funktioniert alles wie erwartet. Dann wird halt die leere Variable angemeckert.

    Ich hoffe jemand hatte das Problem schonmal und kann mir einen Workaround empfehlen

  • #2
    Das Problem ist hier die Definition der Funktionsparameter in der URL. Das URL Beispiel scheint der OData V4 Spezifikation zu entsprechen, der OData Provider in Intrexx unterstützt bisher aber nur OData V2. In OData V2 müssen die Funktionsparameter als URL Query String Parameter definiert werden (siehe auch 3.3 in http://www.odata.org/documentation/o...i-conventions/). Ansonsten interpretiert Intrexx das als Abfrage eines Datensatzes via Primary Key, was dann zu der Exception führt.

    So sollte der Aufruf funktionieren:

    http://127.0.0.1:9090/MeinService.svc/MyFunctionName?TestParam=123

    Weiteres Beispiel mit mehreren Parametern:

    http://services.odata.org/OData/OData.svc/ProductsByColor?color='red'&param=foo

    Kommentar


    • #3
      Danke. Da hatte ich wohl ein riesiges Brett vorm Kopf.
      Jetzt funktioniert alles.

      Kommentar

      Lädt...
      X