CMDBuild Forum

Problemi cancellazione classe-attributi

salve

dopo aver creato una classe con i relativi attributi e domini nel cancellarla ho riscontrato dei problemi.

sono partito nel cancellare i domini e tutto ok, poi sono passato agi attributi ma:

Non è possibile cancellare classi o attributi di tabelle o domini contenenti dati
Mostra dettagli:

org.cmdbuild.exception.ORMException: ORM_CONTAINS_DATA
	at org.cmdbuild.exception.ORMException$ORMExceptionType.createException(ORMException.java:53)
	at org.cmdbuild.elements.AttributeImpl.delete(AttributeImpl.java:419)
	at org.cmdbuild.servlets.json.schema.ModClass.deleteAttribute(ModClass.java:331)
	at sun.reflect.GeneratedMethodAccessor68.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.cmdbuild.servlets.JSONDispatcher.dispatch(JSONDispatcher.java:87)
	at org.cmdbuild.servlets.JSONDispatcher.doPost(JSONDispatcher.java:49)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
	at org.cmdbuild.filters.AuthFilter.doFilter(AuthFilter.java:53)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
	at org.cmdbuild.filters.PatchManagerFilter.doFilter(PatchManagerFilter.java:30)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
	at org.cmdbuild.filters.ConfCheckFilter.doFilter(ConfCheckFilter.java:31)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
	at org.cmdbuild.filters.TranslationFilter.doFilter(TranslationFilter.java:47)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:873)
	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
	at java.lang.Thread.run(Unknown Source)

 

sapete dirmi dove sbaglio?

grazie

Siccome la cancellazione dei dati da CMDBuild è sempre logica, se sono state inserite schede e poi cancellate, tali schede sono ancora presenti nel database ma marcate come cancellate e non visibili da interfaccia.

Per eliminare fisicamente tutte le schede, è necessario intervenire direttamente sul database troncando le relative tabelle:

TRUNCATE "NomeTabella", "NomeTabella_history";

Attenzione che se sono state create relazioni andranno troncate anche le tabelle dei domini ("Map_NomeDominio", "Map_NomeDominio_history") ed eventuali altre tabelle di classi con attributi reference che usano quei domini.

Essendo un'operazione molto delicata, ovviamente è consigliabile eseguirla solamente in un ambiente di prova.

Paolo

 

P.S.

Per cancellare una classe non serve rimuovere i suo attributi, ma solo i domini. Per eliminare un dominio va prima eliminato l'eventuale attributo reference su quel dominio.

 

 

Scusate ma io penso di aver avuto lo stesso problema e credo che in questo caso sia un baco di cmdbuild.

 

Io ho fatto questa prova, se crei una nuova classe ereditandola dalla standard "class", poi non c'è più verso di cancellarla.

 

La cosa è differente se ne crei una senza nessun tipo di ereditarietà o facendola ereditare da un'altra sempre creata da te. In questo caso possiamo cancellarla a nostro piacimento

 

Mi viene il dubbio che sia colpa degli attributi di default che vengoo ereditati da "class". In questo caso l'unico modo per eliminarla che ho trovato e toglierla fisicamente dal DB.

 

Salve,
non ci risultano attualmente malfunzionamenti nella cancellazione di classi.

Tutte le classi, che lo si specifichi esplicitamente o meno ereditano da Class. Un indizio di questo ad esempio, è la presenza di Code e Description su ogni singola tabella, che derivano appunto da Class.

Il suo problema è quindi imputabile ad altri motivi: solitamente presenza di dati nella classe o di attributi reference.
Nei log dovrebbe esserci un messaggio significativo di quanto sta accadendo.

Cordiali saluti,
Lisa

Previously Simone wrote:

Scusate ma io penso di aver avuto lo stesso problema e credo che in questo caso sia un baco di cmdbuild.

 

Io ho fatto questa prova, se crei una nuova classe ereditandola dalla standard "class", poi non c'è più verso di cancellarla.

 

La cosa è differente se ne crei una senza nessun tipo di ereditarietà o facendola ereditare da un'altra sempre creata da te. In questo caso possiamo cancellarla a nostro piacimento

 

Mi viene il dubbio che sia colpa degli attributi di default che vengoo ereditati da "class". In questo caso l'unico modo per eliminarla che ho trovato e toglierla fisicamente dal DB.

 

 

Salve,

Mi scuso perché la mia facciano richiesta è tradotto dall'inglese in italiano con Google Translate. :-)

Sto cercando di rimuovere una classe, e non posso, anche se in seguito i vostri suggerimenti.

1) Quando provo a togliere il dominio della classe, ottengo:

org.cmdbuild.exception.ORMException: ORM_DOMAIN_HAS_REFERENCE
org.cmdbuild.exception.ORMException a $ ORMExceptionType.createException (ORMException.java: 53)

OK...

2) Quando provo a rimuovere l'attributo REFERENCE, ottengo:
org.cmdbuild.exception.ORMException: ORM_CONTAINS_DATA
org.cmdbuild.exception.ORMException a $ ORMExceptionType.createException (ORMException.java: 53)

OK...


3) Anche dopo aver rimosso tutti i riferimenti dalla classe Master alla classe Detail, ho ancora il messaggio di cui sopra.


 

Previously Tecnoteca wrote:

Salve,
non ci risultano attualmente malfunzionamenti nella cancellazione di classi.

Tutte le classi, che lo si specifichi esplicitamente o meno ereditano da Class. Un indizio di questo ad esempio, è la presenza di Code e Description su ogni singola tabella, che derivano appunto da Class.

Il suo problema è quindi imputabile ad altri motivi: solitamente presenza di dati nella classe o di attributi reference.
Nei log dovrebbe esserci un messaggio significativo di quanto sta accadendo.

Cordiali saluti,
Lisa

Previously Simone wrote:

Scusate ma io penso di aver avuto lo stesso problema e credo che in questo caso sia un baco di cmdbuild.

 

Io ho fatto questa prova, se crei una nuova classe ereditandola dalla standard "class", poi non c'è più verso di cancellarla.

 

La cosa è differente se ne crei una senza nessun tipo di ereditarietà o facendola ereditare da un'altra sempre creata da te. In questo caso possiamo cancellarla a nostro piacimento

 

Mi viene il dubbio che sia colpa degli attributi di default che vengoo ereditati da "class". In questo caso l'unico modo per eliminarla che ho trovato e toglierla fisicamente dal DB.

 

 

 

Salve Alain, come già detto la cancellazione dei dati da CMDBuild è sempre logica per cui, quando si cerca di cancellare una colonna o una classe che contiene dati, si ottiene l'errore ORM_CONTAINS_DATA.

Per eliminare fisicamente tutte le schede di una classe, è necessario intervenire direttamente sul database troncando le relative tabelle:

TRUNCATE "NomeTabella", "NomeTabella_history";

Ciao,
Lisa

PS. Se ti è più facile scrivere in inglese, esiste una versione inglese di questo forum (http://www.cmdbuild.org/supporto/forum/forum-in-english)

 

Non riesco a cancellare i domini, non ci sono dati e ho fatto le truncate e non ci sono reference

 
org.cmdbuild.exception.ORMException: ORM_ERROR_DOMAIN_DELETE
	at org.cmdbuild.exception.ORMException$ORMExceptionType.createException(ORMException.java:60)
	at org.cmdbuild.dao.backend.postgresql.PGCMBackend.deleteDomain(PGCMBackend.java:674)
	at org.cmdbuild.elements.DomainImpl.delete(DomainImpl.java:247)
	at org.cmdbuild.elements.proxy.DomainForwarder.delete(DomainForwarder.java:20)
	at org.cmdbuild.elements.proxy.DomainProxy.delete(DomainProxy.java:31)
	at org.cmdbuild.servlets.json.schema.ModClass.deleteDomain(ModClass.java:506)
	at sun.reflect.GeneratedMethodAccessor49.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.cmdbuild.servlets.JSONDispatcher.dispatch(JSONDispatcher.java:94)
	at org.cmdbuild.servlets.JSONDispatcher.doPost(JSONDispatcher.java:55)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

Grazie
C'è modo di disabilitare l'history?

Come è già stato risposto in precedenza se in una classe sono stati inseriti dei dati quella classe non è cancellabile.

E anche se quei dati fossero stati cancellati tramite l'interfaccia utente di CMDBuild, sarebbe fisicamente rimasta nel database la loro "versione" eliminata (per preservare il tracciamento completo delle operazioni effettuate, in CMDBuild la cancellazione dei dati è sempre solamente logica).

Per eliminare fisicamente tutte le schede, è necessario intervenire direttamente sul database troncando le relative tabelle:

TRUNCATE "NomeTabella", "NomeTabella_history";

Attenzione che se sono state create relazioni andranno troncate anche le tabelle dei domini ("Map_NomeDominio", "Map_NomeDominio_history") ed eventuali altre tabelle di classi con attributi reference che usano quei domini.

Essendo un'operazione delicata - eseguendola manualmente si superano tutti i controlli di coerenza predisposti nel sistema - è consigliabile effettuarla solamente in un ambiente di prova.

Fabio

Io ho lo stesso problema. Hai trovato la soluzione per caso?

Marco ha scritto:
Non riesco a cancellare i domini, non ci sono dati e ho fatto le truncate e non ci sono reference
 
org.cmdbuild.exception.ORMException: ORM_ERROR_DOMAIN_DELETE
	at org.cmdbuild.exception.ORMException$ORMExceptionType.createException(ORMException.java:60)
	at org.cmdbuild.dao.backend.postgresql.PGCMBackend.deleteDomain(PGCMBackend.java:674)
	at org.cmdbuild.elements.DomainImpl.delete(DomainImpl.java:247)
	at org.cmdbuild.elements.proxy.DomainForwarder.delete(DomainForwarder.java:20)
	at org.cmdbuild.elements.proxy.DomainProxy.delete(DomainProxy.java:31)
	at org.cmdbuild.servlets.json.schema.ModClass.deleteDomain(ModClass.java:506)
	at sun.reflect.GeneratedMethodAccessor49.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.cmdbuild.servlets.JSONDispatcher.dispatch(JSONDispatcher.java:94)
	at org.cmdbuild.servlets.JSONDispatcher.doPost(JSONDispatcher.java:55)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

Grazie
C'è modo di disabilitare l'history?

 


Marco ha scritto:

Non riesco a cancellare i domini, non ci sono dati e ho fatto le truncate e non ci sono reference
 
org.cmdbuild.exception.ORMException: ORM_ERROR_DOMAIN_DELETE at org.cmdbuild.exception.ORMException$ORMExceptionType.createException(ORMException.java:60) at org.cmdbuild.dao.backend.postgresql.PGCMBackend.deleteDomain(PGCMBackend.java:674) at org.cmdbuild.elements.DomainImpl.delete(DomainImpl.java:247) at org.cmdbuild.elements.proxy.DomainForwarder.delete(DomainForwarder.java:20) at org.cmdbuild.elements.proxy.DomainProxy.delete(DomainProxy.java:31) at org.cmdbuild.servlets.json.schema.ModClass.deleteDomain(ModClass.java:506) at sun.reflect.GeneratedMethodAccessor49.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.cmdbuild.servlets.JSONDispatcher.dispatch(JSONDispatcher.java:94) at org.cmdbuild.servlets.JSONDispatcher.doPost(JSONDispatcher.java:55) at javax.servlet.http.HttpServlet.service(HttpServlet.java:641) at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

Grazie
C'è modo di disabilitare l'history?

Hi

To remove the Domain make sure you Truncate the database table Map_{Domain Name}.

 

Then you can use the GUI to delete the Domain.

Regards

Karl