如何在 angular 中将 stimulsoft 报告 js 保存到服务器?
how to save stimulsoft report js to server in angular?
我有一个报表设计器组件并将方法分配给 onSaveReport
事件,但在该方法中我的组件成员是 undefined
options: any;
designer: any;
public document: ReportDocument;
reportBody = '';
constructor() {
}
ngOnInit() {
this.document = new ReportDocument();
this.options = new Stimulsoft.Designer.StiDesignerOptions();
this.options.appearance.fullScreenMode = false;
this.designer = new Stimulsoft.Designer.StiDesigner(this.options, 'StiDesigner', false);
var report = new Stimulsoft.Report.StiReport();
var json = { "DataSet": [{ Id: "a", Name: "A" }] }
var dataSet = new Stimulsoft.System.Data.DataSet("JSON");
dataSet.readJson(json)
report.regData("JSON", "JSON", dataSet);
report.dictionary.synchronize();
this.designer.report = report;
this.designer.renderHtml('designer');
this.designer.onSaveReport = this.onReportSave;
}
private onReportSave(e: any) {
this.document.body = e.report.saveToJsonString(); // error is here
}
}
这是错误:
Cannot set properties of undefined (setting 'body')
TypeError: Cannot set properties of undefined (setting 'body') at $.onReportSave [as onSaveReport] (http://localhost:4200/features-stimulsoft-report-stimulsoft-report-module.js:1206:28) at $.invokeSaveReport (http://localhost:4200/assets/lazyBundles/stimulsoft/stimulsoft.designer.js:30:82619) at $.raiseCallbackEventAsync (http://localhost:4200/assets/lazyBundles/stimulsoft/stimulsoft.designer.js:30:86029) at http://localhost:4200/assets/lazyBundles/stimulsoft/stimulsoft.designer.js:30:78818 at ZoneDelegate.invokeTask (http://localhost:4200/polyfills.js:12178:35) at Object.onInvokeTask (http://localhost:4200/vendor.js:72788:33) at ZoneDelegate.invokeTask (http://localhost:4200/polyfills.js:12177:40) at Zone.runTask (http://localhost:4200/polyfills.js:11946:51) at invokeTask (http://localhost:4200/polyfills.js:12259:38) at ZoneTask.invoke (http://localhost:4200/polyfills.js:12248:52)`
您无权访问 onReportSave
函数中的 class this
,因为您将函数引用传递给了 onSaveReport
,并且设计器调用了您的函数 this
在你的函数中属于设计者而不是你的 class ,这是错误的原因 this.document 是未定义的,你从未定义的地方调用 body,但你可以用 bind 属性
this.designer.onSaveReport = this.onReportSave.bind(this);
现在您将函数内的 this
设置为 class 的 this
。
我有一个报表设计器组件并将方法分配给 onSaveReport
事件,但在该方法中我的组件成员是 undefined
options: any;
designer: any;
public document: ReportDocument;
reportBody = '';
constructor() {
}
ngOnInit() {
this.document = new ReportDocument();
this.options = new Stimulsoft.Designer.StiDesignerOptions();
this.options.appearance.fullScreenMode = false;
this.designer = new Stimulsoft.Designer.StiDesigner(this.options, 'StiDesigner', false);
var report = new Stimulsoft.Report.StiReport();
var json = { "DataSet": [{ Id: "a", Name: "A" }] }
var dataSet = new Stimulsoft.System.Data.DataSet("JSON");
dataSet.readJson(json)
report.regData("JSON", "JSON", dataSet);
report.dictionary.synchronize();
this.designer.report = report;
this.designer.renderHtml('designer');
this.designer.onSaveReport = this.onReportSave;
}
private onReportSave(e: any) {
this.document.body = e.report.saveToJsonString(); // error is here
}
}
这是错误:
Cannot set properties of undefined (setting 'body') TypeError: Cannot set properties of undefined (setting 'body') at $.onReportSave [as onSaveReport] (http://localhost:4200/features-stimulsoft-report-stimulsoft-report-module.js:1206:28) at $.invokeSaveReport (http://localhost:4200/assets/lazyBundles/stimulsoft/stimulsoft.designer.js:30:82619) at $.raiseCallbackEventAsync (http://localhost:4200/assets/lazyBundles/stimulsoft/stimulsoft.designer.js:30:86029) at http://localhost:4200/assets/lazyBundles/stimulsoft/stimulsoft.designer.js:30:78818 at ZoneDelegate.invokeTask (http://localhost:4200/polyfills.js:12178:35) at Object.onInvokeTask (http://localhost:4200/vendor.js:72788:33) at ZoneDelegate.invokeTask (http://localhost:4200/polyfills.js:12177:40) at Zone.runTask (http://localhost:4200/polyfills.js:11946:51) at invokeTask (http://localhost:4200/polyfills.js:12259:38) at ZoneTask.invoke (http://localhost:4200/polyfills.js:12248:52)`
您无权访问 onReportSave
函数中的 class this
,因为您将函数引用传递给了 onSaveReport
,并且设计器调用了您的函数 this
在你的函数中属于设计者而不是你的 class ,这是错误的原因 this.document 是未定义的,你从未定义的地方调用 body,但你可以用 bind 属性
this.designer.onSaveReport = this.onReportSave.bind(this);
现在您将函数内的 this
设置为 class 的 this
。