Initiate a process

1
0
-1

I would like to start a process using webservice call. Is it possible in Bonita Soft. Appreciate if anyone can help with some example.

Also is there anyway a Message Event can start a process without depending on any other process. Is there any example of how to do it.

I have seen this video but the message event (Pool 2) is derived from the first pool.

Here is the video link: https://www.youtube.com/watch?v=Sbi_BrRWBY0

Would be grateful if someone can help with these.

Thanks in Advance

2 answers

1
0
-1
This one is the BEST answer!

To start a process from a webservice, in my case, i have create one in my own WS API, the code look lioke that:

public ProcessInstance startProcessByName(String processName, Map initailContractValue, String initiator, APISession session) {
    ProcessAPI processAPI;
    try {
        IdentityAPI identityAPI = TenantAPIAccessor.getIdentityAPI(session);
        log.info("-- Recherche de l'utilisateur bonita [" + initiator + "]");
        User user = identityAPI.getUserByUserName(initiator);
        log.info("-- lancement du processus bonita [" + processName + "]");

        processAPI = TenantAPIAccessor.getProcessAPI(session);
        ProcessInstance processInstance;
        long processDefinitionId = processAPI.getLatestProcessDefinitionId(processName);
        ProcessDeploymentInfo infos = processAPI.getProcessDeploymentInfo(processDefinitionId);
        log.info("-- process [" + processName + "], processDefinition ID :[" + processDefinitionId + "]");
        if (initailContractValue != null && !initailContractValue.isEmpty()) {
            if (initailContractValue != null) {
                String result = initailContractValue.entrySet().stream()
                        .map(entry -> entry.getKey() + " - " + entry.getValue()).collect(Collectors.joining(", "));
                log.info("-- param du processus :[" + result + "]");
            }
            processInstance = processAPI.startProcessWithInputs(user.getId(), infos.getProcessId(), initailContractValue);
        } else {
            processInstance = processAPI.startProcess(user.getId(), infos.getProcessId());
        }
        log.info("-- lancement du processus bonita [" + processName + "] -- DONE");
        return processInstance;
    } catch (BonitaHomeNotSetException | ServerAPIException | UnknownAPITypeException
            | ProcessDefinitionNotFoundException | ProcessActivationException | ProcessExecutionException
            | UserNotFoundException | ContractViolationException ex) {
        log.error("Impossible de lancer le process avec pour id : " + processName, ex);
    }
    log.info("-- lancement du processus bonita [" + processName + "] -- FAIL");
    return null;
}

Hope it's will help,

Regards,

Comments

Submitted by m.sulaiman78_1417356 on Thu, 01/30/2020 - 17:54

Hi bastien,

Thanks a lot for the code.

I will have a look and let you know how I get on.

Regards

Muhammad

So this is what I am trying now but can't move forward due to some error. Any idea what's happening.

I used Maven based project using Bonita 7.10.0

LoginAPI loginAPI = TenantAPIAccessor.getLoginAPI();
APISession session = loginAPI.login("walter.bates", "bpm");
ProcessAPI processapi = TenantAPIAccessor.getProcessAPI(session);

//When the application has finished processing, log out to delete the session:
loginAPI.logout(session);

---------------------------------Here is the error------------------------------------------------

The error is pointing at "TenantAPIAccessor.getLoginAPI(); "

java.lang.ClassNotFoundException: org.bonitasoft.engine.api.impl.ServerAPIFactory
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at org.bonitasoft.engine.api.impl.LocalServerAPIFactory.(LocalServerAPIFactory.java:34)
at org.bonitasoft.engine.api.PlatformAPIAccessor.getServerAPI(PlatformAPIAccessor.java:50)
at org.bonitasoft.engine.api.TenantAPIAccessor.getServerAPI(TenantAPIAccessor.java:41)
at org.bonitasoft.engine.api.TenantAPIAccessor.getAPI(TenantAPIAccessor.java:61)
at org.bonitasoft.engine.api.TenantAPIAccessor.getLoginAPI(TenantAPIAccessor.java:67)
at bonitaSoftTest.Main.main(Main.java:37)
Exception in thread "main" java.lang.ExceptionInInitializerError
at org.bonitasoft.engine.api.impl.LocalServerAPIFactory.(LocalServerAPIFactory.java:37)
at org.bonitasoft.engine.api.PlatformAPIAccessor.getServerAPI(PlatformAPIAccessor.java:50)
at org.bonitasoft.engine.api.TenantAPIAccessor.getServerAPI(TenantAPIAccessor.java:41)
at org.bonitasoft.engine.api.TenantAPIAccessor.getAPI(TenantAPIAccessor.java:61)
at org.bonitasoft.engine.api.TenantAPIAccessor.getLoginAPI(TenantAPIAccessor.java:67)
at bonitaSoftTest.Main.main(Main.java:37)
Caused by: java.lang.ClassNotFoundException: org.bonitasoft.engine.api.impl.ServerAPIFactory
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at org.bonitasoft.engine.api.impl.LocalServerAPIFactory.(LocalServerAPIFactory.java:34)
... 5 more

1
0
-1
Notifications