Column formatting, uruchamianie Flow i warunki

#Office 365, #SharePoint, #PowerApps, #Flow, #MS Graph, #Webcon BPS, #Running & #Technology

Column formatting, uruchamianie Flow i warunki

W SharePoint zastosowanie column formattingu do uruchamiania Flow dla elementów lub plików jest praktyką szeroko stosowaną. Chodzi tutaj o Flow’y wyzwalane ręcznie, np. „For a selected item…”. Dzięki temu zamiast szukać procesu na rozwijanej liście na poziomie listy/biblioteki lub z menu kontekstowego danego elementu możemy szybko uruchomić proces klikając w jeden link.

Przykładowo, na bibliotece dokumentów mam dostępny proces recenzji nazwany „Send for review”. Można go wyzwolić dla wybranego dokumentu, podając jednocześnie maila użytkownika, który powinien dokument przejrzeć.  Żeby uruchomić ten Flow z linku na kolumnie wystarczy że:

  1. Do biblioteki dodam nową kolumnę „Action” typu calculated z pustą formuła (=””). W tym przypadku warto stosować kolumny typu calculated a nie np. text, ponieważ nie pojawiają się one na formularzach.
  • Formatuję kolumnę przy użyciu poniższego JSONa, gdzie w linii 6 wskazuję identyfikator uruchamianego procesu a w 28 tekst, który ma zostać wyświetlony w jako link
{
  "$schema": "https://developer.microsoft.com/json-schemas/sp/column-formatting.schema.json",
  "elmType": "button",
  "customRowAction": {
    "action": "executeFlow",
    "actionParams": "{\"id\": \"ed9f9f61-fef6-4f73-90d5-eb6914722cc7\"}"
  },
  "attributes": {
    "class": "ms-fontColor-themePrimary ms-fontColor-themeDarker--hover"
  },
  "style": {
    "border": "none",
    "background-color": "transparent",
    "cursor": "pointer"
  },
  "children": [
    {
      "elmType": "span",
      "attributes": {
        "iconName": "Flow"
      },
      "style": {
        "padding-right": "6px"
      }
    },
    {
      "elmType": "span",
      "txtContent": "Send for review"
    }
  ]
}

Teraz mogę uruchomic proces bezpośrednio z poziomu biblioteki, klikająć w link „Send for review”:

Co w sytuacji, gdy procesów mamy więcej niż jeden ale nie koniecznie chcemy dla każdego tworzyć osobną kolumnę? Jeżeli procesy są od siebie w jakiś sposób zależne, np. następują jeden po drugim w zależności od tego jaki status ma dokument, możemy w formatowaniu dodać pewne warunki.

Załóżmy, że po procesie przeglądu artykułu w przypadku pozytywnego rezultatu chcemy uruchomić proces ostatecznej akceptacji. Zatem poza procesem „Send for review” dochodzi jeszcze jeden, „Send for approval”. Chcemy natomiast, aby uruchomienie drugiego możliwe było tylko wtedy, gdy pozytywnie zakończy się pierwszy.

Na początek do biblioteki dodaję kolumnę choice nazwaną „Status”. Może przyjąć wartości „Draft”, „Reviewed”, „Approved” lub „Rejected”. Domyślnie każdy dokument otrzyma wartość „Draft” i możliwy będzie do uruchomienia proces „Send for review”. Po pozytywnym przeglądzie proces zaktualizuje wartość kolumny na „Reviewed”. Od tej pory powinien być możliwy do uruchomienia proces „Send for approval”.

Jak w takim przypadku powinno wyglądać formatowanie kolumny „Action”? Zmodyfikujmy nieco poprzedniego JSONa, aby wyglądał jak poniżej.

{
    "$schema": "https://developer.microsoft.com/json-schemas/sp/column-formatting.schema.json",
    "elmType": "button",
    "customRowAction": {
      "action": "executeFlow",
      "actionParams": "='{\"id\": \"' + if([$Status]=='Draft','ed9f9f61-fef6-4f73-90d5-eb6914722cc7',if([$Status]=='Reviewed','ae99b79b-7ac2-4a6d-80ee-3f8528ea26d7','')) + '\"}'"
    },
    "attributes": {
      "class": "='ms-fontColor-' +if([$Status]=='Draft','orangeLight',if([$Status]=='Approved','teal','redDark'))"
    },
    "style": {
      "border": "none",
      "background-color": "transparent",
      "cursor": "pointer",
      "display": "=if([$Status]=='Rejected','none','inherit')"
    },
    "children": [
      {
        "elmType": "span",
        "attributes": {
          "iconName": "=if([$Status]=='Draft','ReviewRequestSolid',if([$Status]=='Reviewed','DocumentApproval',''))"
        },
        "style": {
          "padding-right": "6px"
        }
      },
      {
        "elmType": "span",
        "txtContent": "=if([$Status]=='Draft','Send for review',if([$Status]=='Reviewed','Send for approval',''))"
      }
    ]
  }

Przede wszystkim w actionParams dodajemy warunki, które w zależności od wartości w kolumnie „Status” pozwolą na uruchomienie różnych procesów. Podobne warunki możemy dodać także w miejscach gdzie definiujemy jakich chcemy używać ikon, kolorów lub tekstu.

Rezultat wygląda jak poniżej.

Dodatkowo, w actionParams możemy także zmodyfikować wyświetlany domyślnie tekst nagłówka („Run flow”) jak i samego przycisku uruchamiającego Flow („Run”).

Wystarczy do actionParam dodać właściwość „headerText” oraz „runFlowButtonText”, z odpowiednimi wartościami, tak jak w poniższym przykładzie.

{
    "$schema": "https://developer.microsoft.com/json-schemas/sp/column-formatting.schema.json",
    "elmType": "button",
    "customRowAction": {
      "action": "executeFlow",
      "actionParams": "='{\"id\": \"' + if([$Status]=='Draft','ed9f9f61-fef6-4f73-90d5-eb6914722cc7',if([$Status]=='Reviewed','ae99b79b-7ac2-4a6d-80ee-3f8528ea26d7','')) + '\", \"headerText\":\"'+ if([$Status]=='Draft','Send my article for review',if([$Status]=='Reviewed','Send my article for approval','')) +'\", \"runFlowButtonText\":\"'+ if([$Status]=='Draft','Send for review',if([$Status]=='Reviewed','Send for approval','')) +'\"}'"
    },
    "attributes": {
      "class": "='ms-fontColor-' +if([$Status]=='Draft','orangeLight',if([$Status]=='Approved','teal','redDark'))"
    },
    "style": {
      "border": "none",
      "background-color": "transparent",
      "cursor": "pointer",
      "display": "=if([$Status]=='Rejected','none','inherit')"
    },
    "children": [
      {
        "elmType": "span",
        "attributes": {
          "iconName": "=if([$Status]=='Draft','ReviewRequestSolid',if([$Status]=='Reviewed','DocumentApproval',''))"
        },
        "style": {
          "padding-right": "6px"
        }
      },
      {
        "elmType": "span",
        "txtContent": "=if([$Status]=='Draft','Send for review',if([$Status]=='Reviewed','Send for approval',''))"
      }
    ]
  }

 

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *