Hey Lars, Thanks for the quick response!
We're actually running 2.22 here (as is the production Sierra Leone national instance we're working in co-operation with I believe). There seems to be some confusion with the functionality of compulsory data elements though, in this previous thread you seemed to mention it was a known bug that forms could be completed with blank compulsory data elements: https://lists.launchpad.net/dhis2-users/msg10726.html Was that a misunderstanding? If so, what would you recommend? A data validation rule for each data element which checks that it is not blank? Can this be done in one rule? Thanks for your help, - Jasper On Thu, Oct 27, 2016 at 1:02 PM, Lars Helge Øverland <l...@dhis2.org> wrote: > Hi there, > > 1) > > you are right, this was a bug that was fixed in 2.24. The problem is the > uniqueness constraint on data element + option combo which simply should > not be there. > > dataelement_operand_unique_key > > I have backported the fix to 2.23 as well now. > > 2) > > Per now, the compulsory elements are only used for reporting rate > calculations, not to block completion of forms. > > > regards, > > Lars > > > > > > On Thu, Oct 27, 2016 at 5:43 AM, Jasper Timm <jasper.timm@ehealthnigeria. > org> wrote: > >> Hi all, >> >> Any chance we could get a DHIS2 developer to respond to these issues with >> compulsory data elements? >> >> As I understand then, it seems to be two issues: >> >> 1.) Attempting to add data elements as compulsory to *certain* data sets >> seems to result in a crash related to a uniqueness constraint being >> violated: "duplicate key value violates unique constraint >> "dataelement_operand_unique_key" Detail: Key (dataelementid, >> categoryoptioncomboid)=(1627, 1596) already exists" >> >> 2.) When a data element *can* be successfully added to a data set as >> compulsory, it appears it is not checked at all in the data validation >> within data entry for the data set. >> >> Any help with either issue would be great. >> >> Thanks, >> >> - Jasper >> >> On Fri, Oct 21, 2016 at 10:08 AM, Ibrahim Bayoh < >> ibrahim.ba...@sl.ehealthafrica.org> wrote: >> >>> 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.HibernateTransactionManag >>>> er.convertHibernateAccessException(HibernateTransactionManag >>>> er.java:730) >>> >>> at org.springframework.orm.hibernate4.HibernateTransactionManag >>>> er.doCommit(HibernateTransactionManager.java:592) >>> >>> at org.springframework.transaction.support.AbstractPlatformTran >>>> sactionManager.processCommit(AbstractPlatformTransactionMana >>>> ger.java:757) >>> >>> at org.springframework.transaction.support.AbstractPlatformTran >>>> sactionManager.commit(AbstractPlatformTransactionManager.java:726) >>> >>> at org.springframework.transaction.interceptor.TransactionAspec >>>> tSupport.commitTransactionAfterReturning(TransactionAspectSu >>>> pport.java:521) >>> >>> at org.springframework.transaction.interceptor.TransactionAspec >>>> tSupport.invokeWithinTransaction(TransactionAspectSupport.java:291) >>> >>> at org.springframework.transaction.interceptor.TransactionInter >>>> ceptor.invoke(TransactionInterceptor.java:96) >>> >>> at org.springframework.aop.framework.ReflectiveMethodInvocation >>>> .proceed(ReflectiveMethodInvocation.java:179) >>> >>> at org.springframework.aop.interceptor.ExposeInvocationIntercep >>>> tor.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(NativeMethodAcce >>>> ssorImpl.java:62) >>> >>> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMe >>>> thodAccessorImpl.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.invokeAction >>>> Only(DefaultActionInvocation.java:289) >>> >>> at com.opensymphony.xwork2.DefaultActionInvocation.invoke(Defau >>>> ltActionInvocation.java:252) >>> >>> at org.hisp.dhis.webportal.interceptor.XWorkPortalUserIntercept >>>> or.intercept(XWorkPortalUserInterceptor.java:85) >>> >>> at com.opensymphony.xwork2.DefaultActionInvocation.invoke(Defau >>>> ltActionInvocation.java:246) >>> >>> at org.hisp.dhis.webportal.interceptor.XWorkPortalModuleInterce >>>> ptor.intercept(XWorkPortalModuleInterceptor.java:91) >>> >>> at com.opensymphony.xwork2.DefaultActionInvocation.invoke(Defau >>>> ltActionInvocation.java:246) >>> >>> at org.hisp.dhis.webportal.interceptor.XWorkPortalMenuIntercept >>>> or.intercept(XWorkPortalMenuInterceptor.java:94) >>> >>> at com.opensymphony.xwork2.DefaultActionInvocation.invoke(Defau >>>> ltActionInvocation.java:246) >>> >>> at org.hisp.dhis.webportal.interceptor.XWorkPortalParamsInterce >>>> ptor.intercept(XWorkPortalParamsInterceptor.java:149) >>> >>> at com.opensymphony.xwork2.DefaultActionInvocation.invoke(Defau >>>> ltActionInvocation.java:246) >>> >>> at org.hisp.dhis.interceptor.ContextInterceptor.intercept(Conte >>>> xtInterceptor.java:83) >>> >>> at com.opensymphony.xwork2.DefaultActionInvocation.invoke(Defau >>>> ltActionInvocation.java:246) >>> >>> at org.hisp.dhis.interceptor.UserSettingInterceptor.intercept(U >>>> serSettingInterceptor.java:81) >>> >>> at com.opensymphony.xwork2.DefaultActionInvocation.invoke(Defau >>>> ltActionInvocation.java:246) >>> >>> at org.hisp.dhis.security.intercept.LoginInterceptor.intercept( >>>> LoginInterceptor.java:85) >>> >>> at com.opensymphony.xwork2.DefaultActionInvocation.invoke(Defau >>>> ltActionInvocation.java:246) >>> >>> at org.hisp.dhis.security.intercept.XWorkSecurityInterceptor.in >>>> tercept(XWorkSecurityInterceptor.java:116) >>> >>> at com.opensymphony.xwork2.DefaultActionInvocation.invoke(Defau >>>> ltActionInvocation.java:246) >>> >>> at org.hisp.dhis.interceptor.SystemSettingInterceptor.intercept >>>> (SystemSettingInterceptor.java:115) >>> >>> at com.opensymphony.xwork2.DefaultActionInvocation.invoke(Defau >>>> ltActionInvocation.java:246) >>> >>> at org.hisp.dhis.interceptor.I18nInterceptor.intercept(I18nInte >>>> rceptor.java:139) >>> >>> at com.opensymphony.xwork2.DefaultActionInvocation.invoke(Defau >>>> ltActionInvocation.java:246) >>> >>> at com.opensymphony.xwork2.interceptor.ParametersInterceptor.do >>>> Intercept(ParametersInterceptor.java:254) >>> >>> at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor. >>>> intercept(MethodFilterInterceptor.java:98) >>> >>> at com.opensymphony.xwork2.DefaultActionInvocation.invoke(Defau >>>> ltActionInvocation.java:246) >>> >>> at com.opensymphony.xwork2.interceptor.StaticParametersIntercep >>>> tor.intercept(StaticParametersInterceptor.java:191) >>> >>> at com.opensymphony.xwork2.DefaultActionInvocation.invoke(Defau >>>> ltActionInvocation.java:246) >>> >>> at org.hisp.dhis.interceptor.ExceptionInterceptor.intercept(Exc >>>> eptionInterceptor.java:113) >>> >>> at com.opensymphony.xwork2.DefaultActionInvocation.invoke(Defau >>>> ltActionInvocation.java:246) >>> >>> at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActi >>>> onProxy.java:54) >>> >>> at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispa >>>> tcher.java:562) >>> >>> at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAc >>>> tion(ExecuteOperations.java:77) >>> >>> at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExec >>>> uteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99) >>> >>> at org.apache.catalina.core.ApplicationFilterChain.internalDoFi >>>> lter(ApplicationFilterChain.java:241) >>> >>> at org.apache.catalina.core.ApplicationFilterChain.doFilter(App >>>> licationFilterChain.java:208) >>> >>> at org.springframework.security.web.FilterChainProxy$VirtualFil >>>> terChain.doFilter(FilterChainProxy.java:330) >>> >>> at org.springframework.security.web.access.intercept.FilterSecu >>>> rityInterceptor.invoke(FilterSecurityInterceptor.java:118) >>> >>> at org.springframework.security.web.access.intercept.FilterSecu >>>> rityInterceptor.doFilter(FilterSecurityInterceptor.java:84) >>> >>> at org.springframework.security.web.FilterChainProxy$VirtualFil >>>> terChain.doFilter(FilterChainProxy.java:342) >>> >>> at org.springframework.security.web.access.ExceptionTranslation >>>> Filter.doFilter(ExceptionTranslationFilter.java:113) >>> >>> at org.springframework.security.web.FilterChainProxy$VirtualFil >>>> terChain.doFilter(FilterChainProxy.java:342) >>> >>> at org.springframework.security.web.session.SessionManagementFi >>>> lter.doFilter(SessionManagementFilter.java:103) >>> >>> at org.springframework.security.web.FilterChainProxy$VirtualFil >>>> terChain.doFilter(FilterChainProxy.java:342) >>> >>> at org.springframework.security.web.authentication.AnonymousAut >>>> henticationFilter.doFilter(AnonymousAuthenticationFilter.java:113) >>> >>> at org.springframework.security.web.FilterChainProxy$VirtualFil >>>> terChain.doFilter(FilterChainProxy.java:342) >>> >>> at org.springframework.security.web.servletapi.SecurityContextH >>>> olderAwareRequestFilter.doFilter(SecurityContextHolderAwareR >>>> equestFilter.java:154) >>> >>> at org.springframework.security.web.FilterChainProxy$VirtualFil >>>> terChain.doFilter(FilterChainProxy.java:342) >>> >>> at org.springframework.security.web.savedrequest.RequestCacheAw >>>> areFilter.doFilter(RequestCacheAwareFilter.java:45) >>> >>> at org.springframework.security.web.FilterChainProxy$VirtualFil >>>> terChain.doFilter(FilterChainProxy.java:342) >>> >>> at org.springframework.security.web.authentication.www.BasicAut >>>> henticationFilter.doFilter(BasicAuthenticationFilter.java:150) >>> >>> at org.springframework.security.web.FilterChainProxy$VirtualFil >>>> terChain.doFilter(FilterChainProxy.java:342) >>> >>> at org.hisp.dhis.security.filter.CorsFilter.doFilter(CorsFilter >>>> .java:123) >>> >>> at org.springframework.security.web.FilterChainProxy$VirtualFil >>>> terChain.doFilter(FilterChainProxy.java:342) >>> >>> at org.springframework.security.web.authentication.AbstractAuth >>>> enticationProcessingFilter.doFilter(AbstractAuthenticationPr >>>> ocessingFilter.java:199) >>> >>> at org.springframework.security.web.FilterChainProxy$VirtualFil >>>> terChain.doFilter(FilterChainProxy.java:342) >>> >>> at org.springframework.security.web.authentication.AbstractAuth >>>> enticationProcessingFilter.doFilter(AbstractAuthenticationPr >>>> ocessingFilter.java:199) >>> >>> at org.springframework.security.web.FilterChainProxy$VirtualFil >>>> terChain.doFilter(FilterChainProxy.java:342) >>> >>> at org.hisp.dhis.security.filter.CustomAuthenticationFilter.doF >>>> ilter(CustomAuthenticationFilter.java:64) >>> >>> at org.springframework.security.web.FilterChainProxy$VirtualFil >>>> terChain.doFilter(FilterChainProxy.java:342) >>> >>> at org.springframework.security.oauth2.provider.authentication. >>>> OAuth2AuthenticationProcessingFilter.doFilter(OAuth2Authenti >>>> cationProcessingFilter.java:140) >>> >>> at org.springframework.security.web.FilterChainProxy$VirtualFil >>>> terChain.doFilter(FilterChainProxy.java:342) >>> >>> at org.springframework.security.web.authentication.logout.Logou >>>> tFilter.doFilter(LogoutFilter.java:110) >>> >>> at org.springframework.security.web.FilterChainProxy$VirtualFil >>>> terChain.doFilter(FilterChainProxy.java:342) >>> >>> at org.hisp.dhis.security.filter.AutomaticAccessFilter.doFilter >>>> (AutomaticAccessFilter.java:115) >>> >>> at org.springframework.security.web.FilterChainProxy$VirtualFil >>>> terChain.doFilter(FilterChainProxy.java:342) >>> >>> at org.springframework.security.web.header.HeaderWriterFilter.d >>>> oFilterInternal(HeaderWriterFilter.java:57) >>> >>> at org.springframework.web.filter.OncePerRequestFilter.doFilter >>>> (OncePerRequestFilter.java:107) >>> >>> at org.springframework.security.web.FilterChainProxy$VirtualFil >>>> terChain.doFilter(FilterChainProxy.java:342) >>> >>> at org.springframework.security.web.context.request.async.WebAs >>>> yncManagerIntegrationFilter.doFilterInternal(WebAsyncManager >>>> IntegrationFilter.java:50) >>> >>> at org.springframework.web.filter.OncePerRequestFilter.doFilter >>>> (OncePerRequestFilter.java:107) >>> >>> at org.springframework.security.web.FilterChainProxy$VirtualFil >>>> terChain.doFilter(FilterChainProxy.java:342) >>> >>> at org.springframework.security.web.context.SecurityContextPers >>>> istenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) >>> >>> at org.springframework.security.web.FilterChainProxy$VirtualFil >>>> terChain.doFilter(FilterChainProxy.java:342) >>> >>> at org.springframework.security.web.FilterChainProxy.doFilterIn >>>> ternal(FilterChainProxy.java:192) >>> >>> at org.springframework.security.web.FilterChainProxy.doFilter(F >>>> ilterChainProxy.java:160) >>> >>> at org.springframework.web.filter.DelegatingFilterProxy.invokeD >>>> elegate(DelegatingFilterProxy.java:344) >>> >>> at org.springframework.web.filter.DelegatingFilterProxy.doFilte >>>> r(DelegatingFilterProxy.java:261) >>> >>> at org.apache.catalina.core.ApplicationFilterChain.internalDoFi >>>> lter(ApplicationFilterChain.java:241) >>> >>> at org.apache.catalina.core.ApplicationFilterChain.doFilter(App >>>> licationFilterChain.java:208) >>> >>> at org.springframework.orm.hibernate4.support.OpenSessionInView >>>> Filter.doFilterInternal(OpenSessionInViewFilter.java:151) >>> >>> at org.springframework.web.filter.OncePerRequestFilter.doFilter >>>> (OncePerRequestFilter.java:107) >>> >>> at org.apache.catalina.core.ApplicationFilterChain.internalDoFi >>>> lter(ApplicationFilterChain.java:241) >>> >>> at org.apache.catalina.core.ApplicationFilterChain.doFilter(App >>>> licationFilterChain.java:208) >>> >>> at org.springframework.web.filter.CharacterEncodingFilter.doFil >>>> terInternal(CharacterEncodingFilter.java:85) >>> >>> at org.springframework.web.filter.OncePerRequestFilter.doFilter >>>> (OncePerRequestFilter.java:107) >>> >>> at org.apache.catalina.core.ApplicationFilterChain.internalDoFi >>>> lter(ApplicationFilterChain.java:241) >>> >>> at org.apache.catalina.core.ApplicationFilterChain.doFilter(App >>>> licationFilterChain.java:208) >>> >>> at org.apache.catalina.core.StandardWrapperValve.invoke(Standar >>>> dWrapperValve.java:218) >>> >>> at org.apache.catalina.core.StandardContextValve.invoke(Standar >>>> dContextValve.java:122) >>> >>> at org.apache.catalina.authenticator.AuthenticatorBase.invoke(A >>>> uthenticatorBase.java:505) >>> >>> at org.apache.catalina.core.StandardHostValve.invoke(StandardHo >>>> stValve.java:169) >>> >>> at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorRepo >>>> rtValve.java:103) >>> >>> at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogVa >>>> lve.java:956) >>> >>> at org.apache.catalina.core.StandardEngineValve.invoke(Standard >>>> EngineValve.java:116) >>> >>> at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAd >>>> apter.java:442) >>> >>> at org.apache.coyote.http11.AbstractHttp11Processor.process(Abs >>>> tractHttp11Processor.java:1083) >>> >>> at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler >>>> .process(AbstractProtocol.java:640) >>> >>> at org.apache.tomcat.util.net.AprEndpoint$SocketWithOptionsProc >>>> essor.run(AprEndpoint.java:2454) >>> >>> at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPool >>>> Executor.java:1142) >>> >>> at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoo >>>> lExecutor.java:617) >>> >>> at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.r >>>> un(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.StandardSQLExceptionConvert >>>> er.convert(StandardSQLExceptionConverter.java:49) >>> >>> at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(Sql >>>> ExceptionHelper.java:124) >>> >>> at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(Sql >>>> ExceptionHelper.java:109) >>> >>> at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.execu >>>> teUpdate(ResultSetReturnImpl.java:189) >>> >>> at org.hibernate.engine.jdbc.batch.internal.NonBatchingBatch.ad >>>> dToBatch(NonBatchingBatch.java:59) >>> >>> at org.hibernate.persister.entity.AbstractEntityPersister.inser >>>> t(AbstractEntityPersister.java:3079) >>> >>> at org.hibernate.persister.entity.AbstractEntityPersister.inser >>>> t(AbstractEntityPersister.java:3521) >>> >>> at org.hibernate.action.internal.EntityInsertAction.execute(Ent >>>> ityInsertAction.java:88) >>> >>> at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:395) >>> >>> at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQu >>>> eue.java:387) >>> >>> at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQu >>>> eue.java:303) >>> >>> at org.hibernate.event.internal.AbstractFlushingEventListener.p >>>> erformExecutions(AbstractFlushingEventListener.java:349) >>> >>> at org.hibernate.event.internal.DefaultFlushEventListener.onFlu >>>> sh(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.JdbcTransacti >>>> on.beforeTransactionCommit(JdbcTransaction.java:101) >>> >>> at org.hibernate.engine.transaction.spi.AbstractTransactionImpl >>>> .commit(AbstractTransactionImpl.java:175) >>> >>> at org.springframework.orm.hibernate4.HibernateTransactionManag >>>> er.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.receiveErrorRespons >>>> e(QueryExecutorImpl.java:2198) >>> >>> at org.postgresql.core.v3.QueryExecutorImpl.processResults(Quer >>>> yExecutorImpl.java:1927) >>> >>> at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecut >>>> orImpl.java:255) >>> >>> at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(Abstract >>>> Jdbc2Statement.java:561) >>> >>> at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags >>>> (AbstractJdbc2Statement.java:419) >>> >>> at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(Ab >>>> stractJdbc2Statement.java:365) >>> >>> at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUp >>>> date(NewProxyPreparedStatement.java:105) >>> >>> at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.execu >>>> teUpdate(ResultSetReturnImpl.java:186) >>> >>> ... 132 >>> >>> more >>> >>> at >>> >>> org.hisp.dhis.dataset.action.compulsory.SaveCompulsoryDataEl >>>> ementsAction.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.conve >>> rtHibernateAccessException(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.ba...@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/ >>> >>> >> > > > -- > Lars Helge Øverland > Lead developer, DHIS 2 > University of Oslo > Skype: larshelgeoverland > l...@dhis2.org > http://www.dhis2.org <https://www.dhis2.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