Skip to content

Commit 40a9d8e

Browse files
committed
Merged PR 31485: Return error for non supported APIs if RDL embed
Return error for non supported APIs if RDL embed
1 parent 879ee7c commit 40a9d8e

File tree

5 files changed

+90
-1
lines changed

5 files changed

+90
-1
lines changed

src/bookmarksManager.ts

+21
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import * as models from 'powerbi-models';
44
import * as wpmp from 'window-post-message-proxy';
55
import * as hpm from 'http-post-message';
66
import * as utils from './util';
7+
import * as errors from './errors';
78
import { IPageNode, Page } from './page';
89
import { Defaults } from './defaults';
910
import { IReportLoadConfiguration } from 'powerbi-models';
@@ -49,6 +50,10 @@ export class BookmarksManager implements IBookmarksManager {
4950
* @returns {Promise<models.IReportBookmark[]>}
5051
*/
5152
getBookmarks(): Promise<models.IReportBookmark[]> {
53+
if (utils.isRDLEmbed(this.config.embedUrl)) {
54+
return Promise.reject(errors.APINotSupportedForRDLError);
55+
}
56+
5257
return this.service.hpm.get<models.IReportBookmark[]>(`/report/bookmarks`, { uid: this.config.uniqueId }, this.iframe.contentWindow)
5358
.then(response => response.body,
5459
response => {
@@ -66,6 +71,10 @@ export class BookmarksManager implements IBookmarksManager {
6671
* @returns {Promise<void>}
6772
*/
6873
apply(bookmarkName: string): Promise<void> {
74+
if (utils.isRDLEmbed(this.config.embedUrl)) {
75+
return Promise.reject(errors.APINotSupportedForRDLError);
76+
}
77+
6978
var request: models.IApplyBookmarkByNameRequest = {
7079
name: bookmarkName
7180
};
@@ -87,6 +96,10 @@ export class BookmarksManager implements IBookmarksManager {
8796
* @returns {Promise<void>}
8897
*/
8998
play(playMode: models.BookmarksPlayMode): Promise<void> {
99+
if (utils.isRDLEmbed(this.config.embedUrl)) {
100+
return Promise.reject(errors.APINotSupportedForRDLError);
101+
}
102+
90103
var playBookmarkRequest: models.IPlayBookmarkRequest = {
91104
playMode: playMode
92105
};
@@ -107,6 +120,10 @@ export class BookmarksManager implements IBookmarksManager {
107120
* @returns {Promise<models.IReportBookmark>}
108121
*/
109122
capture(): Promise<models.IReportBookmark> {
123+
if (utils.isRDLEmbed(this.config.embedUrl)) {
124+
return Promise.reject(errors.APINotSupportedForRDLError);
125+
}
126+
110127
return this.service.hpm.post<models.IReportBookmark>(`/report/bookmarks/capture`, null, { uid: this.config.uniqueId }, this.iframe.contentWindow)
111128
.then(response => response.body,
112129
response => {
@@ -124,6 +141,10 @@ export class BookmarksManager implements IBookmarksManager {
124141
* @returns {Promise<void>}
125142
*/
126143
applyState(state: string): Promise<void> {
144+
if (utils.isRDLEmbed(this.config.embedUrl)) {
145+
return Promise.reject(errors.APINotSupportedForRDLError);
146+
}
147+
127148
var request: models.IApplyBookmarkStateRequest = {
128149
state: state
129150
};

src/errors.ts

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
2+
export let APINotSupportedForRDLError: string = "This API is currently not supported for RDL reports";
3+

src/page.ts

+10
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ import { IFilterable } from './ifilterable';
22
import { IReportNode } from './report';
33
import { VisualDescriptor } from './visualDescriptor';
44
import * as models from 'powerbi-models';
5+
import * as utils from './util';
6+
import * as errors from './errors';
57

68
/**
79
* A Page node within a report hierarchy
@@ -172,6 +174,10 @@ export class Page implements IPageNode, IFilterable {
172174
* @returns {Promise<VisualDescriptor[]>}
173175
*/
174176
getVisuals(): Promise<VisualDescriptor[]> {
177+
if (utils.isRDLEmbed(this.report.config.embedUrl)) {
178+
return Promise.reject(errors.APINotSupportedForRDLError);
179+
}
180+
175181
return this.report.service.hpm.get<models.IVisual[]>(`/report/pages/${this.name}/visuals`, { uid: this.report.config.uniqueId }, this.report.iframe.contentWindow)
176182
.then(response => {
177183
return response.body
@@ -194,6 +200,10 @@ export class Page implements IPageNode, IFilterable {
194200
* @returns {(Promise<boolean>)}
195201
*/
196202
hasLayout(layoutType): Promise<boolean> {
203+
if (utils.isRDLEmbed(this.report.config.embedUrl)) {
204+
return Promise.reject(errors.APINotSupportedForRDLError);
205+
}
206+
197207
let layoutTypeEnum = models.LayoutType[layoutType];
198208
return this.report.service.hpm.get<boolean>(`/report/pages/${this.name}/layoutTypes/${layoutTypeEnum}`, { uid: this.report.config.uniqueId }, this.report.iframe.contentWindow)
199209
.then(response => response.body,

src/report.ts

+43-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import * as models from 'powerbi-models';
44
import * as wpmp from 'window-post-message-proxy';
55
import * as hpm from 'http-post-message';
66
import * as utils from './util';
7+
import * as errors from './errors';
78
import { IFilterable } from './ifilterable';
89
import { IPageNode, Page } from './page';
910
import { Defaults } from './defaults';
@@ -38,7 +39,7 @@ export class Report extends embed.Embed implements IReportNode, IFilterable {
3839
static navContentPaneEnabledAttribute = 'powerbi-settings-nav-content-pane-enabled';
3940
static typeAttribute = 'powerbi-type';
4041
static type = "Report";
41-
42+
4243
public bookmarksManager: BookmarksManager;
4344

4445
/**
@@ -129,6 +130,10 @@ export class Report extends embed.Embed implements IReportNode, IFilterable {
129130
* @returns {Promise<models.IFilter[]>}
130131
*/
131132
getFilters(): Promise<models.IFilter[]> {
133+
if (utils.isRDLEmbed(this.config.embedUrl)) {
134+
return Promise.reject(errors.APINotSupportedForRDLError);
135+
}
136+
132137
return this.service.hpm.get<models.IFilter[]>(`/report/filters`, { uid: this.config.uniqueId }, this.iframe.contentWindow)
133138
.then(response => response.body,
134139
response => {
@@ -165,6 +170,10 @@ export class Report extends embed.Embed implements IReportNode, IFilterable {
165170
* @returns {Promise<Page[]>}
166171
*/
167172
getPages(): Promise<Page[]> {
173+
if (utils.isRDLEmbed(this.config.embedUrl)) {
174+
return Promise.reject(errors.APINotSupportedForRDLError);
175+
}
176+
168177
return this.service.hpm.get<models.IPage[]>('/report/pages', { uid: this.config.uniqueId }, this.iframe.contentWindow)
169178
.then(response => {
170179
return response.body
@@ -203,6 +212,10 @@ export class Report extends embed.Embed implements IReportNode, IFilterable {
203212
* Prints the active page of the report by invoking `window.print()` on the embed iframe component.
204213
*/
205214
print(): Promise<void> {
215+
if (utils.isRDLEmbed(this.config.embedUrl)) {
216+
return Promise.reject(errors.APINotSupportedForRDLError);
217+
}
218+
206219
return this.service.hpm.post<models.IError[]>('/report/print', null, { uid: this.config.uniqueId }, this.iframe.contentWindow)
207220
.then(response => {
208221
return response.body;
@@ -222,6 +235,10 @@ export class Report extends embed.Embed implements IReportNode, IFilterable {
222235
* @returns {Promise<void>}
223236
*/
224237
removeFilters(): Promise<void> {
238+
if (utils.isRDLEmbed(this.config.embedUrl)) {
239+
return Promise.reject(errors.APINotSupportedForRDLError);
240+
}
241+
225242
return this.setFilters([]);
226243
}
227244

@@ -237,6 +254,10 @@ export class Report extends embed.Embed implements IReportNode, IFilterable {
237254
* @returns {Promise<void>}
238255
*/
239256
setPage(pageName: string): Promise<void> {
257+
if (utils.isRDLEmbed(this.config.embedUrl)) {
258+
return Promise.reject(errors.APINotSupportedForRDLError);
259+
}
260+
240261
const page: models.IPage = {
241262
name: pageName,
242263
displayName: null,
@@ -267,6 +288,11 @@ export class Report extends embed.Embed implements IReportNode, IFilterable {
267288
* @returns {Promise<void>}
268289
*/
269290
setFilters(filters: models.IFilter[]): Promise<void> {
291+
if (utils.isRDLEmbed(this.config.embedUrl)) {
292+
return Promise.reject(errors.APINotSupportedForRDLError);
293+
}
294+
295+
270296
return this.service.hpm.put<models.IError[]>(`/report/filters`, filters, { uid: this.config.uniqueId }, this.iframe.contentWindow)
271297
.catch(response => {
272298
throw response.body;
@@ -290,6 +316,10 @@ export class Report extends embed.Embed implements IReportNode, IFilterable {
290316
* @returns {Promise<void>}
291317
*/
292318
updateSettings(settings: models.ISettings): Promise<void> {
319+
if (utils.isRDLEmbed(this.config.embedUrl) && settings.customLayout != null) {
320+
return Promise.reject(errors.APINotSupportedForRDLError);
321+
}
322+
293323
return this.service.hpm.patch<models.IError[]>('/report/settings', settings, { uid: this.config.uniqueId }, this.iframe.contentWindow)
294324
.catch(response => {
295325
throw response.body;
@@ -375,6 +405,10 @@ export class Report extends embed.Embed implements IReportNode, IFilterable {
375405
* @returns {Promise<boolean>}
376406
*/
377407
isSaved(): Promise<boolean> {
408+
if (utils.isRDLEmbed(this.config.embedUrl)) {
409+
return Promise.reject(errors.APINotSupportedForRDLError);
410+
}
411+
378412
return utils.isSavedInternal(this.service.hpm, this.config.uniqueId, this.iframe.contentWindow);
379413
}
380414

@@ -386,6 +420,10 @@ export class Report extends embed.Embed implements IReportNode, IFilterable {
386420
* ```
387421
*/
388422
applyTheme(theme: models.IReportTheme): Promise<void> {
423+
if (utils.isRDLEmbed(this.config.embedUrl)) {
424+
return Promise.reject(errors.APINotSupportedForRDLError);
425+
}
426+
389427
return this.applyThemeInternal(theme);
390428
}
391429

@@ -397,6 +435,10 @@ export class Report extends embed.Embed implements IReportNode, IFilterable {
397435
* ```
398436
*/
399437
resetTheme(): Promise<void> {
438+
if (utils.isRDLEmbed(this.config.embedUrl)) {
439+
return Promise.reject(errors.APINotSupportedForRDLError);
440+
}
441+
400442
return this.applyThemeInternal(<models.IReportTheme>{});
401443
}
402444

src/util.ts

+13
Original file line numberDiff line numberDiff line change
@@ -162,3 +162,16 @@ export function isSavedInternal(hpm: HttpPostMessage, uid: string, contentWindow
162162
throw response.body;
163163
});
164164
}
165+
166+
/**
167+
* Checks if the embed url is for RDL report.
168+
*
169+
* @export
170+
* @param {string} embedUrl
171+
* @returns {boolean}
172+
*/
173+
export function isRDLEmbed(embedUrl: string): boolean {
174+
return embedUrl.toLowerCase().indexOf("/rdlembed?") >= 0;
175+
}
176+
177+

0 commit comments

Comments
 (0)