我有一个列表,它查找另一个表来获取该数据的值。我可以直接查询表,它返回我想要的数据。我有另一个表,它使用上一个表作为其中一个字段的选择。我已经查询了使用查找表的表中的所有字段,与该查找对应的字段是由分号和散列符号分隔的查找表的两个数据字段。我一直试图格式化一个CAML查询,以过滤表中使用查找表的数据,并从该表中获取另一个字段。对不起,这真的很难解释,但是也许在你看到我的代码之后,你会看到我想要得到的东西。
如果我对查找表执行如下查询:
<body>
<script type="text/javascript" src="jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="jquery.SPServices-0.7.1a.js"></script>
var ViewFields = "<ViewFields>" +
"<FieldRef Name='Title' />" +
"<FieldRef Name='Column_x0020_Number' Type='Number' />" +
"</ViewFields>";
$(document).ready(function() {
$().SPServices({
operation: "GetListItems",
async: false,
listName: "Categories",
CAMLViewFields: ViewFields,
completefunc: function (xData, Status) {
$(xData.responseXML).SPFilterNode("z:row").each(function() {
var categoryHtml = "<td>" + $(this).attr("ows_Title") + "</td>";
var columnNumHtml = "<td>" + Math.round($(this).attr("ows_Column_x0020_Number")) + "</td>";
var addRow = "<tr>" + categoryHtml + columnHtml + "</tr>";
$("#Categories").append(addRow);
});
}
});
});
</script>
<table border="1" id="Categories" />
</body>我得到的回报如下:
Cat1 1 Cat2 2.
所以,它起作用了。这就是那个能让你查到的表。
接下来,我们有代码尝试从试题表中获取数据:
var ViewFields = "<ViewFields>" +
"<FieldRef Name='Title' />" +
"<FieldRef Name='Category_x0020_Name' />" +
"<FieldRef Name='Amount' Type='Number' />" +
"<FieldRef Name='Question' />" +
"<FieldRef Name='Answer' />" +
"</ViewFields>";
$().SPServices({
operation: "GetListItems",
async: false,
listName: "Categories",
CAMLViewFields: ViewFields,
completefunc: function (xData, Status) {
$(xData.responseXML).SPFilterNode("z:row").each(function() {
var titleHtml = "<td>" + $(this).attr("ows_Title") + "</td>";
var categoryNameHtml = "<td>" + $(this).attr("ows_Category_x0020_Name")) + "</td>";
var nameHtmlSplitString = categoryNameHtml.split(";#");
var categoryNumString = "<td>" + nameHtmlSplitString[0] + "</td>";
var categoryNameString = "<td>" + nameHtmlSplitString[1] + "</td>";
var amount = "<td>" + Math.round($(this).attr("ows_Amount)) + "</td>";
var question = "<td>" + $(this).attr("ows_Question) + "</td>";
var categoryNumString = "<td>" + $(this).attr("ows_Answer) + "</td>";
var addRow = "<tr>" + titleHtml + categoryNameHtml + categoryNameString + categoryNumString + amountHtml + questionHtml + answerHtml + "</tr>";
$("#Questions").append(addRow);
});
}
});
});
</script>
<table border="1" id="Questions" />这一点在以下方面还算不错:
Cat1问题1|1;#Cat1|1|Cat1|100|(问题1.1)
Cat1问题2|1;#Cat1|1|Cat1|200|(问题1.2) (回答1.2)
Cat1问题3|1;#Cat1|1|Cat1|300|(问题1.3)
Cat1问题4|1;#Cat1|1|Cat1|400|(问题1.4)
Cat1问题5|1;#Cat1|1|Cat1|500|(问题1.5)
Cat2问题1|2;#Cat2|2|Cat2|100|(问题2.1)
Cat2问题2|2;#Cat2|2|Cat2|200|(问题2.2) x(回答2.2)
Cat2问题3|2;#Cat2|2|Cat2|300|(问题2.3) x(回答2.3)
Cat2问题4|2;#Cat2|2|Cat2|400|(问题2.4)
Cat2问题5|2;#Cat2|2|Cat2|500|(问题2.5)
Cat3问题1|3;#Cat3|3|Cat3|100|(问题3.1) x(答案3.1)
Cat3问题2|3;#Cat3|3|Cat3|200|(问题3.2)
.
因此,除了"1;#Cat1“返回之外,这几乎没有问题。显然,我可以很好地解析它们,但是现在,当我试图编写一个查询时:
var Query = "<Query>" +
" <Where>" +
" <Eq>" +
" <FieldRef Name='Category_x0020_Name' />" +
" <Value Type='Text'>" +
" 2;#Cat2" +
" </Value>" +
" </Eq>" +
" </Where>" +
"</Query>";我把它应用在SPServices中
...
listName: "Categories",
CAMLViewFields: ViewFields,
CAMLQuery: Query,
completefunc: function (xData, Status) {
....我什么也得不到。
对如何处理下拉数据有什么建议吗?
发布于 2014-11-06 16:30:24
我确实找到了一种方法,我认为这可能是http://spservices.codeplex.com/的一个问题,或者,至少,这是我最终得到答案的地方。我只是把它贴在这里,以防其他人需要帮助。
它与查询“查找”标志中的项有关。查询需要按如下格式格式化:
var Query = "<Query>" +
"<Where>" +
"<Eq>" +
"<FieldRef Name='Category_x0020_Name' LookupId='True' />" +
"<Value Type='Lookup'>" +
categoryNum +
"</Value>" +
"</Eq>" +
"</Where>" +
"</Query>";注意: categoryNum只是传递给函数的一个变量。为了获得更多关于LookupId的信息,我什么也找不到。这和CAML有关。我的理解是,LookupId='true‘告诉查询使用下拉菜单的id,如果您只想使用您想要的值,那么可以不使用LookupId。因此,对于LookupId='True',可以使用ID,否则,只需查询所查找的数据。哦,请务必使用值Type='Lookup‘。
我希望这能帮上忙。
谢谢
https://stackoverflow.com/questions/26045579
复制相似问题