找回密码
 立即注册

QQ登录

只需一步,快速开始

KearneyKang 讲师达人认证 悬赏达人认证
超级版主   /  发表于:2020-11-17 17:24  /   查看:2814  /  回复:4
使用ActiveReportsJS设计器保存报表
报表的存储类型以及保存在ActiveReportsJS设计器实例中显示的报表的确切方式取决于应用程序的体系结构。 该页面提供了几种常见方案的实例。
启动 "保存" 和 "另存为" 按钮
ActiveReportsJS报表设计器组件在工具栏上包含“保存”和“另存为”按钮。

它们没有启用,默认情况下不可见。 该代码应为设计器组件实例设置`onSave``onSaveAs`动作处理程序,以启用这些按钮。 检查 [动作处理器](Action-Handlers) 页面以获取更多信息。 页面以获取更多信息。 `onSaveAs`处理程序应返回`Promise`,该`Promise`解析为包含报告的`id`和可选`displayName`属性的对象-前者唯一标识报告,后者显示在设计器组件的顶部栏中 。 `onSave`处理程序应返回`Promise`,该Promise解析为包含报告的可选displayName属性的对象。
这是`onSave``onSaveAs`处理程序的示例,它们将报告保存在React应用程序的内存中。 您可以使用类似的方法通过将请求发送到REST API来保存报告,因为这些处理程序是`saync`函数,它们返回`Promise`对象。
js
  1. import React, { Fragment } from "react";
  2. import {
  3.   Designer as ReportDesigner,
  4. } from "@grapecity/activereports/reportdesigner";

  5. export const DesignerHost: React.FC = () => {
  6.   const designerRef = React.useRef<ReportDesigner | undefined>();
  7.   const counter = React.useRef<number>(0);
  8.   const [reportStorage, setReportStorage] = React.useState(new Map());

  9.   React.useEffect(() => {
  10.     designerRef.current = new ReportDesigner("#designer-host");
  11.     designerRef.current.setActionHandlers({
  12.       onSave: function (info) {
  13.         const reportId = info.id || `report${counter.current++}`;
  14.         setReportStorage(new Map(reportStorage.set(reportId, info.definition)));
  15.         return Promise.resolve({displayName: reportId});
  16.       },
  17.       onSaveAs: function (info) {
  18.         const reportId = info.id || `report${counter.current++}`;
  19.         setReportStorage(new Map(reportStorage.set(reportId, info.definition)));
  20.         return Promise.resolve({id: reportId, displayName: reportId });
  21.       },
  22.     });
  23.   }, []);
  24.   return (
  25.     <div id="designer-host"></div>
  26.   );
  27. };
复制代码
自动保存
ActiveReportsJS报表设计器组件实例的 [processCommand](@api/classes/reportdesigner.designer.html#processcommand)方法接受`save,` `saveAs,` `create,` `open,``render` 之一。 检查 [动作处理器](Action-Handlers) 页面以获取更多信息。 设计器组件的`getReport`方法返回当前报告的信息,其中包括`isDirty` 标志,该标志指示自上次保存以来报告是否已更改。 可以通过同时使用这两种方法来实现自动保存功能。 这是React应用程序的这种方法的示例,Angular,Vue或纯JavaScript应用程序可以使用相同的技术。
javascript
  1. import {
  2.   Designer as ReportDesigner,
  3.   templates,
  4. } from "@grapecity/activereports/reportdesigner";
  5. import React, { Fragment } from "react";
  6. import "@grapecity/activereports/styles/ar-js-ui.css";
  7. import "@grapecity/activereports/styles/ar-js-designer.css";

  8. export const DesignerHost: React.FC = () => {
  9.   const designerRef = React.useRef<ReportDesigner | undefined>();
  10.   React.useEffect(() => {
  11.     designerRef.current = new ReportDesigner("#designer-host");

  12.     // onSave and onSave handlers are defined here just as shown above

  13.     const saveIntervalId = setInterval(async () => {
  14.       const reportInfo = await designerRef.current?.getReport();
  15.       if (reportInfo?.isDirty) {
  16.         designerRef.current?.processCommand("save");
  17.       }
  18.     }, 2000);
  19.     return () => clearInterval(saveIntervalId);
  20.   }, []);
  21.   return (
  22.    <div id="designer-host"></div>
  23.   );
  24. };
复制代码



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

5 个回复

倒序浏览
唐唐唐
注册会员   /  发表于:2020-12-8 16:35:13
沙发
有纯js版本的吗,后端开发不懂react。
回复 使用道具 举报
KearneyKang讲师达人认证 悬赏达人认证
超级版主   /  发表于:2020-12-9 12:09:58
板凳
你好,纯JS版本的没有。你现在使用的是Vue还是其他前端框架
回复 使用道具 举报
fumasoft
高级会员   /  发表于:2022-1-17 14:12:40
地板
VUE如何自动保存,麻烦提供一下案例
回复 使用道具 举报
Bella.YuanWyn认证
超级版主   /  发表于:2022-1-17 15:25:43
5#
fumasoft 发表于 2022-1-17 14:12
VUE如何自动保存,麻烦提供一下案例

您好,方便的话重新发个帖子,帮您看看哦!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部