con l'espressione "metodi specifici del CMDBuild" intendiamo le funzioni native di CMDBuild descritte nel manuale "Workflow", più precisamente le API richiamabili col la sintassi cmdb.nomemetodo().
E' stato realizzato un processo di prova sulla falsa riga di quello fornito come esempio (RequestForChang), la differenza è che al posto di permettere la scelta delle analisi eseguibili, permette di verificare se nel momento in cui si vuole inserire una nuova card, sono disponibili nel DB i dati relativi agli attributi reference da inserire nella card stessa.
Per essere più chiari, si vuole inserire una card nella classe"Modulo" assicurandosi prima che la Card "RAP" (a cui fa riferimento) sia già stata inserita nel DB, se così non fosse si richiede l'inserimento della card "RAP" prima di procedere ad inserire il nuovo "Modulo" (in modo che nella tendina reference sia già inserito il valore).
Attribute list del processo InserimentoConClausole:
name type lookup reference domain
Code varchar
Notes text
Description varchar
FlowStatus Lookup FlowStatus
NumeroRichiesta int
DataRichiesta timestamp
StatoRichiesta lookup Stato richiesta
NuovoRap bool
NuovoModulo reference Processo_InserimentoModulo
RapInserito reference Processo_InserimentoRap
RapLetto reference InserimentoClausoleLetturaRap
Domini di interesse:
name class1 class2 cardinality
RapModulo RAP Modulo 1:N
InserimentoClausoleLetturaRap RAP InserimentoConClausole 1:N
Processo_InserimentoModulo InserimentoConClausole Modulo N:1
Processo_InserimentoRap InserimentoConClausole RAP N:1
Il processo realizzato con TWE in teoria dovrebbe:
1) registrare la richiesta di inserimento Modulo
2) permettere all'utente di accedere alla lista delle card della classe RAP
2b) se l'utente non trova il RAP cercato allora procedere al suo inserimento
3) procedere all'inserimento della card Modulo
4) permettere ad un super utente di validare l'inserimento dei nuovi dati
Ecco il risultato del log di Shark:
2013-03-22 09:53:29,311: Process [key=9516_Package_inserimentoconclausole_Process_inserimentoconclausole,mgrname=Package_inserimentoconclausole#27#Process_inserimentoconclausole] is created
2013-03-22 09:53:29,374: process 'Process_inserimentoconclausole' started
2013-03-22 09:53:29,374: sending notification for start of process 'Process_inserimentoconclausole'
2013-03-22 09:53:29,405: Process [key=9516_Package_inserimentoconclausole_Process_inserimentoconclausole,mgrname=Package_inserimentoconclausole#27#Process_inserimentoconclausole] is starting...
2013-03-22 09:53:29,436: Process[key=9516_Package_inserimentoconclausole_Process_inserimentoconclausole,mgrname=Package_inserimentoconclausole#27#Process_inserimentoconclausole] - Activity[Process Id=9516_Package_inserimentoconclausole_Process_inserimentoconclausole, Id=6552_9516_Package_inserimentoconclausole_Process_inserimentoconclausole_Process_inserimentoconclauso, ba=null,
ActDefId=Process_inserimentoconclausole_act1] is created
2013-03-22 09:53:29,436: activity 'Process_inserimentoconclausole_act1' started
2013-03-22 09:53:29,436: activity 'Process_inserimentoconclausole_act1' closed
2013-03-22 09:53:29,436: Process[key=9516_Package_inserimentoconclausole_Process_inserimentoconclausole,mgrname=Package_inserimentoconclausole#27#Process_inserimentoconclausole] - Activity[Process Id=9516_Package_inserimentoconclausole_Process_inserimentoconclausole, Id=6552_9516_Package_inserimentoconclausole_Process_inserimentoconclausole_Process_inserimentoconclauso, ba=null, ActDefId=Process_inserimentoconclausole_act1] is completed.
2013-03-22 09:53:29,436: Process[key=9516_Package_inserimentoconclausole_Process_inserimentoconclausole,mgrname=Package_inserimentoconclausole#27#Process_inserimentoconclausole] - Activity[Process Id=9516_Package_inserimentoconclausole_Process_inserimentoconclausole,
Id=6553_9516_Package_inserimentoconclausole_Process_inserimentoconclausole_Process_inserimentoconclauso, ba=null, ActDefId=Process_inserimentoconclausole_act4] is created
2013-03-22 09:53:29,436: activity 'Process_inserimentoconclausole_act4' started
2013-03-22 09:53:29,436: sending notification for activity 'Process_inserimentoconclausole_act4'
2013-03-22 09:53:29,436: sending notification for update of process 'Process_inserimentoconclausole'
2013-03-22 09:53:29,686: activity 'Process_inserimentoconclausole_act4' closed
2013-03-22 09:53:29,686: sending notification for activity 'Process_inserimentoconclausole_act4'
2013-03-22 09:53:29,686: sending notification for update of process 'Process_inserimentoconclausole'
2013-03-22 09:53:29,702: Process[key=9516_Package_inserimentoconclausole_Process_inserimentoconclausole,mgrname=Package_inserimentoconclausole#27#Process_inserimentoconclausole] - Activity[Process Id=9516_Package_inserimentoconclausole_Process_inserimentoconclausole, Id=6553_9516_Package_inserimentoconclausole_Process_inserimentoconclausole_Process_inserimentoconclauso, ba=null, ActDefId=Process_inserimentoconclausole_act4] is completed.
2013-03-22 09:53:29,702: Process[key=9516_Package_inserimentoconclausole_Process_inserimentoconclausole,mgrname=Package_inserimentoconclausole#27#Process_inserimentoconclausole] - Activity[Process Id=9516_Package_inserimentoconclausole_Process_inserimentoconclausole, Id=6554_9516_Package_inserimentoconclausole_Process_inserimentoconclausole_RegistrazioneRichiesta, ba=null, ActDefId=RegistrazioneRichiesta] is created2013-03-22 09:53:29,702: activity 'RegistrazioneRichiesta' started
2013-03-22 09:53:29,702: Activity[Process Id=9516_Package_inserimentoconclausole_Process_inserimentoconclausole, Id=6554_9516_Package_inserimentoconclausole_Process_inserimentoconclausole_RegistrazioneRichiesta, ba=null, ActDefId=RegistrazioneRichiesta] - Executing script [type=,value=DataRichiesta = Calendar.getInstance();
NumeroRichiesta = cmdb.callFunction("cmwf_getNumeroRichiesta").execute().get("NumeroRichiesta");
Description = "RFC n. " + NumeroRichiesta.toString() + + " date " + DataRichiesta.getTime().toString();
StatoRichiesta = cmdb.selectLookupByCode("Stato richiesta", "Avvio");]
2013-03-22 09:53:29,702: loading workflow api 'org.cmdbuild.workflow.api.SoapSharkWorkflowApiFactory'
2013-03-22 09:53:29,702: loading class 'org.cmdbuild.workflow.api.SoapSharkWorkflowApiFactory' that should be a 'org.cmdbuild.workflow.api.SharkWorkflowApiFactory'
2013-03-22 09:53:29,702: cannot execute tool agent - application terminated incorrectly java.lang.NullPointerException
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at org.cmdbuild.shark.toolagent.OverriddableDefaultToolAgent.toolAgentClassFor(OverriddableDefaultToolAgent.java:178)
at org.cmdbuild.shark.toolagent.OverriddableDefaultToolAgent.invokeApplication(OverriddableDefaultToolAgent.java:82)
at org.enhydra.shark.toolagent.StandardToolAgentManager.invokeToolAgent(Unknown Source)
at org.enhydra.shark.StandardToolActivityHandler$ToolRunner.invokeApplication(Unknown Source)
at org.enhydra.shark.StandardToolActivityHandler$ToolRunner.run(Unknown Source)
at org.enhydra.shark.StandardToolActivityHandler.executeActivity(Unknown Source)
at org.enhydra.shark.WfActivityImpl.runTool(Unknown Source)
at org.enhydra.shark.WfActivityImpl.startActivity(Unknown Source)
at org.enhydra.shark.WfActivityImpl.activate(Unknown Source)
at org.enhydra.shark.WfProcessImpl.startActivity(Unknown Source)
at org.enhydra.shark.WfProcessImpl.queueNext(Unknown Source)
at org.enhydra.shark.WfProcessImpl.run(Unknown Source)
at org.enhydra.shark.WfProcessImpl.activity_complete(Unknown Source)
at org.enhydra.shark.WfActivityImpl.finish(Unknown Source)
at org.enhydra.shark.WfActivityImpl.complete(Unknown Source)
at org.enhydra.shark.SharkUtilities.changeActivityState(Unknown Source)
at org.enhydra.shark.WAPIImpl.changeActivityInstanceState(Unknown Source)
at org.enhydra.shark.ws.WAPIWrapper.changeActivityInstanceState(Unknown Source)
at sun.reflect.GeneratedMethodAccessor309.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.axis.providers.java.RPCProvider.invokeMethod(RPCProvider.java:397)
at org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:186)
at org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:323)
at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:454)
at org.apache.axis.server.AxisServer.invoke(AxisServer.java:281)
at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:699)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)
2013-03-22 09:53:29,702: Activity[Process Id=9516_Package_inserimentoconclausole_Process_inserimentoconclausole, Id=6554_9516_Package_inserimentoconclausole_Process_inserimentoconclausole_RegistrazioneRichiesta, ba=null, ActDefId=RegistrazioneRichiesta] - failed to execute script [type=,value=DataRichiesta = Calendar.getInstance();
NumeroRichiesta = cmdb.callFunction("cmwf_getNumeroRichiesta").execute().get("NumeroRichiesta");
Description = "RFC n. " + NumeroRichiesta.toString() + + " date " + DataRichiesta.getTime().toString();
StatoRichiesta = cmdb.selectLookupByCode("Stato richiesta", "Avvio");]: org.enhydra.shark.api.RootError: unexpected error
2013-03-22 09:53:29,702: activity 'RegistrazioneRichiesta' closed