Mark Tait
Mark Tait

Reputation: 643

Powerapps difficulty accessing JSON in collection

I'm having difficulty accessing data in a collection, via PowerApps.

I create the collection with this:

Collect(coll15,mt.GetAnswers("3b....da","application/json",{question:"eco"}))

Using Developer Tools -> Network tab -> Response body - the following JSON data is returned:

{
"answers": [
{
  "answer": "This is the answer",
  "questions": [
    "Private vehicle eco renewal"
  ],
  "score": 82.901087775826454
}
]
}

The collection is created.

I then add a gallery control to my page - however the only options I have to bind to the labels are: ThisItem.Value

If I try to enter ThisItem.Value.answer I get the error: Invalid use of '.'

If I enter ThisItem.answers.answer I get the error: Invalid name

This is the swagger file:

{
"swagger": "2.0",
"info": {
  "version": "1.0.0",
  "title": "mt",
  "description": "mt"
},
"host": "westus.api.cognitive.microsoft.com:443",
"basePath": "/",
"schemes": [
  "https"
],
"consumes": [],
"produces": [
  "application/json"
],
"paths": {
  "/qnamaker/v2.0/knowledgebases/eeeee.....eeeee/generateAnswer": {
     "post": {
        "summary": "GetAnswers",
        "description": "Get answers from qna",
        "operationId": "GetAnswers",
        "parameters": [
           {
              "name": "body",
              "in": "body",
              "schema": {
                 "type": "object",
                 "properties": {
                    "question": {
                       "type": "string",
                       "description": "question",
                       "x-ms-summary": "question",
                       "title": "question",
                       "x-ms-visibility": ""
                    }
                 },
                 "default": {
                    "question": "hi"
                 },
                 "required": [
                    "question"
                 ]
              },
              "required": true
           }
        ],
        "responses": {
           "default": {
              "description": "default",
              "schema": {
                 "type": "string"
              }
           }
        }
     }
  }
},
"definitions": {},
"parameters": {},
"responses": {},
"securityDefinitions": {
  "api_key": {
     "type": "apiKey",
     "in": "header",
     "name": "Ocp-Apim-Subscription-Key"
  }
},
"security": [
  {
     "oauth2_auth": [
        "Offline-Access"
     ]
  }
],
"tags": []
}

Is there any way for me to access the answer text within the collection?

Thanks for any help,

Mark

Upvotes: 1

Views: 4800

Answers (1)

carlosfigueira
carlosfigueira

Reputation: 87218

The problem is that the response type for the operation in the connector definition is string:

    "responses": {
       "default": {
          "description": "default",
          "schema": {
             "type": "string"
          }
       }
    }

But your response is an object instead. If you update your custom connector to use a typed object instead, you should be able to access the response from the operation. Something along the lines of the schema below:

    "responses": {
      "default": {
        "description": "default",
        "schema": {
          "type": "object",
          "properties": {
            "answers": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "answer": {
                    "type": "string"
                  },
                  "questions": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "score": {
                    "type": "number",
                    "format": "float"
                  }
                }
              }
            }
          }
        }
      }
    },

Notice that in the portal (web.powerapps.com), if you go to your custom connector definition, and select "Edit", you can go to the operation, and select the response you want to edit:

Select response

And then use the "Import from sample" option

Import from sample

With that, if you enter an example of a response from the API, it will create the schema for you (which is similar to the one I have above).

Upvotes: 1

Related Questions