我正在为我的公司编写一个内部API,允许用户传入SharePoint CAML查询。 在我的函数中,我接受用户的查询,并向其添加一些其他元素,然后使用最终查询从SharePoint检索所需的数据。
示例:
用户传入:
<Query>
<Where>
<Eq>
<FieldRef Name='Category' />
<Value Type='Choice'>Bug</Value>
</Eq>
</Where>
</Query>
在内部,我将查询修改为:
<Query>
<Where>
<And>
<Eq>
<FieldRef Name='Category' />
<Value Type='Choice'>Bug</Value>
</Eq>
<Eq>
<FieldRef Name='AssignedTo' />
<Value Type='Integer'><UserID /></Value>
</Eq>
</And>
</Where>
</Query>
您认为验证用户发送的查询的最佳方法是什么?
答案 0 :(得分:2)
如果您要允许的查询受到相当限制,那么构建模式以表示有效查询的内容可能是一种很好的方法。然后你可以根据该模式查看他们的xml是否有效。另外,我知道你可以从代码中使用CAML Builder dll。我无法立即找到这样的示例,但可能有一种方法可以在try / catch块中使用它的CAML构建方法来阻止无效的查询构建。
此外,我可能需要注意CAML查询的FieldRef需要使用可能与显示名称不同的字段的内部名称构建的事实。