← Back to team overview

dhis2-devs team mailing list archive

Re: Version 26 - Issue; cannot update organisationunit

 

Thanks Viet.

But there is no record in 'translation' with null value. II run the query
and outcome is null.

But the problem persists.

Need urgent help.

Regards

Hannan

On Wed, Jun 7, 2017 at 3:10 PM, Viet Nguyen <viet@xxxxxxxxx> wrote:

> Hi Hannan,
>
> I think this is caused by some invalid translation records in your
> database.
>
> Can you try to run the below query with the old database and then run the
> upgrade procedures again. Meanwhile I will try to add some null check
> conditions to the upgrade query to make sure this issue won't happen again.
>
> delete from translation where objectproperty is null;
>
>
> Regards,
>
> On Wed, Jun 7, 2017 at 9:58 AM, Hannan Khan <hannank@xxxxxxxxx> wrote:
>
>> Thanks a lot Calle and Morten. But how can I solve this.
>>
>> I got some clue form your mail, will check and get back to you within few
>> hours (stupid meetings!!).
>>
>> Regards
>>
>> Hannan
>>
>>
>> On Tue, Jun 6, 2017 at 1:25 PM, Calle Hedberg <calle.hedberg@xxxxxxxxx>
>> wrote:
>>
>>> Hannan,
>>>
>>> That looks very much like the bug I picked up just before the Goa
>>> academy - it's caused by the fact that you have OrgUnit attributes with
>>> null values (if you have any other meta-data object with attribute records
>>> with null values it would be the same). I worked with Morten to track it
>>> down and fix it. If this is the same, it could be that update was lost,
>>> somehow (assuming your build is from ~30th April or later).
>>>
>>> Build version don't tell me anything - what is the DATE of the 2.26
>>> build you are using? Have you tried to update to the latest 2.26 build?
>>>
>>> Regards
>>> Calle
>>>
>>> On 6 June 2017 at 05:34, Hannan Khan <hannank@xxxxxxxxx> wrote:
>>>
>>>> Dear All
>>>>
>>>> We just upgrade nation instance form 22 to 26. Now we are facing an
>>>> issue.
>>>>
>>>> When we trying to update a organization unit it cannot be saved. Log is
>>>>  as follows. The build we are using is 8f9dc62
>>>>
>>>> * WARN  2017-06-06 08:56:27,127 SQL Error: 0, SQLState: 23502
>>>> (SqlExceptionHelper.java [http-nio-8080-exec-205])
>>>> * ERROR 2017-06-06 08:56:27,128 ERROR: null value in column "property"
>>>> violates not-null constraint
>>>>   Detail: Failing row contains (44356689, en_GB, null, UH & FWC/Union
>>>> Sub Centers(New)). (SqlExceptionHelper.java [http-nio-8080-exec-205])
>>>> org.hibernate.exception.ConstraintViolationException: could not
>>>> execute statement
>>>> at org.hibernate.exception.internal.SQLStateConversionDelegate.
>>>> convert(SQLStateConversionDelegate.java:112)
>>>> at org.hibernate.exception.internal.StandardSQLExceptionConvert
>>>> er.convert(StandardSQLExceptionConverter.java:42)
>>>> at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(Sql
>>>> ExceptionHelper.java:111)
>>>> at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(Sql
>>>> ExceptionHelper.java:97)
>>>> at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.execu
>>>> teUpdate(ResultSetReturnImpl.java:207)
>>>> at org.hibernate.engine.jdbc.batch.internal.NonBatchingBatch.ad
>>>> dToBatch(NonBatchingBatch.java:45)
>>>> at org.hibernate.persister.entity.AbstractEntityPersister.inser
>>>> t(AbstractEntityPersister.java:2947)
>>>> at org.hibernate.persister.entity.AbstractEntityPersister.inser
>>>> t(AbstractEntityPersister.java:3447)
>>>> at org.hibernate.action.internal.EntityInsertAction.execute(Ent
>>>> ityInsertAction.java:89)
>>>> at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQu
>>>> eue.java:582)
>>>> at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQu
>>>> eue.java:456)
>>>> at org.hibernate.event.internal.AbstractFlushingEventListener.p
>>>> erformExecutions(AbstractFlushingEventListener.java:337)
>>>> at org.hibernate.event.internal.DefaultFlushEventListener.onFlu
>>>> sh(DefaultFlushEventListener.java:39)
>>>> at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1295)
>>>> at org.hisp.dhis.dxf2.metadata.objectbundle.DefaultObjectBundle
>>>> Service.commit(DefaultObjectBundleService.java:167)
>>>> at sun.reflect.GeneratedMethodAccessor2719.invoke(Unknown Source)
>>>> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMe
>>>> thodAccessorImpl.java:43)
>>>> at java.lang.reflect.Method.invoke(Method.java:498)
>>>> at org.springframework.aop.support.AopUtils.invokeJoinpointUsin
>>>> gReflection(AopUtils.java:333)
>>>> at org.springframework.aop.framework.ReflectiveMethodInvocation
>>>> .invokeJoinpoint(ReflectiveMethodInvocation.java:190)
>>>> at org.springframework.aop.framework.ReflectiveMethodInvocation
>>>> .proceed(ReflectiveMethodInvocation.java:157)
>>>> at org.springframework.transaction.interceptor.TransactionInter
>>>> ceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
>>>> at org.springframework.transaction.interceptor.TransactionAspec
>>>> tSupport.invokeWithinTransaction(TransactionAspectSupport.java:282)
>>>> 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.framework.JdkDynamicAopProxy.invoke(
>>>> JdkDynamicAopProxy.java:213)
>>>> at com.sun.proxy.$Proxy175.commit(Unknown Source)
>>>> at org.hisp.dhis.dxf2.metadata.DefaultMetadataImportService.imp
>>>> ortMetadata(DefaultMetadataImportService.java:127)
>>>> at sun.reflect.GeneratedMethodAccessor2712.invoke(Unknown Source)
>>>> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMe
>>>> thodAccessorImpl.java:43)
>>>> at java.lang.reflect.Method.invoke(Method.java:498)
>>>> at org.springframework.aop.support.AopUtils.invokeJoinpointUsin
>>>> gReflection(AopUtils.java:333)
>>>> at org.springframework.aop.framework.ReflectiveMethodInvocation
>>>> .invokeJoinpoint(ReflectiveMethodInvocation.java:190)
>>>> at org.springframework.aop.framework.ReflectiveMethodInvocation
>>>> .proceed(ReflectiveMethodInvocation.java:157)
>>>> at org.springframework.transaction.interceptor.TransactionInter
>>>> ceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
>>>> at org.springframework.transaction.interceptor.TransactionAspec
>>>> tSupport.invokeWithinTransaction(TransactionAspectSupport.java:282)
>>>> 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.framework.JdkDynamicAopProxy.invoke(
>>>> JdkDynamicAopProxy.java:213)
>>>> at com.sun.proxy.$Proxy177.importMetadata(Unknown Source)
>>>> at org.hisp.dhis.webapi.controller.AbstractCrudController.putJs
>>>> onObject(AbstractCrudController.java:703)
>>>> at sun.reflect.GeneratedMethodAccessor2917.invoke(Unknown Source)
>>>> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMe
>>>> thodAccessorImpl.java:43)
>>>> at java.lang.reflect.Method.invoke(Method.java:498)
>>>> at org.springframework.web.method.support.InvocableHandlerMetho
>>>> d.doInvoke(InvocableHandlerMethod.java:205)
>>>> at org.springframework.web.method.support.InvocableHandlerMetho
>>>> d.invokeForRequest(InvocableHandlerMethod.java:133)
>>>> at org.springframework.web.servlet.mvc.method.annotation.Servle
>>>> tInvocableHandlerMethod.invokeAndHandle(ServletInvocableHand
>>>> lerMethod.java:116)
>>>> at org.springframework.web.servlet.mvc.method.annotation.Reques
>>>> tMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHan
>>>> dlerAdapter.java:827)
>>>> at org.springframework.web.servlet.mvc.method.annotation.Reques
>>>> tMappingHandlerAdapter.handleInternal(RequestMappingHandlerA
>>>> dapter.java:738)
>>>> at org.springframework.web.servlet.mvc.method.AbstractHandlerMe
>>>> thodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
>>>> at org.springframework.web.servlet.DispatcherServlet.doDispatch
>>>> (DispatcherServlet.java:963)
>>>> at org.springframework.web.servlet.DispatcherServlet.doService(
>>>> DispatcherServlet.java:897)
>>>> at org.springframework.web.servlet.FrameworkServlet.processRequ
>>>> est(FrameworkServlet.java:970)
>>>> at org.springframework.web.servlet.FrameworkServlet.doPut(Frame
>>>> workServlet.java:883)
>>>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:651)
>>>> at org.springframework.web.servlet.FrameworkServlet.service(Fra
>>>> meworkServlet.java:846)
>>>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
>>>> at org.apache.catalina.core.ApplicationFilterChain.internalDoFi
>>>> lter(ApplicationFilterChain.java:292)
>>>> at org.apache.catalina.core.ApplicationFilterChain.doFilter(App
>>>> licationFilterChain.java:207)
>>>> at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilte
>>>> r.java:52)
>>>> at org.apache.catalina.core.ApplicationFilterChain.internalDoFi
>>>> lter(ApplicationFilterChain.java:240)
>>>> at org.apache.catalina.core.ApplicationFilterChain.doFilter(App
>>>> licationFilterChain.java:207)
>>>> 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:126)
>>>> 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:346)
>>>> at org.springframework.web.filter.DelegatingFilterProxy.doFilte
>>>> r(DelegatingFilterProxy.java:262)
>>>> at org.apache.catalina.core.ApplicationFilterChain.internalDoFi
>>>> lter(ApplicationFilterChain.java:240)
>>>> at org.apache.catalina.core.ApplicationFilterChain.doFilter(App
>>>> licationFilterChain.java:207)
>>>> at org.hisp.dhis.servlet.filter.HttpUrlPatternFilter.doFilter(H
>>>> ttpUrlPatternFilter.java:120)
>>>> at org.apache.catalina.core.ApplicationFilterChain.internalDoFi
>>>> lter(ApplicationFilterChain.java:240)
>>>> at org.apache.catalina.core.ApplicationFilterChain.doFilter(App
>>>> licationFilterChain.java:207)
>>>> at org.springframework.web.filter.ShallowEtagHeaderFilter.doFil
>>>> terInternal(ShallowEtagHeaderFilter.java:105)
>>>> at org.hisp.dhis.servlet.filter.ExcludableShallowEtagHeaderFilt
>>>> er.doFilterInternal(ExcludableShallowEtagHeaderFilter.java:112)
>>>> at org.springframework.web.filter.OncePerRequestFilter.doFilter
>>>> (OncePerRequestFilter.java:107)
>>>> at org.apache.catalina.core.ApplicationFilterChain.internalDoFi
>>>> lter(ApplicationFilterChain.java:240)
>>>> at org.apache.catalina.core.ApplicationFilterChain.doFilter(App
>>>> licationFilterChain.java:207)
>>>> at org.springframework.orm.hibernate5.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:240)
>>>> at org.apache.catalina.core.ApplicationFilterChain.doFilter(App
>>>> licationFilterChain.java:207)
>>>> at org.springframework.web.filter.CharacterEncodingFilter.doFil
>>>> terInternal(CharacterEncodingFilter.java:197)
>>>> at org.springframework.web.filter.OncePerRequestFilter.doFilter
>>>> (OncePerRequestFilter.java:107)
>>>> at org.apache.catalina.core.ApplicationFilterChain.internalDoFi
>>>> lter(ApplicationFilterChain.java:240)
>>>> at org.apache.catalina.core.ApplicationFilterChain.doFilter(App
>>>> licationFilterChain.java:207)
>>>> at org.apache.catalina.core.StandardWrapperValve.invoke(Standar
>>>> dWrapperValve.java:213)
>>>> at org.apache.catalina.core.StandardContextValve.invoke(Standar
>>>> dContextValve.java:106)
>>>> at org.apache.catalina.authenticator.AuthenticatorBase.invoke(A
>>>> uthenticatorBase.java:502)
>>>> at org.apache.catalina.core.StandardHostValve.invoke(StandardHo
>>>> stValve.java:141)
>>>> at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorRepo
>>>> rtValve.java:79)
>>>> at org.apache.catalina.valves.AbstractAccessLogValve.invoke(Abs
>>>> tractAccessLogValve.java:616)
>>>> at org.apache.catalina.core.StandardEngineValve.invoke(Standard
>>>> EngineValve.java:88)
>>>> at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAd
>>>> apter.java:522)
>>>> at org.apache.coyote.http11.AbstractHttp11Processor.process(Abs
>>>> tractHttp11Processor.java:1095)
>>>> at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler
>>>> .process(AbstractProtocol.java:672)
>>>> at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun
>>>> (NioEndpoint.java:1504)
>>>> at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(N
>>>> ioEndpoint.java:1460)
>>>> 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.postgresql.util.PSQLException: ERROR: null value in
>>>> column "property" violates not-null constraint
>>>>   Detail: Failing row contains (44356689, en_GB, null, UH & FWC/Union
>>>> Sub Centers(New)).
>>>> at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorRespons
>>>> e(QueryExecutorImpl.java:2455)
>>>> at org.postgresql.core.v3.QueryExecutorImpl.processResults(Quer
>>>> yExecutorImpl.java:2155)
>>>> at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecut
>>>> orImpl.java:288)
>>>> at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.
>>>> java:430)
>>>> at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:356)
>>>> at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgP
>>>> reparedStatement.java:168)
>>>> at org.postgresql.jdbc.PgPreparedStatement.executeUpdate(PgPrep
>>>> aredStatement.java:135)
>>>> at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUp
>>>> date(NewProxyPreparedStatement.java:105)
>>>> at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.execu
>>>> teUpdate(ResultSetReturnImpl.java:204)
>>>> ... 133 more
>>>>
>>>> Need urgent help.
>>>>
>>>> Regards
>>>>
>>>> Muhammad Abdul Hannan Khan
>>>> Team Leader
>>>> Support to the National HMIS
>>>> MIS, Director General of Health Service
>>>> Ministry of Health and Family Welfare
>>>>
>>>> T +880-2- 58816459 <+880%202-58816459>, 58816412 ext 118
>>>> F +88 02 58813 875
>>>> M+88 01819 239 241
>>>> M+88 01534 312 066
>>>> E hannank@xxxxxxxxx
>>>> S hannan.khan.dhaka
>>>> B hannan-tech.blogspot.com
>>>> L https://bd.linkedin.com/in/hannankhan
>>>>
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> Mailing list: https://launchpad.net/~dhis2-devs
>>>> Post to     : dhis2-devs@xxxxxxxxxxxxxxxxxxx
>>>> Unsubscribe : https://launchpad.net/~dhis2-devs
>>>> More help   : https://help.launchpad.net/ListHelp
>>>>
>>>>
>>>
>>>
>>> --
>>>
>>> *******************************************
>>>
>>> Calle Hedberg
>>>
>>> 46D Alma Road, 7700 Rosebank, SOUTH AFRICA
>>>
>>> Tel/fax (home): +27-21-685-6472 <+27%2021%20685%206472>
>>>
>>> Cell: +27-82-853-5352 <+27%2082%20853%205352>
>>>
>>> Iridium SatPhone: +8816-315-19119 <+881%206%20315%2019119>
>>>
>>> Email: calle.hedberg@xxxxxxxxx
>>>
>>> Skype: calle_hedberg
>>>
>>> *******************************************
>>>
>>>
>>
>>
>> --
>> Muhammad Abdul Hannan Khan
>> Team Leader
>> Support to the National HMIS
>> MIS, Director General of Health Service
>> Ministry of Health and Family Welfare
>>
>> T +880-2- 58816459 <+880%202-58816459>, 58816412 ext 118
>> F +88 02 58813 875
>> M+88 01819 239 241
>> M+88 01534 312 066
>> E hannank@xxxxxxxxx
>> S hannan.khan.dhaka
>> B hannan-tech.blogspot.com
>> L https://bd.linkedin.com/in/hannankhan
>>
>>
>>
>>
>> _______________________________________________
>> Mailing list: https://launchpad.net/~dhis2-devs
>> Post to     : dhis2-devs@xxxxxxxxxxxxxxxxxxx
>> Unsubscribe : https://launchpad.net/~dhis2-devs
>> More help   : https://help.launchpad.net/ListHelp
>>
>>
>
>
> --
>
> Viet Nguyen
> Software Developer, DHIS 2
> University of Oslo
> http://www.dhis2.org
>
>
>


-- 
Muhammad Abdul Hannan Khan
Team Leader
Support to the National HMIS
MIS, Director General of Health Service
Ministry of Health and Family Welfare

T +880-2- 58816459, 58816412 ext 118
F +88 02 58813 875
M+88 01819 239 241
M+88 01534 312 066
E hannank@xxxxxxxxx
S hannan.khan.dhaka
B hannan-tech.blogspot.com
L https://bd.linkedin.com/in/hannankhan

Follow ups

References