MỤC LỤC
Trong phần này, chúng em chỉ giới thiệu 1 cách tóm tắt các mô đun chính có liên quan trực tiếp đến đề tài của hệ thống bao gồm: DHIS Core và Report mô đun. Những mô đun khác liên quan đến hệ thống, liên quan đến tập hợp dữ liệu trong CSDL sẽ phải thông qua mô đun DHIS Core để lấy thông tin từ CSDL như mô tả của hình.
- Spring framework: cung cấp khả năng quản lí các dependency linh hoạt, thêm nữa Spring có hỗ trợ các công nghệ ánh xạ đối tượng sang cơ sở dữ liệu như JDO, Hibernate và iBatis, và Spring có hỗ trợ mô hình Web MVC. - Velocity: Cung cấp một cách tiếp cận dễ dàng hơn trong xử lí, thể hiện các thông tin động trên trang web, ngoài ra có thể truy xuất đến các đối tượng Java.
Đơn vị các cấp: Hệ thống sẽ lưu trữ tất cả các thông tin về đơn vị như (Tên đơn vị, cấp đơn vị, cấp cha của đơn vị này, địa điểm,…Quan trọng nhất là việc xác định đúng cấp cho đơn vị khi định nghĩa để khi nhập dữ liệu, chương trình sẽ tự động tính dữ liệu cho các đơn vị cấp cao hơn. Để thực hiện công tác triển khai có hiệu quả, nhóm thực tập chúng em được phân công chuẩn bị các nội dung liên quan: lên kế hoạch triển khai hệ thống DHIS cho các đơn vị y tế và chuẩn bị nội dung triển khai, các tài liệu, công cụ liên quan cho công tác hướng dẫn.
Hiện tại, cơ sở dữ liệu phục vụ cho việc xây dựng báo cáo (do DHIS Core quản lí) được tách rời so với cơ sở dữ liệu mà Report portal xây dựng để quản lí người dùng và các thông tin liên quan đến các báo cáo được tải lên, chỉ có một số các thông tin là được liên kết từ DHIS Core sang, bao gồm: Period, PeriodType và OrganizationUnit. Một chức năng của hệ thống thuộc về hai thành phần: thành phần thứ nhất là nhóm người dùng – cho biết nhóm người dùng đó được thực hiện những quyền hạn gì; thành phần thứ hai là nhóm quyền hạn – liên quan đến việc thể hiện chức năng đó trên trang web.
Xử lí này thông qua gói org.hisp.dhis.rp.authorization.action lấy ra danh sách các chức năng mà người dùng có thể thực hiện (listRole) và danh sách các nhóm chức năng liên quan đến những chức năng đó (listRoleType) và thực hiện kiểm tra trên trang bằng velocity. “Tìm kiếm báo cáo” chức năng này khi được click sẽ hiển thị một trang có các chức năng như: tìm kiếm báo cáo, download báo cáo,… Do đó, nếu người dùng không có quyền trên tất cả các chức năng của nhóm chức năng này thì khi hiển thị nhóm chức năng này sẽ được vô hiệu hoá. Khi yêu cầu kết xuất báo cáo được phát sinh, hệ thống sẽ tương tác với mô đun Report generator, phát sinh báo cáo theo định dạng đã xác định, hiển thị báo cáo và hỗ trợ khả năng cho phép người dùng tải lên hệ thống.
Khi trang này được gọi, hệ thống sẽ hiển thị hai danh sách: một bao gồm các khả năng của người dùng đang có, và một bao gồm các khả năng mà nhóm người dùng đó không có (Nhóm người dùng được hiển thị trong combo box ở phía trên).
Việc hiển thị các đơn vị y tế được thực hiện thông qua xử lí trên sự kiện onChange() của combo box và thông qua các xử lí: GetAllRootUnit, GetCityByCountry, GetDistrictByCity, GetWardByDistrict. Việc tạo lập và upload này nhằm giảm thiểu thời gian thực hiện việc gửi báo cáo từ cấp này đến cấp kia, đồng thời hỗ trợ người dùng các thao tác tìm kiếm, download, xem thông tin báo cáo các đơn vị,… một cách nhanh chóng. Thực tế hệ thống y tế có các loại báo cáo như Báo cáo tháng, báo cáo quý, báo cáo năm,…Mỗi báo cáo khi upload phải xác định loại của báo cáo.
Mỗi tháng hoặc tương ứng từng khoảng thời gian yêu cầu báo cáo, các đơn vị tổng hợp báo cáo và upload lên server xem như một hình thức gửi báo cáo cho cấp trên.
3 Nhấn nút “Đăng ký” Tất cả các thông tin về người dung cung cấp khi đăng ký được ghi nhận vào cơ sở dữ liệu Tuy nhiên tài khoản này chưa được kích hoạt, sau khi được người quản trị kích hoạt người dùng mới có thể đăng nhập vào hệ thống bằng tài khoản này. Các người dùng được thêm mới là những người dùng của cùng đơn vị y tế với người quản lí đang đăng nhập và thuộc nhóm người dùng có cấp thấp hơn cấp của người đang đăng nhập. Lấy các thông tin về loại báo cáo, các giai đoạn báo cáo (khoảng thời gian báo cáo) 2 Chọn các thông tin tra cứu Người dùng có thể cung cấp các thông tin cần.
Danh sách các báo cáo này chỉ cung cấp các thông tin liên quan đến báo cáo như: Đơn vị, loại báo cáo,… Muốn xem nội dung báo cáo hoặc tải báo cáo về, người dùng phải thực hiện thao tác xem, tải về.
Với Dependency Lookup, một thành phần hay một đối tượng sẽ yêu cầu các ràng buộc hoặc các phụ thuộc của mình trong khi đó, Dependency Injection thì ngược lại, tất cả các ràng buộc hay phụ thuộc đều được cung cấp cho đối tượng bởi một khái niệm gọi là Spring container. Chẳng hạn như trong ví dụ trên trong khi Dependency pull bắt buộc phải tạo được một tham chiếu đến registry hay một nơi nào đó chứa các denpendency hoặc đối với Contextualized Dependency Lookup thì bắt buộc thành phần đó phải bổ sung cho một interface đặc biệt và cung cấp các ràng buộc một cách thủ công thì ngược lại với Injection, việc duy nhất phải làm là đối tượng của bạn cho phép lấy các ràng buộc đó thông qua phương thức khởi tạo hoặc phương thức setters. Chỉ sử dụng phương thức setter trong trường hợp bạn chắc chắn ràng việc yêu cầu các ràng buộc này là tất yếu, tất cả các lớp bổ sung cho nó đều cần đến và thông thường các ràng buộc này mang ý nghĩa chứa đựng các thông tin cấu hình, điều khiển hoạt động của hệ thống hoặc các tham số hệ thống….
Ứng dụng của bạn tương tác với Spring DI container thông qua BeanFactory interface.Tại một thời điểm nào đó, ứng dụng của bạn bắt buộc phải tạo ra một thể hiện của một lớp bổ sung cho interface này và cấu hình BeanFactory thông qua các thông tin về các thành phần và ràng buộc cần cung cấp cho đối tượng.
Khi xây dựng cơ sở dữ liệu, chúng ta định nghĩa bảng CREDIT_CARD_DETAILS là một bảng phụ nhưng không thể khai báo tính kế thừa của CreditCard bằng các câu lệnh SQL như CREATE TABLE CREDIT_CARD_DEATAILS EXTENDS BILLINGDETAILS (…). Trong cơ sở dữ liệu SQL, các mối quan hệ này được định nghĩa dựa trên các khoá chính, khoá ngoại đến bảng khác.Vấn đề là chúng ta sẽ dùng cách nào để khai báo các lớp phụ là kế thừa của các lớp chính khi xây dựng các lớp đối tượng trong java. Như vậy, trong ngữ cảnh cơ sở dữ liệu quan hệ, việc truy xuất đến dữ liệu đòi hỏi phải xác định đồ thị đối tượng cho đối tượng trước khi định hướng cho đồ thị đối tượng đó.
Sự “không tương xứng” này xuất phát từ nhiều nguyên nhân, có thể do cách định nghĩa các đối tượng, hoặc do việc xác định các mối quan hệ giữa các đối tượng mà gây ảnh hưởng đến việc lưu trữ, truy xuất thông tin đối tượng trên java và trên cơ sở dữ liệu không tương thích với nhau.
Tương tự như JSP, ASP, ASP.Net, về tính năng nhưng velocity nổi trội hơn ở kích thước gọn nhẹ, cú pháp đơn giản và hoàn toàn tách biệt giữa thành phần View và các thành phần khác trong mô hình MVC (Model View Controller). Ngoài ra, Velocity có thể truy xuất các phương thức public của một đối tượng Java, hỗ trợ thao tác trên thông tin dựa vào một tập các cú pháp lặp, điều kiện và phép gán….Tính năng này thực sự hấp dẫn các nhà lập trình và những người thiết kế web. Do đó, lập trình viên không cần phải quan tâm đến việc thể hiện của dữ liệu sau khi xử lí như thế nào, và người thiết kế web cũng không cần quan tâm đến việc thông tin được xử lí.
Trên trang user.htm, biến $listUsers tham chiếu trực tiếp đến thuộc tính listUsers trong lớp GetList và thông qua phương thức getListUsers của lớp này, velocity sẽ lấy được danh sách người dùng và trong biến.
Ra: 0: không tồn tại đối tượng report nào liên quan đến bất kì đối tượng period nào thuộc về đối tượng periodtype có id bằng giá trị của tham số mã loại giai đoạn ở trên. - Đọc tất cả các đối tượng period trong cơ sở dữ liệu có thuộc tính periodtype bằng với đối tượng periodtype vừa được đọc ở trên. - Đọc tất cả các đối tượng user trong cơ sở dữ liệu thoả điều kiện active và trả về danh sách các đối tượng và đưa vào iterator.
- Đọc tất cả các đối tượng user có group.level < level của nhóm người dùng nêu trên, và các đối tượng user này thuộc đơn vị y tế nêu trên.
Đến thư mục cài jetty và gừ: java -jar start.jar để chạy trỡnh chủ Web server. Nội dung dữ liệu thử nghiệm chương trình được trình bày trong phần phụ lục. Để chạy chương trình, trước tiên ta phải thực hiện các bước cài đặt như đã trình bày ở trờn.
Sau đó người dùng có thể đăng nhập vào hệ thống bằng username: admin/ password: admin để kiểm tra tất cả các chức năng hiện có của hệ thống.
- Khả năng kết xuất báo cáo chưa được hoàn chỉnh do mô đun Report Generator chưa được hoàn thành.