我可以动态地将过滤器应用于Nintex Forms 2013上的列表查找吗?

时间:2015-02-20 09:27:00

标签: sharepoint sharepoint-2010 sharepoint-2013 sharepoint-workflow nintex-workflow

我有一个要求,我需要动态过滤列表查找。我的列表中有一个名为category的列,其中包含值'A' or 'B'。然后,内容类型上有一个字段'Selection',可以取值'A' or 'B' or 'All'。如果'A'我需要列表查找以获取category = 'A'的行,那么'B'也是如此。但是,如果“选择”是 - 'All',那么我需要显示列表中的所有项目。

我正在考虑过滤列的列表查找 - 'Category'。但问题是我在内容类型表单上,我没有任何可以动态设置的变量。

我无法使用映射到'Selection'的过滤器控件,因为当选择为'All'时它不起作用(列表中的类别下没有名为“全部”的值)。 / p>

我尝试使用对公式进行操作的计算值并尝试在列表查找中按特定值过滤使用它,但过滤器不起作用,因为列表查找在表单加载之前加载计算值并因此计算得出对于过滤,值始终为空。

我有什么方法可以实现这个功能。

提前致谢

1 个答案:

答案 0 :(得分:1)

我想到了解决这个问题的两种方法。

  1. 有3个单独的列表查找控件,它们相互叠加。用A过滤一个,用B过滤一个,让一个过滤掉。然后创建规则以显示具有要显示的过滤器的规则,并隐藏其他规则。要保存该值,当其中一个控件更改值时,您必须使用JavaScript将列表查找中的值复制到隐藏文本框。这个解决方案并不是很好,如果你有更多的选择会变得更糟......但是它有效。

  2. 您可以使用JavaScript根据选择过滤列表。这有点棘手,但您不需要更多的查找控件来获得更多选项。您只需要2个列表查找,无论您对类别/选择有多少选项。您需要一个显示您希望用户选择的信息(未过滤),另一个来自同一列表和相同视图,但该列应该是Category列(您可以使用javascript隐藏此查找)。这是我用来获得你所描述的代码的代码。

    //get the original html to 'reset' the dropdown after a change  
    var originalTitle = NWF$("#" + title).html();
    
    //when the selection changes
    NWF$("#" + selection).change(function () {
    
    //put the original html in the dropdown to check all the options
    NWF$("#" + title).html(originalTitle);
    
    //get the new value of the selection
    var choice = NWF$("#" + selection + " :checked")[0].value
    
    //if choice is all then we are done because the original html is in the dropdown again with all the options
    if (choice == "All") {
        return;
    }
    
    //create the array where you will store the ids of the options that match the choice
    var filteredIds = [];
    
    //for each option in the category drop down, see if the text matches the choice (this is your filtering)
    NWF$("#" + categoryDD + " option").each(function (i, n) {
    
        //if the text of the option matches the choice add the id to the array. 
        if (n.text == choice) {
            filteredIds.push(n.value);
        }
    });
    
    //initialize string of html
    var filteredTitlesHTML = ""
    
    //for each of the ids in the list, get the option html with that id from the title dropdown and add it to the resulting HTML string
    NWF$(filteredIds).each(function (i, n) {
        filteredTitlesHTML += NWF$("#" + title + " option[value = '" + n + "']")[0].outerHTML
    })
    
    //put the html in the dropdown to show only filtered values
        NWF$("#" + title).html(filteredTitlesHTML);
    })
    

    This shows the fields I used, the labels are the javascript variable names I gave them

  3. 你可以在图片中看到javascript变量名称我给控件使用我提供的javascript。