Prozeduren
Comarch BPM bietet Prozeduren (Trigger), die die Funktionalität der Prozessmodellierung um die Möglichkeit erweitern, zusätzliche Aktionen auszuführen, die durch ein bestimmtes Ereignis ausgelöst werden, das während der Arbeit mit der Anwendung auftritt.
Comarch BPM ist unter anderem mit den folgenden Triggern ausgestattet:
Datenbank Comarch BPM
In jeder der Prozeduren (Trigger) wurden Ausnahmen (Try-Catch) unterstützt mit der Möglichkeit, Informationen als Nachricht (MessageBox) an die Anwendung zu übergeben. Darüber hinaus wird die von der THROW-Anweisung zurückgegebene Ausnahme die Transaktion rückgängig machen. Diese Möglichkeit kann beispielsweise genutzt werden, um die Übergabe eines Dokuments in die nächste Stufe (OnDocumentPropagation-Prozedur) zu stoppen, wenn die Weiterleitungsbedingung nicht erfüllt ist. Das Klicken auf „Zur nächsten Phase“ kann dazu führen, dass die in der Prozedur definierte Meldung angezeigt und die Weiterleitungsaktion gestoppt wird.
Konstruktion von Prozeduren (Triggern), die die Funktionalität der Prozessmodellierung erweitern (die Konstruktion der Prozedur wird nach einem Klick auf den Namen angezeigt):
Die Prozedur wird aufgerufen, wenn das Dokument in die nächste Stufe weitergeleitet wird.
CREATE PROCEDURE do.OnDocumentPropagation
@WorkflowId as int = NULL,
@StageId as int = NULL,
@DocumentId as int = NULL,
@PropagatedById as int = NULL,
@DocumentOwnerId as int = NULL,
@IsAutomaticPropagation as bit = NULL
AS
BEGIN
declare @test int
— Hier können zusätzliche Benutzeraktionen behandelt werden.
END
Beschreibung der Argumente:
- @WorkflowId – int, Dokumenten-Workflow-ID (DSH_Id),
- @StageId – int, Phase-ID (DDS_Id),
- @DocumentId – int, Dokument-ID (DWD_ID),
- @PropagatedById – int, ID des Benutzers, der das Dokument weiterleitet (DCD_Id),
- @DocumentOwnerId int, ID des Dokumenteigentümers (DCD_Id) – nimmt immer den Wert 0 an,
- @IsAutomaticPropagation bit, richtiger Wert, wenn das Dokument die Zeitübertragung durchlaufen hat.
Die Prozedur wird ausgeführt, wenn das Dokument gespeichert wird.
CREATE PROCEDURE do.OnAfterDocumentSave
@DocumentId as int = NULL, — DWD_ID aus der Tabelle DF_Work
@SavedBy as int = NULL — DCD_ID aus der Tabelle DF_ConfOSDictionary
AS
BEGIN
declare @test int;
— Hier können zusätzliche Benutzeraktionen behandelt werden.
END
Beschreibung der Argumente:
- @DocumentId – Dokument-ID (DWD_ID),
- @SavedBy – ID des Benutzers, der das Dokument speichert (DCD_Id).
Die Prozedur wird beim Speichern eines neuen Dokuments durchgeführt.
CREATE PROCEDURE do.OnAfterDocumentCreated
@DocumentId as int = NULL, — DWD_ID aus der Tabelle DF_Work
@SavedBy as int = NULL — DCD_ID aus der Tabelle DF_ConfOSDictionary
AS
BEGIN
declare @test int;
— Hier können zusätzliche Benutzeraktionen behandelt werden.
END
Beschreibung der Argumente:
- @DocumentId – Dokument-ID (DWD_ID),
- @SavedBy – ID des Benutzers, der das Dokument speichert (DCD_Id).
Beispiel:
Anwendungsbeispiel der Prozedur do.OnAfterDocumentCreated
Das Beispiel verwendet die Skalarfunktion do.ModWorkflowName, die den Namen des Workflow-Typs zurückgibt. Im do.OnAfterDocumentCreated-Prozedur wurde eine Bedingung hinzugefügt, die den Aufruf der Prozedur auf den Namen des Workflow-Typs beschränkt. Das bedeutet, dass die Prozedur jedes Mal gestartet wird, wenn innerhalb des angegebenen Workflow-Typs ein neues Dokument erstellt und versucht wird, es in der Datenbank zu speichern. Wenn das Steuerelement mit der in der Prozedur angegebenen ID einen abgeschlossenen Wert hat, wird das Dokument gespeichert. Wenn das Steuerelement mit der in der Prozedur angegebenen IDs den Wert nicht vervollständigt, wird das Dokument nicht gespeichert und eine Nachricht mit dem Inhalt angezeigt, der im THROW-Befehl in der Prozedur angegeben ist.
USE [Name_Datenbank_BPM]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [do].[OnAfterDocumentCreated]
@DocumentId as int = NULL, — DWD_ID aus der Tabelle DF_Work
@SavedBy as int = NULL — DCD_ID aus der Tabelle DF_ConfOSDictionary
AS
BEGIN
BEGIN TRY
declare @string varchar(max)=”;
if do.ModWorkflowName (@DocumentId)=’Name_Workflow_Typs’ /*Name des Workflow-Typs, in dem die Sperre erfolgt */
Begin
select @string= isnull (w.DWC_ValueString,”) from do.DF_Work d
join do.DF_ConfDSHead i on d.DWD_DSHId=i.DSH_ID
join do.DF_ConfCFCardDokFlow k on k.DKO_DSHId=i.DSH_ID
join do.DF_WorkCF w on w.DWC_DKOId = k.DKO_ID
where DWD_ID=@DocumentId and k.DKO_Name=’ID’ /* ID des Steuerelements, für das die Wertvervollständigung erforderlich ist*/
if @string =”
THROW 50001, 'Dokumentenfeld ist erforderlich’ ,1; — Inhalt der angezeigten Meldung
End
END TRY
BEGIN CATCH
DECLARE @ErrorMessage varchar(max) = ERROR_MESSAGE();
–THROW 50001, @ErrorMessage ,1;
declare @ErrorSeverity int = ERROR_SEVERITY(), @ErrorState int = ERROR_STATE()
raiserror (@ErrorMessage, @ErrorSeverity, @ErrorState);
end catch
END
Die Prozedur wird ausgeführt, bevor die Details des BPM-Dokuments angezeigt werden
CREATE PROCEDURE do.OnBeforeDocumentShow
@documentId as int = NULL, — DWD_ID aus der Tabelle DF_Work
@workflowId as int = NULL, — DFH_ID aus der Tabelle DF_HeadDokumentFlow
@userId as int = NULL — DCD_ID aus der Tabelle DF_ConfOSDictionary
AS
BEGIN
begin try
declare @test int
— Hier können zusätzliche Benutzeraktionen behandelt werden.
end try
begin catch
DECLARE @ErrorMessage varchar(max) = 'In der Prozedur do.OnBeforeDocumentShow ist ein Fehler aufgetreten: ’ + ERROR_MESSAGE();
–THROW 50001, @ErrorMessage ,1;
declare @ErrorSeverity int = ERROR_SEVERITY(), @ErrorState int = ERROR_STATE()
raiserror (@ErrorMessage, @ErrorSeverity, @ErrorState);
end catch
END
Beschreibung der Argumente:
- @DocumentId – Dokument-ID (DWD_Id),
- @WorkflowId – Workflow-Typ-ID (DFH_Id),
- @UserId – ID des Betreibers (DCD_Id).