Wakanda 2.x 无法将某些表的范围设置为 publicOnServer
Wakanda 2.x cannot set certain tables' scope to publicOnServer
我无法将某些 table 的范围设置为 publicOnServer
。在我的 model.js 中,我将范围设置为 table。当我在 Wakanda 中查看我的远程模型(4D 数据库)时,可以看到范围的变化 - table 的范围在我更改后更新。
对于一些 tables,当我设置范围然后从客户端执行任何类型的查询时 - 对任何 table - 我浏览器上的控制台充满错误并且查询失败.实际上,在 model.js 中设置某些 table 的范围会中断对甚至不相关的 table.
的查询
我注意到范围更改适用的 table 与范围更改无效的 table 之间的一个区别是具有关系属性的 table。为这些 table 设置范围始终会破坏查询功能,而为没有关系属性的 table 设置范围始终可以正常工作。这是一个错误吗?
Chrome 控制台输出:
ERROR Error: Uncaught (in promise): Error: Needed Contractor dataClass is not present on catalog
model.js 中的行:
model.Contractor.properties.scope="publicOnServer";
Contractor 是远程模型中的 table,它具有关系属性。
我运行解决方案并基于您的项目模型。这是标准行为,错误在意料之中。任何设置为 "PublicOnServer" 的数据 class 都被视为来自客户端的 "removed" 或 "hidden"。引用此 class 的其他 class 中的关系属性被视为错误,就像引用不存在的 class 一样。如果 Books class 设置为 "PublicOnServer",则不会出现该错误,因为它与任何其他 class.
无关
如果单击错误堆栈中的第一行: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 的数组与 classes 需要的数据进行比较。
Wakada 客户端框架实际上会立即检查所有 public 数据 classes 并检查它们是否具有引用非 public 数据 class 的关系属性。这样可以避免后续查询中出现问题。
错误 "Errors in the console disappear if solution is launched without restricting access to the Company table." 由 Wakanda 客户端添加,承诺阻止您查询包含无效关系属性的客户端 table。我建议在您的代码中添加一个 catch() 来处理它:
wakanda.getCatalog()
.then((ds) => {
this.ds = ds;
}).catch(error=>{
//handle the error
});
上一个答案:
据我了解,当你查询的table的relatedtable设置为"publicOnServer"时,只要relatedtable就可以查询未在查询字符串或随后的查询结果中引用。
您能否提供包含查询字符串的模型和代码的可重现示例?
我无法将某些 table 的范围设置为 publicOnServer
。在我的 model.js 中,我将范围设置为 table。当我在 Wakanda 中查看我的远程模型(4D 数据库)时,可以看到范围的变化 - table 的范围在我更改后更新。
对于一些 tables,当我设置范围然后从客户端执行任何类型的查询时 - 对任何 table - 我浏览器上的控制台充满错误并且查询失败.实际上,在 model.js 中设置某些 table 的范围会中断对甚至不相关的 table.
的查询我注意到范围更改适用的 table 与范围更改无效的 table 之间的一个区别是具有关系属性的 table。为这些 table 设置范围始终会破坏查询功能,而为没有关系属性的 table 设置范围始终可以正常工作。这是一个错误吗?
Chrome 控制台输出:
ERROR Error: Uncaught (in promise): Error: Needed Contractor dataClass is not present on catalog
model.js 中的行:
model.Contractor.properties.scope="publicOnServer";
Contractor 是远程模型中的 table,它具有关系属性。
我运行解决方案并基于您的项目模型。这是标准行为,错误在意料之中。任何设置为 "PublicOnServer" 的数据 class 都被视为来自客户端的 "removed" 或 "hidden"。引用此 class 的其他 class 中的关系属性被视为错误,就像引用不存在的 class 一样。如果 Books class 设置为 "PublicOnServer",则不会出现该错误,因为它与任何其他 class.
无关如果单击错误堆栈中的第一行: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 的数组与 classes 需要的数据进行比较。
Wakada 客户端框架实际上会立即检查所有 public 数据 classes 并检查它们是否具有引用非 public 数据 class 的关系属性。这样可以避免后续查询中出现问题。
错误 "Errors in the console disappear if solution is launched without restricting access to the Company table." 由 Wakanda 客户端添加,承诺阻止您查询包含无效关系属性的客户端 table。我建议在您的代码中添加一个 catch() 来处理它:
wakanda.getCatalog()
.then((ds) => {
this.ds = ds;
}).catch(error=>{
//handle the error
});
上一个答案:
据我了解,当你查询的table的relatedtable设置为"publicOnServer"时,只要relatedtable就可以查询未在查询字符串或随后的查询结果中引用。
您能否提供包含查询字符串的模型和代码的可重现示例?