从列表中获取SharePoint数据,该列表使用SPServices查询中的备用列表

时间:2014-09-25 18:28:42

标签: jquery sharepoint-2007 caml spservices

我有一个列表,它查找另一个表以获取该数据的值。我可以直接查询表,并返回我想要的数据。我有另一个表使用上一个表作为其中字段的选择。我查询了表中使用查找表的所有字段,与该查找对应的字段是查找表的两个数据字段,用分号和哈希符号分隔。我一直在尝试格式化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) {
        ....

我一无所获。

有关如何处理下拉数据的任何建议吗?

1 个答案:

答案 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'。

我希望这有助于某人。

由于