带有CAML查询的SharePoint级联下拉菜单,可以过滤其中一个选项



我已经使用http://spservices.codeplex.com做了一个级联下拉表单,但想要添加一个过滤器到第三级联下拉。因此,SPServices有一个名为CAMLQuery的函数,我可以在其中添加此过滤器,但我希望过滤器使用表单顶部下拉列表中的值来指定。

页面上给出的一个例子是:

            CAMLQuery: "<Eq><FieldRef Name='Status'/><Value Type='Text'>Active</Value></Eq>"

我希望这个Status列从表单上某个字段的选择中获得它的值。这可能吗,我该怎么写呢?


编辑:我试图做一个资产列表与级联的选择,以找到正确的资产后,选择单位和部门。代码示例后,尝试下面的答案,并没有得到任何出现在"资产"选择器。有两个列表,一个包含Units和Departments,另一个包含带有要筛选的Department和Unit键的资产。如果我将"动态"查询替换为静态查询,例如:

CAMLQuery: "<Eq><FieldRef Name='Unit'/><Value Type='Text'>Unit 1</Value></Eq>"

资产显示为该单元过滤。当前代码:

<script language="javascript" type="text/javascript" src="../../Hidden/jquery-1.5.2.min.js"></script>
<script language="javascript" type="text/javascript" src="../../Hidden/jquery.SPServices-0.6.0.min.js"></script>
<script language="javascript" type="text/javascript">
var sCamlQuery = "";
$(document).ready(function() {
    $().SPServices.SPCascadeDropdowns({
        relationshipList: "Departments",
        relationshipListParentColumn: "Unit",
        relationshipListChildColumn: "Title",
        parentColumn: "Unit",
        childColumn: "Department",
        completefunc: function() {
        sCamlQuery = "<Eq><FieldRef Name='Unit'/><Value Type='Text'>" + $("select[title='Unit']").attr("spcascadedropdown_selected_") + "</Value></Eq>";
        }
    });
        $().SPServices.SPCascadeDropdowns({
        relationshipList: "Asset Database",
        relationshipListParentColumn: "Department",
        relationshipListChildColumn: "Title",
        parentColumn: "Department",
        childColumn: "Asset",
        CAMLQuery: sCamlQuery
    });
});
HTML:

<tr>
<td width="190px" valign="top" class="ms-formlabel">
    <H3 class="ms-standardheader"><nobr>Unit</nobr></H3>
</td>
<td width="400px" valign="top" class="ms-formbody">
    <span dir="none">
        <select name="ctl00$PlaceHolderMain$g_c482307d_1a31_4129_8a0a_376d70562746$ff3_1$ctl00$Lookup" id="ctl00_PlaceHolderMain_g_c482307d_1a31_4129_8a0a_376d70562746_ff3_1_ctl00_Lookup" title="Unit">
            <option selected="selected" value="0">(None)</option>
            <option value="1">Unit 1</option>
            <option value="2">Unit 2</option>
        </select>
    </span>¨
</td>
</tr>
<tr>
<td width="190px" valign="top" class="ms-formlabel">
    <H3 class="ms-standardheader"><nobr>Department</nobr></H3>
</td>
<td width="400px" valign="top" class="ms-formbody">
    <span dir="none">
        <select name="ctl00$PlaceHolderMain$g_c482307d_1a31_4129_8a0a_376d70562746$ff4_1$ctl00$Lookup" id="ctl00_PlaceHolderMain_g_c482307d_1a31_4129_8a0a_376d70562746_ff4_1_ctl00_Lookup" title="Department">
            <option selected="selected" value="0">(None)</option>
            <option value="5">Administration</option>
            <option value="4">IT</option>
            <option value="1">Kitchen</option>
            <option value="2">Production</option>
            <option value="7">Production</option>
            <option value="6">Sales</option>
            <option value="3">Warehouse</option>
        </select>
    </span>
</td>
</tr>
<tr>    
<td width="190px" valign="top" class="ms-formlabel">
    <H3 class="ms-standardheader"><nobr>Asset</nobr></H3>
</td>
<td width="400px" valign="top" class="ms-formbody">
    <span dir="none">
        <select name="ctl00$PlaceHolderMain$g_c482307d_1a31_4129_8a0a_376d70562746$ff5_1$ctl00$Lookup" id="ctl00_PlaceHolderMain_g_c482307d_1a31_4129_8a0a_376d70562746_ff5_1_ctl00_Lookup" title="Asset">
            <option selected="selected" value="0">(None)</option>
            <option value="3">Computer</option>
            <option value="2">Copy machine</option>
            <option value="1">Dishwasher</option>
            <option value="5">Dishwasher</option>
            <option value="4">Oven</option>
        </select>
    </span>
</td>
</tr>

验证功能:

<script language="javascript" type="text/javascript" src="../../Hidden/jquery-1.5.2.min.js"></script>
<script language="javascript" type="text/javascript" src="../../Hidden/jquery.SPServices-0.6.0.min.js"></script>
<script language="javascript" type="text/javascript">
var sCamlQuery = "";
$(document).ready(function() {
    $().SPServices.SPCascadeDropdowns({
        relationshipList: "Departments",
        relationshipListParentColumn: "Unit",
        relationshipListChildColumn: "Title",
        parentColumn: "Unit",
        childColumn: "Department",
        completefunc: function() {
        sCamlQuery = window.alert("completefunc");//"<Eq><FieldRef Name='Unit'/><Value Type='Text'>"+ $("select[title='Unit'] option:selected").text() +"</Value></Eq>";
                                }
    });
        $().SPServices.SPCascadeDropdowns({
        relationshipList: "Asset Database",
        relationshipListParentColumn: "Department",
        relationshipListChildColumn: "Title",
        parentColumn: "Department",
        childColumn: "Asset",
        CAMLQuery: sCamlQuery
    });
});
</script>

部门列表:

标题

单位

它第一销售第一

它Unit2

销售Unit2

资产数据库:

标题

部门*单元*

Asset1 IT Unit1

Asset2 IT Unit2

大卫

查看SPCascadeDropdowns的文档,您可以指定一个回调函数,该函数在父列更改时执行。这似乎正是你所需要的连接你所要求的钩子。

你没有发布代码示例,所以我只能编一些东西。他们的演示页面使用地区,州和城市,所以让我们来玩一下。

如果我想根据"Region"的选择值为"City"添加一个过滤器,我可以这样使用:

var sCamlQuery = "";
// Cascade definition for State dropdown
$().SPServices.SPCascadeDropdowns({
    relationshipList: "States",
    relationshipListParentColumn: "Region",
    relationshipListChildColumn: "Title",
    relationshipListSortColumn: "Title",
    parentColumn: "Region",
    childColumn: "State" 
    completefunc: function() {
        sCamlQuery = "<Eq><FieldRef Name='Status'/><Value Type='Text'>" + $("select[title='Region'] option:selected").text() + "</Value></Eq>";
    })
});
// Cascade definition for City dropdown
$().SPServices.SPCascadeDropdowns({
    relationshipList: "Cities",
    relationshipListParentColumn: "State",
    relationshipListChildColumn: "Title",
    parentColumn: "State",
    childColumn: "City",
    CAMLQuery: sCamlQuery
});

这是一个非常幼稚的jQuery选择器,用于查找SELECT元素(查看TITLE属性),但您应该了解其中的含义。为completefunc定义的匿名函数应该在父列("Region")更改时运行,并更新全局变量sCamlQuery的值。当"City"级联运行时,它将使用生成的CAML查询。


编辑:更新示例以更好地匹配OP场景。当最上面的级联("区域")运行时,它将触发"状态"级联中的completefunc匿名方法。这将设置sCamlQuery变量的值,并将在"City"级联运行时使用。


编辑#2:更新样例代码,使用更通用的jQuery选择器;它将检索所选OPTION的文本值。如果您希望使用OPTION ,您可以将其简化为:$("select[title='Region']").val()

David:

你真的应该在SPServices网站的讨论区开始问这个问题!

上面代码中显示的内容是不必要的。如果按照所示的顺序对SPCascadeDropdowns进行两次调用,则不需要

CAMLQuery: "<Eq><FieldRef Name='Unit'/><Value Type='Text'>Unit 1</Value></Eq>" 

这就是级联的工作原理。第一次调用将把部门限制为在选择单元时所选单元中的部门。第二个调用将把资产限制为在选择Department时所选Department中的资产。

如果你没有得到你期望的结果,那么你的关系列表可能没有你需要的值。

m .

根据列表内容的附加信息编辑:

这绝对是数据问题。您正在合并Department列表和Assets列表中的关系。你应该有这些列表:

  • 部门—
  • 单位—每个单位在列表中正好出现一次,带a列作为对Title中的查找表示单位的部门部门。
  • Assets—每个资产这个列表正好有一次,有一列在单位中查找Title

这使你的列表真正的关系,然后调用SPCascadeDropdowns将做你想要的,就像在文档中的例子中国家/地区/州/城市。

相关内容

  • 没有找到相关文章

最新更新