Package de.xima.fc.ms.test.workflow
Class AWorkflowEngineTest
- java.lang.Object
-
- de.xima.fc.ms.test.workflow.AWorkflowEngineTest
-
- All Implemented Interfaces:
DaoCrudMixin
- Direct Known Subclasses:
AEventRunnerTest
@ExtendWith(FcSystemIntegrationExtension.class) public abstract class AWorkflowEngineTest extends Object implements DaoCrudMixin
Base test for all workflow tests that created the workflow process.- Since:
- 7.0.0
- Author:
- XIMA MEDIA GmbH
-
-
Field Summary
Fields Modifier and Type Field Description protected Mandant
client
protected DatenbankZugriff
dbConn
protected DatenbankZugriff
dbConnInvalid
protected IEntityContextHolder
ec
protected FormEingang
formData
protected Vorgang
formRecord
protected FormVersion
formVersion
protected BenutzerGruppe
group
protected BenutzerGruppe
groupOther
protected Textbaustein
i18n
protected Postfach
inbox
protected static org.slf4j.Logger
LOG
protected WorkflowProcess
process
protected Projekt
project
protected Rolle
role
protected WorkflowState
state
protected WorkflowState
stateArchived
protected Path
tempDir
protected TestSystemInfo
testSystemInfo
protected IUser
user
protected IUser
userOther
protected WorkflowVersion
version
-
Constructor Summary
Constructors Constructor Description AWorkflowEngineTest()
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Deprecated Methods Modifier and Type Method Description protected void
assertAttachmentAccessibleByEndUsers(EAttachmentSource source, boolean value)
protected void
assertAttachmentContentJsonObject(EAttachmentSource source, Predicate<String> nameFilter, Object value)
protected void
assertAttachmentContentString(EAttachmentSource source, String value)
protected void
assertAttachmentContentString(EAttachmentSource source, Predicate<String> nameFilter, String value)
protected void
assertAttachmentContentZippedString(Map<String,String> expectedFiles, Attachment attachment)
protected void
assertAttachmentCount(EAttachmentSource source, int expectedCount)
protected void
assertAttachmentFileName(EAttachmentSource source, String value)
protected void
assertAttachmentFileName(EAttachmentSource source, Predicate<String> nameFilter, String value)
protected void
assertAttachmentsAccessibleByEndUsers(EAttachmentSource source, boolean... values)
protected void
assertAttachmentsAccessibleByEndUsers(List<Attachment> attachments, boolean... values)
protected void
assertAttachmentsContentJsonObject(EAttachmentSource source, Predicate<String> nameFilter, Object... values)
protected void
assertAttachmentsContentJsonObject(List<Attachment> attachments, Object... values)
protected void
assertAttachmentsContentString(EAttachmentSource source, String... values)
protected void
assertAttachmentsContentString(EAttachmentSource source, Predicate<String> nameFilter, String... values)
protected void
assertAttachmentsContentString(List<Attachment> attachments, String... values)
protected void
assertAttachmentsFileName(EAttachmentSource source, String... values)
protected void
assertAttachmentsFileName(EAttachmentSource source, Predicate<String> nameFilter, String... values)
protected void
assertAttachmentsFileName(List<Attachment> attachments, String... values)
protected void
assertEntriesAreEqual(Map<?,?> expectedSubset, Map<?,?> actual)
protected List<ProtocolEntryProcessing>
assertHasLogEntriesOfType(EProtocolEntryProcessType expectedType, int expectedAmount)
protected void
assertHasNoAttachments(EAttachmentSource source)
protected ProtocolEntryProcessing
assertHasSingleLogEntryOfType(EProtocolEntryProcessType type)
protected void
assertNoFormRecordChats()
protected byte[]
binaryResource(String resourcePath)
protected static void
cleanupAfterAll(AutoCloseable cleanupAction)
protected void
cleanupAfterEach(AutoCloseable cleanupAction)
protected MandantRessource
createClientResource(@NotNull String name, @javax.validation.constraints.NotNull byte[] resourceData, @NotNull String resourceDescription)
Creates a client resource where the resource- and the file-name are the same.protected MandantRessource
createClientResource(@NotNull String resourceName, @NotNull String fileName, @javax.validation.constraints.NotNull byte[] resourceData, @NotNull String resourceDescription)
protected MandantRessource
createClientResource(@NotNull String name, @NotNull String resourceData, @NotNull String resourceDescription)
Creates a client resource where the resource- and the file-name are the same.protected void
createFormData(String fileName, String... formElements)
Deprecated.protected IFormDataAdapter
createFormDataAdapter()
Creates the form data adapter for accessing the values of the current form submission.protected IFormDataAdapter
createFormDataAdapter(FormEingang formData)
Creates the form data adapter for accessing the values of the given form submission.protected Attachment
createFormRecordResource(@NotNull String attachmentFilename, EAttachmentSource attachmentSource, @javax.validation.constraints.NotNull byte[] resourceData, Date editDate, String uploadElementName)
protected Attachment
createFormRecordResource(@NotNull String attachmentFilename, EAttachmentSource attachmentSource, @NotNull String resourceData, Date editDate, String uploadElementName)
protected Attachment
createFormRecordResource(String attachmentFilename, EAttachmentSource attachmentSource, String resourceData)
protected ProjektRessource
createProjectResource(@NotNull String name, @javax.validation.constraints.NotNull byte[] resourceData, @NotNull String resourceDescription)
Creates a project resource where the resource- and the file-name are the same.protected ProjektRessource
createProjectResource(@NotNull String resourceName, @NotNull String fileName, @javax.validation.constraints.NotNull byte[] resourceData, @NotNull String resourceDescription)
protected ProjektRessource
createProjectResource(String name, @NotNull String resourceData, @NotNull String resourceDescription)
Creates a project resource where the resource- and the file-name are the same.protected WorkflowNode
createSleepNode(int sleepTimeMillis)
protected void
createTempDir()
protected Path
createTextFile(String fileName, String content)
protected void
deleteTempDir()
IEntityContext
ec()
protected FormElement
formElement(String name)
protected byte[]
getAttachmentContentData(Attachment attachment)
protected com.alibaba.fastjson.JSONObject
getAttachmentContentJsonObject(Attachment attachment)
protected String
getAttachmentContentString(Attachment attachment)
protected Attachment
getFormRecordAttachment(EAttachmentSource source)
protected Attachment
getFormRecordAttachment(EAttachmentSource source, Predicate<String> nameFilter)
protected String
getFormRecordAttachmentContentString(EAttachmentSource source)
protected List<Attachment>
getFormRecordAttachments(EAttachmentSource source)
protected List<Attachment>
getFormRecordAttachments(EAttachmentSource source, Predicate<String> nameFilter)
protected FormRecordChat
getFormRecordChat()
protected List<FormRecordChat>
getFormRecordChats()
protected List<ProtocolEntryProcessing>
getProcessingProtcolEntriesByType(Vorgang formRecord, EProtocolEntryProcessType... types)
protected <T> T
getSuccessValueAs(IEventExecutionResult result, AWorkflowElement<?,?> element, Class<T> expectedType)
protected static NodeKey
nodeKey(WorkflowTrigger trigger, WorkflowNode node)
protected String
plainTextResource(String resourcePath)
protected String
plainTextResource(String resourcePath, Charset charset)
protected byte[]
readBinaryFile(File file)
protected byte[]
readBinaryFile(Path file)
protected String
readFile(File file)
protected Vorgang
readFormRecord(Long id)
protected <T extends de.xima.cmn.dao.interfaces.IEntity<?>,E extends de.xima.cmn.dao.interfaces.IBaseEntityContext>
voidregisterQueryListener(de.xima.cmn.dao.interfaces.IAbstractDao<T,?,E> dao, de.xima.cmn.dao.enums.EDaoAction action, de.xima.cmn.dao.enums.EDaoActionState state, de.xima.cmn.dao.interfaces.IDaoActionListener<T,E> listener)
protected void
reloadFormRecord()
protected void
reloadProcess()
protected void
reloadProject()
protected static void
runGenericAfterAllCleanupActions()
protected void
runGenericAfterEachCleanupActions()
protected void
saveAndReloadFormRecord()
protected void
saveAndReloadProcess()
protected void
saveAndReloadProject()
protected void
setFormData(Map<String,Object> dataToSet)
Sets the submitted form data for the current form record to the given values.protected void
setupEntities()
protected abstract void
setupProcess()
protected com.alibaba.fastjson.JSONObject
toJsonObject(Object data)
protected void
updateClientLicense(String licenseKey, String pathToLicenseFile)
protected void
updateFormDataWithPersistenceXml(String fileName)
Updates the current form record with the form field values from the given persistence XML.protected void
updateFormVersionWithPersistJson(String fileName, String... formElements)
Updates the current form version with the persist JSON from the given file.protected <TElement extends IWorkflowElementEntity,TSearchTerm extends AWorkflowElementSearchTerm<TElement>,TData extends BaseActionProps>
voidupdateName(AWorkflowElement<TElement,TSearchTerm> element, String name)
protected <TElement extends IWorkflowElementEntity,TSearchTerm extends AWorkflowElementSearchTerm<TElement>,TData>
voidupdateParams(AWorkflowElement<TElement,TSearchTerm> element, IElementHandler<TData,TElement> handler, Consumer<TData> updater)
protected <TElement extends IWorkflowElementEntity,TSearchTerm extends AWorkflowElementSearchTerm<TElement>,TData>
voidupdateParams(AWorkflowElement<TElement,TSearchTerm> element, Class<TData> type, Consumer<TData> updater)
protected <TElement extends IWorkflowElementEntity,TSearchTerm extends AWorkflowElementSearchTerm<TElement>>
voidupdateParams(AWorkflowElement<TElement,TSearchTerm> element, Consumer<Object> updater)
protected FormElement
uploadElement(String name)
protected AutoCloseable
waitUntilFormRecordLocked()
protected AutoCloseable
waitUntilFormRecordLocked(int timeoutSeconds)
protected AutoCloseable
waitUntilFormRecordLocked(long formRecordId)
protected AutoCloseable
waitUntilFormRecordLocked(long formRecordId, int timeoutSeconds)
protected void
waitUntilFormRecordUnlocked()
protected void
waitUntilFormRecordUnlocked(int timeoutSeconds)
protected void
waitUntilFormRecordUnlocked(long formRecordId)
protected void
waitUntilFormRecordUnlocked(long formRecordId, int timeoutSeconds)
-
-
-
Field Detail
-
LOG
protected static final org.slf4j.Logger LOG
-
client
protected Mandant client
-
dbConn
protected DatenbankZugriff dbConn
-
dbConnInvalid
protected DatenbankZugriff dbConnInvalid
-
ec
protected IEntityContextHolder ec
-
formData
protected FormEingang formData
-
formRecord
protected Vorgang formRecord
-
formVersion
protected FormVersion formVersion
-
group
protected BenutzerGruppe group
-
groupOther
protected BenutzerGruppe groupOther
-
i18n
protected Textbaustein i18n
-
inbox
protected Postfach inbox
-
process
protected WorkflowProcess process
-
project
protected Projekt project
-
role
protected Rolle role
-
state
protected WorkflowState state
-
stateArchived
protected WorkflowState stateArchived
-
tempDir
protected Path tempDir
-
testSystemInfo
protected TestSystemInfo testSystemInfo
-
user
protected IUser user
-
userOther
protected IUser userOther
-
version
protected WorkflowVersion version
-
-
Method Detail
-
ec
public IEntityContext ec()
- Specified by:
ec
in interfaceDaoCrudMixin
- Returns:
- The entity context to use for database operations.
-
assertAttachmentAccessibleByEndUsers
protected void assertAttachmentAccessibleByEndUsers(EAttachmentSource source, boolean value)
-
assertAttachmentContentJsonObject
protected void assertAttachmentContentJsonObject(EAttachmentSource source, Predicate<String> nameFilter, Object value)
-
assertAttachmentContentString
protected void assertAttachmentContentString(EAttachmentSource source, Predicate<String> nameFilter, String value)
-
assertAttachmentContentString
protected void assertAttachmentContentString(EAttachmentSource source, String value)
-
assertAttachmentContentZippedString
protected void assertAttachmentContentZippedString(Map<String,String> expectedFiles, Attachment attachment) throws IOException
- Throws:
IOException
-
assertAttachmentCount
protected void assertAttachmentCount(EAttachmentSource source, int expectedCount)
-
assertAttachmentFileName
protected void assertAttachmentFileName(EAttachmentSource source, Predicate<String> nameFilter, String value)
-
assertAttachmentFileName
protected void assertAttachmentFileName(EAttachmentSource source, String value)
-
assertAttachmentsAccessibleByEndUsers
protected void assertAttachmentsAccessibleByEndUsers(EAttachmentSource source, boolean... values)
-
assertAttachmentsAccessibleByEndUsers
protected void assertAttachmentsAccessibleByEndUsers(List<Attachment> attachments, boolean... values)
-
assertAttachmentsContentJsonObject
protected void assertAttachmentsContentJsonObject(EAttachmentSource source, Predicate<String> nameFilter, Object... values)
-
assertAttachmentsContentJsonObject
protected void assertAttachmentsContentJsonObject(List<Attachment> attachments, Object... values)
-
assertAttachmentsContentString
protected void assertAttachmentsContentString(EAttachmentSource source, Predicate<String> nameFilter, String... values)
-
assertAttachmentsContentString
protected void assertAttachmentsContentString(EAttachmentSource source, String... values)
-
assertAttachmentsContentString
protected void assertAttachmentsContentString(List<Attachment> attachments, String... values)
-
assertAttachmentsFileName
protected void assertAttachmentsFileName(EAttachmentSource source, Predicate<String> nameFilter, String... values)
-
assertAttachmentsFileName
protected void assertAttachmentsFileName(EAttachmentSource source, String... values)
-
assertAttachmentsFileName
protected void assertAttachmentsFileName(List<Attachment> attachments, String... values)
-
assertEntriesAreEqual
protected void assertEntriesAreEqual(Map<?,?> expectedSubset, Map<?,?> actual)
-
assertHasLogEntriesOfType
protected List<ProtocolEntryProcessing> assertHasLogEntriesOfType(EProtocolEntryProcessType expectedType, int expectedAmount)
-
assertHasNoAttachments
protected void assertHasNoAttachments(EAttachmentSource source)
-
assertHasSingleLogEntryOfType
protected ProtocolEntryProcessing assertHasSingleLogEntryOfType(EProtocolEntryProcessType type)
-
assertNoFormRecordChats
protected void assertNoFormRecordChats()
-
binaryResource
protected byte[] binaryResource(String resourcePath)
-
cleanupAfterEach
protected void cleanupAfterEach(AutoCloseable cleanupAction)
-
createClientResource
protected MandantRessource createClientResource(@NotNull @NotNull String name, @NotNull @javax.validation.constraints.NotNull byte[] resourceData, @NotNull @NotNull String resourceDescription) throws Exception
Creates a client resource where the resource- and the file-name are the same.- Parameters:
name
- Name of the file.resourceData
- Contents of the file.resourceDescription
- Description of the file.- Returns:
- The newly created client resource.
- Throws:
Exception
- When the resource could not be created, such as due to a database error.
-
createClientResource
protected MandantRessource createClientResource(@NotNull @NotNull String resourceName, @NotNull @NotNull String fileName, @NotNull @javax.validation.constraints.NotNull byte[] resourceData, @NotNull @NotNull String resourceDescription) throws Exception
- Throws:
Exception
-
createClientResource
protected MandantRessource createClientResource(@NotNull @NotNull String name, @NotNull @NotNull String resourceData, @NotNull @NotNull String resourceDescription) throws Exception
Creates a client resource where the resource- and the file-name are the same.- Parameters:
name
- Name of the file.resourceData
- Contents of the file.resourceDescription
- Description of the file.- Returns:
- The newly created client resource.
- Throws:
Exception
- When the resource could not be created, such as due to a database error.
-
createFormData
@Deprecated protected void createFormData(String fileName, String... formElements)
Deprecated.Creates form data for the current form record.- Parameters:
fileName
- XML and JSON file with the form data. If it starts with a slash: a full path to a classpath resource, without the extension. Otherwise it should be a file name without an extension, which is looked up as a classpath resource in the/forms/
folder.formElements
- Names of the form elements to make available.
-
createFormDataAdapter
protected IFormDataAdapter createFormDataAdapter()
Creates the form data adapter for accessing the values of the current form submission.- Returns:
- The form data adapter.
-
createFormDataAdapter
protected IFormDataAdapter createFormDataAdapter(FormEingang formData)
Creates the form data adapter for accessing the values of the given form submission.- Parameters:
formData
- The form submission to create the adapter for.- Returns:
- The form data adapter.
-
createFormRecordResource
protected Attachment createFormRecordResource(@NotNull @NotNull String attachmentFilename, EAttachmentSource attachmentSource, @NotNull @javax.validation.constraints.NotNull byte[] resourceData, @Nullable Date editDate, @Nullable String uploadElementName) throws Exception
- Throws:
Exception
-
createFormRecordResource
protected Attachment createFormRecordResource(String attachmentFilename, EAttachmentSource attachmentSource, String resourceData) throws Exception
- Throws:
Exception
-
createFormRecordResource
protected Attachment createFormRecordResource(@NotNull @NotNull String attachmentFilename, EAttachmentSource attachmentSource, @NotNull @NotNull String resourceData, @Nullable Date editDate, @Nullable String uploadElementName) throws Exception
- Throws:
Exception
-
createProjectResource
protected ProjektRessource createProjectResource(@NotNull @NotNull String name, @NotNull @javax.validation.constraints.NotNull byte[] resourceData, @NotNull @NotNull String resourceDescription) throws Exception
Creates a project resource where the resource- and the file-name are the same.- Parameters:
name
- Name of the file.resourceData
- Content of the file.resourceDescription
- Description of the file.- Returns:
- The newly create form file.
- Throws:
Exception
- When the file could not be created, such as due to a database error.
-
createProjectResource
protected ProjektRessource createProjectResource(@NotNull @NotNull String resourceName, @NotNull @NotNull String fileName, @NotNull @javax.validation.constraints.NotNull byte[] resourceData, @NotNull @NotNull String resourceDescription) throws Exception
- Throws:
Exception
-
createProjectResource
protected ProjektRessource createProjectResource(String name, @NotNull @NotNull String resourceData, @NotNull @NotNull String resourceDescription) throws Exception
Creates a project resource where the resource- and the file-name are the same.- Parameters:
name
- Name of the file.resourceData
- Content of the file.resourceDescription
- Description of the file.- Returns:
- The newly create form file.
- Throws:
Exception
- When the file could not be created, such as due to a database error.
-
createSleepNode
protected WorkflowNode createSleepNode(int sleepTimeMillis) throws FastJsonException
- Throws:
FastJsonException
-
createTempDir
@BeforeEach protected void createTempDir() throws IOException
- Throws:
IOException
-
createTextFile
protected Path createTextFile(String fileName, String content) throws IOException
- Throws:
IOException
-
deleteTempDir
@AfterEach protected void deleteTempDir()
-
formElement
protected FormElement formElement(String name)
-
getAttachmentContentData
protected byte[] getAttachmentContentData(Attachment attachment)
-
getAttachmentContentJsonObject
protected com.alibaba.fastjson.JSONObject getAttachmentContentJsonObject(Attachment attachment)
-
getAttachmentContentString
protected String getAttachmentContentString(Attachment attachment)
-
getFormRecordAttachment
protected Attachment getFormRecordAttachment(EAttachmentSource source)
-
getFormRecordAttachment
protected Attachment getFormRecordAttachment(EAttachmentSource source, Predicate<String> nameFilter)
-
getFormRecordAttachmentContentString
protected String getFormRecordAttachmentContentString(EAttachmentSource source)
-
getFormRecordAttachments
protected List<Attachment> getFormRecordAttachments(EAttachmentSource source)
-
getFormRecordAttachments
protected List<Attachment> getFormRecordAttachments(EAttachmentSource source, Predicate<String> nameFilter)
-
getFormRecordChat
protected FormRecordChat getFormRecordChat()
-
getFormRecordChats
protected List<FormRecordChat> getFormRecordChats()
-
getProcessingProtcolEntriesByType
protected List<ProtocolEntryProcessing> getProcessingProtcolEntriesByType(Vorgang formRecord, EProtocolEntryProcessType... types)
-
getSuccessValueAs
protected <T> T getSuccessValueAs(IEventExecutionResult result, AWorkflowElement<?,?> element, Class<T> expectedType)
-
readBinaryFile
protected byte[] readBinaryFile(File file) throws IOException
- Throws:
IOException
-
readBinaryFile
protected byte[] readBinaryFile(Path file) throws IOException
- Throws:
IOException
-
readFile
protected String readFile(File file) throws IOException
- Throws:
IOException
-
registerQueryListener
protected <T extends de.xima.cmn.dao.interfaces.IEntity<?>,E extends de.xima.cmn.dao.interfaces.IBaseEntityContext> void registerQueryListener(de.xima.cmn.dao.interfaces.IAbstractDao<T,?,E> dao, de.xima.cmn.dao.enums.EDaoAction action, de.xima.cmn.dao.enums.EDaoActionState state, de.xima.cmn.dao.interfaces.IDaoActionListener<T,E> listener)
-
reloadFormRecord
protected void reloadFormRecord()
-
reloadProcess
protected void reloadProcess()
-
reloadProject
protected void reloadProject()
-
runGenericAfterEachCleanupActions
@AfterEach protected void runGenericAfterEachCleanupActions() throws Exception
- Throws:
Exception
-
saveAndReloadFormRecord
protected void saveAndReloadFormRecord()
-
saveAndReloadProcess
protected void saveAndReloadProcess()
-
saveAndReloadProject
protected void saveAndReloadProject()
-
setFormData
protected void setFormData(Map<String,Object> dataToSet)
Sets the submitted form data for the current form record to the given values. The map key is the name of the form element, and the value is the value to set. The value may be either a single string or a list of strings.- Parameters:
dataToSet
- The form data to set.
-
setupProcess
protected abstract void setupProcess()
-
toJsonObject
protected com.alibaba.fastjson.JSONObject toJsonObject(Object data)
-
updateClientLicense
protected void updateClientLicense(String licenseKey, String pathToLicenseFile) throws IOException
- Throws:
IOException
-
updateFormDataWithPersistenceXml
protected void updateFormDataWithPersistenceXml(String fileName)
Updates the current form record with the form field values from the given persistence XML.- Parameters:
fileName
- XML file with the persistence JSON. If it starts with a slash: a full path to a classpath resource, without the extension. Otherwise, it should be a file name without an extension, which is looked up as a classpath resource in the/forms/
folder.
-
updateFormVersionWithPersistJson
protected void updateFormVersionWithPersistJson(String fileName, String... formElements)
Updates the current form version with the persist JSON from the given file.- Parameters:
fileName
- JSON file with the persist JSON. If it starts with a slash: a full path to a classpath resource, without the extension. Otherwise, it should be a file name without an extension, which is looked up as a classpath resource in the/forms/
folder.formElements
- Names of the form elements to make available. When empty, all elements in the given persist JSON are added.
-
updateName
protected <TElement extends IWorkflowElementEntity,TSearchTerm extends AWorkflowElementSearchTerm<TElement>,TData extends BaseActionProps> void updateName(AWorkflowElement<TElement,TSearchTerm> element, String name)
-
updateParams
protected <TElement extends IWorkflowElementEntity,TSearchTerm extends AWorkflowElementSearchTerm<TElement>,TData> void updateParams(AWorkflowElement<TElement,TSearchTerm> element, Class<TData> type, Consumer<TData> updater)
-
updateParams
protected <TElement extends IWorkflowElementEntity,TSearchTerm extends AWorkflowElementSearchTerm<TElement>> void updateParams(AWorkflowElement<TElement,TSearchTerm> element, Consumer<Object> updater)
-
updateParams
protected <TElement extends IWorkflowElementEntity,TSearchTerm extends AWorkflowElementSearchTerm<TElement>,TData> void updateParams(AWorkflowElement<TElement,TSearchTerm> element, IElementHandler<TData,TElement> handler, Consumer<TData> updater)
-
uploadElement
protected FormElement uploadElement(String name)
-
waitUntilFormRecordLocked
protected AutoCloseable waitUntilFormRecordLocked()
-
waitUntilFormRecordLocked
protected AutoCloseable waitUntilFormRecordLocked(int timeoutSeconds)
-
waitUntilFormRecordLocked
protected AutoCloseable waitUntilFormRecordLocked(long formRecordId)
-
waitUntilFormRecordLocked
protected AutoCloseable waitUntilFormRecordLocked(long formRecordId, int timeoutSeconds)
-
waitUntilFormRecordUnlocked
protected void waitUntilFormRecordUnlocked()
-
waitUntilFormRecordUnlocked
protected void waitUntilFormRecordUnlocked(int timeoutSeconds)
-
waitUntilFormRecordUnlocked
protected void waitUntilFormRecordUnlocked(long formRecordId)
-
waitUntilFormRecordUnlocked
protected void waitUntilFormRecordUnlocked(long formRecordId, int timeoutSeconds)
-
cleanupAfterAll
protected static void cleanupAfterAll(AutoCloseable cleanupAction)
-
nodeKey
protected static NodeKey nodeKey(WorkflowTrigger trigger, WorkflowNode node)
-
-