Zoho CRM API to Oower BI custom connector
Hello everyone,
I've been struggling with this for a few days now , I hope I can get some help here.
I want to create a custom connector for Power BI that imports data from Zoho CRM.
Te OAuth 2.0 part of the code is working properly. The connector connects successfully to Zoho CRM but then it prompts this error: [DataFormatError] We couldn't parse your query string as it was improperly formatted
The code I'm using:
- // This file contains your Data Connector logic
- section Zoho_Connector___V1.1;
- // TODO: add your client id and secret to the embedded files
- client_id = "XXXXXX";
- client_secret = "XXXXXX";
- redirect_uri = "https://oauth.powerbi.com/views/oauthredirect.html";
- windowWidth = 800;
- windowHeight = 800;
- //Oauth base url for
- OAuthBaseUrl = "https://accounts.zoho.eu/oauth/v2/auth?";
- [DataSource.Kind="Zoho_Connector___V1.1", Publish="Zoho_Connector___V1.1.Publish"]
- shared Zoho_Connector___V1.1.Contents = () =>
- let
- navTable = Web.Contents("https://www.zohoapis.eu/crm/v2/Leads")
- in
- navTable;
- // Data Source Kind description
- Zoho_Connector___V1.1 = [
- Authentication = [
- // enable both OAuth and Key based auth
- OAuth = [
- StartLogin = StartLogin,
- FinishLogin = FinishLogin,
- Refresh=Refresh
- ]
- ],
- Label = Extension.LoadString("DataSourceLabel")
- ];
- // Data Source UI publishing description
- Zoho_Connector___V1.1.Publish = [
- Beta = true,
- Category = "Other",
- ButtonText = { Extension.LoadString("ButtonTitle"), Extension.LoadString("ButtonHelp") },
- LearnMoreUrl = "https://powerbi.microsoft.com/",
- SourceImage = Zoho_Connector___V1.1.Icons,
- SourceTypeImage = Zoho_Connector___V1.1.Icons
- ];
- // OAuth2 flow definition
- //
- // Start Login thorugh OAUTH
- StartLogin = (resourceUrl, state, display) =>
- let
- AuthorizeUrl = OAuthBaseUrl & Uri.BuildQueryString([
- scope = "ZohoCRM.modules.all",
- client_id = client_id,
- redirect_uri = redirect_uri,
- response_type = "code",
- state = state,
- access_type = "online"])
- in
- [
- LoginUri = AuthorizeUrl,
- CallbackUri = redirect_uri,
- WindowHeight = windowHeight,
- WindowWidth = windowWidth,
- Context = null
- ];
- // Finish Login through OAUTH
- FinishLogin = (context, callbackUri, state) =>
- let
- Parts = Uri.Parts(callbackUri)[Query]
- in
- TokenMethod(Parts[code], "authorization_code");
- TokenMethod = (code, grant_type) =>
- let
- Response = Web.Contents("https://accounts.zoho.eu/oauth/v2/token", [
- Content = Text.ToBinary(Uri.BuildQueryString([
- grant_type = "authorization_code",
- client_id = client_id,
- client_secret = client_secret,
- redirect_uri = redirect_uri,
- code = code
- ]
- )),
- Headers=[#"Content-type" = "application/x-www-form-urlencoded",#"Accept" = "application/json"]]),
- Parts = Json.Document(Response)
- in
- Parts;
- Refresh = (resourceUrl, refresh_token) => TokenMethod(refresh_token, "refresh_token");
- Zoho_Connector___V1.1.Icons = [
- Icon16 = { Extension.Contents("Zoho_Connector___V1.116.png"), Extension.Contents("Zoho_Connector___V1.120.png"), Extension.Contents("Zoho_Connector___V1.124.png"), Extension.Contents("Zoho_Connector___V1.132.png") },
- Icon32 = { Extension.Contents("Zoho_Connector___V1.132.png"), Extension.Contents("Zoho_Connector___V1.140.png"), Extension.Contents("Zoho_Connector___V1.148.png"), Extension.Contents("Zoho_Connector___V1.164.png") }
- ];
Any ideas about what I'm doing wrong?
Thanks