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

Earn the coveted Fabric Analytics Engineer certification. 100% off your exam for a limited time only!

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
Employee
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
April AMA free

Microsoft Fabric AMA Livestream

Join us Tuesday, April 09, 9:00 – 10:00 AM PST for a live, expert-led Q&A session on all things Microsoft Fabric!

March Fabric Community Update

Fabric Community Update - March 2024

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