Arbeitsabläufe und Prozesse

Rechnungen können über REST-API aus Verträgen generiert werden (auch über Web-Interface)

Lenka Haringerová avatar
Verfasst von Lenka Haringerová
Vor über einer Woche aktualisiert

Activiti ist die Basis für Workflows und Prozesse. Es enthält die Activiti REST API Diese Schnittstelle kann unter der folgenden Adresse aufgerufen werden:

/c//activiti/

Es gibt die folgenden Einschränkungen:

  • Die Schnittstelle /login wird nicht unterstützt. Es wird die ABRA-Flexi-Autorisierung verwendet.

  • Das Ändern von Benutzern, Gruppen und Mitgliedschaften wird nicht unterstützt. Alles wird über die ABRA Flexi-Schnittstelle erledigt.

  • Das Hochladen eines neuen Prozesses muss über ABRA Flexi erfolgen (aufgrund der Definition von Workflow-Gültigkeiten). Aktualisierungen von Prozessen können bereits über die Activiti-API vorgenommen werden.

API für ABRA Flexi

Auflistung der Workflow-Definitionen für einen bestimmten Datensatz:

GET /c///workflows.xml

Starten eines Workflows

PUT /c////workflows//start

Bei der Ausführung ist es auch möglich, Parameter an den Workflow zu übergeben, die bei der Entscheidungsfindung verwendet werden können:

PUT /c////workflows//start?parameter1=wert1&parameter2=wert2

Liste der Ereignisse (Notizen und Aufgaben) für das Objekt:

/c////event

Liste der Ereignisse einschließlich anderer Workflow-Attribute:

/c////event.xml?includes=event/actRuTask

Wenn Sie mit einem Workflow arbeiten, wollen Sie in der Regel nur Aufgaben eines bestimmten Typs:

/c////event/(event-type = 'typeEvent.workflow')

Alle Aufgaben für einen bestimmten Arbeitsablauf auflisten:

/c//event/(event type = 'kindUdal.workflow' und processDefinitionId = '')

Listet alle Aufgaben mit dem angegebenen Aufgabenschlüssel für den spezifischen Workflow auf:

/c//event/(event type = 'kindUdal.workflow' und processDefinitionId = '' und taskDefinitionKey = '')

Eine Auflistung aller Aufgaben, die der aktuell angemeldete Benutzer lösen kann:

/c//event@event-to-realize

Senden eines Signals an alle laufenden Workflows, die darauf reagieren können:

/c////workflow-signal/?param1=value

Senden Sie eine Nachricht an alle laufenden Workflows, die darauf reagieren können:

/c////workflow-message/?param1=value

Aufgabe:

/c//Veranstaltung//

claim.xml

die Aufgabe übernehmen

unclaim.xml

eine Aufgabe freigeben

komplett.xmlkomplett
.xml?param1=wert...
1)

Aufgabe auflösen

assign.xml?username=user1
)

die Aufgabe an den Benutzer user übergeben

add-comment.xml?comment=text1
)
2)

einen Kommentar zur Aufgabe hinzufügen

  1. Für Parameterwerte, die andere als die erlaubten URL-Zeichen enthalten (Leerzeichen, geschweifte Wörter usw.), müssen Sie Folgendes tun URL-Kodierung.

  2. Die Textkodierung wird in UTF-8 erwartet.

Hinweis: Ereignisse vom Typ Aufgabe für Workflow werden verworfen, nachdem sie aufgelöst wurden. Anstelle von . xml kann auch der .json oder Accept Header verwendet werden.

Liste der Aufgaben und ihrer zugehörigen Objekte

/c///

In der ABRA-Flexi-Entscheidungsfindung verwendete Objekte

flexibee.user(benutzername)

Liefert den Benutzer mit dem angegebenen Namen

flexibee.userQuery(benutzername)

Liefert ein Abfrageobjekt des Benutzers mit dem angegebenen Namen (die Ausgabe ist identisch mit der Methode objectQuery).

flexibee.object(evidenceType)

Liefert ein Objekt des angegebenen Typs, das an die Workflow-Aufgabe angehängt ist

flexibee.objectQuery(evidenceType).relation(relationName).filter(filter).list()

Ermöglicht es Ihnen, die Objekte in der Sitzung zu filtern.

flexibee.objectQuery(evidenceType).relationFilter(relationName).filter(filter).one()

Ermöglicht es Ihnen, das erste Objekt in der gefilterten Sitzung zurückzugeben.

flexibee.objectQuery(evidenceType).relationFilter(relationName).filter(filter).sum()

Ermöglicht es Ihnen, die Objekte in der gefilterten Sitzung zu summieren.

flexibee.objectQuery(evidenceType).relationFilter(relationName).filter(filter).firstQuery().relation(relationName2).one()

Ermöglicht die Verkettung der Verarbeitung der Abfrage.

flexibee.objectQuery(evidenceType).relation(relationName).list()

Ermöglicht das Filtern der Objekte in der Beziehung.

flexibee.objectQuery(evidenceType).relation(relationName).one()

Ermöglicht es Ihnen, das erste Objekt in der Sitzung zurückzugeben.

flexibee.objectQuery(evidenceType).relation(relationName).sum()

Ermöglicht es Ihnen, die Objekte in der Sitzung zu summieren.

flexibee.wrap(object)

Umfasst ein Objekt mittels Abfrage (gleiches Ergebnis wie z. B. von objectQuery zurückgegeben). Sie können dann den Satz der per Abfrage geladenen Funktionen verwenden.

flexibee.query(evidenceType).filter(filter).one()

Gibt ein einzelnes Objekt des angegebenen Typs zurück, das dem angegebenen Filter entspricht.

flexibee.query(evidenceType).filter(filter).firstQuery().signal('signalName')

Löst ein Signal über alle Workflows aus, die über den ausgewählten Datensatz laufen.

flexibee.query(evidenceType).filter(filter).list()

Gibt alle Objekte des angegebenen Typs zurück, die dem angegebenen Filter entsprechen.

flexibee.query(evidenceType).filter(filter).count()

Gibt die Anzahl der Objekte des angegebenen Typs zurück, die mit dem angegebenen Filter übereinstimmen.

flexibee.query(evidenceType).filter(filter).sum(propertyName)

Liefert die Summe der angegebenen Spalte für alle Objekte des angegebenen Typs, die dem angegebenen Filter entsprechen.

flexibee.query(evidenceType).filter(filter).max(propertyName)

Liefert das Maximum der angegebenen Spalte für alle Objekte des angegebenen Typs, die dem angegebenen Filter entsprechen.

flexibee.query(evidenceType).filter(filter).min(propertyName)

Liefert den Mindestwert der angegebenen Spalte für alle Objekte des angegebenen Typs, die dem angegebenen Filter entsprechen.

flexibee.query(evidenceType).filter(filter).avg(propertyName)

Liefert den Durchschnittswert der angegebenen Spalte für alle Objekte des angegebenen Typs, die dem angegebenen Filter entsprechen.

flexibee.query(evidenceType).asc(propertyName).first()

Ermöglicht die Sortierung in aufsteigender Reihenfolge (mehr zur Sortierung in der API).

flexibee.query(evidenceType).desc(propertyName).first()

Ermöglicht das Sortieren in absteigender Reihenfolge (mehr zum Sortieren in der API).

flexibee.settings()

Gibt die aktuellen Firmeneinstellungen ( Datensatzeinstellungen) zurück. Der Firmenname kann z. B. abgerufen werden: ${flexibee.settings().nazFirmy}

flexibee.settingsForDate(dt)

Gibt die Firmeneinstellungen (Einstellungsdatensätze) für den angegebenen Tag (normalerweise das Datum des Dokuments) zurück. Der Firmenname kann z. B. wie folgt ermittelt werden: ${flexibee.settingsForDate(dt).nazFirmy}

flexibee.varName(evidenceType)

Gibt den internen Variablennamen zurück, der von ABRA Flexi verwendet wird, um einzelne Workflows an Dokumente und Objekte in ABRA Flexi zu binden. Es wird normalerweise beim Aufruf eines Unterprozesses verwendet.

flexibee.isDesktop()

Gibt true zurück, wenn der Workflow gerade in einer Desktop-Anwendung ausgeführt wird

flexibee.isServer()

Gibt true zurück, wenn der Workflow gerade über die REST-API oder in einem Browser ausgeführt wird

flexibee.importXml(string)

Importiert einen XML-String gemäß der ABRA Flexi REST API. Gibt eine Sammlung von Objektbezeichnern aus dem XML-Import zurück.

jetzt

Das aktuelle Datum und die Uhrzeit.

authenticatedUserId

Name des aktuell angemeldeten Benutzers (für weitere Informationen verwenden Sie flexibee.user(authenticatedUserId) (siehe acitiviti-Dokumentation).

Aufgabe

Der activiti-Datensatz, der die Aufgabe repräsentiert (weitere acitiviti-Dokumentation).

Ausführung

Informationen über den aktuell laufenden Workflow (weitere acitiviti-Dokumentation).

Aufrufen eines Unterprozesses

Wenn Sie einen Unterprozess aufrufen und die resultierenden Aufgaben mit Dokumenten verknüpft werden sollen, müssen Sie die Heraufstufung der Datenflussvariablen zum Workflow aktivieren. Sie gehen dabei wie folgt vor:

<?xml version="1.0"?>
<callActivity id="callSubProcess" calledElement="checkCreditProcess">
  <extensionElements>
    <activiti:in source="${flexibee.varName('invoice-received')}" target="${flexibee.varName('Rechnung-erhalten')}"/>
    <activiti:in source="initiator" target="initiator"/>
  </extensionElements>
</callActivity>

Arbeiten mit Benutzern in einem Workflow

Wenn Sie mit Benutzern arbeiten möchten, gibt es mehrere Möglichkeiten wie folgt. Achten Sie darauf, dass Sie das Kommazeichen (,) innerhalb der Benutzerdefinition nicht verwenden. Activiti hat einen Fehler, der seine Verwendung verhindert.

Workflow-Ersteller

Wenn Sie den Workflow starten, definieren Sie eine Initiatorvariable. Diesen können Sie dann als Benutzernamen für die Zuweisung der Aufgabe verwenden.

<?xml version="1.0"?>

Aktueller Benutzer

Um die Aufgabe demselben Benutzer zuzuweisen, der den aktuellen Vorgang ausgeführt hat, verwenden Sie die Variable authenticatedUserId.

Der spezifische Benutzer

Sie können während der Verarbeitung einen bestimmten Benutzer verwenden. Sie können auch nach bestimmten Kriterien (z. B. Bezeichnung) nach einem Benutzer suchen:

<?xml version="1.0"?>
<formalExpression>${flexibee.query('user').relation('label = "code:EMPLOYEE"').one().code}</formalExpression>

Oder eine Benutzerbindung:

<?xml version="1.0"?>
<formalExpression>${flexibee.userQuery(initiator).relation('user-bindings').filter('typeBindings = "code:UPDATED"').one().code}</formalExpression>

Änderung des Dokuments

Manchmal ist es notwendig, ein oder mehrere Dokumente bei der Bearbeitung eines Workflows zu ändern. Dies kann mit flexibee-xml erfolgen. Damit die Methode flexibee.object() funktioniert, muss der Workflow mit diesem Dokument verknüpft sein.

<?xml version="1.0"?>

Es können auch mehrere Objekte geändert werden:

<?xml version="1.0"?>
<serviceTask id="cancellation" activiti:class="flexibee-xml">
  <extensionElements>
    <activiti:field name="xml">
      <activiti:expression><![CDATA[ <winstrom> <invoice-issued action="cancellation"> <id>code:FAV0001/2013</id> </invoice-issued> <invoice-issued action="cancellation"> <id>code:FAV0002/2013</id> </rechnung-ausgestellt> </winstrom> ]]></activiti:expression>
    </activiti:field>
  </extensionElements>
</serviceTask>

Abrufen der Bezeichner von geänderten Objekten

Verwenden Sie die Variable idsVar, um eine Sammlung von Bezeichnern abzurufen, die durch den XML-Import geändert wurden.

<?xml version="1.0"?>
<serviceTask id="import" activiti:class="flexibee-xml"> ... <extensionElements><activiti:field name="idsVar" stringValue="listId"/></extensionElements> </serviceTask>

Nach einem erfolgreichen XML-Import enthält die Variable listId dann die Sammlung der Bezeichner der geänderten Objekte.

Fehlerbehandlung beim XML-Import

Wenn ein XML-Importfehler in einer flexibee-xml Aufgabe auftritt, wird die Workflow-Verarbeitung durch eine WSBusinessRTException unterbrochen. Die Ausnahme enthält eine Beschreibung des Fehlers und wird in der GUI als Fehlerdialog angezeigt.

Soll der Workflow auch bei einem fehlgeschlagenen Import weiterlaufen, kann die Aufgabendefinition um die Parameter erweitert werden errorVar a errorMessageVar:

<?xml version="1.0"?>
<serviceTask id="cancellation" activiti:class="flexibee-xml"> ... <extensionElements><activiti:field name="errorVar" stringValue="wasError"/><activiti:field name="errorMessageVar" stringValue="errorMessage"/></extensionElements> </serviceTask>

variabel

Datentyp

Beschreibung

errorVar

Boolesche

definiert den Namen der Variablen (z. B. wasError), in der das Fehlerflag beim Import gespeichert wird

errorMessageVar

Zeichenfolge

definiert den Namen einer Variablen (z. B. errorMessage), in der der Text zur Beschreibung der Importfehler gespeichert wird

Bedingte Verzweigung auf Basis von Objekten

In einem Workflow können Sie ABRA Flexi Fragen stellen und auf Basis der Antwort reagieren:

${flexibee.object('objednavka-prijata').sumTotal > 1000}

Es ist auch möglich, allgemein abzufragen, z. B. wie viele offene Rechnungen es bei der Firma gibt, die auf der aktuellen Rechnung aufgeführt ist:

${flexibee.query('rechnung-ausgestellt').filter('stavUhrK != "stavUhr.bezahlt" und stavUhrK != "stavUhr.bezahltRucne" und Firma='.concat(flexibee.object('rechnung-ausgestellt').firma.id)).sum('sumTotal') > 1000}

Übertragen des Workflow-Status auf das Dokument

Manchmal ist es notwendig, den Status eines Dokuments basierend auf dem Workflow-Status zu ändern. Dies kann durch die Verwendung von Labels geschehen, die einer Gruppe zugeordnet sind, für die Exklusivität eingestellt ist (wenn dann ein neues Label aus der gleichen Gruppe gesetzt wird, werden die anderen gelöscht). Dies wird dann wieder mit flexibee-xml implementiert, das Sie bei jeder Änderung des Workflow-Zustands aufrufen:

<?xml version="1.0"?>
Hat dies Ihre Frage beantwortet?