You are on page 1of 2

// This file contains your Data Connector logic

section ZohoDesk;

// Data Source UI publishing description


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

ZohoDesk.Icons = [
Icon16 = { Extension.Contents("ZohoDesk16.png"),
Extension.Contents("ZohoDesk20.png"), Extension.Contents("ZohoDesk24.png"),
Extension.Contents("ZohoDesk32.png") },
Icon32 = { Extension.Contents("ZohoDesk32.png"),
Extension.Contents("ZohoDesk40.png"), Extension.Contents("ZohoDesk48.png"),
Extension.Contents("ZohoDesk64.png") }
];

client_application =
Expression.Evaluate(Text.FromBinary(Extension.Contents("client_application")));
windowWidth = 1200;
windowHeight = 1000;

TokenMethod = (code, grant_type) =>


let
Response = Web.Contents("https://accounts.zoho.com/oauth/v2/token", [
Content = Text.ToBinary(Uri.BuildQueryString([
client_id = client_application[ClientId],
client_secret = client_application[ClientSecret],
grant_type = grant_type,
code = code,
redirect_uri = client_application[CallbackUrl]
]))
]),
Parts = Json.Document(Response)
in
Parts;

StartLogin = (resourceUrl, state, display) =>


let
AuthorizeUrl = "https://accounts.zoho.com/oauth/v2/auth?" & Uri.BuildQueryString([
client_id = client_application[ClientId],
response_type = "code",
state = state,
scope = "Desk.tickets.READ",
redirect_uri = client_application[CallbackUrl]])
in
[
LoginUri = AuthorizeUrl,
CallbackUri = client_application[CallbackUrl],
WindowHeight = windowHeight,
WindowWidth = windowWidth,
Context = null
];

FinishLogin = (Context, CallbackUri, state) =>


let
Parts = Uri.Parts(CallbackUri)[Query]
in
TokenMethod(Parts[code], "authorization_code");

GetDirectory = () =>
let
source = Web.Contents("https://desk.zoho.com/api/v1/tickets?
include=contacts,assignee,departments,team,isRead", [
Headers=[#"Content-Type"="application/json"]
]),
json = Json.Document(source),
cursor = json[cursor]?,
table = Table.FromList(json[entries], Splitter.SplitByNothing(), null, null,
ExtraValues.Error)

in
table;

Refresh = (resourceUrl, refresh_token) => TokenMethod(refresh_token,


"refresh_token");

[DataSource.Kind="ZohoDesk", Publish="ZohoDesk.Publish"]
shared ZohoDesk.Contents = () => GetDirectory();

ZohoDesk = [
Authentication=[OAuth=[StartLogin=StartLogin, FinishLogin=FinishLogin,
Refresh=Refresh]]
];

You might also like