4D v17 ORDA Verhalten bei ds.Tabelle.get("link/link")

hallo in die runde,

hat von euch schon jemals jemand probiert in einer Tabelle per ORDA einen Datensatz aufzurufen per
get wo der primärschlüssel einen Schrägstrich enthält.

4D kontert solche anfragen nämlich mit einem 1804 fehler: cannot completely build a list of attributes with “link)”… und diversen 1500 attribute cannot be found.

ich finde zu so einem verhalten in der doku nichts. ist das bewusst so - oder ist das ein fehler?

liebe grüße und schönen abend
christian mittermair

Ich bin nie auf die Idee gekommen…
Für mich ist ein PK entweder longint oder UUID.

Aber ok. Test mit neuer Struktur und alpha Feld als PK.
Zwei Datensätze “Test” und “a/b” als Inhalt.

Code:

ds.startRequestLog(10)
$ent:=ds.Tabelle_1.get("test")
$ent2:=ds.Tabelle_1.get("a/b")
$log:=ds.getRequestLog()
ds.stopRequestLog()
SET TEXT TO PASTEBOARD(JSON Stringify($log))

Ergibt:

Als Requestlog:

[
  {
    "duration": 1, 
    "endTime": "2020-06-18T14:21:49.664Z", 
    "response": {
      "body": {
        "ID": "a/b", 
        "__DATACLASS": "Tabelle_1", 
        "__KEY": "'a/b'", 
        "__STAMP": 1, 
        "__TIMESTAMP": "2020-06-18T14:17:19.479Z", 
        "__entityModel": "Tabelle_1"
      }, 
      "status": 200
    }, 
    "sequenceNumber": -1, 
    "startTime": "2020-06-18T14:21:49.663Z", 
    "url": "rest/Tabelle_1(a/b)"
  }, 
  {
    "duration": 30, 
    "endTime": "2020-06-18T14:21:49.663Z", 
    "response": {
      "body": {
        "ID": "test", 
        "__DATACLASS": "Tabelle_1", 
        "__KEY": "test", 
        "__STAMP": 1, 
        "__TIMESTAMP": "2020-06-18T14:17:16.816Z", 
        "__entityModel": "Tabelle_1"
      }, 
      "status": 200
    }, 
    "sequenceNumber": -1, 
    "startTime": "2020-06-18T14:21:49.633Z", 
    "url": "rest/Tabelle_1(test)"
  }
]

Und Gegenprobe mit Browser:
http://127.0.0.1/rest/Tabelle_1(a/b)

ging auch:
{"__entityModel":“Tabelle_1”,"__DATACLASS":“Tabelle_1”,"__KEY":"‘a/b’","__TIMESTAMP":“2020-06-18T14:17:19.479Z”,"__STAMP":1,“ID”:“a/b”}

Getestet Einzelplatz und Client/Server

Kann aber natürlich auch mit weiterem Code zusammenhängen. Im Zusammenspiel mit REST wäre ich aber nie auf “/” oder ähnliche Zeichen als PK gekommen…

Hallo Herr Maul,

vergessen es zu sagen - außer im Betreff - ich rede nicht von v18 sondern von v17. Leider kann ich dort mit Boardmitteln nicht schauen, was da gemacht wird, da diese RequestLogs erst ab V18 funktionieren.

Hab’s gerade mal interessehalber mit v17.1 Windows getestet:

// [Tabelle_1]pk ist der Primärschlüssel
// Schritt 1: Initialisierung:
READ WRITE([Tabelle_1])
ALL RECORDS([Tabelle_1])
DELETE SELECTION([Tabelle_1])
CREATE RECORD([Tabelle_1])
[Tabelle_1]pk:="a/b"
[Tabelle_1]Name:="Das a/b"
SAVE RECORD([Tabelle_1])
CREATE RECORD([Tabelle_1])
[Tabelle_1]pk:="test"
[Tabelle_1]Name:="Der test"
SAVE RECORD([Tabelle_1])
READ ONLY([Tabelle_1])
UNLOAD RECORD([Tabelle_1])
// Schritt 2: Abfrage:
ALERT(ds.Tabelle_1.get("test").Name)
ALERT(ds.Tabelle_1.get("a/b").Name)
// Ergebnis: "Der test" und "Das a/b", also korrekt.

Das funktioniert alles korrekt. Scheint ein spezielles Problem bei Ihnen zu sein.

Hallo Herr Buchwitz,

Das Verhalten tritt unter Windows 2016 Server und MacOS X zB 10.14.6 auf. Wird die Methode am Server gestartet funktioniert es, wird sie am Client aufgerufen scheitert es…

Daher glaube ich 4D hat da ein Problem.