我有一个列表,它查找另一个表以获取该数据的值。我可以直接查询表,并返回我想要的数据。我有另一个表使用上一个表作为其中字段的选择。我查询了表中使用查找表的所有字段,与该查找对应的字段是查找表的两个数据字段,用分号和哈希符号分隔。我一直在尝试格式化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)|(答案1.1)
Cat1问题2 | 1;#Cat1 | 1 | Cat1 | 200 |(问题1.2)|(答案1.2)
Cat1问题3 | 1;#Cat1 | 1 | Cat1 | 300 |(问题1.3)|(答案1.3)
Cat1问题4 | 1;#Cat1 | 1 | Cat1 | 400 |(问题1.4)|(答案1.4)
Cat1问题5 | 1;#Cat1 | 1 | Cat1 | 500 |(问题1.5)|(答案1.5)
Cat2问题1 | 2;#Cat2 | 2 | Cat2 | 100 |(问题2.1)|(答案2.1)
Cat2问题2 | 2;#Cat2 | 2 | Cat2 | 200 |(问题2.2)|(答案2.2)
Cat2问题3 | 2;#Cat2 | 2 | Cat2 | 300 |(问题2.3)|(答案2.3)
Cat2问题4 | 2;#Cat2 | 2 | Cat2 | 400 |(问题2.4)|(答案2.4)
Cat2问题5 | 2;#Cat2 | 2 | Cat2 | 500 |(问题2.5)|(答案2.5)
Cat3问题1 | 3;#Cat3 | 3 | Cat3 | 100 |(问题3.1)|(答案3.1)
Cat3问题2 | 3;#Cat3 | 3 | Cat3 | 200 |(问题3.2)|(答案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) {
....
我一无所获。
有关如何处理下拉数据的任何建议吗?
答案 0 :(得分:0)
我确实找到了一种方法,我认为这可能是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,否则,只需查询您要查找的数据。哦,一定要使用Value Type ='Lookup'。
我希望这有助于某人。
由于