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

Earn a 50% discount on the DP-600 certification exam by completing the Fabric 30 Days to Learn It challenge.

Reply
pedrovillanueva
Regular Visitor

Error with connect zoho crm

Login Failed [Dataformat.error] we couldn't parse your query string because it was impropely formatted

 

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

// TODO: add your client id and secret to the embedded files

client_id ="xxxxxxxxxxxx";
client_secret = "xxxxxxxxxxxx";

redirect_uri = "https://accounts.zoho.com/redirect";


windowWidth = 800;

windowHeight = 800;


OAuthBaseUrl = "https://accounts.zoho.com/oauth/v2/auth?";

[DataSource.Kind="ZohoCrm", Publish="ZohoCrm.Publish"]
shared ZohoCrm.Contents = () =>
let

navTable =Web.Contents("https://www.zohoapis.com/crm/v2/xxxx"),
Tracelog=Diagnostics.Trace(TraceLevel.Information,"Zohocrm",()=>navTable,true)
in

navTable;


// Data Source Kind description
ZohoCrm = [
Authentication = [
// enable both OAuth and Key based auth

OAuth = [

StartLogin = StartLogin,

FinishLogin = FinishLogin,

Refresh=Refresh

]

],
Label = Extension.LoadString("DataSourceLabel")
];

// Data Source UI publishing description
ZohoCrm.Publish = [
Beta = true,
Category = "Other",
ButtonText = { Extension.LoadString("ButtonTitle"), Extension.LoadString("ButtonHelp") },
LearnMoreUrl = "https://powerbi.microsoft.com/",
SourceImage = ZohoCrm.Icons,
SourceTypeImage = ZohoCrm.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

];

Label = Extension.LoadString("DataSourceLabel");
// 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(OAuthBaseUrl & "/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");

ZohoCrm.Icons = [
Icon16 = { Extension.Contents("ZohoCrm16.png"), Extension.Contents("ZohoCrm20.png"), Extension.Contents("ZohoCrm24.png"), Extension.Contents("ZohoCrm32.png") },
Icon32 = { Extension.Contents("ZohoCrm32.png"), Extension.Contents("ZohoCrm40.png"), Extension.Contents("ZohoCrm48.png"), Extension.Contents("ZohoCrm64.png") }
];

1 REPLY 1
v-kelly-msft
Community Support
Community Support

Hi  @pedrovillanueva ,

 

Extension.Contents function is usually used with .txt  format,check the blog below:

https://blog.crossjoin.co.uk/2017/11/15/the-extension-contents-m-function/

 

Best Regards,
Kelly

Did I answer your question? Mark my post as a solution!

Helpful resources

Announcements
RTI Forums Carousel3

New forum boards available in Real-Time Intelligence.

Ask questions in Eventhouse and KQL, Eventstream, and Reflex.

MayPowerBICarousel

Power BI Monthly Update - May 2024

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

LearnSurvey

Fabric certifications survey

Certification feedback opportunity for the community.

Top Solution Authors
Top Kudoed Authors