我正在尝试开发一个Angular Web应用程序,它将通过OpenEdge进度应用服务器(PASOE)RESTful API使用后端OpenEdge ABL数据服务。 JavaScript数据对象或JSDO(github:progress/JSDO)将用于管理/传输数据,JSDO DataSource objects将用于客户端将数据读取到Kendo UI数据源中进行显示。这些DataSource对象还隐式地自动调用JSDO的许多内部函数。在大多数情况下,一切工作都很好。
这是基本过程:通过传入目录URI,服务URI和身份验证方法来启动Progress会话。然后,创建一个JSDO实例,传入所需资源的名称(可以在单个目录URI中描述许多端点; JSDO使用此目录来了解与该数据服务进行交互的方式/方式)。然后,创建一个JSDO DataSource对象以执行任何服务器端筛选并读取数据。会话通过Promise完成,而JSDO数据源的read()方法返回一个Observable。订阅返回的Observable异步生成所需的数据。
但是,访问多表资源时,该任务有些复杂。使用多表资源的最常见原因是主表/明细表之间的关系。例如,可以在同一资源中提供订单和订单行。这将需要为资源中需要引用的每个表提供一个DataSource实例,但是,因为每个DataSource仅与一个表进行接口。但是,由于JSDO向服务器发出的实际XHR请求总是返回两个表的数据,因此对于已经存在客户端的数据再次调用RESTful API将是多余的。因此,添加了readLocal attribute(true / false,默认为false),以告知DataSource在这种情况下本地读取数据。
这是问题所在:即使设置了详细数据源时,即使我指定readLocal:true,JSDO DataSource对象仍然会发出第二个XHR请求。当它返回正确的数据时,对已存在于客户端浏览器中的数据发出多个请求似乎是一种不好的做法。
为了解决这个问题,我从代码中取出了Kendo UI以及Angular组件和服务。我的所有应用程序代码都在app.component.ts中运行,并且正在使用控制台日志记录来查看是否已成功检索数据。从那里,可以很容易地与Kendo小部件集成。如前所述,数据恢复正常,但是我看到通过使用“开发人员工具”>“网络”选项卡(两者均为Firefox / Chrome)进行监视,第二次XHR请求已发送到数据服务。
有人成功使用过readLocal吗?我还没有找到实现此功能的任何可行示例。如果需要,我可以发布代码。
谢谢