Czy wiesz, że można znacznie uprościć proces przekazywania dokumentu do kolejnego etapu obiegu?

Zamiast ręcznie wybierać uprawnienia z rozbudowanej listy „Uprawnienia do następnego etapu”, można wskazać pracownika bezpośrednio w kontrolce na formularzu dokumentu — z zawężonej i precyzyjnie dobranej listy dostępnych osób.

W momencie kliknięcia przycisku „Przejdź do następnego etapu”,

osoba wskazana w kontrolce typu Lista na karcie obiegu automatycznie zostanie przypisana do uprawnień na kolejny etap. Dzięki temu dokument trafi do właściwego pracownika, który został wybrany, bez konieczności dodatkowej, ręcznej konfiguracji uprawnień.

Warunkiem koniecznym działania tego mechanizmu jest przypisanie w definicji typu obiegu do etapu, do którego automatycznie przypisujemy wskazanego w kontrolce typu Lista pracownika, użytkownika technicznego (można utworzyć pracownika „Techniczny” bez uprawnień administratora).

W przypadku, gdy nie zostanie wybrana osoba w kontrolce typu Lista, w momencie przekazania dokumentu do następnego etapu pojawi się komunikat:

„Nie wybrano dodatkowych uprawnień w kontrolce Pracownik. Wybierz pracownika z Listy, aby można było przekazać dokument do następnego etapu.”

 

Komunikat wyświetlany, gdy nie zostanie wybrana osoba w kontrolce typu Lista, w momencie przekazania dokumentu do następnego etapu

 

 

Konfiguracja przykładu:

1. W ramach typu obiegu należy dodać następujące kontrolki:

  • kontrolkę typu Lista „Dział” (identyfikator: Dzial) – którą należy zainicjować za pomocą następującego zapytania SQL:
 select dcd_id, DCD_Name1 from do.DF_ConfOSDictionary where dcd_type=1 and DCD_Archival=0

 

Konfiguracja kontrolki typu Lista „Dział”

  • kontrolkę typu Lista „Pracownik” (identyfikator: Pracownik) –  w ramach pola „Kontrolki powiązane” należy wybrać kontrolkę „Dział (Dzial)”; kontrolkę „Pracownik” natomiast należy zainicjować za pomocą nastepującego zapytania SQL:
 select t2.dcd_id, t2.dcd_Name1 from do.DF_ConfOSTree as t1
inner join do.DF_ConfOSDictionary as t2 on t1.DCO_DCDId=t2.DCD_ID
inner join do.DF_ConfOSTree as t3 on t1.DCO_DCOId=t3.DCO_ID 
left join do.DF_ConfOSDictionary as t4 on t4.DCD_ID=t3.DCO_DCDId
where t1.DCO_Archival=0 and t2.dcd_type=2 and t4.DCD_Name1=@Dzial_Text@

 

Definicja kontrolki typu Lista „Pracownik”

 

2. Następnie należy przypisać użytkownika Technicznego na definicji typu obiegu do etapu, do którego ma zostać przekazany dokument – w przykładzie jest to etap „Akceptacja”

Należy zapisać wprowadzone zmiany.

Przypisanie użytkownika Technicznego

 

3. Na bazie BPM należy zmodyfikować procedurę On.DocumentPropagation.

 

Uwaga
Należy pamiętać,  aby  w ramach przykładu procedury On.DocumentPropagation zmienić Id typu obiegu dla DFH_Id na id typu obiegu, którego ma dotyczyć.

Jeżeli:

  • zmieniono identyfikator kontrolki „Pracownik”, wówczas należy wpisać aktualny identyfikator dla DKO_Name
  • zmieniono nazwę etapu na inną niż „Akceptacja”, wówczas należy wprowadzić nazwę etapu dla DDS_Name

 

Przykład modyfikacji procedury On.DocumentPropagation:

ALTER PROCEDURE [do].[OnDocumentPropagation]

@WorkflowId as int = NULL, -- DSH_ID z tabeli DF_ConfDSHead

@StageId as int = NULL,-- DDS_ID z tabeli DF_ConfDSDictionary

@DocumentId as int = NULL, -- DWD_ID z tabeli DF_Work

@PropagatedById as int = NULL, -- DCD_ID z tabeli DF_ConfOSDictionary

@DocumentOwnerId as int = NULL, -- DWD_DCDOwnerId z tabeli DF_Work

@IsAutomaticPropagation as bit = NULL

AS

------------------------Początek-----------------------------

BEGIN

DECLARE @ErrorMessage NVARCHAR(MAX);

BEGIN TRY

/* Warunek przekazania dokumentu w określonym typie obiegu i etapie */

IF EXISTS (

SELECT 1

FROM do.RO_StageActive

WHERE DFH_Id = 6 /* Id typu obiegu Dynamiczne uprawnienia Lista */

AND DDS_Name = 'Akceptacja' /* Nazwa etapu, do którego przekazujemy dokument */

AND DWD_ID = @DocumentId

)

BEGIN

/* Sprawdzenie, czy nie zostały wybrane uprawnienia w kontrolce Pracownik */

IF EXISTS (

SELECT 1

FROM do.DF_ConfCFCardDokFlow c

JOIN do.df_workcf w ON c.DKO_ID = w.DWC_DKOId

WHERE c.DKO_Name = 'Pracownik' -- identyfikator kontrolki lista

AND w.DWC_DWDId = @DocumentId

AND w.DWC_ValueListPos IS NULL

)

BEGIN

/* Rzucenie komunikatu, jeśli nie wybrano uprawnień w kontrolce typu Lista o nazwie Pracownik */

SET @ErrorMessage = 'UWAGA!!! ' + CHAR(13) + CHAR(10) +

'Nie wybrano dodatkowych uprawnień w kontrolce Pracownik.' + CHAR(13) + CHAR(10) +

'Wybierz pracownika z Listy, aby można było przekazać dokument do następnego etapu.';

THROW 50001, @ErrorMessage, 1;

END

/* Dodanie dynamicznych uprawnień */

INSERT INTO do.DF_WorkDSAccess ([WSA_DWSId], [WSA_DCDId], [WSA_DCPId], [WSA_TypeAccess], [WSA_Archival])

SELECT DISTINCT

s.DWS_ID,

w.DWC_ValueListPos,

NULL,

0,

0

FROM do.RO_ControlsValue c

JOIN do.DF_WorkCF w ON w.DWC_DKOId = c.DKO_ID

JOIN do.RO_StageActive s ON s.DWD_ID = w.DWC_DWDId

WHERE c.DKO_Name = 'Pracownik' -- identyfikator kontrolki lista

AND w.DWC_DWDId = @DocumentId;

END

END TRY

BEGIN CATCH

/* Obsługa błędów */

DECLARE @CatchErrorMessage NVARCHAR(MAX) = ERROR_MESSAGE();

DECLARE @ErrorSeverity INT = ERROR_SEVERITY();

DECLARE @ErrorState INT = ERROR_STATE();

RAISERROR (@CatchErrorMessage, @ErrorSeverity, @ErrorState);

END CATCH

END

 

4.  Nastepnie należy utworzyć nowy dokument i wybrać pracownika w kontrolce typu Lista o nazwie Pracownik (identyfikator: Pracownik)

 

Uwaga
Pomimo przypisania użytkownika Technicznego dokumentu nie można przekazać (pojawia się stosowny komunikat), dopóki nie zostanie wybrany pracownik w kontrolce typu Lista o nazwie Pracownik.

 

Wyświetlanie komunikatu przy próbie rzekazania dokumentu do kolejnego etapu, gdy nie wybrano pracownika w kontrolce typu Lista

 

5. Po wybraniu pracownika dokument zostaje przekazany do tej osoby.

 

Widok dokumentu po przekazaniu do nastepnego etapu do wybranego pracownika

 

Rozpoczynasz pracę z Comarch BPM (dawniej DMS) i chcesz dowiedzieć się, jak korzystać z programu? A może masz już podstawową wiedzę o Comarch BPM (dawniej DMS) i chcesz dowiedzieć się więcej?

Sprawdź Szkolenia Comarch BPM!