0

私は SharePoint を使用しており、ライブラリからコンテンツを読み込んで、REST API を使用してリンクとして Web ページに表示することができます。ドキュメントがフォルダにアップロードされた順にコンテンツを「作成日」によって並べ替え、最後にアップロードされたアイテムを一番上に表示する方法を見つけました。ただし、このアクションを実行するためのより効率的な方法があると思います。私が一緒にハッキングしたスクリプトは、時々機能するようです。シーケンスがずれているように見えることもありますが、ブラウザを更新すると、希望のシーケンスの項目に返されます。以下は、このタスクを達成するために使用しているコードです。このアクションを達成するためのより良い方法があれば、大歓迎です。

<ul id="column1">
    <h2 id="newsletter"><img style="width: 40px; position: relative; right: 5px; top: 7px;" src="../SiteAssets/SitePages/Test Page/icons/DCSA_Portal_Newsletter.svg" alt="logo">Newsletter<img id="arrow1" src="../SiteAssets/SitePages/Test Page/icons/arrow.png" alt="logo"></h2>
    <ol></ol>
</ul>

getFilesFromFolder("/sites/dcsa/ep/epMainFiles/News/Newsletter").done(function(data) {
    $.each(data.d.results, function(i, item) {

        var spDate = new Date(item.TimeCreated.split('T')[0]) //example: '2015-10-30T05:00:00Z'
        var newTillDate = new Date();
      spDate.setDate(spDate.getDate() + 5);

        if (spDate <= newTillDate) {

        $("#column1 ol").append('<li class="linkData newsletter" style="padding-left: 10px; padding-right: 10px;" data-date="' + item.TimeCreated.split('T')[0] + '"><a href="' + 'https://intelshare.intelink.gov' + item.ServerRelativeUrl + '" target="_blank">' + item.Name.replace(/\.[^/.]+$/, "") + " - " + '<span style="color: red;">' + item.TimeCreated.split('T')[0] + '</span>' + '</a></li>');

      } else {

         $("#column1 ol").append('<li class="linkData newsletter" style="padding-left: 10px; padding-right: 10px;" data-date="' + item.TimeCreated.split('T')[0] + '"><a href="' + 'https://intelshare.intelink.gov' + item.ServerRelativeUrl + '" target="_blank"><img class="newArrow" style="width: 60px; position: relative; right: 5px; top: 0px;"src="../SiteAssets/SitePages/Test Page/icons/arrow-with_new2.gif" alt="logo">' + item.Name.replace(/\.[^/.]+$/, "") + " - " + '<span style="color: red;">' + item.TimeCreated.split('T')[0] + '</span>' + '</a></li>');

     }
      col1_chgOrder();
    });
});

function col1_chgOrder() {
    var container = $("#column1 ol");
    var items = $("#column1 ol .linkData");

 items.each(function() {
     // Convert the string in 'data-event-date' attribute to a more
      // standardized date format
     var BCDate = $(this).attr("data-date");
     /*console.log(BCDate);
        var standardDate = BCDate[1]+" "+BCDate[0]+" "+BCDate[2];*/
     var standartDate = new Date(BCDate).getTime();
      $(this).attr("data-event-date", standartDate);
     //console.log(standartDate);
    });
 items.sort(function(a, b) {
        a = parseFloat($(a).attr("data-event-date"));
     b = parseFloat($(b).attr("data-event-date"));
        return a < b ? -1 : a > b ? 1 : 0;
    }).each(function() {
        container.prepend(this);
   });

}

function getFilesFromFolder(serverRelativeUrlToFolder) {
return $.ajax({
    url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/GetFolderByServerRelativeUrl('" + serverRelativeUrlToFolder + "')/files",
    method: "GET",
    async: false,
    headers: {
        "Accept": "application/json; odata=verbose"
    }
});
}
4

2 に答える 2

0

Jsom を使用して、順序付きの caml クエリでファイルを取得します。

<script type="text/javascript">
    $(function () {
        ExecuteOrDelayUntilScriptLoaded(retrieveFiles, "sp.js");
    })
    function retrieveFiles() {
        var ctx = SP.ClientContext.get_current();
        var docLib = ctx.get_web().get_lists().getByTitle("MyDoc");
        var camlQuery = new SP.CamlQuery();
        camlQuery.set_viewXml(
            "<View Scope='RecursiveAll'><Query><OrderBy><FieldRef Name=\"Created\" Ascending=\"False\"/></OrderBy></Query></View>");
        camlQuery.set_folderServerRelativeUrl("/MyDoc/FolderA"); 
        var Files = docLib.getItems(camlQuery);
        ctx.load(Files);
        ctx.executeQueryAsync(Function.createDelegate(this, function () {
            var listItemEnumerator = Files.getEnumerator();
            while (listItemEnumerator.moveNext()) {
                var oListItem = listItemEnumerator.get_current();
                alert(oListItem.get_id());
            }
        }), Function.createDelegate(this, function () {
            alert('error');
        }));
    }
</script>
于 2020-03-09T06:44:07.233 に答える