SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




Refresh einer ListView per jQuery und SPServices

Unbeantwortet Dieser Beitrag hat 3 Antworten

Ohne Rang
7 Beiträge
HSE_MLang erstellt 12 Apr. 2013 10:53
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Guten Morgen,

ich bin gerade dabei einen Instantfilter zu erstellen, der auch bei Paging funktioniert. Der instantfilter auf Codeplex basiert ja nur auf jQuery und blendet angezeigte Elemente aus, welches natürlich bei Paging alles andere als alle möglichen Ergebnisse liefert.

Ich habe daher den instantfilter mittels SPServices erweitert und habe aber da jetzt das Problem, das die zurückgelieferten gefilterten Elemente nicht angezeigt werden bzw. der Webpart mit der ListView nicht aktualisiert wird.

Die Frage ist daher, wie kann man das anstellen. Hier mal mein JavascriptCode mit CAML Query:

$(document).ready(function()
{   
//    jQuery.extend(jQuery.expr[':'], {
//      containsIgnoreCase:
    "(a.textContent||a.innerText||jQuery(a).text()||'').toLowerCase().indexOf((m[3]||'').toLowerCase())>=0"
//    });
   
    jQuery.extend(jQuery.expr[':'], {
        containsIgnoreCase: function(a,i,m) {
            return (a.textContent||a.innerText||jQuery(a).text()||'').toLowerCase().indexOf((m[3]||'').toLowerCase()) >= 0;
        }
     });
   
    $("table.ms-listviewtable tr.ms-viewheadertr").each(function()
    {
        if($("td.ms-vh-group", this).size() > 0)
        {
            return;   
        }
       
        var tdset = "";
       
        var colIndex = 0;
       
        $(this).children("th,td").each(function()
        {
            if($(this).hasClass("ms-vh-icon"))
            {
                // attachment
                tdset += "<td></td>";
            }
            else
            {
                // filterable
                tdset += "<td><input type='text' class='vossers-filterfield' filtercolindex='" + colIndex + "' /></td>";               
            }
           
            colIndex++;
        });
       
        var tr = "<tr class='vossers-filterrow'>" + tdset + "</tr>";
       
        $(tr).insertAfter(this);
    });   
   
   
    $("input.vossers-filterfield")
        .css("border", "1px solid #7f9db9")
        .css("width", "100%")
        .css("margin", "2px")
        .css("padding", "2px")
        .keyup(function()
        {           
            var inputClosure = this;
           
            if(window.VossersFilterTimeoutHandle)
            {
                clearTimeout(window.VossersFilterTimeoutHandle);
            }
           
            window.VossersFilterTimeoutHandle = setTimeout(function()
            {
               
                var filterValues = new Array();
               
                $("input.vossers-filterfield", $(inputClosure).parents("tr:first")).each(function()
                {               
                    if($(this).val() != "")               
                    {
                        filterValues[$(this).attr("filtercolindex")] = $(this).val();
                    }
                });       

                $(inputClosure).parents("tr.vossers-filterrow").nextAll("tr").each(function()
                {
                    var mismatch = false;
                   
                    $(this).children("td").each(function(colIndex)
                    {
                        if(mismatch) return;
                       
                        if(filterValues[colIndex])
                        {
                            var val = filterValues[colIndex];
                           
                            // replace double quote character with 2

                            val = val.replace(/"/g, String.fromCharCode(34) + String.fromCharCode(34));                           
                                                   
                            $().SPServices({ 
                                 operation: "GetListItems", 
                                 async: false, 
                                 listName: "testliste",
                                 CAMLQuery: "<Query><Where><Contains><FieldRef Name='Title'/><Value Type='Text'>" + val + "</Value></Contains></Where></Query>", 
                                 CAMLViewFields: "<ViewFields><FieldRef Name='Title'/><FieldRef Name='Company'/></ViewFields>",
                                 completefunc: function (xData, Status) {
                                     $(xData.responseXML).SPFilterNode("z:row").each(function() {
                                        var liHtml = "" + $(this).attr("ows_Title") + "";
                                        $("#tasksUL").append(liHtml);
                                    });
                                 }
                             });
                        }
                    });
                });               
            }, 250);
        });
});

Wenn mir jemand ne Idee für den weiteren Ansatz liefern könnte würde ich mich freuen.

Gruß M. Lang

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 12 Apr. 2013 13:10
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Tut mir leid, ich habe nicht den Nerv den ganzen Code zu analysieren, aber Du bringst zwei Dinge durcheinander: das eine ist es, bereits dargestellte Elemente zu manipulieren und das andere ist es, Elemente selbst (aus der Datenbank) abzufragen. Dann muß man sich natürlich auch um die Darstellung selbst kümmern und ich sehe keine Stelle, wo das geschehen könnte.

Ohne ausführliches Debugging wirst Du da nicht weiter kommen..

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
7 Beiträge
HSE_MLang Als Antwort am 12 Apr. 2013 13:53
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Also gibt es keine Möglichkeit per Javascript ein Query zu übergeben und die View anhand des Querys neu zu laden ?

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 12 Apr. 2013 14:11
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Dein Code macht das doch im Grunde schon, aber die gefundenen Elemente müssen auch dargestellt werden. In dem Fall mußt Du Dich aber komplett selbst darum kümmern.

Viele Grüße
Andi
af @ evocom de
Blog