CMDBuild Forum

Uso metodi interni del CMDBuild per popolare tabelle con campi reference

Buongiorno,

siamo in fase di valutazione del prodotto, stiamo utilizzando una macchina virtuale di test con le seguenti configurazioni:

- OS: Windows 2003

- Tomcat: 6.0

- Postgres: 9.0.8

- CMDBuild e Shark: 2.0.3

- OCSInventory: 2.0.5 (installato su un altro server)

In fase di test abbiamo riscontrato dei problemi sui metodi interni di CMDBuild che usano le references per il popolamento in postgres di più tabelle relazionate.

Avendo elaborato un modello relazionale complesso, premesso che l'idea è di popolare tutto il popolabile a priori con metodi di inserimento massivi, si è posto il problema di rendere più agevole il popolamento del DB  da parte di utenti senza particolare familiarità con lo strumento DB. 

Per evitare che all'inserimento di una scheda si ritrovino ad aggiungere per ogni campo reference altre schede (col tasto +) ed evitare una situazione di "scatole cinesi", si è pensato di realizzare un processo condizionale che permette di verificare a priori la presenza delle classi reference necessarie, selezionarle ed eventualmente inserirle, in modo da mettere in sequenza le schede da inserire nel modo più opportuno per inserire tutti i dati necessari. 

Si è riusciti a creare con successo un processo per l'inserimento di una singola classe, anche con la presenza di una singola condizione (del tipo: la classe è da inserire? Si/No); nel momento in cui si inseriscono le funzioni di inserimento di 2 classi nello stesso workflow, ci sono dei problemi di accesso ai metodi specifici del CMDBuild. Da notare il fatto che il 2° processo realizzato è stato creato semplicemente mettendo in sequenza le azioni di inserimento delle schede in 2 step successivi.

 

Avete suggerimenti? Sono disponibili altri modi per ottenere il risultato cercato?

 

Grazie anticipatamente,

Daniela

 

Salve,

non ci è chiaro esattamente che problemi avete incontrato e cosa intendete con " metodi specifici del CMDBuild".
Potreste dettagliare meglio cosa avete realizzato e come?
 
Cordiali saluti.

Previously Tecnoteca wrote:

Salve,
non ci è chiaro esattamente che problemi avete incontrato e cosa intendete con " metodi specifici del CMDBuild".
Potreste dettagliare meglio cosa avete realizzato e come?
 
Cordiali saluti.
 
Salve,
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 di MODULO:
name type       lookup reference domain
Code varchar            
Description varchar    
Notes text
RAP         reference            RapModulo
Stato lookup Stato Modulo
 
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
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 terminated.
 
Spero che questo chiarisca la metodologia adottata.
Le configurazioni di Shark son già state verificate, dal log sembra esser un problema di API. 
Avete dei suggerimenti?
 
Grazie,
Daniela

Dando un’occhiata veloce vedo che:

- manca il type dello script, che deve essere settato a type="text/java" 
- un problema alla riga: Description = "RFC n. " + NumeroRichiesta.toString() + + " date " + DataRichiesta.getTime().toString(); (ci sono due "+")
 
Saluti,
Lisa