Rufen Sie mit AngularJS alle Versionen des Felds eines SharePoint-Kommentars auf

Oct 13 2020

Ich habe mit AngularJS eine Liste mit ng-repeat erstellt. Die Daten stammen aus einer SharePoint-Liste. Wenn ich in meiner SharePoint-Liste öffne, um die Details anzuzeigen, kann ich den Versionsverlauf des Felds "Kommentare" sehen: Es sieht folgendermaßen aus:

Wenn ich jedoch das Detail in meiner Angular-Liste öffne, wird nur die neueste Nachricht angezeigt (und nur die Nachricht, ohne den Namen der Person, die sie geschrieben hat, und das Datum). Meine Liste sieht folgendermaßen aus:

Meine Frage ist also, wie ich nach dem Versionsverlauf suchen und ihn mit Angular anzeigen kann. Und wenn möglich mit dem Namen der Person und dem Datum.


Bearbeiten:

Dank @Marko_Tica weiß ich, dass es eine API gibt, mit der der Versionsverlauf jedes Elements aufgerufen werden kann, wie in dieser Antwort angegeben . Damit habe ich das, was ich brauchte: nur den Versionsverlauf des "Kommentarfeldes" anzuzeigen. Die Sache ist jetzt, dass diese Formel mich zwingt, für jeden Artikel einen Anruf zu tätigen, da ich die Artikel-ID in der URL angeben muss :

https://myDomain.com/sites/mySite/_api/web/Lists/getbytitle('MyListName')/items(ITEMID)/versions

Meine Liste enthält wie tausend Artikel. Außerdem rufe ich bereits an, um die Listenelemente in einer Tabelle anzuzeigen. Wenn Sie auf ein Element klicken, zeigt ein Modal die detaillierten Informationen an. Ich muss den Versionsverlauf von Kommentaren in dieses Modal einfügen.
Wie kann ich erreichen, dass beim Klicken auf ein bestimmtes Element nur der Versionsverlauf des ausgewählten Elements angezeigt wird?

Antworten

MarkoTica Oct 13 2020 at 20:27

Schauen Sie sich diese Lösung an und ändern Sie sie an Ihre Bedürfnisse. https://joeldsouzasite.wordpress.com/2015/12/06/display-version-history-through-javascript-list/

Grundsätzlich müssen Sie anrufen _layouts/15/Versions.aspx

 url:weburl+’_layouts/15/Versions.aspx?list=’ + currentListGUID + ‘&ID=’+item1+’&Source=’+weburl+’/Lists/’+title+’/AllItems.aspx’,

Stackoverflow Antwort hier https://stackoverflow.com/questions/24423657/sharepoint-2013-get-splistitem-versions-via-rest

SoulEeater Oct 18 2020 at 01:48

Also habe ich einen Weg gefunden, dies zu tun. Wenn ich die SharePoint-Liste aufrufe (oder anfordere), habe ich nur einen weiteren Aufruf innerhalb der Modalfunktion ausgeführt, um den Versionsverlauf des ausgewählten Elements aufzurufen.

HTML:
Ich mache eine ng-Wiederholung der angeforderten Elemente und mache einen ng-Klick, um das Modal zu öffnen, wenn Sie auf den Titel des Elements klicken

<table>
   <tr>
      <th>ID</td>
      <th>name</th>
   </tr>
   <tr ng-repeat="x in data">
      <td>{{x.ID}}</div>
      <td ng-click="showDetails(x)">{{x.LinkTitle}}</div>
   </tr>
</table>

JS:
Eine normale http- Anfrage. Und in der Funktion des Modals stelle ich die Anfrage nach dem Versionsverlauf

$http({ method: "GET", url: "https://myDomain.com/sites/mySite/_api/web/lists/getByTitle('MyListName')/items?$select=*,LinkTitle,&$top=10000", headers: { "Accept": "application/json; odata=verbose" } }).then(function onSuccess(response) { $scope.data = response.data.d.results;
         
   //Code that opens the modal when a certain item is clicked
   $scope.showDetails = function(x){ //Request the versions of the clicked item. Notice in the URL I put the ID of current clicked item $http({
         method: "GET",
         url: "https://myDomain.com/sites/mySite/_api/web/lists/getbytitle('MyListName')/items(" + x.ID + ")/versions",
         headers: { "Accept": "application/json; odata=verbose" }
      }).then(function onSuccess(response) {
         $scope.versionsData = response.data.d.results; }); $scope.x = x;
      $('#myModal').modal('show');
   }
});

Hier ist der HTML-Code des Modals. Ich verwende das Modal von Bootstrap.
Ich habe eine Liste innerhalb einer Liste erstellt. In den Kommentaren habe ich eine ng-Wiederholung für die Versionen eingefügt und nur diejenigen gefiltert, bei denen sich die "Kommentare" geändert haben (mit ng-if).

<div id="myModal" class="modal fade" role="dialog" tabindex="-1">
   <div class="modal-dialog">
      <div class="modal-content">
         <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal">&times;</button>
         </div>
         <div class="modal-body">
            <ul class="detail-view">
               <li><b>Title</b></li>
               <li>{{x.LinkTitle}}</li>
               <li><b>Comments</b></li>
               <ul>
                  <li ng-repeat="f in versionsData" ng-if="f.Comments">
                     <!-- I tried to replicate the way SharePoint shows the info (with name, date and comment --->
                     {{f.Editor.LookupValue}} ({{f.Modified | date: 'MM/dd/yyyy'}}): {{f.Comments}}
                  </li>
               </ul>
               <li><b>Status</b></li>
               <li>{{x.Status}}</li>
                .
                .
                .
            </ul>
         </div>
      </div>
   </div>
</div>