Top

Wzorzec sprawdzania zablokowanego pliku w Power Automate


W usłudze SharePoint Online za każdym razem, gdy tworzysz bibliotekę i włączasz, lub nie opcję „Wymagaj wyewidencjonowania” przed edycją dokumentów, użytkownicy mogą otwierać pliki do współpracy w przeglądarkach lub w lokalnych aplikacjach Office. Gdy to zrobią, plik staje się zablokowany przed dostępem, np. przy próbie zmiany jego metadanych. Jeśli utworzysz przepływ Power Automate, którego celem jest zaktualizowanie metadanych pliku lub jego stanu zatwierdzenia, zakończy się niepowodzeniem podczas próby wykonania tej akcji.

Powód?

Taka sytuacja może się pojawić w wielu sytuacjach:

  1. Ktoś przesyła plik i natychmiast otwiera go w przeglądarce;
  2. Ktoś uruchamia przepływ pracy na pliku, a następnie ktoś inny otwiera go, aby sprawdzić zawartość;
  3. Ktoś dostaje zadanie do przejrzenia dokumentu, otwiera go, ale zapomina zamknąć przed wykonaniem zadania
  4. I wiele więcej…

Ogólny powód jest taki, że plik jest zablokowany do wspólnego użytku (locked for shared use), a przepływ próbuje zaktualizować jego metadane i w konsekwencji dostaje błąd 400 (Bad request) wraz z informacją:

The file "file absolute url" is locked for shared use by admin@tenant.onmicrosoft.com.

W usłudze Power Automate nie istnieje rozwiązanie oob, które mogłoby pomóc w sprawdzaniu, czy plik jest zablokowany, czy nie. Ale z pomocą ustawień „Run after” i małej sztuczce, jesteś w stanie zbudować rozwiązanie.

Wzorzec zablokowanego pliku w Power Automate

Rozwiązanie, którego używam i chciałbym się z Tobą podzielić, jest dość proste. Musisz zbudować pętlę „do until” i zmienną boolean:

  1. Zainicjuj zmienną boolean i ustaw jej wartość na „fałsz”
  2. Dodaj pętlę „Do until” i ustaw warunek na: @equals (zmienne („YOUR VARIABLE”), true). Oznacza to, że pętla będzie działać, dopóki wartość zmiennej nie będzie ustawiona na „true”.
  3. Następnie dodaj akcję, która zakończy się niepowodzeniem, jeśli plik jest zablokowany do wspólnego użytku. Pamiętaj, że nie musisz powtarzać tego samego wzorca, jeśli masz więcej akcji aktualizujących metadane pliku w swoim przepływie. Zrób to tylko dla pierwszego w sekwencji tych działań.
  4. Następnie utwórz akcje równoległe (parallel branch). W jednej gałęzi dodaj akcję „Delay”. Ustaw czas opóźnienia np. 5 minut. Ustaw także jego konfigurację „Run after”, aby była wykonywana tylko wtedy, gdy akcja z kroku 3 nie powiedzie się:
    1. A. Kliknij ikonę wielokropka
    2. B. Następnie „Run after”
    3. C. W wyświetlonym formularzu wybierz tylko opcję „has failed” i „Done”.
  5. W drugiej gałęzi dodaj akcję „Set variable” i ustaw wartość zmiennej boolowskiej na „true”. Ta akcja zostanie wykonana tylko wtedy, gdy ustawienie metadanych w akcji nr 3 zakończy się pomyślnie.

I tak to działa. Pętla będzie wykonywać obroty, o ile plik jest zablokowany do wspólnego użytku i o ile akcja się nie zakończy powodzeniem. Gdy blokada zostanie zwolniona i akcja będzie mogła zaktualizować metadane, zmienna boolowska zostanie ustawiona na wartość true, pętla się zakończy, a przepływ pracy będzie kontynuowany.

Jeśli masz jakieś pytania dotyczące tego wzorca, zostaw je w komentarzach!

Bonus

Zamiast próbować pisać do pliku i w ten sposób sprawdzać, czy jest zablokowany do wspólnego użytku, możesz również wypróbować metodę opisaną przez Stefana Strube tutaj: Create flows with Power Automate to update Title field in libraries of newly created SharePoint site automatically – There’s Something About Dynamics 365 (2die4it.com). Użyj endpointa „lockedByUser”: _api/web/GetFileByServerRelativeUrl('URL')/lockedByUser by dostać wszystkie szczegóły na temat blokady dla pliku:

Następnie możesz użyć akcję „Parse JSON” by wyodrębnić istotne szczegóły, np.: LoginName, UserPrincipalName, Mail, informację czy użytkownik jest gościem, czy site adminem itp… Mając te informacje, możesz również zapętlić przepływ, dopóki blokada nie zostanie zwolniona, jednak wiedząc, kto utworzył blokadę, możesz również wysłać do niego e-mail z prośbą o zamknięcie pliku po jego/jej stronie.


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.