zoukankan      html  css  js  c++  java
  • Refresh Power BI Dataset programmatically from Dynamics 365 CRM/PowerApps

     

     
     

    Introduction

    Many of you are aware of manual refresh and schedule refresh feature of Power BI. Schedule refresh have refresh limit set based on the type of Power BI license. Users can add power BI report to CRM via CRM dashboard and Power BI dashboard. Also user’s data gets updated frequently and refreshing Power BI dataset each time from Power BI service would be time consuming as every time user needs to go to the Power BI Service for refreshing Power BI report.

    Apart from that, user also needs to manually configure schedule refresh for the dataset and specify the refresh timings and time zone in the Power BI Service. So having a button on CRM Dashboard page to automatically refresh the dataset in Power BI Service is more convenient for the user as there will be no further need to switch to the Power BI service for refreshing dataset.

    In this blog we will see how to refresh Power BI report from Dynamics 365 CRM.
    For this, we will create a global action in which we will call a custom assembly to make refresh request of Power BI. Now for making call to refresh request of Power BI we have the following two steps:

    1. Getting access token from Power BI
    In order to get access token from Power BI Service we need to register a native application in Azure.
    Please check the below link for creating native application in Azure AAD.

    https://docs.microsoft.com/en-us/azure/active-directory/manage-apps/application-proxy-configure-native-client-application

    After registering an application, assign required Power BI Service delegated permission to native application.
    Copy the client Id from the native application as shown in the below screenshot:

    Refresh Power BI Dataset programmatically

    This Client Id will be used for getting access token from Power BI Service.

    Use the below code to get access token from Power BI Service.

    PowerBIAccessToken token = null;
    string oauthurl = string.Format("https://login.microsoftonline.com/common/oauth2/token");
    
    string reqBody = string.Format("client_id={0}&grant_type={1}&resource={2}&username={3}&password={4}",
    
    Uri.EscapeDataString(clientId), Uri.EscapeDataString(grantType),
    
    Uri.EscapeDataString(resource), Uri.EscapeDataString(userName), Uri.EscapeDataString(password));
    
    tracingService.Trace("Getting Access Token");
    
    HttpClient client = new HttpClient();
    
    HttpContent content = new StringContent(reqBody);
    
    content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/x-www-form-urlencoded");
    
    using (HttpResponseMessage response = await client.PostAsync(oauthurl, content))
    
    {
    
    if (response.IsSuccessStatusCode)
    
    {
    
    DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(PowerBIAccessToken));
    
    Stream json = await response.Content.ReadAsStreamAsync();
    
    //Gets Access Token
    
    token = (PowerBIAccessToken)serializer.ReadObject(json);
    
    }
    
    }
    
    

    By using the above code we will get access token which will be used while making refresh request in Power BI Service.

    2. Refresh Power BI Dataset

    For making Power BI refresh request, we need dataset Id which need to be refreshed. We can get dataset id from Power BI service.

    Now we will use this dataset id to refresh Power BI dataset. Below is the sample code for the same.

     HttpClient refreshClient = new HttpClient();
                        refreshClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", powerBIToken.access_token);
                        HttpContent content = new StringContent("{'notifyOption':''}", Encoding.UTF8, "application/json");
                        HttpResponseMessage result = refreshClient.PostAsync("https://api.powerbi.com/v1.0/myorg/datasets/datasetId/refreshes", content).Result;
                        {
                            if (result.IsSuccessStatusCode)
                            {
                                tracingService.Trace("DataSet Refresh Request Submitted Successfully.");
                            }
    
                        }

    Now we are using datasets under ‘My Workspace’ but you can also refresh Power BI dataset from other workspace using this request.

    First, we need to call this assembly in the global action.

    Next we need a JavaScript code to call the Action (global). Given below is the sample code for the same:

    let request: any = function ()
    
    {
    
    this.getMetadata = function () {
    
    return {
    
    boundParameter: null,
    
    parameterTypes: {
    
    },
    
    operationType: 0, // This is an action. Used '0'.
    
    operationName: "new_RefreshPowerBIDataset"
    
    };
    
    };
    
    };
    
     
    
    var tempRequest = new request();
    
    //Execute global action.
    
    Xrm.WebApi.online.execute(tempRequest);

    Now we will add new ribbon button ‘Refresh Power BI’ on CRM home page as shown below:

    Refresh Power BI Dataset programmatically

    We will call the JavaScript written on button click event to refresh Power BI dataset. So now when you click on the button, one confirmation Dialog will appear asking confirmation to refresh Power BI Dataset. Given below is the screenshot of the same:

    Refresh Power BI Dataset programmatically

    After you click on ‘Ok’, Power BI Dataset will start refreshing and you can see the same in the Power BI Service. Once refresh is completed, Refresh Data will also get changed in the Power BI Service.

    Refresh Power BI Dataset programmatically

    Refresh Power BI Dataset programmatically

    As seen in the above Screenshot, last refresh date for dataset gets updated in the Power BI Service.

    Power BI Refresh request will only trigger if you have set Date Source Credentials for the Power BI Service.

    Note: For Power BI Free license, Daily refresh limit is set to 8 refreshes per day. So once it reaches the maximum refresh limit, it will not refresh the dataset further.

    Conclusion

    In this way, you can easily refresh Power BI Dataset programmatically from Dynamics 365 CRM.

  • 相关阅读:
    Python 高级编程系列__03:python 中常见的内置类型
    Python 高级编程系列__02:type、object、class 的关系
    Python 高级编程系列__01:一切皆对象
    Mac 修改默认python的版本
    swap指令实现互斥
    什么是进程同步?wait( )是如何实现进程同步的?
    可执行文件加载时进行了哪些处理?
    C++不允许使用不完整的类型说明
    error LNK2019: 无法解析的外部符号
    抽屉原理——放苹果
  • 原文地址:https://www.cnblogs.com/lingdanglfw/p/15045484.html
Copyright © 2011-2022 走看看