Business Object report to excel using webservices : DocID and ReportID? - web-services

I'm wondering in this RESTful request to BO : GET http://:6405/biprws/raylight/vx/documents/{documentId}/reports/{reportId}
What are {documentId} and {reportId} ?
On the documentation they say :
Note: {documentId}: The identifier of the Web Intelligence document
retrieved in the document list by: GET
http://:6405/biprws/raylight/vx/documents Note:
{reportId}: The identifier of the Web Intelligence document report
retrieved in the document's reports list by: GET
http://:6405/biprws/raylight/vx/documents/{documen
tId}/reports
But it won't work. Also I don't really see the point of requesting all documents and reports ID while I want to get one.
Question : Is there a way to get document and report IDs from launchPad.
I supposed they're ID and CUID on a document properties but I might be wrong.

There is often confusion about the difference between document and report, in BusinessObjects WebI terminology.
Documents are independent reporting objects, associated with a single .wid file. When you look at a folder in BI launch pad, you are looking at a list of documents. A document will have one or more reports, which are represented by tabs in a document.
So this request:
http://server:6405/biprws/raylight/v1/documents/123456/reports/2
will retrieve the report (tab) with ID #2, from WebI document with ID #123456.
Note that the reportid may or may not be an index. You can't assume that calling .../reports/2 will retrieve the second report tab. You must first call .../documents/x/reports to get a list of available reports and associated IDs.
The documentid can be retrieved from BI launch pad or CMC; simply right-click on a report and hit properties -- the ID and CUID will be there.

Related

I can't read specific tables of Dynamics BC with Power BI

I am having troubles sincronising certain tables of our ERP (Dynamics Business Central) with Power BI. The steps that I am doing are explained below:
Get Data
Search Dynamics 365 Business central
Search for the relevant tables
This is when Power BI doesn´t let me preview the information within the table called 'salesCreditMemoLines' (), contrary to other tables that I can see without troubles ()
I appreciate your help in this issue.
This is expected error. Document lines collections in Business Central API require the respective document ID to be present in the request, otherwise it fails.
This is the piece of code from the API page that throws this error.
IdFilter := GetFilter(SystemId);
DocumentIdFilter := GetFilter("Document Id");
if (IdFilter = '') and (DocumentIdFilter = '') then
Error(IDOrDocumentIdShouldBeSpecifiedForLinesErr);
There are two ways to send the document ID. My examples below are querying sales orders, but the same applies to all document collections.
First is request the lines along with the document header using $expand syntax:
https://api.businesscentral.dynamics.com/v2.0/{{tenantid}}/{{environmentname}}/api/v2.0/companies({companyId})/salesOrders(orderId)$expand=salesOrderLines
Another option is to query the document lines adding the $filter parameter:
https://api.businesscentral.dynamics.com/v2.0/{{tenantid}}/{{environmentname}}/api/v2.0/companies(companyId)/salesOrderLines?$filter=documentId eq salesOrderId
Filters can include ranges, so this way it's possible to request a collection of lines from multiple documents.
https://learn.microsoft.com/en-us/dynamics365/business-central/dev-itpro/webservices/use-filter-expressions-in-odata-uris
Neither of these methods is going to work in Power BI data source selection, though. An alternative way is to use an entity salesDocumentLines under the Web Services (legacy) option. Yes, it shows as legacy, but so far Microsoft has not announced any plans to remove the OData web services.
https://learn.microsoft.com/en-us/dynamics365-release-plan/2021wave1/smb/dynamics365-business-central/enable-power-bi-connector-work-business-central-apis-instead-web-services-only

InternalServerError in Amazon Personalize : We encountered an internal error. Please try again

I am using Amazon Personalize (AWS Service) for making recommendation system. This service is expecting three datasets in the form of CSV from user named as
-> Interactions dataset
-> User dataset
-> Item dataset
I have imported User and Item dataset which is working fine but In the interaction dataset ,when I import it, it is giving me internal server error . I have three columns in my interactions dataset file, USER_ID , ITEM_D and TIMESTAMPS (In unix epoch format)
I don't know that why it is giving me internal server error ?
In most of the cases, if the problem still exists after retrying, then raising the support ticket is the only solution.
Personalize support team should be able to help you, after you provide some details including ARN of Personalize dataset group.
It's common that Personalize is not very helpful with error messages and it's also nothing new that you can find a bug in the service itself. Thankfully the Personalize team usually fixes the issue quickly.
The timestamp column name must be TIMESTAMP and must of type long [1] in your interactions schema and CSV. It's also required. I suspect that since you're using TIMESTAMPS (plural) that Personalize is considering this an interaction metadata field/column and is complaining about a missing TIMESTAMP column.
[1] https://docs.aws.amazon.com/personalize/latest/dg/how-it-works-dataset-schema.html

How to send report directly to the printer?

I am using Apex 18.2. and ORDS as a printing server.
I have a master-detail page for selling items with a form on a table as the master region and an IG as the detail, joined to each other through assigning the PK to the FK IG's column.
There is another page with a report that can be queried through number of page items to get the documents with items sold in the previously mentioned master-detail page.
Whenever a user creates a document and submit the page, I will need to send the data of that document directly to the printer.
I mentioned the report page because I thought redirecting to it and assigning the PK to the corresponding page item could be a suggestion. But I know that I can create a shared component> report query too. But I do not know how could I send the data directly to the printer in either way.
I do not know if the report type - IR, CR or IG would make a difference. That's why I just referred to "report". But I'd need to know how it could be done with all types of reports.
Here is how a real-world scenario would look like,
You enter a supermarket, buy some items, go to the cashier, pay for what you've bought and get a receipt. The receipt is printed when the cashier saves the invoice.
I know this is not how web apps work, but this is the task I am facing.
I can think of branching to the report page after the invoice is saved and setting the PK value to the corresponding page item in the "search criteria" region to get the corresponding data then execute "window.print()". But there will be two problems then. 1- criteria region would be printed too, unless I hide it with a dynamic action or else. 2- The "print dialog box" of the browser will be displayed.
APEX 20.1 added native support for PDF printing of Interactive Grid regions. See this video: https://www.youtube.com/watch?v=e1yIFcEdW_o
If you can't upgrade, or if that support isn't sufficient for your needs, I suggest taking a look at APEX Office Print: https://www.apexofficeprint.com/index.html
APEX Office Print(AOP) can provide you the right solution.
Please try out the solution posted in the below link.
http://dgielis.blogspot.com/2020/01/print-pdf-from-oracle-apex-to-local.html
Few more examples:
How to print to an IP printer:
https://www.apexofficeprint.com/ords/aop_web/r/aop_sample_app_web/5034?session=13740999314649
How to print directly to a zebra printer
https://www.apexofficeprint.com/ords/aop_web/r/aop_sample_app_web/zebra-printer?session=6208952429228
(OR)
https://dgielis.blogspot.com/2020/01/printing-to-local-zebra-printer-from.html
If you are redirected to the Home page,
-> Click on examples in the left side menu.
-> Click on Print(highlighted in yellow).

Fetching $metadata for a specific collection or entity with Odata web services in Microsoft Dynamics NAV 2016

The environment
As part of an integration project, I need a PHP website to be able to both read from and write to Microsoft Dynamics NAV 2016's Odata services.
Microsoft Dynamics NAV 2016 uses the Odata v3 standard.
The context
Now, let's take my customer service as an example.
Fetching a collection of entities
Fetching an overview of my collection of customer entities works fine, using a link with the following format :
https://<Server>:<WebServicePort>/<ServerInstance>/OData/Company(\'<CompanyName>\')/customer
Fetching a single entity
Fetching a single customer entity based on id works fine, using a link with the following format :
https://<Server>:<WebServicePort>/<ServerInstance>/OData/Company(\'<CompanyName>\')/customer(\'<Id>\')
Fetching the global metadata
Getting an overview of the $metadata for all of my services works fine (although it's lacking Json support), using a link with the following format :
https://<Server>:<WebServicePort>/<ServerInstance>/OData/$metadata
Fetching collection-specific metadata
Now, based on both the Odata v3 specs and the value of the odata.metadata property of my customer overview service, I would expect to be able to get an overview of the $metadata of the customer entity, using a link with the following format :
https://<Server>:<WebServicePort>/<ServerInstance>/OData/$metadata#customer
This doesn't work as expected. See sub-section The issue below.
Fetching entity-specific metadata
Similarly, based on both the Odata v3 specs and the value of the odata.metadata property of my dataset when retrieving a single customer, I would expect to be able to get an overview of the $metadata of a single field of the customer entity, using a link with this format :
https://<Server>:<WebServicePort>/<ServerInstance>/OData/$metadata#customer/#<FieldName>
This doesn't work as expected. See sub-section The issue below.
The issue
For some reason, everything following $metadata appears to be ignored. This means that the last three URLs give me the exact same output, which is not what I expected.
The actual question(s)
Is it possible to fetch the metadata of just one collection or entity, as I'm trying in sub-sections Fetching collection-specific metadata and Fetching entity-specific metadata of my The context section hereabove?
If yes, what I doing wrong here? What am I missing?
As #xuzhg suggested in the comments and as is indicated by Github issues like Support Metadata as a service (#181), it appears that the Odata $metadata are not really a dynamic service. Instead, it's just a single XML file.
This explains not only why anything after $metadata is ignored in links of format https://<Server>:<WebServicePort>/<ServerInstance>/OData/$metadata#..., but also why it only supports XML, and not Json (unlike actual Odata services).
Since the specific metadata you want is identified by a fragment appended to the metadata URI, you must fetch the entire $metadata document and then dereference the fragment on the client.
The good news is that the fragment dereferencing is pretty straightforward. A fragment like #customer specifies an EntityType element whose Name attribute has the value customer. Similarly, #customer/#someprop maps to a Property element whose Name attribute is someprop.

Unable to update a Power BI table schema through the API with or without ApiaryIO

I am using Power BI API.
I've got a dataset with some tables and rows.
From Power BI API Console I don't have any issue when retrieving datasets or tables.
However the PUT verb on a table resource to update its schema always returns a 504 - Proxy request timed out
It's the first time I use Apiary IO so it might be its problem and not Power BI update, but that leads me to some questions:
Is there any workaround to test Power BI with, for example, Fiddler? I can type the url and body but I will need an Authorization header with the OAuth2 token if I'm not mistaken. How can I get that? ApiaryIO seems to hide it.
As per Update Schema Documentation the URL with the resource is https://api.powerbi.com/v1.0/myorg/datasets/{myDatasetId}/tables/{myTableName}
and the verb is a PUT. What is then the meaning of the "name": "???" parameter that goes in the JSON body? Is it the table's name or something else? I am assuming it's the table name but it seems redundant as I am already accessing the resource {myTableName} as per the given URL.
And my last related question is how to rename a specific table's column without modifying its data? This is what I'm trying to achieve by updating the schema but I don't understand how does Power BI know what column I am trying to rename.
Thank you!
Sorry that you're having trouble. You can get a token in two ways -the right way is to create an app in AAD (here's how). The wrong way ;) is to open the Power BI.com service, in a browser then open fiddler, then press F5 to reload. You should be able to see the Access Token in various requests. If you register an app, you can plug in your App's information in one of the samples we have https://powerbi.microsoft.com/developers, see client app or web app.
The name you provide in the table is the friendly human readable name that appears in the UI when you're building a report. Without it the system is unusable by humans :).
Let me get back to you on #3.
Calling PUT table will attempt to save upgrade the table without loosing any data (unless you removed columns). If it can't, it will return a conflict error. If you still want to update the table schema, you would have to delete the rows and call PUT table again. There is currently no direct way to rename a column. PUT table would treat it like a delete and add for that column. You would loose the data in that column but not the whole table.