Programistyczny dostęp do pól wewnątrz rozgałęzionego procesu BPF w CRM 2015

Business Process Flows, Dynamics CRM

Większość programistów pracujących z systemem Dynamics CRM spotkała się w którymś momencie kariery z problemem dostępu do pól w pasku procesu BPF. Początkowo nie było to zupełnie wspierane przez MS, później firma udostępniła te pola programistom front-end za pomocą następującej składni: „header_process_<attribute name>”.

Przykładowo, jeżeli chcemy ustawić pole o nazwie „Job Title” w pasku BPF, jako tylko do odczytu – musimy umieścić w kodzie JS następującą linię:

Xrm.Page.getControl(“header_process_jobtitle”).setDisabled(true);

Swoją drogą – w CRM 2015 – API pozwalające na zarządzanie procesem biznesowym zostało znacznie rozbudowane i w końcu można go w sensowny sposób używać, ale nie o tym będzie tutaj mowa…

Najnowsza wersja systemu Dynamics CRM pozwala na tworzenie procesów biznesowych, zawierających odgałęzienia. Kolejne etapy procesu mogą różnić się w zależności od wartości pól uzupełnionych w etapach je poprzedzających.

Wyobraźmy sobie teraz, że mamy proces składający się z 2 etapów (etap 1 wspólny dla wszystkich, natomiast etap 2 – osobny dla każdej z gałęzi procesu) W zależności od wybranej wartości w polu w etapie 1 – proces kieruje nas do jednej z 3 gałęzi. W każdej z gałęzi w kolejnym kroku w pasku procesu widoczne jest pole „Job Title”, które jest tylko do odczytu (prośba o niedoszukiwanie się biznesowego sensu w ww. scenariuszu :)).

Za pomocą kodu JavaScript chcemy teraz ustawić pole „Job Title”, jako „Tylko do odczytu”. Dla pierwszej z gałęzi przytoczony powyżej kod działa bez problemu. Natomiast przy przejściu do gałęzi numer 2 lub 3 czeka nas niespodzianka – pola pozostają edytowalne. Nie pomaga w tym przypadku umieszczenie kodu ustawiającego edytowalność pola w ramach obsługi zdarzenia zmiany etapu procesu.

Opisana powyżej sytuacja wynika z faktu, że w kolejnych gałęziach procesu identyfikatory elementu HTML odpowiadającego za wyświetlanie pola „Job Title” różnią się od domyślnych. Wygląda to mniej-więcej w następujący sposób:

  • Branch 1 – header_process_jobtitle
  • Branch 2 – header_process_jobtitle1
  • Branch 3 – header_process_jobtitle2

Chcąc ustawić edytowalność pola w gałęziach innych niż pierwsza z kolejności – musimy skorzystać z identyfikatorów, opisanych powyżej. Przykładowo – ustawienie pole „Job Title”, jako „Tylko do edycji” w drugiej gałęzi procesu – wygląda następująco:

Xrm.Page.getControl(“header_process_jobtitle1”).setDisabled(true);

Oczywiście, wielki brat z Redmond zapomniał o tym wspomnieć w dokumentacji API i SDK…

Total Views: 434 ,