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

Reply via email to