我无法设置某些表格'范围为publicOnServer
。在我的model.js中,我设置了表的范围。当我在Wakanda中查看我的远程模型(4D数据库)时,可以看到范围的变化 - 我的更改后表的范围会更新。
对于某些表,当我设置范围然后从客户端进行任何类型的查询 - 到任何表 - 浏览器上的控制台都会填充错误并且查询失败。有效地,设置某些表格' model.js中的范围甚至会破坏查询甚至不相关的表。
我注意到范围更改有效的表与不具有关系属性的表之间的区别。设置这些表的范围始终会破坏查询功能,并且为没有关系属性的表设置范围始终可以正常工作。这是一个错误吗?
Chrome控制台输出:
ERROR Error: Uncaught (in promise): Error: Needed Contractor dataClass is not present on catalog
在model.js中的行:
model.Contractor.properties.scope="publicOnServer";
Contractor是远程模型中的一个表,它具有关系属性。
答案 0 :(得分:1)
我根据您项目的模型运行了解决方案。这是标准行为,预计会出错。任何设置为" PublicOnServer"的数据类;被视为"被删除"或者"隐藏"从客户端。引用此类的其他类中的Relation属性被视为错误,就像引用不存在的类一样。如果Books类设置为" PublicOnServer"则不会出现错误。因为它与任何其他类无关。
如果单击错误堆栈中的第一行:wakanda-client.no-promise.js行:1880。您将找到以下代码:
//Check if we have all needed dataClasses on the catalog
for (var _e = 0, _f = _this.seenDataClasses; _e < _f.length; _e++) {
var dcName = _f[_e];
if (!catalog[dcName]) {
throw new Error('Needed ' + dcName + ' dataClass is not present on catalog');
}
}
在第1775行,你会发现一个函数neededDataClass()将名为seenDataClasses的数组与需要的数据类进行比较。
Wakada客户端框架实际上会立即检查所有公共数据类,并检查它们是否具有引用非公共数据类的关系属性。这将避免后续查询中的未来问题。
错误&#34;如果启动解决方案而不限制对Company表的访问,控制台中的错误将消失。&#34; Wakanda客户端在承诺中添加了阻止您查询包含无效关系属性的Client表。我建议在代码中添加一个catch()来处理它:
wakanda.getCatalog()
.then((ds) => {
this.ds = ds;
}).catch(error=>{
//handle the error
});
上一个答案:
根据我的理解,当您查询的表的相关表被设置为&#34; publicOnServer&#34;时,只要查询字符串或查询结果中未引用相关表,查询就会起作用随后
您能否提供包含查询字符串的模型和代码的可重现示例?