Hi Lars,
Regarding the Compulsory data element feature, it's still not been fixed. We've
tested on 2.22 and 2.23 with almost the result.


   - From the 'Data Sets' screen in DHIS2
   - Select a Data Set
   - Right click it and then 'Edit Compulsory Data Elements'
   - Attempt to add one of the Data Elements to the DataSet
   - Hit 'Save'.

The action fails, with a DHIS2 error screen asking you to go back, where
the changes aren't saved.

See log below.



> From the 'Data Sets' screen in DHIS2, select a Data Set, click it and
> then 'Edit Compulsory Data Elements'. Attempt to add one of these Data
> Elements to the Data Set and hit 'Save'. The action fails, with a DHIS2
> error screen asking you to go back, where the changes aren't saved.


> This appears to happen on both our dev server (2.22) and staging (2.21),
> for all data set and data element combinations.


> See log output below:

`* INFO 2016-10-19 12:54:54,425 'admin' update
> org.hisp.dhis.dataset.DataSet, name: georgeTest, uid: vjAYdNmic8v
> (AuditLogUtil.java [http-apr-8080-exec-7])

* WARN 2016-10-19 12:54:54,429 SQL Error: 0, SQLState: 23505
> (SqlExceptionHelper.java [http-apr-8080-exec-7])

* ERROR 2016-10-19 12:54:54,429 ERROR: duplicate key value violates unique
> constraint "dataelement_operand_unique_key"

Detail: Key (dataelementid, categoryoptioncomboid)=(1627, 1596) already
> exists. (SqlExceptionHelper.java [http-apr-8080-exec-7])

at org.springframework.orm.hibernate4.HibernateTransactionManager.
> convertHibernateAccessException(HibernateTransactionManager.java:730)

at org.springframework.orm.hibernate4.HibernateTransactionManager.doCommit(
> HibernateTransactionManager.java:592)

at org.springframework.transaction.support.AbstractPlatformTransactionMan
> ager.processCommit(AbstractPlatformTransactionManager.java:757)

at org.springframework.transaction.support.AbstractPlatformTransactionMan
> ager.commit(AbstractPlatformTransactionManager.java:726)

at org.springframework.transaction.interceptor.TransactionAspectSupport.
> commitTransactionAfterReturning(TransactionAspectSupport.java:521)

at org.springframework.transaction.interceptor.TransactionAspectSupport.
> invokeWithinTransaction(TransactionAspectSupport.java:291)

at org.springframework.transaction.interceptor.
> TransactionInterceptor.invoke(TransactionInterceptor.java:96)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(
> ReflectiveMethodInvocation.java:179)

at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(
> ExposeInvocationInterceptor.java:92)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(
> ReflectiveMethodInvocation.java:179)

at org.springframework.aop.framework.JdkDynamicAopProxy.
> invoke(JdkDynamicAopProxy.java:207)

at com.sun.proxy.$Proxy99.updateDataSet(Unknown Source)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(
> NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(
> DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:498)

at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(
> DefaultActionInvocation.java:450)

at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(
> DefaultActionInvocation.java:289)

at com.opensymphony.xwork2.DefaultActionInvocation.invoke(
> DefaultActionInvocation.java:252)

at org.hisp.dhis.webportal.interceptor.XWorkPortalUserInterceptor.intercept(
> XWorkPortalUserInterceptor.java:85)

at com.opensymphony.xwork2.DefaultActionInvocation.invoke(
> DefaultActionInvocation.java:246)

at org.hisp.dhis.webportal.interceptor.XWorkPortalModuleInterceptor.
> intercept(XWorkPortalModuleInterceptor.java:91)

at com.opensymphony.xwork2.DefaultActionInvocation.invoke(
> DefaultActionInvocation.java:246)

at org.hisp.dhis.webportal.interceptor.XWorkPortalMenuInterceptor.intercept(
> XWorkPortalMenuInterceptor.java:94)

at com.opensymphony.xwork2.DefaultActionInvocation.invoke(
> DefaultActionInvocation.java:246)

at org.hisp.dhis.webportal.interceptor.XWorkPortalParamsInterceptor.
> intercept(XWorkPortalParamsInterceptor.java:149)

at com.opensymphony.xwork2.DefaultActionInvocation.invoke(
> DefaultActionInvocation.java:246)

at org.hisp.dhis.interceptor.ContextInterceptor.intercept(
> ContextInterceptor.java:83)

at com.opensymphony.xwork2.DefaultActionInvocation.invoke(
> DefaultActionInvocation.java:246)

at org.hisp.dhis.interceptor.UserSettingInterceptor.intercept(
> UserSettingInterceptor.java:81)

at com.opensymphony.xwork2.DefaultActionInvocation.invoke(
> DefaultActionInvocation.java:246)

at org.hisp.dhis.security.intercept.LoginInterceptor.
> intercept(LoginInterceptor.java:85)

at com.opensymphony.xwork2.DefaultActionInvocation.invoke(
> DefaultActionInvocation.java:246)

at org.hisp.dhis.security.intercept.XWorkSecurityInterceptor.intercept(
> XWorkSecurityInterceptor.java:116)

at com.opensymphony.xwork2.DefaultActionInvocation.invoke(
> DefaultActionInvocation.java:246)

at org.hisp.dhis.interceptor.SystemSettingInterceptor.intercept(
> SystemSettingInterceptor.java:115)

at com.opensymphony.xwork2.DefaultActionInvocation.invoke(
> DefaultActionInvocation.java:246)

at org.hisp.dhis.interceptor.I18nInterceptor.intercept(
> I18nInterceptor.java:139)

at com.opensymphony.xwork2.DefaultActionInvocation.invoke(
> DefaultActionInvocation.java:246)

at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(
> ParametersInterceptor.java:254)

at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(
> MethodFilterInterceptor.java:98)

at com.opensymphony.xwork2.DefaultActionInvocation.invoke(
> DefaultActionInvocation.java:246)

at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.
> intercept(StaticParametersInterceptor.java:191)

at com.opensymphony.xwork2.DefaultActionInvocation.invoke(
> DefaultActionInvocation.java:246)

at org.hisp.dhis.interceptor.ExceptionInterceptor.intercept(
> ExceptionInterceptor.java:113)

at com.opensymphony.xwork2.DefaultActionInvocation.invoke(
> DefaultActionInvocation.java:246)

at org.apache.struts2.impl.StrutsActionProxy.execute(
> StrutsActionProxy.java:54)

at org.apache.struts2.dispatcher.Dispatcher.serviceAction(
> Dispatcher.java:562)

at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(
> ExecuteOperations.java:77)

at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.
> doFilter(StrutsPrepareAndExecuteFilter.java:99)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
> ApplicationFilterChain.java:241)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(
> ApplicationFilterChain.java:208)

at org.springframework.security.web.FilterChainProxy$
> VirtualFilterChain.doFilter(FilterChainProxy.java:330)

at org.springframework.security.web.access.intercept.
> FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118)

at org.springframework.security.web.access.intercept.
> FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84)

at org.springframework.security.web.FilterChainProxy$
> VirtualFilterChain.doFilter(FilterChainProxy.java:342)

at org.springframework.security.web.access.ExceptionTranslationFilter.
> doFilter(ExceptionTranslationFilter.java:113)

at org.springframework.security.web.FilterChainProxy$
> VirtualFilterChain.doFilter(FilterChainProxy.java:342)

at org.springframework.security.web.session.SessionManagementFilter.
> doFilter(SessionManagementFilter.java:103)

at org.springframework.security.web.FilterChainProxy$
> VirtualFilterChain.doFilter(FilterChainProxy.java:342)

at org.springframework.security.web.authentication.
> AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.
> java:113)

at org.springframework.security.web.FilterChainProxy$
> VirtualFilterChain.doFilter(FilterChainProxy.java:342)

at org.springframework.security.web.servletapi.
> SecurityContextHolderAwareRequestFilter.doFilter(
> SecurityContextHolderAwareRequestFilter.java:154)

at org.springframework.security.web.FilterChainProxy$
> VirtualFilterChain.doFilter(FilterChainProxy.java:342)

at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.
> doFilter(RequestCacheAwareFilter.java:45)

at org.springframework.security.web.FilterChainProxy$
> VirtualFilterChain.doFilter(FilterChainProxy.java:342)

at org.springframework.security.web.authentication.www.
> BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150)

at org.springframework.security.web.FilterChainProxy$
> VirtualFilterChain.doFilter(FilterChainProxy.java:342)

at org.hisp.dhis.security.filter.CorsFilter.doFilter(CorsFilter.java:123)

at org.springframework.security.web.FilterChainProxy$
> VirtualFilterChain.doFilter(FilterChainProxy.java:342)

at org.springframework.security.web.authentication.
> AbstractAuthenticationProcessingFilter.doFilter(
> AbstractAuthenticationProcessingFilter.java:199)

at org.springframework.security.web.FilterChainProxy$
> VirtualFilterChain.doFilter(FilterChainProxy.java:342)

at org.springframework.security.web.authentication.
> AbstractAuthenticationProcessingFilter.doFilter(
> AbstractAuthenticationProcessingFilter.java:199)

at org.springframework.security.web.FilterChainProxy$
> VirtualFilterChain.doFilter(FilterChainProxy.java:342)

at org.hisp.dhis.security.filter.CustomAuthenticationFilter.doFilter(
> CustomAuthenticationFilter.java:64)

at org.springframework.security.web.FilterChainProxy$
> VirtualFilterChain.doFilter(FilterChainProxy.java:342)

at org.springframework.security.oauth2.provider.authentication.
> OAuth2AuthenticationProcessingFilter.doFilter(
> OAuth2AuthenticationProcessingFilter.java:140)

at org.springframework.security.web.FilterChainProxy$
> VirtualFilterChain.doFilter(FilterChainProxy.java:342)

at org.springframework.security.web.authentication.logout.
> LogoutFilter.doFilter(LogoutFilter.java:110)

at org.springframework.security.web.FilterChainProxy$
> VirtualFilterChain.doFilter(FilterChainProxy.java:342)

at org.hisp.dhis.security.filter.AutomaticAccessFilter.doFilter(
> AutomaticAccessFilter.java:115)

at org.springframework.security.web.FilterChainProxy$
> VirtualFilterChain.doFilter(FilterChainProxy.java:342)

at org.springframework.security.web.header.HeaderWriterFilter.
> doFilterInternal(HeaderWriterFilter.java:57)

at org.springframework.web.filter.OncePerRequestFilter.
> doFilter(OncePerRequestFilter.java:107)

at org.springframework.security.web.FilterChainProxy$
> VirtualFilterChain.doFilter(FilterChainProxy.java:342)

at org.springframework.security.web.context.request.async.
> WebAsyncManagerIntegrationFilter.doFilterInternal(
> WebAsyncManagerIntegrationFilter.java:50)

at org.springframework.web.filter.OncePerRequestFilter.
> doFilter(OncePerRequestFilter.java:107)

at org.springframework.security.web.FilterChainProxy$
> VirtualFilterChain.doFilter(FilterChainProxy.java:342)

at org.springframework.security.web.context.SecurityContextPersistenceFilt
> er.doFilter(SecurityContextPersistenceFilter.java:87)

at org.springframework.security.web.FilterChainProxy$
> VirtualFilterChain.doFilter(FilterChainProxy.java:342)

at org.springframework.security.web.FilterChainProxy.doFilterInternal(
> FilterChainProxy.java:192)

at org.springframework.security.web.FilterChainProxy.doFilter(
> FilterChainProxy.java:160)

at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(
> DelegatingFilterProxy.java:344)

at org.springframework.web.filter.DelegatingFilterProxy.doFilter(
> DelegatingFilterProxy.java:261)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
> ApplicationFilterChain.java:241)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(
> ApplicationFilterChain.java:208)

at org.springframework.orm.hibernate4.support.OpenSessionInViewFilter.
> doFilterInternal(OpenSessionInViewFilter.java:151)

at org.springframework.web.filter.OncePerRequestFilter.
> doFilter(OncePerRequestFilter.java:107)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
> ApplicationFilterChain.java:241)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(
> ApplicationFilterChain.java:208)

at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(
> CharacterEncodingFilter.java:85)

at org.springframework.web.filter.OncePerRequestFilter.
> doFilter(OncePerRequestFilter.java:107)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
> ApplicationFilterChain.java:241)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(
> ApplicationFilterChain.java:208)

at org.apache.catalina.core.StandardWrapperValve.invoke(
> StandardWrapperValve.java:218)

at org.apache.catalina.core.StandardContextValve.invoke(
> StandardContextValve.java:122)

at org.apache.catalina.authenticator.AuthenticatorBase.invoke(
> AuthenticatorBase.java:505)

at org.apache.catalina.core.StandardHostValve.invoke(
> StandardHostValve.java:169)

at org.apache.catalina.valves.ErrorReportValve.invoke(
> ErrorReportValve.java:103)

at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)

at org.apache.catalina.core.StandardEngineValve.invoke(
> StandardEngineValve.java:116)

at org.apache.catalina.connector.CoyoteAdapter.service(
> CoyoteAdapter.java:442)

at org.apache.coyote.http11.AbstractHttp11Processor.process(
> AbstractHttp11Processor.java:1083)

at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.
> process(AbstractProtocol.java:640)

at org.apache.tomcat.util.net.AprEndpoint$SocketWithOptionsProcessor.
> run(AprEndpoint.java:2454)

at java.util.concurrent.ThreadPoolExecutor.runWorker(
> ThreadPoolExecutor.java:1142)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(
> ThreadPoolExecutor.java:617)

at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(
> TaskThread.java:61)

at java.lang.Thread.run(Thread.java:745)

Caused by: org.hibernate.exception.ConstraintViolationException: could not
> execute statement

at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(
> SQLStateConversionDelegate.java:129)

at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(
> StandardSQLExceptionConverter.java:49)

at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(
> SqlExceptionHelper.java:124)

at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(
> SqlExceptionHelper.java:109)

at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(
> ResultSetReturnImpl.java:189)

at org.hibernate.engine.jdbc.batch.internal.NonBatchingBatch.addToBatch(
> NonBatchingBatch.java:59)

at org.hibernate.persister.entity.AbstractEntityPersister.insert(
> AbstractEntityPersister.java:3079)

at org.hibernate.persister.entity.AbstractEntityPersister.insert(
> AbstractEntityPersister.java:3521)

at org.hibernate.action.internal.EntityInsertAction.execute(
> EntityInsertAction.java:88)

at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:395)

at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:387)

at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:303)

at org.hibernate.event.internal.AbstractFlushingEventListener.
> performExecutions(AbstractFlushingEventListener.java:349)

at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(
> DefaultFlushEventListener.java:56)

at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1195)

at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:404)

at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.
> beforeTransactionCommit(JdbcTransaction.java:101)

at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(
> AbstractTransactionImpl.java:175)

at org.springframework.orm.hibernate4.HibernateTransactionManager.doCommit(
> HibernateTransactionManager.java:584)

... 118 more

Caused by: org.postgresql.util.PSQLException: ERROR: duplicate key value
> violates unique constraint "dataelement_operand_unique_key"

Detail: Key (dataelementid, categoryoptioncomboid)=(1627, 1596) already
> exists.

at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(
> QueryExecutorImpl.java:2198)

at org.postgresql.core.v3.QueryExecutorImpl.processResults(
> QueryExecutorImpl.java:1927)

at org.postgresql.core.v3.QueryExecutorImpl.execute(
> QueryExecutorImpl.java:255)

at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(
> AbstractJdbc2Statement.java:561)

at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(
> AbstractJdbc2Statement.java:419)

at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(
> AbstractJdbc2Statement.java:365)

at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(
> NewProxyPreparedStatement.java:105)

at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(
> ResultSetReturnImpl.java:186)

... 132

more

at

org.hisp.dhis.dataset.action.compulsory.SaveCompulsoryDataElementsActi
> on.execute(SaveCompulsoryDataElementsAction.java:113)

* ERROR 2016-10-19 12:54:54,433 Error while executing action
> (ExceptionInterceptor.java [http-apr-8080-exec-7])

org.springframework.dao.DataIntegrityViolationException: could not execute
> statement; SQL [n/a]; constraint [dataelement_operand_unique_key]; nested
> exception is org.hibernate.exception.ConstraintViolationException: could
> not execute

statement

at

org.springframework.orm.hibernate4.SessionFactoryUtils.
convertHibernateAccessException(SessionFactoryUtils.java:163)`

Thanks,
Bayoh.








>



On Fri, Jun 24, 2016 at 12:45 PM, Lars Helge Øverland <l...@dhis2.org>
wrote:

> Hi Ibra,
>
> thanks for reporting. Yes we are in fact aware of this one and working on
> it now. Should be fixed soon.
>
> regards,
>
> Lars
>
> On Fri, Jun 24, 2016 at 2:00 PM, Ibrahim Bayoh <ibrahim.bayoh@sl.
> ehealthafrica.org> wrote:
>
>> Hi All,
>> Am try to set certain data element as compulsory or mandatory in data set
>> but some reason the assigned compulsory data element does not seem to have
>> any effect on the data sets or forms. Forms or data sets can be completed
>> even though they contain compulsory data element. Is this a bug or a my
>> doing something wrong? My steps below.
>>
>> *From Data set App*
>>
>>    1. Select Data sets
>>    2. Left click on the desired Data set
>>    3. Select "Edit Compulsory Data Element" from the dropdown
>>    4. From the list of data element double on the desired data element
>>    5. then click save
>>
>>
>> *From the Date entry App*
>>
>>    1. Select the data set/form you added the compulsory data element
>>    2. Field other fields in the form except the compulsory data element
>>    3. then click on "Complete"
>>
>>
>> Idealy the form should not be completed or submitted if the compulsory
>> data element is not filled, but in my case the form / data set completes
>> even though the compulsory data element was neglected.
>>
>> Thanks,
>> Bayoh.
>> --
>> Ibrahim Rashid Bayoh
>> Information Systems Coordinator,
>> eHealth Africa(Sierra Leone)
>> *117 Wilkinson Rd, Freetown, Sierra Leone*
>> Mobile: +232 88-765-638
>> ibrahim.ba...@sl.ehealthafrica.org
>> http://ehealthafrica.org/
>>
>>
>> _______________________________________________
>> Mailing list: https://launchpad.net/~dhis2-users
>> Post to     : dhis2-users@lists.launchpad.net
>> Unsubscribe : https://launchpad.net/~dhis2-users
>> More help   : https://help.launchpad.net/ListHelp
>>
>>
>
>
> --
> Lars Helge Øverland
> Lead developer, DHIS 2
> University of Oslo
> Skype: larshelgeoverland
> l...@dhis2.org
> http://www.dhis2.org <https://www.dhis2.org/>
>
>


-- 
*Ibrahim Rashid Bayoh*
*Software Developer,*
*eHealth Africa(Sierra Leone)*

*Mobile: +232 88-765-638*
*117 Wilkinson Rd, Freetown, Sierra Leone*

ibrahim.ba...@sl.ehealthafrica.org
http://ehealthafrica.org/
_______________________________________________
Mailing list: https://launchpad.net/~dhis2-users
Post to     : dhis2-users@lists.launchpad.net
Unsubscribe : https://launchpad.net/~dhis2-users
More help   : https://help.launchpad.net/ListHelp

Reply via email to