Power BI reports in Delphi - delphi

I am new to Power BI and would like to be able to display pre-created Power BI reports in Delphi. I searched on the internet using Google but found little information for Delphi developers, just general information on Power BI. I am using Delphi 10.2.3.

To embed a report, you must authenticate yourself and acquire an access token. It will be used in further calls to Power BI REST API.
Normally, this access token is acquired using ADAL, but I have doubts you will find one for Delphi. You may take a look at this question to see how you can do this using raw web requests in Delphi: How to connect a Delphi desktop app to a third-party Dynamics 365 app using OAuth 2.0?
When you acquired an access token, get the report's embedUrl using Get Report In Group API.
Embedding of Power BI reports is basically loading them in a in a web page. This demo shows you how to embed the report in a WPF application. You can do the same in Delphi. Basically you need to copy powerbi.js, ReportLoader.js and ReportLoader.html files from the demo to your project. The first file is the Power BI client. The second is JavaScript code, which you need to run to load the report in the third one. From your code you need to navigate to ReportLoader.html file and run LoadEmbeddedObject JavaScript function from ReportLoader.js, passing to it the embedUrl of your report, your access token and the Id of the report to be embedded. I can't tell you how to call this function in Delphi, but the WPF demo code may give you some ideas.
Good luck!

Related

Power BI report integration from local server

how to integrate PowerBI reports from local system and use them in the asp.net MVC? i'm trying to integrate powerBI report in my project which is published on powerBI report server in my system (not online powerBI). while googling i'm not able to find what i needed, most of them recommends to publish the report to cloud and embed them.
To embed a report from Power BI Report Server, add an iframe in your app, with source the URL of the report, and added the following query string parameter ?rs:embed=true. For example:
https://myserver/reports/powerbi/Sales?rs:embed=true
If your app will be used inside your network, this is enough. But if you want to use it by users over internet (users, which are not in your network), then you will need to expose the Power BI Report Server's reports portal to the world too.
For more information see:
Embed a Power BI Report Server report using an iFrame in SharePoint Server
Embedding Power BI Reports with Power BI Report Server
Planning for Extranet or Internet Deployment (PBIRS is in fact SSRS).

Acumatica report authoring and single sign-on

Our users authenticate to Acumatica using OAuth2-based SSO with Google as the identity provider. They do not have passwords to access the system (we generate very long, strong passwords which are discarded as soon as SSO is set up).
I don't want to go into all the reasons why SSO is important to us. It's critical, and I'll leave it at that. SSO was a policy and business requirement for us to select Acumatica.
The Report Designer doesn't seem to support OAuth2.
Is there a way we can give users the ability to download the RPX files via the browser, edit them outside the browser, and then upload the changes via the browser, using only SSO credentials?
Also, where can I get the source code to Report Designer? I'd love to see if I can add OAuth2 support myself.
There are 2 types of report in Acumatica:
Standard Reports
Analytical Reports
The links above describe how you can customize these reports using Acumatica Cloud ERP.
You can notice that standard reports have the following limited customization possibility using Cloud ERP:
You can adjust the report settings to meet your specific informational
needs. For example, you can specify sorting and filtering options and
select the data by using report-specific settings—such as financial
period, ledger, and account. You can configure additional processing
settings for each report.
Analytical reports have more customization possibilities through Cloud ERP:
The Analytical Report Manager is a web-based tool for creating and
modifying analytical reports. Users can design and run custom
analytical reports using advanced data selection criteria, data
calculation rules, and customizable report layout design features. By
using the Analytical Report Manager, you can: Create the layout and
structure of reports based on your business requirements. Define data
selection criteria for the report with a high level of granularity.
For example, data sources can include a range of accounts,
subaccounts, and financial periods. Use advanced formulas to calculate
values based on the information extracted from the data source. Create
consolidated reports based on the data from multiple data sources or
other analytical reports. Localize data used by a report if
multilingual support of user input is enabled.
Acumatica marketing material shouldn't refer to the standard report editor (Windows Form Desktop Application) as part of the Cloud ERP product. The reason for this is quite simple, a Windows Desktop application is not a cloud product, it can't be accessed with a browser and is not supported on unix/apple OS.
Analytical reports designer support SSO OAuth since the designer is running on the Cloud ERP product.
Standard reports designer doesn't support OAuth. You could fill a feature request for it though. Our marketing material should not refer to standard report customization as part of the Cloud ERP product because the designer requirements are different.
We strive to make every feature available on Cloud ERP platform. At the moment these are the features not available on Cloud ERP to my knowledge:
Standard Report Editor
DeviceHub, this is a Windows program that acts like a device
spooler so you can access windows desktop hardware like printer
and scales from the Cloud ERP.
Login page customization, this can't be achieved through
Customization Project Editor, you have to change files manually on
the server.
From now on, I'll focus on the Standard Report Designer, the Windows Desktop Application.
The designer uses the Web Service API to communicate with Acumatica Database.
Besides loading and saving RPX files the report designer also uses the Web Service API for features in 'File->Build Schema' dialog like 'Load Schema'. If your user are not using the 'Build Schema' features then having only the RPX file locally should be enough to allow them to modify the report using the designer.
Code for loading and saving RPX files is located in PX.Reports.Design.ReportUtils class which is part of PX.Reports.Design.dll assembly. It's using the SOAP API which to my knowledge is not the preferred API to use OAuth, the REST Contract API is recommended for OAuth enabled Web Services. Refactoring the PX.Reports.Design.dll assembly to use REST Contract API instead of SOAP API isn't trivial.
That said I believe it's possible to load and save RPX files using the Rest API and you could write a wrapper for the report designer to handle that task as long as you forgo 'Build Schema' feature. I'll touch on that at the end of my answer.
You can find the documentation for using OAuth with Rest API here
There are two ways you can use Acumatica Web Service, attended or unattended.
Attended use requires a user to enter his credentials in some form of UI before using the web service. The report designer uses this form of authentication.
The alternative for unattended use is to configure and save the authentication credentials before using the web service. That way an automated program can use web service API without requiring a user sitting in front of the computer.
Unattended use typically doesn't involve OAuth because you can't have a user dedicated to the task of authenticating. For example, if you integrate Acumatica with an ecommerce provider, requiring him to use OAuth authorization to push the orders to Acumatica is problematic because that process usually doesn't involve a UI where a user sitting at the computer provide authorization.
You could technically create a OAuth access token that never (rarely) expires for this task but it circumvents the purpose of OAuth which is having temporary access tokens to mitigate man in the middle attacks. Certifications that mandates use of OAuth typically forbid use of tokens that never expire. That's why requesting OAuth for automated process can raise eyebrows and lead programmers to question your security policies.
Now let's get to possible solutions for your problem. You'll have to assess whether your security policies allows use of unattended web service without OAuth authorization. If that's the case then your job will be much easier. If not then you'll likely run into similar problems later on if dealing with third party web service integration for Acumatica is required.
In order to write a wrapper over the report designer you'll have to write a windows desktop application and have the '.RPS' file type associated with your wrapper instead of being associated with Acumatica report designer.
When a user clicks the EDIT REPORT button on the website, a '.RPS' text file is generated in memory on the server and the user browser is redirected to that file in order to download it locally. When the user clicks on the RPS file, windows launches the associated program (Acumatica report designer) and passes the RPS file path by command line parameter. The report designer then presents the authorization dialog where user can enter his credentials and the report RPX file is downloaded by the Web Service API.
Example of the content of an RPS file:
ServiceUrl|http://localhost/AcumaticaInstance/
ReportName|gl633000.rpx
User|admin
The idea is to have your wrapper parse this RPS file, download the associated RPX file using the Web Service API that comply with your security policy and then launch Acumatica report designer for this RPX file using command line parameter:
"c:\...\ReportDesigner.exe" "c:\...'gl633000.rpx"
When you launch the report designer you want to halt your main thread until the user closes the report designer. Framework methods that do this are typically named 'wait for exit'. Before closing the report designer the user would save the RPX file. After the designer is closed your main thread will resume and you can then re-upload that RPX file to Acumatica database using Web Service API.
The easy way would be to create a report designer user to use Web Service API in unattended mode. You could store those credentials locally (in encrypted form) wherever you see fit and never expose them in UI. When making Web Service call you decrypt those credentials on the fly. In such a scenario the asset to protect is the decryption key.
If use of attended web service is required for OAuth support you will need to implement a UI to get those credentials. If you have to use Google login page for entering the credentials you would have to include an embedded browser in your wrapper for that purpose.
As a remainder, note that this solution will enable you to modify the report definition in the RPX file but will not enable you to use report designer features that require web service API like 'Build Schema'.

How to interact with ArcGIS data from ASP.NET MVC

I need to develop an ASP.NET MVC website that takes information from ArcGIS to show maps and other data. ArcGIS is currently running on a local PC so ArcGIS data would need to be exported to some format and uploaded to the server where the website runs so the ASP.NET MVC application takes it and do its job. After some research I found that there are (at least) 3 different ways to interact with ArcGIS: Javascript API, SDK for .NET and ArcObjects.
What would be a solution in order to take the ArcGIS exported data and work with it in ASP.NET? Is this a feasible or possible approach?
Every ooption of the listed by you, has an specific target:
ArcGIS Javascript API: it is designed to be used in webbrowsers, it shows geographic information using javascript, mainly it is intended to connect to ArcGIS Servers, as well as OGC Servers.
ArcGIS Runtime SDK for .NET: if you plan to develop a desktop application with WPF, this is your tool. Last versions of this SDK is also intended for Windows Presentation Foundation (WPF) apps, Universal Windows Platform (UWP) apps, native mobile apps in C# for Android, iOS
ArcObjects:The classic one, this SDK allows you to create WinForms applications with geographic information, also allows to create console applications for automate operations that involve geographic information or maps, it runs over .NET Framework.
ArcGIS Server is a proper way to achieve what you are trying to do. I assume you don't have and don't intend to have one.
You can go with a poor man's GIS server implementation as you described above: put files on server, then write services which would parse those files and provide geometries in a format that your client side can understand. There are various libs for working with esri shapefiles so you could find what suits you.
If you plan to use ArcGIS Runtime to implement your own server I would advise to check licensing because usually it won't allow you as it is licensed per client deployment.
I would advise you to check what ArcGIS Online can offer. Upload you data to their cloud and consume it with your Javascript API. Look at the pricing and maybe free plan will suit your needs. https://developers.arcgis.com/pricing/

Embedding Power Bi into iOS application

Has anyone managed to embed power bi charts directly into an iOS application. For example to call a chart and embed it into a view controller? Is this even possible?
https://github.com/Microsoft/PowerBI-JavaScript/wiki/Embed-For-Mobile
You can embed Power BI Embedded artifacts (Report, Dashboard, Tile, Q&A) in any webview based environment, including iOS Webview.
You can either use a pre-set mobile layout and load it via the JS SDK in the config, or use custom layout: https://github.com/Microsoft/PowerBI-JavaScript/wiki/Custom-Layout
For a single chart\visual you can use: https://github.com/Microsoft/PowerBI-JavaScript/wiki/Embed-Single-Visual
Power BI reports can be embedded into a web page, which you can display from within your app.
From Power BI, click publish to web and then request an embed code.
Don't forget, if you don't like this approach you can always request a new feature.
EDIT
The Power BI developer site includes instructions for integrating a dashboard into your app. This method uses the Power BI Rest API to auth via Azure Active Directory and OAuth 2.0.
This approach has some limitations:
The end users who access the embedded dashboards must have Power BI accounts and the dashboards should be shared with them.
Currently Q&A is not supported in embedded dashboards.
As a temporary limitation, when sharing a dashboard with security groups, user have to first access the dashboards in PowerBI.com before they can see it embedded.

Embeding SSRS report viewer in Delphi

Perhaps this question is naive, as I am just starting with ssrs. This is a large Delphi (2009) application that currently uses Crystal (activex) for reports. We are wanting to move to ssrs but would still like to control the report parameters from within our app as we've done with crystal. I've seen the Report Viewer Control for a VS environment and I'd like to do something like that. Any help is appreciated, thanks.
I doubt you can - as far as I know, the ReportViewer control comes in two .NET flavors: one for ASP.NET web applications, and one for Windows Forms .NET apps.
However: you can access all of the reporting server stuff using a simple web browser control, too. SSRS has extensive support for specifying just about anything in the URL, too.
Check out the MSDN docs on Using URL Access from a Windows (Win32) application for a starting point.
Or if you want to take it a step further, the Reporting Services also expose standard web services to do just about anything (including managing SSRS), which you should have no trouble consuming in Delphi as regular SOAP web services.
For that, see the MSDN docs on Using the SOAP API in a Windows Application.

Resources