Wakanda 2.x无法设置某些表格'范围到publicOnServer

时间:2017-10-19 19:57:56

标签: wakanda

我无法设置某些表格'范围为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是远程模型中的一个表,它具有关系属性。

1 个答案:

答案 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;时,只要查询字符串或查询结果中未引用相关表,查询就会起作用随后

您能否提供包含查询字符串的模型和代码的可重现示例?