【问题标题】:Conditional Formatting for items created in the last 5 minutes in SharePoint 2010SharePoint 2010 中过去 5 分钟内创建的项目的条件格式
【发布时间】:2016-07-19 01:13:42
【问题描述】:

全部,

我整天都在寻找并尝试了许多解决方案,但就是无法让它发挥作用。我们的团队设计了一个不断更新的列表,我们希望仅在 5 分钟内突出显示新创建的项目。 5分钟后,该行将恢复正常。 (仅供参考 - 列表投影在显示器上并使用 AJAX 异步更新每 15 秒更新一次)

基本上,我想对最近 5 分钟内创建的列表项设置条件格式。如果该项目是在过去 5 分钟内创建的,则该行将突出显示。 5分钟后,该行将恢复正常。

我尝试了 SharePoint Designer 条件格式,方法是创建一个名为“Created + 5”的日期/时间格式的计算列,并尝试设置一个表达式,当“Created + 5”大于或等于当前日期。所以5分钟后,该行将不再突出显示(因为当前日期/时间将超过“Created + 5”值)

这是来自 SPD 高级条件生成器的表达式:

ddwrt:DateTimeTick(ddwrt:GenDisplayName(string($thisNode/@Created_x0020__x002b__x0020_5_x))) >= ddwrt:DateTimeTick(ddwrt:GenDisplayName(string($Today)))

我认为问题在于 [Current Date] 选项(表达式生成器中的 $Today)只考虑日期而不考虑时间。看起来它只是突出显示了今天创建的所有内容,这不是很有用。

有什么想法或帮助!?我从来没有搞乱过高级条件,因为通常基本的东西对我来说很好!如果有人有任何其他想法,比如 JavaScript 或其他任何可行的方法,我也愿意接受,只要它会不断更新!

谢谢大家!!!!

【问题讨论】:

    标签: sharepoint xpath sharepoint-2010 conditional-formatting


    【解决方案1】:

    【讨论】:

    • 是的,这就是为什么我要避免计算列并试图弄清楚如何在 SPD 中做到这一点。 $Today 以条件格式工作,因为它是 XSL,但它只提取日期而不是时间....
    【解决方案2】:

    由于您希望它自动更新而不需要有人手动刷新页面,因此 JavaScript 是您的最佳选择。您可以让函数在指定的时间间隔内重复运行,根据日期列中的值检查当前日期。

    类似以下代码的代码会起作用,但您可能需要调整在对 document.querySelector 和 querySelectorAll 的调用中指定的 CSS 选择器以匹配您的特定 HTML。

    <script>
    formatCell();
    function formatCell(){
        var frequencyToCheck = 2 /* num seconds between updates */
        var minutes = 5; /* num minutes back to highlight */
        var targetColumn = "Display name of the column you want to check";
        var formatting = "background-color:darkred;color:red;font-weight:bold;";
        var comparisonDate = new Date();
        comparisonDate.setHours(comparisonDate.getHours() - minutes);
        var tables = document.querySelectorAll("table.ms-listviewtable"); /* should get all list view web parts on the page */
        var t_i = 0;
        while(t_i < tables.length){
            var headings = tables[t_i].rows[0].cells;
            var columnIndex = null;
            var h_i = 0;
            while(h_i < headings.length){
                var heading = headings[h_i].querySelector("div:first-child");
                if(heading != null){
                    var displayName = heading.DisplayName ? heading.DisplayName : (heading.innerText ? heading.innerText : heading.textContent);
                    displayName = displayName.replace(/^\s+|\s+$/g,''); /* removes leading and trailing whitespace */
                    if(displayName === targetColumn){
                        columnIndex = h_i;
                        break;
                    }
                }
                h_i += 1;
            }
            if(columnIndex != null){ /* we found a matching heading */
                var rows = tables[t_i].rows;
                for(var i = (rows.length > 0 ? 1 : 0); i < rows.length; i++){
                    var cells = rows[i].children;
                    if(cells.length <= columnIndex){continue;}
                    var valueToEval = cells[columnIndex].innerText ? cells[columnIndex].innerText : cells[columnIndex].textContent;
                    if(typeof valueToEval == "undefined"){valueToEval = "";}
                    valueToEval = new Date(valueToEval);
                    if(valueToEval > comparisonDate){
                        cells[columnIndex].setAttribute("style",formatting);
                    }else{
                        cells[columnIndex].setAttribute("style","");
                    }
                }
            }
            t_i +=1;
        }
        setTimeout(formatCell,frequencyToCheck * 1000);
    }
    </script>
    

    一个潜在的缺陷是,虽然这种方法会根据记录的显示值适当地“老化”记录(导致它们在变得陈旧时不再突出显示),但它不会自动获取列表的新更改;每当您想查看更新的信息时,都需要刷新页面(或至少刷新 Web 部件中的视图)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-30
      • 2015-04-17
      • 1970-01-01
      • 2018-08-26
      • 2012-05-28
      • 1970-01-01
      • 2016-08-10
      • 1970-01-01
      相关资源
      最近更新 更多