← Back to team overview

dhis2-devs team mailing list archive

Re: Version 26 - Issue; cannot update organisationunit

 

Hi Hannan,

As discussed yesterday, I need more info to investigate this issue.

Can you run the below queries in your upgraded database and send over the
result.

select count(*)  from objecttranslation where property is null;

select * from objecttranslation where value like 'UH & FWC/Union Sub
Centers(New)';


On Thu, Jun 8, 2017 at 9:42 AM, Hannan Khan <hannank@xxxxxxxxx> wrote:

> 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
>
>
>
>


-- 

Viet Nguyen
Software Developer, DHIS 2
University of Oslo
http://www.dhis2.org

Follow ups

References