Top

Przywracanie usuniętych w SharePoint plików z Power Automate


Znając wyzwalacz w Power Automate o nazwie „When a file is deleted” wiele osób pyta, czy istnieje możliwość przywrócenia usuniętego pliku lub usunięcia go na stałe? I owszem, jest to możliwe. Pokażę Ci, jak to zrobić.

Obiekt RecycleBin

Najlepszym sposobem na osiągnięcie tego jest użycie obiektu SP.RecycleBinItem z biblioteki podstawowych obiektów SharePoint (Core Objects’ Library, więcej). Obiekt ma dwie metody:

  • deleteObject – trwale usuwa element z kosza
  • restore– przywraca element z kosza
  • http://<sitecollection>/<site>/_api/web/RecycleBin(recyclebinitemid)/deleteObject()
  • http://<sitecollection>/<site>/_api/web/RecycleBin(recyclebinitemid)/restore()

Uwaga: jeśli budujesz to rozwiązanie dla witryny, będącej główną witryną kolekcji witryn lub dla modern team/ communication site, zastąp web na site, aby uzyskać dostęp do kosza witryny:
http://<sitecollection>/<site>/_api/site/RecycleBin(recyclebinitemid)/restore()

Kluczowym wyzwaniem przy użyciu powyższych endpointów uzyskanie „recyclebinitemid„. Pokażę Ci, jak to zrobić.

When a file is deleted

Ten wyzwalacz jest uruchamiany po usunięciu elementu w aplikacji SharePoint (źródło). Akcja ta jednak ma bardzo ograniczoną liczbę zwracanych danych i są one mało przydatne dla naszego scenariusza:

{
  "ID": [ID elementu w bibliotece SharePoint],
  "Name": "[Nazwa wyświetlana]",
  "FileNameWithExtension": "[Nazwa wyświetlana + rozszerzenie]",
  "DeletedByUserName": "[Imię i nazwisko usuwającego]",
  "TimeDeleted": "[Data i czas usunięcia]",
  "IsFolder": [prawda/ falsz]
}

Zakres informacji, jaki możemy uzyskać o każdym usuniętym pliku, gdy odpytamy endpoint http://<sitecollection>/<site>/_api/web/RecycleBin jest znacznie szerszy. W danych od triggera brakuje m. in. informacji o ścieżce, pod którą plik był pierwotnie obecny, oraz identyfikatora elementu w koszu, którego możemy użyć do przywrócenia lub trwałego usunięcia pliku. Jak ten identyfikator zdobyć? Patrz poniżej.

Recycle Bin Item ID

By go otrzymać wykonaj poniższe akcje:

  1. Wywołaj endpoint http://<sitecollection>/<site>/_api/web/RecycleBin używając akcji „Send an HTTP request to SharePoint”.
  2. Odifltruj zwrócone dane pozostawiając wyłącznie te rekordy, w których nazwa pliku z rozszerzeniem jest równa tej, z danych w koszu.
  3. Sparsuj otrzymany JSON.
  4. Przywróć element z kosza korzystając z parametru Recycle Bin Item ID, poprzez użycie akcji „Send an HTTP request to SharePoint”.

W kroku nr 2 użyj: body('Get_files_from_Recycle_Bin')['d']['results'] dla pola „From” oraz item()['Title'] is equal to triggerBody()?['FileNameWithExtension'] dla ustawień filtra.

Następnie użyj akcji do sparsowania zwróconego rekordu i pobierz body('Parse_JSON')['Id'] jako parametr w polu Uri do przywrócenia elementu korzystając ze endpoint: _api/site/RecycleBin('@{body('Parse_JSON')?['Id']}')/restore().

Dlaczego jest to przydatne?

Ta prosta, ale ważna funkcjonalność może pomóc w zarządzaniu plikami SharePoint (tzw. governance), co w naszych czasach jest bardzo ważne. Możliwość usunięcia pliku jest przywilejem większości użytkowników, jednak dodanie dodatkowej warstwy w celu sprawdzenia, czy plik można było rzeczywiście usunąć, a następnie przywrócenie go to już inna sprawa.

Ponadto w przypadku wszystkich scenariuszy, w których należy zsynchronizować dane między bibliotekami lub SPO i on-prem, ten wyzwalacz jest również bardzo przydatny.

Jeśli masz jakieś pytania, zostaw je w komentarzach poniżej. Dzięki!


Tomasz Poszytek

Cześć! Nazywam się Tomasz. Jestem ekspertem w dziedzinie automatyzacji procesów i budowaniu rozwiązań dla biznesu z użyciem Power Platform. Jestem Microsoft MVP i Nintex vTE.

Brak komentarzy

Wyślij komentarz

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.