2017-07-31 8 views
0

私は次のような状況で立ち往生しています予約しました。 JSONレスポンス構造は以下の通りです:OpenEdge ABLは(JSONデータから推測される)一時テーブルのフィールド名などのキーワード

{ 
"members": [ 
    { 
     "email_address": "[email protected]", 
     "status": "randomstatus" 
    }, 
    ...etc... 
]} 

私は(JSONデータからABLスキーマを推測)READ-JSONで一時テーブルにこれを読んで、一時テーブルを処理しようとしています。これは私が立ち往生したところです: 一時テーブルフィールド"状態"を含むクエリをまとめようとすると、エラーが発生します。 例:

hQuery:QUERY-PREPARE('FOR EACH ' + httSubscriber:NAME + ' WHERE ' + hBuffer:BUFFER-FIELD(iStatus):NAME + ' = "randomstatus"'). 

が与える:。後に理解することができません**

- "メンバーをWHERE"(247)

私も名前で直接参照しようとしている

、同じ結果。

おそらく「ステータス」は、ABLの予約キーワードです。そうかもしれない?そして、この問題をどのようにして「ステータス」フィールドを参照することができますか?

残念ながら、JSONレスポンスの形式とキー名は私の管理下にありません。私はそれを使用しなければなりません。

+0

バッファの値は正しいですか?私は、動的クエリに「ステータス」があるときに、そのエラーを表示しません。 httSubscriber:NAMEおよび/またはhBuffer:FIELD-VALUE(iStatus):NAMEはあなたが思っている値を返していない可能性があります。 – TheDrooper

答えて

1

あなたは内部的に問題のフィールドの名前を変更するために一時テーブル定義でSERIALIZE-NAMEを使用することができます。その後、フィールドを別の名前で参照する必要がありますが、シリアル化された形式ではまだstatusとして知られています。

status -fieldの名前をexampleStatusに変更した例です。

DEFINE TEMP-TABLE ttExample NO-UNDO 
    FIELD exampleStatus AS CHARACTER SERIALIZE-NAME "status". 

/* Code to read json goes here... */ 

/* Access the field */ 
FOR EACH ttExample: 
    DISPLAY ttExample.exampleStatus. 
END. 
+0

ありがとう、これは私の問題をきれいに解決しました。 – AlisaDu

1

私はこのような愚かなことを行うことが知られてきた:

JSONData = replace(JSONData, '"status":', '"xstatus":'). 
0

テンポラリテーブル(ハードコードされているか、文字列が付加されている)+ '。 + hBuffer:バッファフィールド(iStatus):NAME(...)

これは、フィールドについて話していることをコンパイラーが理解するのに役立ちます。それは制限されていないので、これは強制的に手を加え、あなたが照会できるようにするべきです。

+0

残念ながら、これは私の場合は機能しませんでした。 '(...)httSubscriber:NAME + '。' + hBuffer: 'members.status'に評価されるBUFFER-FIELD(iStatus):NAME(...)'は同じエラーを返します。 – AlisaDu

関連する問題