Forum Discussion

GunterM's avatar
GunterM
Regular Visitor
8 years ago
Solved

Patching an Online DirectQuery datasource

Hi,

 

I can execute a patch request to set the credentials of a online directquery datasource using the HttpClient class with no problem. But now I'm looking for a way to do this using the classes of the Microsoft.PowerBI.Api NuGet Package but I cannot find what method to use. I did find a class named GatewayDatasource which looks like the json payload for a patch. But that is as far as I've come... 

 

Thanks

 

Gunter

  • Hi!

     

    use:

    m_client.Gateways.UpdateDatasource(<gatewayId>, <datasourceId>, <request>);

     

    where request is

    - request {Microsoft.PowerBI.Api.V2.Models.UpdateDatasourceRequest} Microsoft.PowerBI.Api.V2.Models.UpdateDatasourceRequest
    - CredentialDetails {Microsoft.PowerBI.Api.V2.Models.CredentialDetails} Microsoft.PowerBI.Api.V2.Models.CredentialDetails
    CredentialType "Basic" string
    Credentials "{\"credentialData\":[{\"name\":\"username\",\"value\":\"<username>\"},{\"name\":\"password\",\"value\":\"<password>"}]}" string
    EncryptedConnection "Encrypted" string
    EncryptionAlgorithm "None" string
    PrivacyLevel "None" string

     

    Eli.

4 Replies

  • eligr's avatar
    eligr
    Icon for Power BI Team rankPower BI Team

    Hi!

     

    use:

    m_client.Gateways.UpdateDatasource(<gatewayId>, <datasourceId>, <request>);

     

    where request is

    - request {Microsoft.PowerBI.Api.V2.Models.UpdateDatasourceRequest} Microsoft.PowerBI.Api.V2.Models.UpdateDatasourceRequest
    - CredentialDetails {Microsoft.PowerBI.Api.V2.Models.CredentialDetails} Microsoft.PowerBI.Api.V2.Models.CredentialDetails
    CredentialType "Basic" string
    Credentials "{\"credentialData\":[{\"name\":\"username\",\"value\":\"<username>\"},{\"name\":\"password\",\"value\":\"<password>"}]}" string
    EncryptedConnection "Encrypted" string
    EncryptionAlgorithm "None" string
    PrivacyLevel "None" string

     

    Eli.

    • jimmcslim's avatar
      jimmcslim
      Icon for Helper III rankHelper III

      Can you please elaborate on what values should be provided for gatewayId and datasourceId? v-ljerr-msft responded with the same block of code in my request (https://community.powerbi.com/t5/Developer/How-to-update-credentials-of-a-connection-with-V2-API-in-package/m-p/344260#M10205) but I think you guys are only providing half the answer here.

       

      My datasource is Azure SQL (*NOT* Analysis Services), but I'd also like this to work for Azure Table Storage.

       

      I can use the Microsoft.PowerBI.Api.V2 classes to:

       

      1. Enumerate my groups to find the group id I want by name via IPowerBIClient.Groups.GetGroupsAsync
      2. Enumerate the reports in the group to find the id of the report by name via IPowerBIClient.Reports.GetReportsInGroupAsync
      3. Each of these reports has a DataSetId, ok great, maybe that provides the gateway/datasourceId.
      4. I get the Dataset via IPowerBIClient.Datasets.GetDatasetByIdInGroupAsync

       

      The Dataset object has a Datasources property. However this is NULL. So I find myself at a dead end!

       

      A few other frustrations...

       

      • Calling IPowerBIClient.Datasets.GetDatasetsAsync returns an empty list. What the? Surely this should at least return the dataset that is returned by #4 above, plus any other datasets in any other reports in any other groups, i.e. all datasets accessible to the authenticated user.
      • Your samples keep talking about a gatewayId, ok then lets call IPowerBIClient.Gateways.GetGatewaysAsync... and I get nothing back (which makes sense, since I don't have any on-prem gateways running/configured, but your samples keep referring to gatewayId - which makes me think we are talking at cross-purposes re datasets using on-prem gateways vs cloud datasources).
    • jimmcslim's avatar
      jimmcslim
      Icon for Helper III rankHelper III

      What should be the values for gatewayId and datasourceId?

       

      If you are providing the credentials for an Azure SQL or Azure Table Storage datasource, these things do not require an on-premise gateway to access.

       

      The V2 API (at least via Nuget) does not return any datasource objects when you request a dataset - therefore no datasource id can be provided.

       

      Gateways.GetGateways (or whatever it is called) returns nothing... as I have no on-prem gateways!

      • eligr's avatar
        eligr
        Icon for Power BI Team rankPower BI Team

        Hi.

        For cloud data sources, there is a default gateway created by Power BI.

        To find out the gateway and datasource ids, use this call: GetBoundGatewayDatasources (https://msdn.microsoft.com/en-us/library/mt732874.aspx)

        The SDK equivalent are Datasets.GetGatewayDatasources or Datasets.GetGatewayDatasourcesInGroup

         

        Eli.