0

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

我得到的回报如下:

第 1 类 1 类 2 类 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) {
        ....

我什么都得不到。

有什么建议如何处理下拉数据?

4

1 回答 1

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

我希望这可以帮助别人。

谢谢

于 2014-11-06T16:30:24.170 回答