Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Get certified in Microsoft Fabric—for free! For a limited time, get a free DP-600 exam voucher to use by the end of 2024. Register now

Reply
eramirez
Frequent Visitor

Custom Data Connector Power BI, fill List with json response

Hi, 

I'm trying to create a Custom Data Connector for Power Bi, which I want to display a list from a json response, if I hardcode the list the selector displays fine, but if I try to fill the selector with a json response, at the moment of open Power BI, shows me an error and my conector is not available.

 

This is the code that shows me correctly my hardcoded list:

 

 

shared listTest = getDataFromUrl;

MyConnectorType = type function (
    count as (type text meta [
        Documentation.FieldCaption = "Count",
        Documentation.FieldDescription = "Number of times to repeat the message",
        Documentation.AllowedValues = listTest
    ]))
    as table meta [
        Documentation.Name = "Hello - Name",
        Documentation.LongDescription = "Hello - Long Description",
        Documentation.Examples = {[
            Description = "Another example, new message, new count!",
            Code = "HelloWorldWithDocs.Contents(""Goodbye"", 1)",
            Result = "#table({""Column1""}, {{""Goodbye""}})"
        ]}
    ];

getDataFromUrl =
let
url = "http://localhost:8080/jsontest/",
source = Web.Contents(url, [ Headers = DefaultRequestHeaders ]),
xml = Xml.Tables(source),
SessionState = Table.ExpandTableColumn(xml,"session-states",{"min-state"}),
ss = Table.Column(SessionState,"min-state"),
reportArray = Table.Column(SessionState,"report-array"),
textJson = Lines.ToText(reportArray),
json = Json.Document(textJson),
ids = Table.FromRecords(json,{"name"}),
list = Table.ToList(ids),
test = {1,2,3}
in
list;

 

If I return in the getDataFromUrl function test variable, Power BI shows me my plugin correctly with the elements from the list:

 

connector.PNG

 

But if I change the return of my method to variable list, power BI gives me this error on launching:

 

errorConnector.PNG

Do I need to implement something else for this to work?

 

Regards

 

2 REPLIES 2
Eric_Zhang
Microsoft Employee
Microsoft Employee

@eramirez

Could you zip your project from visual studio and share it with me?


@Eric_Zhang wrote:

@eramirez

Could you zip your project from visual studio and share it with me?


Hi Eric, I just created a project in visual studio of type Data Connector Project and the only file that I got is the .pq file with this

 

// This file contains your Data Connector logic
section TestConnector;

[DataSource.Kind="TestConnector", Publish="TestConnector.Publish"]

shared TestConnector.Contents = Value.ReplaceType(TestConnectorImpl, TestConnectorType);

shared listTest = getDataFromUrl;

TestConnectorType = type function (
    count as (type text meta [
        Documentation.FieldCaption = "Count",
        Documentation.FieldDescription = "Number of times to repeat the message",
        Documentation.AllowedValues = listTest
    ]))
    as table meta [
        Documentation.Name = "Hello - Name",
        Documentation.LongDescription = "Hello - Long Description",
        Documentation.Examples = {[
            Description = "Another example, new message, new count!",
            Code = "HelloWorldWithDocs.Contents(""Goodbye"", 1)",
            Result = "#table({""Column1""}, {{""Goodbye""}})"
        ]}
    ];

    TestConnectorImpl = (count as number) as table =>
    let
        _count = count,
        listOfMessages = List.Repeat({_count},_count),
        table = Table.FromList(listOfMessages, Splitter.SplitByNothing())
    in
        table;

    getDataFromUrl = 
    let
        url = "http://localhost:8080/jsontest/",
        source = Web.Contents(url, [ Headers = DefaultRequestHeaders ]),
        xml = Xml.Tables(source),
        SessionState = Table.ExpandTableColumn(xml,"session-states",{"min-state"}),
        ss = Table.Column(SessionState,"min-state"),
        reportArray = Table.Column(SessionState,"report-array"),
        textJson =  Lines.ToText(reportArray),
        json = Json.Document(textJson),
        ids = Table.FromRecords(json,{"name"}),
        list = Table.ToList(ids),
        test = {1,2,3}
    in
        list;


// Data Source Kind description
TestConnector = [
    Authentication = [
        // Key = [],
        // UsernamePassword = [],
        // Windows = [],
        Implicit = []
    ],
    Label = "Test Connector"
];

// Data Source UI publishing description
TestConnector.Publish = [
    Beta = true,
    Category = "Other",
    ButtonText = { Extension.LoadString("ButtonTitle"), Extension.LoadString("ButtonHelp") },
    LearnMoreUrl = "https://powerbi.microsoft.com/",
    SourceImage = TestConnector.Icons,
    SourceTypeImage = TestConnector.Icons
];

TestConnector.Icons = [
    Icon16 = { Extension.Contents("TestConnector16.png"), Extension.Contents("TestConnector20.png"), Extension.Contents("TestConnector24.png"), Extension.Contents("TestConnector32.png") },
    Icon32 = { Extension.Contents("TestConnector32.png"), Extension.Contents("TestConnector40.png"), Extension.Contents("TestConnector48.png"), Extension.Contents("TestConnector64.png") }
];

DefaultRequestHeaders = [
    #"Accept" = "application/json;odata.metadata=minimal",  // column name and values only
    #"OData-MaxVersion" = "4.0"                             // we only support v4
];

and in the url http://localhost:8080/jsontest/, I'm just creating a local service created in Java (just for testing because the remote url is also in development) that only returns this string as xml

 

"<taskResponse statusCode=\"200\"><report-array>[{\"id\":\"1\",\"name\":\"1\"},{\"id\":\"2\",\"name\":\"2\"},{\"id\":\"3\",\"name\":\"3\"}]</report-array><session-states><min-state>true</min-state></session-states></taskResponse>"

 

Regards

Helpful resources

Announcements
November Carousel

Fabric Community Update - November 2024

Find out what's new and trending in the Fabric Community.

Live Sessions with Fabric DB

Be one of the first to start using Fabric Databases

Starting December 3, join live sessions with database experts and the Fabric product team to learn just how easy it is to get started.

Las Vegas 2025

Join us at the Microsoft Fabric Community Conference

March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount! Early Bird pricing ends December 9th.

Nov PBI Update Carousel

Power BI Monthly Update - November 2024

Check out the November 2024 Power BI update to learn about new features.

Top Kudoed Authors