TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN
KHOA CÔNG NGHỆ THÔNG TIN
CHUYÊN NGÀNH HỆ THỐNG THÔNG TIN
(cid:69)(cid:71)
Huỳnh Thị Kim Dung
0112049
Trần Nam Quốc
0112322
Cổng báo cáo tổng hợp trực tuyến
phục vụ HTTT chỉ đạo ngành Y tế
cộng đồng
KHOÁ LUẬN CỬ NHÂN TIN HỌC
GIÁO VIÊN HƯỚNG DẪN
PGS.TS. ĐỒNG THỊ BÍCH THỦY
NIÊN KHOÁ 2001-2005
Luận văn tốt nghiệp
0112049 - 0112322
MỤC LỤC
LỜI MỞ ĐẦU.......................................................................................................................5 CHƯƠNG 1: GIỚI THIỆU TỔNG QUAN .......................................................................8 1. Giới thiệu về HISP .......................................................................................................8 2. Hệ thống DHIS 1.x .......................................................................................................8 1.2 Chức năng chính của DHIS 1.3 ............................................................................9 1.3 Môi trường cài đặt hệ thống ...............................................................................10 1.4 Mục đích – Yêu cầu triển khai hệ thống............................................................10 1.5 Nhận xét - Đánh giá .............................................................................................10 2. GIỚI THIỆU HỆ THỐNG DHIS 2.0.......................................................................12 2.1. Giới thiệu .............................................................................................................12 2.2. Mô hình và mối quan hệ giữa các mô đun trong hệ thống..............................12 2.3. Chức năng chính. ................................................................................................13 CHƯƠNG 2: NỘI DUNG THỰC HIỆN LUẬN VĂN ...................................................15 1. Mục tiêu ......................................................................................................................15 2. Yêu cầu thực hiện ......................................................................................................15 2.1 Tìm hiểu và triển khai hệ thống DHIS 1.3.........................................................15 2.2 Tìm hiểu các công nghệ mã nguồn mở...............................................................15 2.3 Phát triển ứng dụng Report portal ....................................................................16 3. Cụ thể các công việc thực hiện..................................................................................16 3.1 Tìm hiểu và triển khai hệ thống DHIS 1.3.........................................................16 3.1.1 Cấu trúc hệ thống DHIS: .............................................................................16 3.1.2 Các nội dung đã thực hiện khi tham gia triển khai hệ thống: ..................18 3.2 Tìm hiểu các công nghệ và phát triển ứng dụng Report portal ......................25 CHƯƠNG 3: PHÁT TRIỂN REPORT PORTAL..........................................................26 1. Giới thiệu tổng quan và phân tích yêu cầu..............................................................26 1.1. Giới thiệu .............................................................................................................26 1.2. Yêu cầu chức năng ..............................................................................................28 1.2.1. Các yêu cầu nghiệp vụ. ................................................................................28 1.2.2. Các yêu cầu hệ thống. ..................................................................................28 1.2.3. Các yêu cầu khác..........................................................................................29 1.3 Nội dung yêu cầu về công nghệ...........................................................................29 1.4. Phân tích các yêu cầu chức năng.......................................................................30 1.5 Sơ đồ Use case ......................................................................................................31 1.5.1. Tác nhân của hệ thống.................................................................................31 1.5.2. Lược đồ Use case cấp cao. ...........................................................................33 1.5.3. Mô tả chi tiết từng Use case. .......................................................................35 1.5.3.1 Manage Users .........................................................................................35 1.5.3.2. Authorize user access............................................................................37 1.5.3.3. Manage Reports ....................................................................................40 1.5.3.4. Login ......................................................................................................44 1.5.3.5. Change password ..................................................................................45 1.5.3.6. Search for reports .................................................................................46 1.6. Mô tả các bước xử lí theo từng yêu cầu ............................................................46 1.6.1. Đăng nhập và đăng kí người dùng:............................................................46 1.6.2. Yêu cầu upload các tập tin báo cáo hoặc các mẫu báo cáo:.....................48
Trang 2 / 137
Luận văn tốt nghiệp
0112049 - 0112322
1.6.3. Yêu cầu tra cứu báo cáo. .............................................................................48 1.6.4. Yêu cầu phân quyền sử dụng hệ thống ......................................................49 1.6.5. Yêu cầu kết xuất báo cáo từ các tập tin mẫu.............................................49 1.6.6. Yêu cầu quản lí người dùng ........................................................................49 1.6.7. Yêu cầu xây dựng tính năng đa ngôn ngữ:................................................50 1.6.8. Kiểm tra quyền hạn và cung cấp chức năng của hệ thống ......................50 2. Thiết kế lớp.................................................................................................................51 2.1. Mô hình lớp đối tượng cơ sở và các interfaces.................................................51 2.1.1. Thiết kế các gói (package) ...........................................................................51 2.1.2. Sơ đồ lớp:......................................................................................................58 2.1.3. Diễn giải:.......................................................................................................59 2.1.3.1 Danh sách các lớp đối tượng:................................................................59 2.1.3.2 Danh sách các quan hệ: .........................................................................60 2.2. Thiết kế các lớp xử lí action. ..............................................................................62 2.2.1. Sơ đồ các gói:................................................................................................62 2.2.2. Nội dung các xử lí chính:.............................................................................63 3. Cấu trúc cơ sở dữ liệu................................................................................................68 3.1.Ánh xạ các lớp đối tượng sang cơ sở dữ liệu quan hệ. .....................................68 3.2. Cấu trúc của cơ sở dữ liệu sau khi ánh xạ........................................................71 3.2.1. Mô hình thực thể kết hợp............................................................................71 3.2.2. Thuyết minh cho mô hình ...........................................................................71 3.2.3. Mô hình quan hệ ..........................................................................................74 4. Thiết kế giao diện.......................................................................................................75 4.1. Sơ đồ liên kết các trang ......................................................................................75 4.2. Nội dung và thiết kế các trang chức năng chính..............................................76 4.2.1. Đăng nhập và gởi đăng kí người dùng.......................................................76 4.2.2. Trang chủ......................................................................................................78 4.2.3. Trang tìm kiếm báo cáo...............................................................................81 4.2.4. Trang phân quyền sử dụng hệ thống. ........................................................83 4.2.5. Trang kết xuất báo cáo................................................................................85 CHƯƠNG 4: GIỚI THIỆU CÔNG NGHỆ VÀ MÔI TRƯỜNG PHÁT TRIỂN ........87 1. Spring framework......................................................................................................87 1.1. Lí do sử dụng Spring? ........................................................................................87 1.2. Vấn đề Inversion of Control trong Spring........................................................87 1.3. Khái niệm về bean và bean factory. ..................................................................91 2. Hibernate ....................................................................................................................92 2.1. Lí do sử dụng Hibernate. ...................................................................................92 2.2. Các vấn đề bất tương xứng giữa đối tượng và cơ sở dữ liệu quan hệ............93 2.2.1. Thế nào là tính bền vững: ...........................................................................93 2.2.2. Mô hình ghép đôi không xứng:...................................................................94 3. Webwork, Velocity...................................................................................................100 3.1. Webwork framework. ......................................................................................100 3.1.1. Giới thiệu webwork framework. ..............................................................100 3.1.2. Xwork và cấu hình Webwork thực thi các actions .................................100 3.2. Velocity template...............................................................................................103 3.2.1. Giới thiệu Velocity template. ....................................................................103
Trang 3 / 137
Luận văn tốt nghiệp
0112049 - 0112322
3.2.2. Sử dụng velocity và webwork trong môi trường Java và trên trang HTML. ..................................................................................................................104 CHƯƠNG 5: CÀI ĐẶT VÀ THỬ NGHIỆM ................................................................107 1. Cài đặt.......................................................................................................................107 1.1 Môi trường phát triển........................................................................................107 1.2 Mô tả chi tiết từng xử lí trong các lớp đối tượng ............................................107 1.2.1. Interface ReportManager .........................................................................107 1.2.2. Interface ReportTypeManager.................................................................110 1.2.3. Interface OrganizationStore .....................................................................111 1.2.4. Interface DataStore....................................................................................113 1.2.5. Interface UserManager .............................................................................115
1.3. Nội dung xây dựng các tập tin ánh xạ đối tượng sang cơ sở dữ liệu quan hệ. ...................................................................................................................................125 1.3.1. Đối tượng period (Period.hbm.xml) .........................................................125 1.3.2. Đối tượng periodtype (PeriodType.hbm.xml) .........................................125 1.3.3. Đối tượng reporttype (ReportType.hbm.xml).........................................125 1.3.4. Đối tượng reportfile (Report.hbm.xml) ...................................................126 1.3.5. Đối tượng organizationunit (OrganizationUnit.hbm.xml).....................128 1.3.6.Đối tượng organizationunitgroup OrganizationUnitGroup.hbm.xml) .129 1.3.7. Đối tượng user (User.hbm.xml) ................................................................130 1.3.8. Đối tượng group (Group.hbm.xml)..........................................................131 1.3.9. Đối tượng role (Role.hbm.xml) .................................................................131 1.3.10. Đối tượng roletype (RoleType.hbm.xml)...............................................132 2. Thử nghiệm ..............................................................................................................132 CHƯƠNG 6: NHẬN XÉT VÀ ĐÁNH GIÁ...................................................................135 1. Đánh giá ưu và khuyết điểm. ..................................................................................135 1.1 Ưu điểm...............................................................................................................135 1.2 Khuyết điểm. ......................................................................................................135 2. Hướng phát triển trong tương lai...........................................................................136 TÀI LIỆU THAM KHẢO...............................................................................................137
Trang 4 / 137
Luận văn tốt nghiệp
0112049 - 0112322
LỜI MỞ ĐẦU
Ngày nay, cùng với sự phát triển cao của khoa học kỹ thuật, xã hội tiến bộ,
công nghiệp hoá - hiện đại hoá là những vấn đề nảy sinh trong cuộc sống khi mà
mọi thứ ngày càng trở nên phức tạp, và yêu cầu về sự hoàn hảo, chuẩn mực ngày
càng được chú trọng. Sự phát triển không ngừng của lĩnh vực Công nghệ Thông tin
đã phần nào giải quyết được các vấn đề nảy sinh đó. Công nghệ thông tin đã có
những bước phát triển mạnh mẽ và đang trở nên phổ biến trong tất cả các lĩnh vực.
Ở Việt Nam, cũng không ngoài xu hướng phát triển ấy, các tổ chức xã hội và
các doanh nghiệp phải định hướng con đường và các bước phát triển để ngày càng
hoàn thiện và nâng cao hiệu quả hơn. Các công ty tin học không ngừng đầu tư và đề
ra các giải pháp cũng như cung cấp các ứng dụng nhằm đáp ứng nhu cầu cấp bách
đó. Công nghệ thông tin đã dần trở nên sâu rộng hơn trong từng cơ quan, xí nghiệp
từ quy mô nhỏ đến quy mô lớn, từ lĩnh vực này sang lĩnh vực khác. Đặc biệt, lĩnh
vực y tế là một trong những lĩnh vực mang nhiều thử thách và áp lực xã hội, làm
sao để cung cấp được các dịch vụ y tế nhanh chóng, kịp thời và phải được quản lý
một cách chặt chẽ, chính xác? Trước đây, tất cả công việc được thực hiện một cách
thủ công nên đòi hỏi đội ngũ cán bộ y tế phải tốn nhiều thời gian và công sức nhằm
đảm bảo được yêu cầu trong lĩnh vực ấy. Xuất phát từ thực tế ấy, Bộ y tế Việt Nam
cũng dần có những giải pháp nhằm từng bước củng cố và nâng cao hiệu quả hoạt
động. Hệ thống thông tin sức khoẻ y tế cộng đồng chính là một trong những giải
pháp ấy. Hệ thống đã xuất hiện ở nhiều quốc gia trên thế giới và được các nước ủng
hộ nhiệt tình. Hệ thống này trước mắt nhằm thu thập các thông tin y tế đáp ứng yêu
cầu thống kê các chỉ tiêu và quản lý các vấn đề liên quan đến y tế cộng đồng được
hiệu quả hơn. Hiện nay hệ thống DHIS v1.3 đang được triển khai thí điểm tại Thành
phố Hồ Chí Minh và Huế dưới sự hợp tác giữa Đại học Oslo, Na Uy, công ty TMA
và sở Y tế Thành phố Hồ Chí Minh. Song song với quá trình triển khai này là việc
phát triển hệ thống DHIS 2.0 với mục đích xây dựng trên nền web nhằm hỗ trợ tối
đa cho việc chia sẻ thông tin và phục vụ đắc lực cho quá trình đánh giá, lên kế
Trang 5 / 137
hoạch, ra quyết định cho các chương trình sức khỏe. DHIS 2.0 được xây dựng trên
Luận văn tốt nghiệp
0112049 - 0112322
mã nguồn mở sử dụng Java và một số công nghệ mới hiện đang rất phổ biến trên
thế giới như: Spring framework, Hibernate, Webwork, Velocity….
Module Report portal là một trong 19 module của hệ thống DHIS 2.0. Đây là
một ứng dụng web cho phép chia sẻ thông tin báo cáo giữa các đơn vị y tế, kết xuất
báo cáo theo các mẫu thiết kế từ người dùng. Toàn bộ quá trình phát triển module
này được thực hiện tại công ty TMA Solutions với sự giám sát của các thành viên
Na Uy trong nhóm và công cụ quản lí dự án jira ( www.hisp.info/jira).
Tham gia vào dự án về Hệ thống thông tin y tế cộng đồng này, chúng em
mong muốn được góp một phần nhỏ công sức vào công cuộc phát triển chung của
ngành y tế nói riêng hay nói chung là sự phát triển của đất nước Việt Nam.
Luận văn được trình bày theo bố cục gồm 6 chương và 1 phụ lục như sau:
- Chương 1, 2: Giới thiệu về hệ thống DHIS v1.x và hệ thống DHIS 2.0
Nội dung phần này nhằm cung cấp một cái nhìn tổng quan về Hệ thống
thông tin sức khoẻ cộng đồng (DHIS – District Health Information System), các
chức năng, sơ đồ thiết kế cơ sở dữ liệu…. Đồng thời giới thiệu hệ thống DHIS 2.0
đang được phát triển, so sánh sự khác nhau giữa hai hệ thống và mối liên hệ giữa
ứng dụng Report portal và các mô đun khác trong hệ thống mới.
- Chương 3: Phát triển ứng dụng Report portal.
Nội dung phần này trình bày tất cả các vấn đề liên quan trực tiếp đến quá
trình xây dựng ứng dụng Report portal. Quá trình xây dựng bao gồm: phân tích các
yêu cầu, thiết kế xử lí, thiết kế lớp đối tượng, xây dựng tập tin ánh xạ đối tượng
sang cơ sở dữ liệu quan hệ, thiết kế lớp action, thiết kế giao diện. Riêng thông tin cụ
thể trong từng lớp đối tượng, chi tiết các thuộc tính và nội dung tập tin ánh xạ đối
tượng chúng em xin trình bày trong phần phụ lục.
- Chương 4: Giới thiệu công nghệ và môi trường phát triển
Nội dung phần này nhằm giới thiệu các công nghệ mới được ứng dụng để
phát triển hệ thống. Chúng em chỉ chọn những thông tin chung mang tính giải thích
cho lí do sử dụng và những đặc điểm nội trội của những công nghệ này. Các vấn đề
Trang 6 / 137
tìm hiểu sâu về công nghệ xin được trình bày trong phần phụ lục.
Luận văn tốt nghiệp
0112049 - 0112322
- Chương 5: Cài đặt và thử nghiệm
Nội dung phần này trình bày cách thức cài đặt ứng dụng, các dữ liệu mẫu
và cách thực hiện kiểm thử chương trình.
- Chương 6: Nhận xét và đánh giá
Nội dung phần này trình bày các ưu khuyết điểm của chương trình, và
hướng phát triển trong tương lai.
- Phụ lục:
Nội dung phần phụ lục được chia làm ba phần:
Phần A: Sưu liệu cho toàn bộ quá trình phân tích hệ thống DHIS 1.x và
quá trình thực hiện triển khai và cài đặt hệ thống cho 6 quận thí điểm tại Thành phố
Hồ Chí Minh.
Phần B: Tìm hiểu công nghệ Hibernate, JUnit, Maven, JasperReport.
Phần C: Sưu liệu và hồ sơ thiết kế cho quá trình phát triển ứng dụng
Trang 7 / 137
Report portal.
Luận văn tốt nghiệp
0112049 - 0112322
CHƯƠNG 1: GIỚI THIỆU TỔNG QUAN
1. Giới thiệu về HISP
Hệ thống thông tin y tế (HISP – Health Information System Programme) được
xây dựng và phát triển đầu tiên tại Nam Phi, và được chính phủ Nam Phi chú trọng
phát triển ứng dụng trong ngành y tế (được đánh giá là phần mềm chuẩn quốc gia)
nhằm phục vụ yêu cầu chăm sóc sức khoẻ cộng đồng y tế. Phần mềm được xây
dựng miễn phí và thuộc một trong những sản phẩm mã nguồn mở. Dự án đã được
nghiên cứu phát triển tiếp bởi đội ngũ nghiên cứu từ NaUy và với hy vọng được
triển khai và phát triển trên nhiều quốc gia. Hệ thống đã được tiếp nhận và ủng hộ
nhiệt tình bởi nhiều trường đại học, các nhà nghiên cứu, chính phủ các nước trên thế
giới như Thổ Nhĩ Kỳ. Ấn độ, Ethiopia, Cu Ba và hiện nay cũng đang ứng dụng và
phát triển ở Việt Nam.
Công việc của HISP tập trung vào việc tập hợp dữ liệu, phân tích và thực hiện
các yêu cầu về y tế thông qua phần mềm hỗ trợ DHIS (District Health Information
Software – “Hệ thống thông tin sức khoẻ theo khu vực”) để sử dụng quản lý các cấp
quận huyện, đặc biệt quan tâm các vấn đề về lưu trữ, quản lý, phân tích dữ liệu, tính
toán, … từ đó đưa ra những giải pháp, định hướng phù hợp với từng khu vực, quốc
gia.
2. Hệ thống DHIS 1.x
1.1 Khái niệm “Hệ thống thông tin sức khoẻ cộng đồng”
Hệ thống thông tin sức khoẻ cộng đồng (DHIS – District Health Information
Software) là một phần mềm thuộc dự án Hệ thống thông tin y tế (HISP – Health
Information System programme) nhằm phục vụ yêu cầu chăm sóc sức khoẻ cộng
đồng y tế. Phần mềm DHIS hỗ trợ các dịch vụ về sức khoẻ như lưu trữ thông tin,
báo cáo về các chương trình sức khoẻ thông qua các ứng dụng nhập liệu, phân tích,
tổng hợp dữ liệu,... từ đó đưa ra những giải pháp, định hướng phù hợp với từng khu
Trang 8 / 137
vực đồng thời đảm bảo tính nhất quán về quản lí trong lĩnh vực y tế.
Luận văn tốt nghiệp
0112049 - 0112322
Ở Việt Nam, hệ thống DHIS đang được triển khai và ứng dụng ở Thành phố
Hồ Chí Minh và Thành phố Huế, và được tìm hiểu, phân tích, tối ưu hoá các chức
năng sao cho phù hợp với yêu cầu thực tế. Cụ thể các tiện tiện ích được quan tâm
và phát triển như:
- Phần mềm là công cụ linh hoạt với cấu trúc chuẩn được sử dụng phù hợp
với dữ liệu từng địa phương. (Tuỳ địa phương mà có thể sử dụng một cấu trúc cơ sở
dữ liệu của địa phương đó).
- Phần mềm là công cụ với nhiều thuộc tính có thể được định nghĩa và
chuyển đổi linh hoạt nhằm đáp ứng nhu cầu xây dựng khác nhau của từng đơn vị.
- Hỗ trợ người dùng công tác lưu trữ, quản lý dữ liệu và phân tích dữ liệu
để xuất các báo cáo theo các định dạng linh hoạt.
- Phần mềm đa ngôn ngữ
- Phần mềm miễn phí và với mã nguồn mở. Phần được tìm hiểu và phân
tích, phát triển bởi nhóm phát triển tại Việt Nam dưới sự hỗ trợ của công ty TMA
và đội ngũ phát triển từ NaUy
1.2 Chức năng chính của DHIS 1.3
Hệ thống DHIS đã được xây dựng và phát triển ban đầu tại Nam Phi và hiện
nay đã được nhiều quốc gia quan tâm, ứng dụng. Với phiên bản 1.3 hiện tại, DHIS
hỗ trợ các nghiệp vụ y tế chính:
- Xây dựng cơ cấu tổ chức (cấu trúc đơn vị) các đơn vị y tế theo cấp: Đây
là chức năng cho phép người dùng định nghĩa sơ đồ tổ chức phân cấp của hệ thống
y tế.
- Định nghĩa các đơn vị y tế cho hệ thống: Cho phép định nghĩa các đơn vị
y tế của khu vực, các đơn vị sẽ được xây dựng tương ứng với cấu trúc đơn vị đã
định nghĩa trước.
- Định nghĩa các phần tử dữ liệu, các phần tử dữ liệu tạm và các chỉ số liên
quan: Đây chính là các thông số y tế cần quan tâm, lưu trữ số liệu , báo cáo thống
Trang 9 / 137
kê,…
Luận văn tốt nghiệp
0112049 - 0112322
- Lưu trữ các dữ liệu người dùng nhập vào hệ thống, tổng hợp dữ liệu theo
từng nhóm đơn vị và tổng hợp dữ liệu từ các đơn vị cấp dưới cho đơn vị cấp trên
tương ứng.
- Xuất dữ liệu ra các tập tin văn bản, đồng thời cũng cho import dữ liệu rời
rạc từ các tập tin văn bản của các đơn vị khác nhau để thành dữ liệu thống nhất: Các
dữ liệu nhập vào để quản lí sau khi phân tích, tổng hợp có thể được xuất ra dưới
dạng tập tin văn bản để có thể import dữ liệu đó vào hệ thống ở một nơi khác.
- Xuất dữ liệu ra tập tin data mart (tập tin dữ liệu thông minh): Đây là tập
tin dữ liệu Access hỗ trợ các thao tác tổng hợp, kết xuất báo cáo cho đơn vị.
1.3 Môi trường cài đặt hệ thống
Hệ thống được phát triển bằng Access.
1.4 Mục đích – Yêu cầu triển khai hệ thống
Việc triển khai hệ thống DHIS tại Việt Nam được thực hiện dưới sự chỉ đạo
của Bộ y tế, sự hỗ trợ từ phía NaUy và được thực hiện trực tiếp bởi công ty TMA ở
Tp HCM. Mục tiêu chủ yếu là đáp ứng các yêu cầu từ thực tế trong lĩnh vực chăm
sóc sức khỏe y tế cộng đồng.
Mục tiêu cụ thể:
- Bước đầu tin học hoá trong lĩnh vực y tế
- Tạo điều kiện thuận lợi cho công tác quản lý và theo dõi tình hình hoạt
động tại các bệnh viện, trung tâm y tế trong toàn thành phố.
- Xây dựng đội ngũ cán bộ y tế thạo tin học và có khả năng ứng dụng, khai
thác các tính năng của hệ thống DHIS sao cho phù hợp với thực tế.
- Công tác triển khai cũng là bước tiếp cận, tìm hiểu và phân tích yêu cầu
thực tiễn nhằm thiết kế, xây dựng nên các hệ thống, chương trình phát triển trong
tương lai.
1.5 Nhận xét - Đánh giá
Hiện tại, hệ thống y tế tại Thành phố Hồ Chí Minh hoạt động theo quy trình:
Mỗi tháng, các phường sẽ tổng hợp số liệu và báo cáo theo mẫu (thống nhất cho tất
cả các phường). Các báo cáo sẽ được gởi lên đơn vị cấp cao hơn để tổng hợp và lập
Trang 10 / 137
báo cáo cho cấp đó (theo mẫu quy định chung cho quận). Tất cả các công việc đều
Luận văn tốt nghiệp
0112049 - 0112322
do nhân viên phụ trách và đều thực hiện thủ công. Do đó công việc ghi nhận số liệu
và công tác lưu trữ tốn nhiều thời gian và công sức. Bên cạnh đó do việc tính toán
thủ công nên đôi lúc sai lệch về số liệu, dữ liệu không thống nhất,…
Hệ thống y tế Thành phố Hồ Chí Minh đang dần được xây dựng và hoàn chỉnh
các cơ cấu tổ chức phân theo cấp và quản lý riêng từng lĩnh vực, từng chương trình.
Hệ thống sức khoẻ cộng đồng được chia làm nhiều chương trình như: Chương trình
chăm sóc sức khoẻ bà mẹ và trẻ em, chương trình Vắc xin, chương trình HIV –
AIDS, chương trình phòng chống lao,… Cùng với sự quản lý chặt chẽ theo các nội
dung riêng biệt như thế là sự đòi hỏi về tính chặt chẽ trong quản lý, sự thống nhất
trong hoạt động.
Với nhu cầu thực tế của hệ thống y tế Việt Nam, hệ thống DHIS hiện tại cần
được cải tiến các chức năng sao cho phù hợp và tiện dụng hơn. Cùng với sự cải tiến
đó, cần xây dựng các hệ thống, các chương trình mới hỗ trợ phù hợp cho từng khía
cạnh của ngành y tế (chăm sóc trẻ em, chăm sóc sức khỏe phụ nữ, vắc xin, bệnh
lao,… ). Các ứng dụng được phát triển có thể được tích hợp lại với nhau để tạo
thành một hệ thống hoạt động hiệu quả như một dây chuyền hoàn chỉnh. Cụ thể, các
ứng dụng mới cần phát triển:
Web patient: Quản lý thông tin bệnh nhân tại các trạm y tế phường xã
Report designer: Hỗ trợ công cụ giúp người dùng có thể thiết kế các nội
dung báo cáo tương ứng với từng nội dung quản lý về y tế.
Report generator: Hỗ trợ công cụ kết xuất các báo cáo từ các dữ liệu được
nhập vào và theo mẫu mà report designer đã hỗ trợ thiết kế
Report portal: Cung cấp ứng dụng hỗ trợ người dùng upload các báo cáo đã
kết xuất lên server thay vì phải gửi báo cáo lên cho cấp trên bằng thủ công.
Report portal cũng là ứng dụng mà chúng em sẽ quan tâm và xây dựng khi tham gia
dự án này. Các chức năng cụ thể và các bước phân tích, thiết kế, xây dựng sẽ được
đề cập đến trong phần 3 - nội dung chính của Report portal. Riêng phần nội dung về
công cụ kết xuất báo cáo hỗ trợ cho hệ thống 1.x chúng em xin trình bày ở phần phụ
Trang 11 / 137
lục.
Luận văn tốt nghiệp
0112049 - 0112322
2. GIỚI THIỆU HỆ THỐNG DHIS 2.0
2.1. Giới thiệu
DHIS 2.0 là hệ thống quản lí thông tin y tế được phát triển dựa trên phiên bản
DHIS v1.x do trường Đại học Oslo, Na Uy thực hiện. Phần mềmDHIS 2.0 với
những mô đun sẽ được phát triển trên môi trường Java (dùng IDE là Eclipse để soạn
thảo ) có thể chạy trên hệ điều hành Linux , độc lập với hệ điều hành , giúp cho sản
phẩm không còn phụ thuộc vào nền tảng bên dưới. Cùng với việc sử dụng mã
nguồn mở thì hệ thống cũng sử dụng 1 số công nghệ tiên tiến để hổ trợ chương trình
như: Maven, JUnit, Subversion, Spring và Hibernate…
DHIS 2.0 được phân chia ra làm 19 mô đun bao gồm: Patient mô đun for wards,
Indicator module, Validation module, Import/export module, Standard data entry,
Customised data entry, System admin module, DHIS core, Alternative persistence
strategy, DHIS 1.4 bridge, Wireless module, Internationalization localization, Web
pivot module, Desktop pivot module, Report portal module, Report generator
module, Report designer module, GIS report integration, GIS module.
2.2. Mô hình và mối quan hệ giữa các mô đun trong hệ thống
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.
DHIS Core: là mô đun chứa tât cả thông tin về hệ thống, những tập hợp những
thông tin dữ liệu quan trọng của hệ thống. Là nơi trực tiếp kết nối CSDL để lấy
thông tin về dữ liệu liên quan. 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.
Report Mô đun: mô đun này hỗ trợ người dùng xây dựng các template báo cáo.
Sẽ có các user interface cho phép người dùng thêm các thông tin về giai đoạn báo
cáo, đơn vị tổ chức để điền vào báo cáo. Dựa trên những mẩu thiết kế sẵn và dữ liệu
nguồn cần thiết, report generator sẽ tạo ra những mẩu báo cáo với các định dạng
khác nhau (html, pdf …). Jasper report là 1 công cụ generator report có thể dùng để
Trang 12 / 137
tạo ra những mẩu báo cáo theo yêu cầu và được sử dụng trong mô đun này.
Luận văn tốt nghiệp
0112049 - 0112322
Report Mô đun có 3 mô đun nhỏ thực hiện các công việc khác nhau: Report
Designer, Report Generator, Report Portal. Ba mô đun này liên quan đến nhau cùng
tạo ra 1 báo cáo hoàn chỉnh để upload và download. Mối liên quan giữa ba mô đun
Hình 1.1: Sơ đồ liên kết các mô đun trong hệ thống DHIS 2.0
này sẽ được trình bày chi tiết ở phần sau.
2.3. Chức năng chính.
- Quản lí và chia sẻ các thông tin y tế.
- Định nghĩa các phần tử dữ liệu, các chỉ số tính toán trong các chương trình
sức khỏe.
- Kết xuất báo cáo theo mẫu qui định của bộ Y tế, cho phép người dùng tự
thiết kế các mẫu báo cáo.
- Chia sẻ báo cáo giữa các cấp, hỗ trợ thông tin chính xác và cần thiết cho việc
Trang 13 / 137
ra quyết định và lên kế hoạch.
Luận văn tốt nghiệp
0112049 - 0112322
- Có khả năng tương tác với hệ thống phiên bản 1.x.
2.4. So sánh giữa DHIS 2.0 và DHIS 1.x
DHIS phiên bản 2.0 DHIS phiên bản 1.x
Xây dựng trên môi trường Windows và - Độc lập với hệ điều hành và hệ
cơ sở dữ liệu Access quản trị cơ sở dữ liệu
- Báo cáo kết xuất được thiết kế trước, - Hỗ trợ kết xuất các mẫu báo cáo
không có đáp ứng được yêu cầu. theo yêu cầu
- Hỗ trợ chia sẻ báo cáo giữa các đơn - Báo cáo sau khi kết xuất được gửi đi
vị y tế thông qua một ứng dụng web. qua mail.
Trang 14 / 137
Bảng 1.1: So sánh giữa DHIS 2.0 và DHIS 1.x
Luận văn tốt nghiệp
0112049 - 0112322
CHƯƠNG 2: NỘI DUNG THỰC HIỆN LUẬN VĂN
1. Mục tiêu
Hỗ trợ công tác triển khai hệ thống tại thành phố Hồ Chí Minh. Thông qua đó
phân tích, tiếp nhận yêu cầu từ thực tế để phát triển ứng dụng Report portal.
2. Yêu cầu thực hiện
2.1 Tìm hiểu và triển khai hệ thống DHIS 1.3
Khi tham gia vào dự án HISP, để đảm bảo hoàn thành nhiệm vụ thực tập tại
công ty và đảm bảo thực hiện tốt đề tài tốt nghiệp, nhóm chúng em đã tìm hiểu về
hệ thống DHIS, tham gia công tác triển khai hệ thống theo sự phân công của công
ty TMA. Cụ thể phải đảm bảo các yêu cầu công việc như sau:
- Tìm hiểu kiến trúc, phương thức hoạt động của hệ thống DHIS 1.3.
- Tìm hiểu qui trình quản lí y tế tại thành phố Hồ Chí Minh, các tài liệu liên
quan.
- Xây dựng tập tin dữ liệu để ứng dụng cho thành phố.
- Xây dựng công cụ hỗ trợ kết xuất báo cáo theo các yêu cầu thực tế
- Tham gia công tác triển khai hệ thống cho các quận huyện trong thành phố.
2.2 Tìm hiểu các công nghệ mã nguồn mở
Hệ thống được xây dựng và phát triển phục vụ cho ngành y tế - một lĩnh vực
rất rộng lớn trong xã hội. Do đó yêu cầu vấn đề chi phí là vấn đề đáng quan tâm đối
với nhiều quốc gia. Giải pháp nào cho các quốc gia còn khó khăn, các khu vực, đơn
vị còn kém về khả năng kinh tế?
Chính vì lí do đó, công nghệ mã nguồn mở được nhóm phát triển hệ thống từ
NaUy đặc biệt chú trọng và chọn làm công cụ để phát triển các ứng dụng. Đây là
điều thật sự ích lợi vì có thể áp dụng miễn phí trên nhiều quốc gia, và tuỳ thuộc vào
yêu cầu cụ thể của từng quốc gia, khu vực mà xây dựng các ứng dụng thật sự phù
Trang 15 / 137
hợp. Các công nghệ được tìm hiểu để phát triển ứng dụng:
Luận văn tốt nghiệp
0112049 - 0112322
- 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.
- Hibernate: Hỗ trợ việc ánh xạ đối tượng sang cơ sở dữ liệu
- Webwork: tương tự với một web framework khá nổi tiếng khác của Jakarta
là Struts. Ngoài ra Webwork còn cung cấp thêm ba chức năng khác là: dispatcher,
Web-specific result và một tập các tag được sử dùng ở tầng view của mô hình
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.
2.3 Phát triển ứng dụng Report portal
Report portal sẽ cung cấp ứng dụng hỗ trợ người dùng upload các báo cáo đã
kết xuất lên server thay vì phải gửi báo cáo lên cho cấp trên bằng thủ công. Ứng
dụng này phải đảm bảo các yêu cầu về chức năng cũng như yêu cầu tiện dụng đối
với các người dùng trong lĩnh vực y tế.
3. Cụ thể các công việc thực hiện
3.1 Tìm hiểu và triển khai hệ thống DHIS 1.3
Với thời gian thực tập tại công ty TMA, chúng em tìm hiểu , phân tích và hỗ
trợ công tác triển khai và hoàn thiện hệ thống DHIS v1.3. Các nội dung thực hiện đã
được phân công và thực hiện hiệu quả. Công tác triển khai hệ thống DHIS được
đánh giá cao và được sự hưởng ứng tích cực của các đơn vị y tế. Hiện tại các đơn vị
y tế đang sử dụng hệ thống DHIS v1.3 cùng với chương trình kết xuất báo cáo đã
phần nào giảm thiểu được công việc tính toán phức tạp trước đây.
3.1.1 Cấu trúc hệ thống DHIS:
(cid:153) Hệ thống file: cơ sở dữ liệu của DHIS được lưu trữ dưới dạng các tập
tin Access, bao gồm 2 loại:
Data File: Bao gồm tất cả các bảng, câu lệnh truy vấn lưu trữ thông tin
về đơn vị, cấu trúc đơn vị, được định nghĩa sẵn (hoặc người dùng định nghĩa thêm
Trang 16 / 137
cho phù hợp), các dữ liệu người dùng nhập vào để lưu trữ cho các đơn vị.
Luận văn tốt nghiệp
0112049 - 0112322
Data Mart: Data File lưu trữ dữ liệu thực và sau khi phân tích, tổng hợp
dữ liệu từ các dữ liệu nhập vào đó, hệ thống hỗ trợ xuất ra một tập tin khác nhằm
lưu trữ các dữ liệu tổng hợp, hỗ trợ các chức năng khác như truy xuất đến dữ liệu
mộ cách nhanh chóng. Đó gọi là Data Mart. Data mart có thể được cập nhật thường
xuyên từ data file một cách linh hoạt (có thể cập nhật dữ liệu từng phần, dữ liệu mới
hoặc có thể cập nhật toàn bộ dữ liệu từ data file).
(cid:153) OrgUnits (Đơn vị các cấp):Các đơn vị được định nghĩa liên quan đến 2
khái niệm: Cấu trúc đơn vị và Đơn vị các cấp.
Cấu trúc đơn vị: Hệ thống quy định: Khi định nghĩa các orgunits thì
phải định nghĩa đủ 5 cấp (từ trên xuống) và dữ liệu chỉ nhập cho 1 cấp thấp nhất.
Các dữ liệu của các cấp cao hơn sẽ tự động cập nhật (bằng tổng dữ liệu của các đơn
vị cấp con của nó). Tuỳ thuộc vào từng địa phương, khu vực mà cấu trúc được xây
dựng khác nhau.Nếu như thiếu 1 cấp nào thì sẽ được định nghĩa thành cấp giả (Ví
dụ Dummy)
Đơ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.
(cid:153) Phần tử dữ liệu (DataElement)
Phần tử dữ liệu bao gồm tất cả các thông tin hỗ trợ cho việc lưu trữ dữ liệu.
Mỗi phần tử dữ liệu thể hiện một thông số về sức khoẻ và được sử dụng để nhập
cho tất cả các đơn vị.
Khi nhập dữ liệu, ứng với từng đơn vị, số liệu cho từng phần tử dữ liệu sẽ
được ghi nhận và tự động cập nhật cho các đơn vị cấp cao hơn.
(cid:153) Phần tử dữ liệu tạm (Sermi – DataElement)
Phần tử dữ liệu tạm cũng giống như các phần tử dữ liệu nhưng dùng để thể
Trang 17 / 137
hiện các thông tin ít thay đổi, các thông tin phục vụ cho việc đánh giá việc thực hiện
Luận văn tốt nghiệp
0112049 - 0112322
(thông tin thường kỳ) so với việc quản lý của đơn vị. Phần tử dữ liệu tạm thường
dùng trong việc phân tích. Các giá trị của các phần tử dữ liệu này là những con số ít
thay đổi (thường được nhập liệu theo các quý), người dùng không phải tốn thời gian
để nhập nhiều lần.
(cid:153) Các chỉ số (Indicator)
Các chỉ số tức là tỷ số giữa khối lượng thực hiện ngoài thực tế so với khối
lượng quản lý chung của đơn vị. Các chỉ số này hỗ trợ việc đánh giá chung các hoạt
động y tế của từng đơn vị từ đó đánh giá các nội dung và hiệu quả thực hiện. Các
chỉ số này được quy định thống nhất chung trong cả nước cho từng lĩnh vực đánh
giá nhằm có cách nhìn tổng quát và đánh giá công bằng với tất cả đơn vị. Thường
thì được định nghĩa theo công thức:
Tỷ lệ = Chỉ số thực hiện/ Tổng số đối tượng
3.1.2 Các nội dung đã thực hiện khi tham gia triển khai hệ thống:
(cid:153) Bước 1: Xây dựng hoàn chỉnh hệ thống DHIS v1.3 phù hợp với
thực tế
(cid:190) Định nghĩa cấu trúc đơn vị cho datafile:
Qua phân tích sơ đồ tổ chức quản lí y tế ngoài thực tế, sơ đồ tổ
Trang 18 / 137
chức y tế tại Thành phố Hồ Chí Minh như sau:
Luận văn tốt nghiệp
0112049 - 0112322
Hình 2.1: Cấu trúc đơn vị y tế các cấp
Chúng em xây dựng cấu trúc đơn vị cho hệ thống y tế cho Thành phố Hồ
Chí Minh như sau (Phù hợp cho chương trình “Chăm sóc sức khoẻ Bà mẹ” và
chương trình “Chăm sóc sức khoẻ trẻ em”:
Stt Hệ thống đơn vị y tế Cấp
Dummy (Cấp giả) 1 Cấp1
Việt Nam 2 Cấp 2
Thành phố Hồ Chí Minh 3 Cấp 3
4 Quận/ huyện hoặc Bệnh viện (thuộc sự quản lý Cấp 4
của Tp)
5 Phường/ Xã Cấp 5
Bảng 2.1: Ví dụ cấu trúc đơn vị y tế
(cid:190) Định nghĩa các đơn vị y tế theo các cấp
Định nghĩa tất cả các đơn vị y tế thuộc sự quản lý theo các cấp trong thành
phố: 24 đơn vị quận/ huyện, và tất cả các trung tâm y tế phường/ xã thuộc sự quản
Trang 19 / 137
lý của 24 đơn vị cấp quận/ huyện đó.
Luận văn tốt nghiệp
0112049 - 0112322
(cid:190) Định nghĩa các phần tử dữ liệu, phần tử dữ liệu tạm và các chỉ số
cho 2 chương trình: Chương trình chăm sóc sức khoẻ Bà mẹ và chương trình chăm
sóc sức khoẻ trẻ em.
Từ các báo cáo tổng hợp từ thực tế, các phần tử dữ liệu, phần tử dữ liệu tạm
được định nghĩa vào data file. Đây là những thông tin cần thiết để lưu trữ các nội
dung thực hiện của đơn vị.
Chương trình bà mẹ: định nghĩa 134 phần tử dữ liệu:
Trang 20 / 137
Hình 2.2: Xây dựng phần tử dữ liệu trong DHIS 1.3
Luận văn tốt nghiệp
0112049 - 0112322
Định nghĩa các phần tử dữ liệu tạm:
Hình 2.3: Định nghĩa phần tử dữ liệu tạm trong DHIS 1.3
Chương trình trẻ em: Định nghĩa 114 phần tử dữ liệu
Hình 2.4: Xây dựng phần tử dữ liệu cho chương trình trẻ em trong DHIS 1.3
(cid:190) Định nghĩa các chỉ số liên quan theo quy định của bộ y tế: Bộ y tế
quy định các chỉ số (được đánh tổng hợp hằng năm) để đánh giá tình hình hoạt
động, làm cơ sở so sánh hiệu quả hoạt động của các địa phương. Từ đó đề ra những
Trang 21 / 137
giải pháp tích cực cho từng địa phương, đơn vị.
Luận văn tốt nghiệp
0112049 - 0112322
Ví dụ: Bộ y tế có một vài quy định về các chỉ số như sau:
- Tỷ lệ trẻ em tiêm văc xin phòng bệnh viêm não Nhật bản B:
Tỷ lệ TE tiêm phòng viêm não Nhật bản B = Tổng số trẻ em từ 1 - 5 tuổi
tiêm đủ 3 mũi vắc xin phòng viêm não Nhật Bản B của 1 khu vực / Tổng số trẻ em
từ 1-5 tuổi của khu vực đó.
(cid:190) Xây dựng công cụ kết xuất báo cáo theo các mẫu báo cáo ngoài thực
tế dựa trên hệ thống dữ liệu trong DHIS v1.3.
Hằng tháng hoặc hằng quý các đơn vị y tế phải tổng hợp số liệu và lập báo
cáo gửi về cho cấp trên. Các cấp trên tổng hợp báo cáo từ cấp dưới và lập báo cáo
cho đơn vị. Nếu chỉ sử dụng hệ thống DHIS có sẵn thì chỉ hỗ trợ công tác lưu trữ dữ
liệu, tổng hợp dữ liệu chứ không cho phép chức năng kết xuất báo cáo. Yều cầu đặt
ra là phải xây dựng công cụ kết xuất báo cáo từ dữ liệu đã nhập đó. Công cụ được
xây dựng bằng ngôn ngữ VB, cho phép xuất các báo cáo theo mẫu. Từ yêu cầu thực
tế đó, chúng em tiến hành phân tích cơ sở dữ liệu của hệ thống DHIS, xây dựng một
chương trình bằng ngôn ngữ Visual Basic hỗ trợ kết xuất báo cáo từ dữ liệu đã lưu
trữ. Chúng em thiết kế các mẫu báo cáo bằng Datareport, xây dựng các chức năng
hỗ trợ phù hợp với từng nội dung báo cáo cụ thể.
Trang 22 / 137
Ví dụ mẫu báo cáo:
Luận văn tốt nghiệp
0112049 - 0112322
Trang 23 / 137
Hình 2.5: Mẫu báo cáo cho chương trình trẻ em
Luận văn tốt nghiệp
0112049 - 0112322
Giao diện chương trình:
Hình 2.6: Chương trình kết xuất báo cáo
Chương trình báo cáo cho phép kết xuất báo cáo theo thời gian (theo tháng
hoặc theo quý) và báo cáo cho tất cả các đơn vị của các các cấp. Dữ liệu nhập vào
chỉ là cấp thấp nhất, dữ liệu các cấp cao hơn sẽ tự động tổng hợp.
Cơ sở dữ liệu của chương trình là tập tin dữ liệu thông minh (data mart) mà
người dùng đã nhập và xuất từ hệ thống DHIS. Người sử dụng chỉ cần xác định
đúng tập tin chứa dữ liệu và chọn đơn vị, thời gian và loại báo cáo thì có thể kết
xuất được báo cáo như báo cáo ngoài thực tế.
(cid:153) Bước 2: Công tác triển khai và hướng dẫn sử dụng
Ban đầu, chúng em hỗ trợ khi hệ thống chỉ được áp dụng thí điểm cho 2 quận
trong thành phố: Quận 4 và quận Tân Bình. Sau đó, đánh giá được hiệu quả khi sử
dụng hệ thống, Sở y tế Thành phố Hồ Chí Minh quyết định mở rộng quy mô áp
dụng hơn nữa ở các đơn vị y tế khác.
Để 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
Trang 24 / 137
cho công tác hướng dẫn.
Luận văn tốt nghiệp
0112049 - 0112322
Công tác triển khai đã được tiến hành với sự hỗ trợ của Trung tâm chăm sóc
sức khoẻ bà mẹ trẻ em. Đã tổ chức 2 đợt tập huấn và hiện đã triển khai và ứng dụng
cho 6 quận huyện và 2 bệnh viện trong thành phố.
Công tác hỗ trợ sau triển khai cũng được chú trọng, chúng tôi- những sinh
viên thực tập đã tham gia vào dự án cũng đã phụ trách và giúp đỡ các đơn vị trong
thời gian đầu làm quen với hệ thống.
Hiện tại, hệ thống đã được ứng dụng hiệu quả tại 6 quận huyện, 2 bệnh viện.
Với DHIS 1.3, công việc quản lí được chặt chẽ hơn, hệ thống hơn. Điều này khẳng
định được tác dụng tích cực của hệ thống DHIS tại thành phố Hồ Chí Minh và hứa
hẹn cho một hệ thống mới hơn, hiệu quả hơn, được sử dụng rộng rãi hơn chứ không
chỉ tại Thành phố Hồ Chí Minh và Thành phố Huế. Đó chính là hệ thống DHIS 2.0.
3.2 Tìm hiểu các công nghệ và phát triển ứng dụng Report portal
Tìm hiểu các công nghệ mã nguồn mở: Spring framework, Hibernate, Webwork,
Velocity.
Trang 25 / 137
Phân tích, thiết kế và xây dựng ứng dụng report portal.
Luận văn tốt nghiệp
0112049 - 0112322
CHƯƠNG 3: PHÁT TRIỂN REPORT PORTAL
1. Giới thiệu tổng quan và phân tích yêu cầu
1.1. Giới thiệu
Cổng phân tích báo cáo trực tuyến được xây dựng là một ứng dụng web cung
cấp chức năng chia sẻ các báo cáo y tế giữa các cấp từ các trạm y tế phường xã, đến
trung tâm y tế quận, sở y tế tỉnh thành phố và bộ y tế. Mô đun này là thành phần của
dự án HISP xây dựng hệ thống DHIS 2.0 phục vụ trong ngành y tế. Với ứng dụng
này, việc lập báo cáo gửi báo cáo từ cấp dưới lên cấp trên, tổng hợp báo cáo sẽ đơn
giản hơn và nhanh hơn thay vì phải tính toán thủ công và gửi qua đường bưu điện
hoặc gửi trực tiếp. Thêm vào đó, kết hợp với mô đun report designer và mô đun
report generator cho phép người dùng tự thiết kế các báo cáo phù hợp với yêu cầu
thực tế (vốn rất hay thay đổi) về các chỉ số tính toán, số liệu của các chương trình
sức khoẻ…, kết xuất các báo cáo, chia sẻ thông tin phục vụ hiệu quả cho việc ra
quyết định và phát triển của ngành y tế.
Môi trường phát triển:
(cid:153) Xử lí và lưu trữ dữ liệu
Java
Spring framework.
Hibernate 3.0
Hệ quản trị cơ sở dữ liệu MySQL 4.2 ( hoặc HSQL)
(cid:153) Giao diện và thiết kế trang web:
HTML
Webwork
Trang 26 / 137
Velocity template.
Luận văn tốt nghiệp
0112049 - 0112322
i18n
DHIS Core
Report portal
Report generator
Report designer
Vị trí của mô đun Report portal trong kiến trúc của hệ thống DHIS 2.0:
Report portal được xây dựng trong sự liên kết với ba mô đun là DHIS Core,
i18n, và Report Generator. Trong đó, DHIS Core là mô đun định nghĩa các đối
tượng có liên quan trực tiếp đến báo cáo ( chẳng hạn như Period, PeriodType,
DataElement,…). Vai trò của DHIS Core là rất quan trọng, được xem như là phần
lõi của hệ thống. Mô đun Report generator cung cấp khả năng kết xuất ra các tập tin
báo cáo, mô đun i18n hỗ trợ tính năng đa ngôn ngữ cho Report portal. Tóm lại,
Report portal là mô đun cung cấp khả năng giao tiếp và nhận yêu cầu trực tiếp từ
người dùng, tương tác với các mô đun khác, đáp ứng yêu cầu của người dùng. 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ối quan hệ giữa ba mô đun trong Report mô đun:
Report designer (RD), report generator (RG) và report portal (RP) là ba mô
Trang 27 / 137
đun nằm trong phần report mô đun và có sự liên hệ chặt chẽ với nhau. Chức năng
Luận văn tốt nghiệp
0112049 - 0112322
chính của RD là cho phép người dùng thiết kế các mẫu báo cáo theo nhu cầu bằng
công cụ thiết kế báo cáo JasperReport. RD hỗ trợ việc xây dựng các báo cáo động
với tất cả các phần tử dữ liệu, cách sắp xếp bố trí linh hoạt tuỳ theo nhu cầu của
người sử dụng. Tập tin mẫu báo cáo sau khi thiết kế có định dạng là *.jrxml. Tập tin
này sau đó sẽ được RG phát sinh ra tập tin báo cáo hoàn chỉnh với đầy đủ số liệu
một cách chính xác dựa trên thông tin trong cơ sở dữ liệu. RG hỗ trợ kết xuất ra
nhiều định dạng khác nhau bao gồm: pdf, html…. Tập tin báo cáo này sau đó được
gởi đến các đơn vị y tế có liên quan hoặc được chia sẻ thông tin thông qua ứng dụng
RP. RP thực chất là một cổng thông tin cho phép người dùng tải lên và tải xuống
các báo cáo, chia sẻ báo cáo, tra cứu báo cáo, chia sẻ các mẫu báo cáo đã thiết kế
được từ RD. Có thể mô hình hoá mối quan hệ giữa ba mô đun này bằng sơ đồ sau:
Hình 3.1: Mối quan hệ giữa ba mô đun RP, RG và RD
1.2. Yêu cầu chức năng
1.2.1. Các yêu cầu nghiệp vụ.
Tải lên và tải xuống báo cáo hoặc các mẫu báo cáo
Tra cứu báo cáo theo loại báo cáo, theo thời gian, theo các đơn vị y tế chịu
trách nhiệm hoặc có liên quan đến báo cáo
Tương tác với report generator hỗ trợ kết xuất báo cáo từ các mẫu báo cáo.
Hỗ trợ đa ngôn ngữ với hai ngôn ngữ cơ bản là tiếng Việt và tiếng Anh.
Trang 28 / 137
1.2.2. Các yêu cầu hệ thống.
Luận văn tốt nghiệp
0112049 - 0112322
Phân quyền sử dụng linh hoạt và có thể thay đổi quyền hạn tuỳ theo tính chất
hoạt động tại từng đơn vị y tế.
1.2.3. Các yêu cầu khác.
Giao diện thân thiện.
Các bước thực hiện tương tự và gần giống với các thao tác trong hệ thống cũ
(DHIS 1.3 và DHIS 1.4)
1.3 Nội dung yêu cầu về công nghệ
Kiến trúc của mô đun Report portal được trình bày trong hình vẽ sau:
Hình 3.2: Mối liên kết giữa Report portal và các mô đun khác
Mô đun report portal được thiết kế theo mô hình 3 lớp: giao diện, nghiệp vụ và
cơ sở dữ liệu. Trong hình vẽ trên, vai trò của các công nghệ cũng như vị trí ứng
Trang 29 / 137
dụng của chúng đã được thể hiện rất rõ nét. Trên tầng giao diện, các trang web được
Luận văn tốt nghiệp
0112049 - 0112322
thiết kế bằng HTML, và Velocity. Webwork framework được sử dụng để kết nối
giữa tầng giao diện và tầng xử lí. Nội dung các xử lí được viết bằng Java, Spring
framework được sử dụng ở đây để quản lí các thành phần, các phụ thuộc của đối
tượng, liên kết với các module khác trong hệ thống DHIS 2.0 như là: DHIS Core,
DHIS Report generator, i18n. Các đối tượng trong tầng xử lí sau đó sẽ được
Hibernate ánh xạ sang cơ sở dữ liệu quan hệ. Vai trò của Hibernate là ánh xạ các
đối tượng trong lớp xử lí sang cơ sở dữ liệu cũng như đọc thông tin trong cơ sở dữ
liệu và trả về đối tượng cho tầng xử lí. Hệ quản trị cơ sở dữ liệu được sử dụng là
HSQL. Ở đây có một ưu điểm quan trọng của Hibernate là khả năng “không phụ
thuộc cơ sở dữ liệu” của nó. Trong quá trình phát triển, Report portal sử dụng hệ
quản trị cơ sở dữ liệu HSQL. Nhưng sau khi toàn bộ hệ thống được hoàn chỉnh, có
thể sẽ chuyển sang một hệ quản trị cơ sở dữ liệu mã nguồn mở nào đó, có thể là
MySQL hay PostgreSQL.
1.4. Phân tích các yêu cầu chức năng.
Hệ thống phải hỗ trợ upload nhiều định dạng tập tin báo cáo khác nhau, hiện
tại là pdf và html. Thông tin về mỗi báo cáo gởi đi được lưu lại trong cơ sở dữ liệu
và phải thể hiện đầy đủ: báo cáo đó được gởi bởi đơn vị y tế nào, ngày gởi, loại báo
cáo, báo cáo đó ứng với giai đoạn nào. Các tập tin báo cáo thực sự được lưu tại một
vị trí có thể được cấu hình trước trên máy chủ.
Tương tác với report generator, cho phép người dùng kết xuất báo cáo dựa
theo thông tin về đơn vị y tế, thời gian và mẫu báo cáo đã được thiết kế trước đó.
Báo cáo sau khi được kết xuất có thể được xem trực tiếp trên trình duyệt và lưu vào
trong cơ sở dữ liệu
Tra cứu báo cáo: tìm kiếm báo cáo kèm theo các điều kiện tìm kiếm như thời
gian gửi báo cáo, đơn vị y tế, loại báo cáo. Phân trang các kết quả tìm được.
Phân quyền sử dụng: tính năng này phải đảm bảo thật sự mềm dẻo cho phép
thay đổi chức năng của các nhóm người dùng khác nhau nhằm đáp ứng một cách
linh hoạt sự khác nhau về cơ cấu, chức năng hoạt động của từng đơn vị y tế. Một
đặc tính của web là “click chuột và chờ” do đó cần phải hạn chế khả năng người
Trang 30 / 137
dùng thực hiện các chức năng mà họ không được phép bằng cách vô hiệu hoá chức
Luận văn tốt nghiệp
0112049 - 0112322
năng này thay vì để người dùng click chuột, chờ và thấy thông báo lỗi về quyền
hạn. Ngoài ra, cho phép quản lí thông tin tài khoản của người dùng bao gồm tài
khoản đã được kích hoạt sử dụng và các tài khoản chỉ mới được đăng kí nhưng chưa
được kích hoạt sử dụng bởi người quản lí từng đơn vị y tế.
Cho phép người dùng lựa chọn ngôn ngữ hiển thị trên trang. Trong đó tiếng
Việt và tiếng Anh là hai ngôn ngữ cơ bản.
1.5 Sơ đồ Use case
1.5.1. Tác nhân của hệ thống
(cid:153) Tên tác nhân: Normal user
(cid:153) Mô tả:
Đây là người dùng thông thường, có thể là các nhân viên tại các đơn vị y
tế.
(cid:153) Hành vi và khả năng:
Người dùng này có thể thực hiện các khả năng cơ bản như gởi báo cáo,
download báo cáo, xem và tìm kiếm báo cáo.
(cid:153) Mối quan hệ:
Không có.
(cid:153) Lược đồ:
Không có.
(cid:153) Tên tác nhân: Doctor
(cid:153) Mô tả:
Đây là người dùng thông dụng nhất của hệ thống.
(cid:153) Hành vi và khả năng:
Tác nhân này ngoài các khả năng như normal user còn có thể thực hiện các
chức năng quản lí người dùng và lập báo cáo.
(cid:153) Mối quan hệ:
Kế thừa từ tác nhân normal user.
Trang 31 / 137
(cid:153) Lược đồ:
Luận văn tốt nghiệp
0112049 - 0112322
Không có.
(cid:153) Tên tác nhân: Administrator
(cid:153) Mô tả:
Quản trị hệ thống
Đây là người dùng có quyền hạn cao nhất, ngoài các khả năng như doctor,
người dùng này có thể phân quyền truy xuất cho các nhóm người dùng khác.
(cid:153) Hành vi và khả năng:
(cid:153) Mối quan hệ:
Kế thừa từ doctor.
(cid:153) Lược đồ:
Không có.
(cid:153) Tên tác nhân: DHIS 2.0
(cid:153) Mô tả:
Đây là khái niệm chỉ các module khác trong toàn bộ hệ thống 2.0
(cid:153) Hành vi và khả năng:
Tác nhân này thể hiện sự tương tác giữa các module khác với report
portal. Bao gồm: DHIS-core, DHIS-i18n, DHIS-reportgenerator, etc.
(cid:153) Mối quan hệ:
Không có.
(cid:153) Lược đồ:
Trang 32 / 137
Không có.
Luận văn tốt nghiệp
0112049 - 0112322
Search for Reports
(from Use Case View)
Manage users
Users
(from Use Case View)
View report details
(from Use Case View)
(from Use Case View)
Upload and Download reports
(from Use Case View)
Administrators
Doctors
(from Use Case View)
(from Use Case View)
Manage reports
(from Use Case View)
Generate reports
Login
Authorize user access
Change password
(from Use Case View)
(from Use Case View)
(from Use Case View)
(from Use Case View)
DHIS 2.0
(from Use Case View)
1.5.2. Lược đồ Use case cấp cao.
Hình 2.4: Lược đồ Use cases cấp cao.
Mô tả lược đố Use cases mức cao
• Search for reports: hệ thống phải có khả năng hỗ trợ tìm kiếm báo cáo
theo nhiều điều kiện khác nhau, bao gồm: loại báo cáo, thời gian, đơn vị
y tế gởi báo cáo…
• Change password: khả năng này cung cấp cho người dùng thay đổi
mật khẩu của mình và đăng kí sử dụng hệ thống.
• Manage report: quản lí các report, xoá các báo cáo được gởi hay phục
hồi các báo cáo bị xoá.
• Login: kiểm tra đăng nhập và xác định quyền hạn của người dùng.
• Manage user: The administrator of this system can add more user to use
this system, delete user, or modify user information.
Trang 33 / 137
Luận văn tốt nghiệp
0112049 - 0112322
• Authorize user access: Phân quyền sử dụng cho các nhóm người
dùng.
• Upload and download report file: gởi báo cáo và tải báo cáo về
máy cá nhân.
Trang 34 / 137
• Generating reports: kết xuất báo cáo từ các mẫu báo cáo định sẵn.
Luận văn tốt nghiệp
0112049 - 0112322
1.5.3. Mô tả chi tiết từng Use case.
1.5.3.1 Manage Users
THÊM NGƯỜI DÙNG
Mã: PRD ID: RP001
Tên: Thêm người dùng
Cho phép tác nhân thêm người dùng. Mô tả:
Kết quả: Một tài khoản mới được tạo nếu thực hiện thành công.
Tác nhân phải đăng nhập vào hệ thống và có quyền thêm Điều kiện tiên
người dùng quyết:
(cid:131) Tác nhân nhập đầy đủ thông tin về tên tài khoản, mật Sự kiện chính:
khẩu, tên đầy đủ, đơn vị y tế trực thuộc, chức vụ,
nhóm người dùng và nhấn nút tạo người dùng.
(cid:131) Hệ thống kiểm tra thông tin nhập vào, so sánh mật
khẩu và lưu thông tin về người dùng mới vào trong
cơ sở dữ liệu.
(cid:131) Tác nhân nhập thiếu các thông tin bắt buộc. Hệ thống Sự kiện rẽ nhánh
kiểm tra và thông báo lỗi cụ thể các thông tin nào bị
thiếu.
(cid:131) Mật khẩu không chính xác.
(cid:131) Tên tài khoản đã tồn tại trong hệ thống
(cid:131) Lỗi phát sinh trong vấn đề kết nối đến server.
Các thông báo lỗi sẽ xuất hiện khi: Điều kiện lỗi:
- Thông tin nhập vào sai hoặc thiếu.
- Lỗi kết nối.
Tác nhân có quyền tạo tài khoản mới. Tác nhân
Bảng 3.1: Thao tác thêm người dùng.
ĐĂNG KÍ NGƯỜI DÙNG
Trang 35 / 137
Mã: PRD ID: RP002
Luận văn tốt nghiệp
0112049 - 0112322
Tên: Đăng kí người dùng
Chức năng này ghi nhận thông tin đăng kí người dùng Mô tả:
Kết quả: Thông tin đăng kí được lưu vào cơ sở dữ liệu.
Bất kì người dùng nào truy cập đến hệ thống đều có thể Điều kiện tiên
gửi thông tin này. Tuy nhiên tài khoản sẽ không được quyết:
tạo cho đến khi được kích hoạt bởi người quản trị.
(cid:131) Tác nhân nhập thông tin về tên tài khoản, mật khẩu, Sự kiện chính:
tên đầy đủ, chức vụ và đơn vị y tế trực thuộc.
(cid:131) Hệ thống kiểm tra thông tin và ghi nhận vào cơ sở
dữ liệu.
(cid:131) Tác nhân nhập thiếu các thông tin bắt buộc. Hệ Sự kiện rẽ nhánh
thống kiểm tra và thông báo lỗi cụ thể các thông tin
nào bị thiếu.
(cid:131) Mật khẩu không chính xác.
(cid:131) Tên tài khoản đã tồn tại trong hệ thống
(cid:131) Lỗi phát sinh trong vấn đề kết nối đến server.
Các thông báo lỗi sẽ xuất hiện khi: Điều kiện lỗi:
- Thông tin nhập vào sai hoặc thiếu.
- Lỗi kết nối.
Đây là chức năng mở cho tất cả người dùng. Tác nhân
Trang 36 / 137
Bảng 3.2 Thao tác Đăng kí người dùng.
Luận văn tốt nghiệp
0112049 - 0112322
KÍCH HOẠT NGƯỜI DÙNG
Mã: PRD ID: RP003
Tên: Kích hoạt các tài khoản đã đăng kí từ người dùng
Cho phép tác nhân kích hoạt các tài khoản đã đăng kí. Mô tả:
Kết quả: Một tài khoản mới được tạo.
Tác nhân phải đăng nhập vào hệ thống và có quyền kích Điều kiện tiên
hoạt tài khoản người dùng quyết:
(cid:131) Tác nhân lựa chọn chức năng Kích hoạt tài khoản. Sự kiện chính:
Hệ thống sẽ hiển thị danh sách các người dùng tại
đơn vị y tế của tác nhân. Danh sách bao gồm: các
tài khoản đang sử dụng và các tài khoản chỉ mới
đăng kí.
(cid:131) Các tài khoản chỉ mới đăng kí sẽ được cung cấp
chức năng kích hoạt.
(cid:131) Hệ thống thực hiện cập nhật thông tin về trạng thái
của tài khoản vào cơ sở dữ liệu.
(cid:131) Lỗi kết nối đến server Sự kiện rẽ nhánh
Thông báo lỗi sẽ phát sinh nếu có lỗi kết nối đến server. Điều kiện lỗi:
Bất kì tác nhân nào có quyền kích hoạt tài khoản người Tác nhân
dùng
Bảng 3.3 Thao tác Kích hoạt người dùng
1.5.3.2. Authorize user access.
TẠO NHÓM NGƯỜI DÙNG
Mã: PRD ID: RP004
Tên: Tạo mới nhóm người dùng
Trang 37 / 137
Cho phép tác nhân thêm người dùng Mô tả:
Luận văn tốt nghiệp
0112049 - 0112322
Kết quả:
Tác nhân phải đăng nhập vào hệ thống và có quyền tạo Điều kiện tiên
nhóm người dùng. quyết:
(cid:131) Tác nhân nhập tên nhóm người dùng, thông tin mô Sự kiện chính:
tả nhóm người dùng.
(cid:131) Hệ thống kiểm tra tên nhóm người dùng và lưu lại
thông tin về nhóm người dùng vào trong cơ sở dữ
liệu.
(cid:131) Tên nhóm người dùng bị bỏ trống Sự kiện rẽ nhánh
(cid:131) Lỗi kết nối đến server
Thông báo lỗi sẽ được phát sinh trong trường hợp: Điều kiện lỗi:
- Tên nhóm người dùng bị bỏ trống.
- Lỗi kết nối đến server.
Bất kì tác nhân nào có quyền thêm nhóm người dùng. Tác nhân
Bảng 3.4 Thao tác Thêm nhóm người dùng
XOÁ NHÓM NGƯỜI DÙNG
Mã: PRD ID: RP005
Tên: Xoá nhóm người dùng
Cho phép tác nhân xoá nhóm người dùng không có tài Mô tả:
khoản.
Kết quả: Huỷ nhóm người dùng ra khỏi dữ liệu.
Tác nhân phải đăng nhập vào hệ thống và có quyền xoá Điều kiện tiên
nhóm người dùng. quyết:
(cid:131) Tác nhân chọn tên nhóm người dùng muốn xoá và Sự kiện chính:
nhấn chức năng xóa.
(cid:131) Hệ thống kiểm tra xem nhóm người dùng này có
Trang 38 / 137
chứa tài khoản người dùng nào hay không. Nếu
Luận văn tốt nghiệp
0112049 - 0112322
không, xoá nhóm người dùng này khỏi cơ sở dữ
liệu.
(cid:131) Nhóm người dùng này có chứa tài khoản người Sự kiện rẽ nhánh
dùng.
(cid:131) Lỗi kết nối đến server.
Thông báo lỗi sẽ được hiển thị trong các trường hợp: Điều kiện lỗi:
(cid:131) Lỗi kết nối đến server.
(cid:131) Nhóm người dùng cần xoá vẫn còn chứa các tài
khoản người dùng.
Bất kì tác nhân nào có quyền xoá nhóm người dùng. Tác nhân
Bảng 3.5 Thao tác Xoá nhóm người dùng
PHÂN QUYỀN SỬ DỤNG CHO NHÓM NGƯỜI DÙNG
Mã: PRD ID: RP006
Tên: Phân quyền sử dụng cho nhóm người dùng.
Cho phép thay đổi quyền hạn và khả năng tương tác hệ Mô tả:
thống của các nhóm người dùng.
Kết quả: Thay đổi quyền hạn của một hoặc nhiều nhóm người
dùng. Trừ nhóm administrator.
The actor must log into the system first as an Điều kiện tiên
administrator. quyết:
(cid:131) Tác nhân lựa chọn nhóm người dùng. Hệ thống sẽ Sự kiện chính:
hiển thị danh sách các quyền của nhóm đó và các
quyền hạn không thuộc nhóm đó.
(cid:131) Tác nhân hiệu chỉnh quyền hạn của nhóm người
dùng và phát sinh yêu cầu cập nhật.
(cid:131) Hệ thống kiểm tra quyền hạn mới và thực hiện cập
nhật vào cơ sở dữ liệu.
Trang 39 / 137
(cid:131) Không có quyền hạn nào được xác định cho nhóm Sự kiện rẽ nhánh
Luận văn tốt nghiệp
0112049 - 0112322
người dùng.
(cid:131) Lỗi kết nối đến server.
Thông báo lỗi sẽ phát sinh khi: Điều kiện lỗi:
(cid:131) Lỗi kết nối đến server.
(cid:131) Không có quyền hạn nào được xác định cho nhóm
người dùng.
Administrator Tác nhân
Bảng 3.6 Thao tác Phân quyền nhóm người dùng
1.5.3.3. Manage Reports
DOWNLOAD BÁO CÁO
Mã: PRD ID: RP007
Tên: Download các báo cáo.
Cho phép tác nhân tải các báo cáo từ máy chủ. Mô tả:
Kết quả: Tải file từ server về máy khách.
Tác nhân phải đăng nhập vào hệ thống và có quyền tải Điều kiện tiên
báo cáo về. quyết:
(cid:131) Tác nhân lựa chọn chức năng tải báo cáo. Hệ thống Sự kiện chính:
hiển thị danh sách các báo cáo liên quan đến đơn vị
y tế nơi tác nhân làm việc và cho phép download
các báo cáo.
(cid:131) Không kết nối được với server. Sự kiện rẽ nhánh
Thông báo lỗi sẽ xuất hiện trong trường hợp: không kết Điều kiện lỗi:
nối được với server.
Bất kì tác nhân nào có quyền tải báo cáo. Tác nhân
Trang 40 / 137
Bảng 3.7 Thao tác Download báo cáo
Luận văn tốt nghiệp
0112049 - 0112322
GỞI BÁO CÁO
Mã: PRD ID: RP008
Tên: Gởi báo cáo.
Cho phép tác nhân gởi báo cáo lên mạng, nhằm chia sẻ Mô tả:
báo cáo.
Kết quả: Thông tin báo cáo và tập tin báo cáo được lưu lại trên
server.
Tác nhân phải đăng nhập vào hệ thống và có quyền gởi Điều kiện tiên
báo cáo. quyết:
(cid:131) Tác nhân xác định loại báo cáo, giai đoạn lập báo Sự kiện chính:
cáo, tập tin báo cáo và yêu cầu gởi báo cáo
(cid:131) Hệ thống đọc tập tin báo cáo từ máy khách, lưu lên
server và lưu toàn bộ các thông tin liên quan đến
báo cáo vào cơ sở dữ liệu. Đơn vị y tế được lấy là
đơn vị y tế của tác nhân gởi báo cáo.
(cid:131) Thông tin về loại báo cáo và giai đoạn lập báo cáo Sự kiện rẽ nhánh
không được xác định.
(cid:131) Tập tin báo cáo không được tìm thấy hoặc không
thể đọc được.
(cid:131) Không kết nối được với server.
Thông báo lỗi sẽ phát sinh nếu: Điều kiện lỗi:
(cid:131) Thông tin liên quan không đầy đủ.
(cid:131) Tập tin báo cáo không được tìm thấy.
(cid:131) Không thể kết nối được với server.
Bất kì tác nhân nào có quyền gởi báo cáo. Tác nhân
Trang 41 / 137
Bảng 3.8: Thao tác Upload báo cáo
Luận văn tốt nghiệp
0112049 - 0112322
ĐÁNH DẤU XOÁ CÁC BÁO CÁO
Mã: PRD ID: RP010
Tên: Đánh dấu xoá các báo cáo.
Cho phép tác nhân đánh dấu xoá các báo cáo không còn Mô tả:
sử dụng.
Kết quả: Trạng thái xoá của báo cáo được thiết lập.
Tác nhân phải đăng nhập vào hệ thống và có quyền xoá Điều kiện tiên
báo cáo. quyết:
(cid:131) Tác nhân chọn chức năng xoá trên danh sách hiển Sự kiện chính:
thị các báo cáo của đơn vị y tế nơi mình làm việc.
(cid:131) Hệ thống kiểm tra thông tin về báo cáo và cập nhật
trạng thái xoá cho báo cáo. Sau khi trạng thái xoá
được cập nhật, thông tin liên quan đến báo cáo vẫn
được lưu trong cơ sở dữ liệu nhưng không được
hiển thị trong các chức năng liên quan đến báo cáo
nữa.
(cid:131) Không kết nối đến cơ sở dữ liệu được. Sự kiện rẽ nhánh
(cid:131) Không thể xoá báo cáo đang được sử dụng bởi tác
nhân khác.
Thông báo lỗi sẽ phát sinh trong trường hợp: Điều kiện lỗi:
(cid:131) Không kết nối đến cơ sở dữ liệu.
(cid:131) Xoá đối tượng báo cáo đang được sử dụng bởi tác
nhân khác.
Bất kì tác nhân nào có quyền xóa báo cáo. Tác nhân
Bảng 3.9: Thao tác Đánh dấu xoá báo cáo
PHỤC HỒI CÁC BÁO CÁO ĐÃ XOÁ
Trang 42 / 137
Mã: PRD ID: RP011
Luận văn tốt nghiệp
0112049 - 0112322
Tên: Phục hồi các báo cáo bị xoá.
Cho phép tác nhân phục hồi các báo cáo đã xoá. Mô tả:
Kết quả: Trạng thái xoá của báo cáo được hiệu chỉnh.
Tác nhân phải đăng nhập vào hệ thống và có quyền phục Điều kiện tiên
hồi các báo cáo bị xoá. quyết:
(cid:131) Tác nhân chọn chức năng phục hồi báo cáo trên Sự kiện chính:
danh sách hiển thị các báo cáo trong chức năng
phục hồi báo cáo của hệ thống.
(cid:131) Hệ thống kiểm tra thông tin về báo cáo và cập nhật
trạng thái xoá cho báo cáo. Sau khi trạng thái xoá
được cập nhật, các tác nhân khác mới có thể thực
hiện các chức năng liên quan đến báo cáo đối với
báo cáo này.
(cid:131) Không kết nối đến cơ sở dữ liệu được. Sự kiện rẽ nhánh
Thông báo lỗi sẽ phát sinh trong trường hợp: Điều kiện lỗi:
(cid:131) Không kết nối đến cơ sở dữ liệu.
Bất kì tác nhân nào có quyền xóa báo cáo. Tác nhân
Bảng 3.10: Thao tác Phục hồi báo cáo đã xoá.
XOÁ HOÀN TOÀN BÁO CÁO
Mã: PRD ID: RP012
Tên: Xoá hoàn toàn báo cáo
Xoá toàn bộ thông tin liên quan đến báo cáo và xoá tập Mô tả:
tin báo cáo ra khỏi bộ nhớ.
Kết quả: Báo cáo được xoá khỏi cơ sở dữ liệu, tập tin báo cáo bị
huỷ.
Trang 43 / 137
Điều kiện tiên Tác nhân phải đăng nhập vào hệ thống và có quyền xoá
Luận văn tốt nghiệp
0112049 - 0112322
hoàn toàn báo cáo. quyết:
(cid:131) Tác nhân chọn chức năng xoá báo cáo trên danh Sự kiện chính:
sách hiển thị các báo cáo trong chức năng phục hồi
báo cáo của hệ thống.
(cid:131) Hệ thống xoá thông tin về báo cáo trong cơ sở dữ
liệu, huỷ tập tin báo cáo lưu trong ổ cứng.
(cid:131) Không kết nối đến cơ sở dữ liệu được. Sự kiện rẽ nhánh
(cid:131) Không thể xoá báo cáo đang được sử dụng bởi tác
nhân khác.
Thông báo lỗi sẽ phát sinh trong trường hợp: Điều kiện lỗi:
(cid:131) Không kết nối đến cơ sở dữ liệu.
(cid:131) Xoá đối tượng báo cáo đang được sử dụng bởi tác
nhân khác.
Bất kì tác nhân nào có quyền xóa báo cáo. Tác nhân
Bảng 3.11: Thao tác Xoá báo cáo
1.5.3.4. Login
Mã: PRD ID: RP013
Tên: Đăng nhập
Kiểm tra người dùng. Mô tả:
Kết quả: Nhóm người dùng và các quyền hạn của người dùng
được xác nhận.
Điều kiện tiên
quyết:
(cid:131) Tác nhân cung cấp tên tài khoản và mật khẩu của Sự kiện chính:
mình
(cid:131) Hệ thống xác thực người dùng và trả về trang chủ
của hệ thống.
Trang 44 / 137
Tên người dùng hoặc mật khẩu không hợp lệ Sự kiện rẽ nhánh
Luận văn tốt nghiệp
0112049 - 0112322
Thông báo lỗi sẽ phát sinh nếu: Điều kiện lỗi:
(cid:131) Tên đăng nhập hoặc mật khẩu bị bỏ trống.
(cid:131) Tài khoản không hợp lệ.
(cid:131) Lỗi kết nối đến server.
Tất cả tác nhân. Tác nhân
Bảng 3.12: Thao tác Đăng nhập
1.5.3.5. Change password
Mã: PRD ID: RP014
Tên: Thay đổi mật khẩu
Cho phép người dùng thay đổi mật khẩu hiện tại Mô tả:
Kết quả: Mật khẩu mới được thiết lập.
Tác nhân phải đăng nhập vào hệ thống và có quyền thay Điều kiện tiên
đổi mật khẩu của mình. quyết:
(cid:131) Tác nhân nhập mật khẩu cũ, và nhập hai lần mật Sự kiện chính:
khẩu mới
(cid:131) Hệ thống kiểm tra thông tin về người dùng, so sánh
mật khẩu mới và cập nhật mật khẩu mới cho người
dùng.
(cid:131) Mật khẩu mới không khớp giữa hai lần nhập. Sự kiện rẽ nhánh
(cid:131) Mật khẩu hiện tại không hợp lệ.
(cid:131) Lỗi kết nối đến server.
Bất kì tác nhân nào có quyền thay đổi mật khẩu Tác nhân
Trang 45 / 137
Bảng 3.13: Thao tácThay đổi mật khẩu
Luận văn tốt nghiệp
0112049 - 0112322
1.5.3.6. Search for reports
Mã: PRD ID: RP015
Tên: Tìm kiếm báo cáo
Cho phép người dùng tra cứu báo cáo. Mô tả:
Kết quả: Danh sách các báo cáo tìm được.
Tác nhân phải đăng nhập vào hệ thống và có quyền tra Điều kiện tiên
cứu báo cáo quyết:
(cid:131) Tác nhân xác định các điều kiện tìm kiếm bao gồm: Sự kiện chính:
đơn vị y tế, loại báo cáo hoặc giai đoạn lập báo cáo
và giới hạn thời gian gởi theo năm.
(cid:131) Hệ thống tra cứu báo cáo và phân trang kết quả tìm
được và hiển thị danh sách kết quả tìm được.
(cid:131) Điều kiện tìm kiếm không được xác nhận Sự kiện rẽ nhánh
(cid:131) Không tìm thấy dữ liệu nào.
(cid:131) Lỗi kết nối đến server.
Thông báo lỗi sẽ xuất hiện trong trường hợp sau: Điều kiện lỗi:
(cid:131) Không kết nối được với server.
Tác nhân Bất kì tác nhân nào có quyền tra cứu báo cáo.
Bảng 3.14: Thao tác Tìm kiếm báo cáo
1.6. Mô tả các bước xử lí theo từng yêu cầu
1.6.1. Đăng nhập và đăng kí người dùng:
Nội dung:
Kiểm tra người dùng, nhóm người dùng nhằm cung cấp chức năng sử dụng
hệ thống. Tiếp nhận đăng kí sử dụng hệ thống.
Các bước xử lí đăng nhập
- Nhận thông tin về tên tài khoản và mật khẩu.
- Kiểm tra xem người dùng này có tồn tại trong cơ sở dữ liệu hay không và
Trang 46 / 137
trạng thái của tài khoản này đã được kích hoạt hay chưa. Nếu điều kiện tìm đều
Luận văn tốt nghiệp
0112049 - 0112322
thoả, lưu đối tượng này vào session và trả về trang chủ của hệ thống. Ngược lại trả
về trang đăng nhập với thông báo lỗi.
Các bước xử lí nhận đăng kí sử dụng:
- Nhận thông tin về tên tài khoản, mật khẩu, tên đầy đủ của người đăng kí,
đơn vị y tế trực thuộc, chức vụ của người muốn sử dụng hệ thống.
- Kiểm tra mật khẩu giống nhau giữa hai lần nhập. Nếu không giống nhau
xuất thông báo bằng message box.
- Ngược lại nếu mọi thông tin đều đúng, lưu thông tin đăng kí này vào cơ sở
Trang 47 / 137
dữ liệu nhưng thiết lập trạng thái cho tài khoản này là chưa kích hoạt.
Luận văn tốt nghiệp
0112049 - 0112322
1.6.2. Yêu cầu upload các tập tin báo cáo hoặc các mẫu báo cáo:
Nội dung: đọc tập tin báo cáo hoặc mẫu báo cáo từ máy người dùng, lưu vào
một thư mục đã xác định trước đồng thời lưu lại các thông tin về báo cáo hoặc mẫu
báo cáo này vào trong cơ sở dữ liệu
Các bước xử lí:
- Nhận thông tin về loại báo cáo, loại giai đoạn và khoảng thời gian cụ thể về
báo cáo.
- Đọc tập tin theo đường dẫn mà người dùng xác định vào buffer.
- Lưu thông tin về báo cáo hoặc mẫu báo cáo vừa được gởi vào cơ sở dữ liệu
với tên tập tin được phát sinh tự động dựa trên ngày giờ gửi báo cáo, đơn vị y tế
được lấy là đơn vị y tế của người dùng đang gửi báo cáo.
- Đọc tham số chỉ vị trí lưu các tập tin báo cáo từ tập tin
configuration.properties và lưu tập tin báo cáo tại địa chỉ đó với tên giống như tên
đã được lưu vào trong cơ sở dữ liệu.
- Nếu thành công, trả về trang hiển thị danh sách các báo cáo đã upload của
đơn vị y tế đó. Ngược lại, trả về trang thông báo lỗi.
1.6.3. Yêu cầu tra cứu báo cáo.
Nội dung: tìm kiếm báo cáo theo các điều kiện tìm kiếm riêng biệt và tổ hợp
của nhiều điều kiện tìm kiếm bao gồm: đơn vị y tế, loại báo cáo, loại giai đoạn, và
lọc kết quả tìm kiếm được theo năm ứng với năm gởi báo cáo.
Các bước xử lí:
- Nhận thông tin về đơn vị y tế, kiểm tra xem có phải là tìm trên tất cả các
đơn vị y tế hay không?
- Xác định thông tin về loại báo cáo, và loại giai đoạn. Tương tự xác định
xem có phải tìm kiếm trên tất cả loại báo cáo và tất cả loại giai đoạn hay không?
- Nhận giá trị năm tìm kiếm.
- Tìm kiếm các báo cáo thoả điều kiện.
- Đọc thông tin qui định số dòng dữ liệu trả về trong một trang từ tập tin cấu
hình configuration.properties. Phân trang kết quả tìm được và hiển thị lên trang web
Trang 48 / 137
cùng với giá trị cho biết tổng số kết quả tìm được.
Luận văn tốt nghiệp
0112049 - 0112322
1.6.4. Yêu cầu phân quyền sử dụng hệ thống
Nội dung: xác định các chức năng có thể thực hiện của từng nhóm người
dùng.
Các bước xử lí:
- Đọc danh sách các nhóm người dùng có cấp lớn hơn cấp độ của nhóm
người dùng của người đang sử dụng hệ thống đưa vào combo box.
- Tuỳ theo nhóm người dùng được chọn trong combo box hiển thị danh sách
các chức năng mà nhóm người dùng đó có thể thực hiện và danh sách các chức
năng mà nhóm người dùng đó không được thực hiện.
- Cho phép người dùng di chuyển các chức năng qua lại giữa hai danh sách.
- Khi lệnh cập nhật được yêu cầu, xoá danh sách các chức năng của nhóm
người dùng được chọn trong cơ sở dữ liệu và lưu lại danh sách các chức năng mới
của nhóm người dùng đó vào trong cơ sở dữ liệu.
1.6.5. Yêu cầu kết xuất báo cáo từ các tập tin mẫu
Nội dung: kết xuất báo cáo dựa trên tập tin mẫu báo cáo đã được upload.
Các bước xử lí:
- Nhận thông tin về loại giai đoạn, giai đoạn lập báo cáo và tập tin mẫu báo
cáo từ người dùng.
- Đọc thông tin về người dùng đang sử dụng hệ thống trong session. Lấy đơn
vị y tế là đơn vị y tế của người dùng đang đăng nhập vào trong hệ thống.
- Tương tác với mô đun report generator kết xuất ra tập tin báo cáo và hiển
thị lên trình duyệt.
1.6.6. Yêu cầu quản lí người dùng
Nội dung: quản lí tài khoản, kích hoạt tài khoản đã đăng kí, thêm mới tài
khoản.
Các bước xử lí:
- Một danh sách các tài khoản đã kích hoạt và các tài khoản chỉ mới được
đăng kí tại đơn vị y tế của người đang sử dụng hệ thống được hiển thị và cung cấp
Trang 49 / 137
chức năng kích hoạt tại các tài khoản chỉ mới được đăng kí và xoá các tài khoản.
Luận văn tốt nghiệp
0112049 - 0112322
- Nhận mã tài khoản tương ứng trong các thao tác xoá hay kích hoạt tài
khoản. Xoá thông tin về tài khoản khỏi cơ sở dữ liệu hoặc cập nhật trạng thái của tài
khoản là đã kích hoạt tương ứng với hai thao tác xoá và kích hoạt tài khoản.
Các bước xử lí thêm mới tài khoản:
- Tương tự như quá trình tiếp nhận đăng kí như thông tin người dùng được
lưu vào trong cơ sở dữ liệu, thuộc tính trạng thái sẽ được gán là đã kích hoạt.
1.6.7. Yêu cầu xây dựng tính năng đa ngôn ngữ:
Nội dung: hỗ trợ đa ngôn ngữ trên giao diện cho phép ứng dụng nhằm mở
rộng phạm vị sử dụng của ứng dụng.
Các bước xử lí:
- Xây dựng tập tin ngôn ngữ (mỗi ngôn ngữ là một tập tin riêng).
- Tham chiếu đến tập tin ngôn ngữ khi có yêu cầu thay đổi ngôn ngữ thể
hiện.
- Sử dụng velocity và webwork để hiển thị đa ngôn ngữ trên giao diện.
1.6.8. Kiểm tra quyền hạn và cung cấp chức năng của hệ thống
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. Nếu một user thuộc một nhóm người dùng này, không có quyền
thao tác trên tất cả các quyền của một nhóm quyền thì nhóm quyền này sẽ không
được cung cấp trên trang hoặc được vô hiệu hoá và hiển thị một tooltip. Các xử lí
kiểm tra quyền và nhóm quyền trên một trang khi nó được load để hiện thị được
Trang 50 / 137
trình bày trong phần sau.
Luận văn tốt nghiệp
0112049 - 0112322
2. Thiết kế lớp
2.1. Mô hình lớp đối tượng cơ sở và các interfaces
org.hisp.dhis.rp.reportfile
org.hisp.dhis.reportgenerator
org.hisp.dhis.rp.user
org.hisp.dhis.rp.reporttype
org.hisp.dhis.datastore
org.hisp.dhis.organizationst ore
2.1.1. Thiết kế các gói (package)
Trang 51 / 137
Hình 3.3: Sơ đồ gói
Luận văn tốt nghiệp
0112049 - 0112322
UserManager interface
ID : string
User
Group
0..*
1
id : int name : string password : string fullname : string pax : string orgUnit : OrganizationUnit status : boolean group : Group
id : int name : string roles : Role description : string
User() User()
Group() Group()
0..*
Role
RoleType
0..*
id : int name : string
id : int name : string roles : Role
1..*
1..*
Role() Role()
RoleType() RoleType()
UserManagerException extends Exception
HibernateUserManager implementation UserManager
UserManagerException() UserManagerException()
getUser() addUser() delUser() getUserActive() getAllUsers() getAllUserByActive() getAllUserByLevelGroupandOrgUnit() getUserByOrgUnit() registerUser() updateGroupOfUser() updateUser() activeUser() getGroup() getAllGroup() getListGroupByLevel() getListGroupMinLevel() addGroup() delGroup() getRole() getAllRoles() addRole() delRole() getRoleType() addRoleType() getAllRoleTypes() delRoleType() addRoleOfRoleType() removeRoleOfRoleType() getRoleOfRoleType() addRoleOfGroup() removeRoleOfGroup() getListRolesOfGroup() getListRoleTypeOfGroup() getListRoleNotOfGroup() listRoleTypeOfRole()
(cid:153) Gói org.hisp.dhis.rp.user
Hình 3.4: Gói User
Các thành phần:
- Các đối tượng: User, Group, Role, RoleType. Là những đối tượng có liên
quan đến vấn đề phân quyền sử dụng, quản lí người dùng và kiểm soát các
chức năng của hệ thống.
- UserManager interface: khai báo các chức năng được cung cấp trên các đối
tượng này.
- HibernateUserManager: bổ sung cho lớp UserManager, định nghĩa cách
thức mà các chức năng được cung cấp trong interface UserManager thực
Trang 52 / 137
hiện.
Luận văn tốt nghiệp
0112049 - 0112322
- UserManagerException: kiểm soát ngoại lệ gây ra bởi các phương thức
trong HibernateUserManager.
ReportTypeManager ID : string
ReportType id : int name : string
ReportType() ReportType()
addReportType() getReportType() getAllReportType() delReportType()
ReportTypeManagerException
HibernateReportTypeManager implementation ReportTypeManager
(cid:153) Gói org.hisp.dhis.rp.reporttype
Hình 3.5: Gói Reporttype
Các thành phần:
- Đối tượng: reporttype. Thể hiện loại báo cáo. Các báo cáo được lập hàng
tháng, hàng quí và hàng năm và được phân loại theo nhiều loại báo cáo khác
nhau, liên quan đến nhiều lĩnh vực, chẳng hạn: báo cáo tổng hợp, báo cáo
tổng kết hoạt động, …
- Interface ReportTypeManager: cung cấp các chức năng thao tác thông tin
về đối tượng này.
- HibernateReportTypeManager: định nghĩa các chức năng được khai báo
trong interface ReportTypeManager.
Trang 53 / 137
- ReportTypeManagerException: kiểm soát ngoại lệ.
Luận văn tốt nghiệp
0112049 - 0112322
ReportFile
ReportManager interface
ID : string
id : int orgUnit : OrganizationUnit period : Period documentFormat : string date : date delStatus : boolean reportType : ReportType reportFileName : string
ReportFile() ReportFile()
addReportFile() getReportFile() getAllReportFiles() searchReportFile() permanentDeleteReport() temporaryDeleteReport() unDeleteReport() getUnDelReport() checkingPeriodRelation() checkingPeriodTypeRelation()
ReportManagerException implementation ReportManager
(cid:153) Gói org.hisp.dhis.rp.reportfile
Hình 3.6: Gói ReportFile
Các thành phần:
- Đối tượng: reportfile. Quản lí thông tin liên quan đến một báo cáo khi được
gởi.
- Interface ReportManager: cung cấp các khả năng thao tác trên đối tượng
này.
- HibernateReportManager: định nghĩa các phương thức được cung cấp bởi
interface ReportManager.
Trang 54 / 137
- ReportManagerException: kiểm soát các ngoại lệ
Luận văn tốt nghiệp
0112049 - 0112322
DataStore
Period
ID : string
id : int startDate : date endDate : date periodType : PeriodType
Period() Period()
0..*0..*
addPeriodType() getPeriodType() delPeriodTYpe() getAllPeriodTypes() addPeriod() getPeriod() getAllPeriods() getAllPeriodsOfPeriodType() delPeriod()
1 1 PeriodType
id : int name : string
PeriodType() PeriodType()
HibernateDataStore implementation DataStore
DataStoreException extends Exception
DataStoreException() DataStoreException()
(cid:153) Gói org.hisp.dhis.datastore
Hình 3.7: Gói DataStore
Các thành phần:
- Đối tượng: Period, PeriodType. Liên quan đến các báo cáo được gởi. Một
báo cáo luôn xác định một khoảng thời gian nhất định và khoảng thời gian
này thuộc về một loại giai đoạn nhất định.
- Interface: DataStore cung cấp các phương thức thao tác trên hai đối tượng
period và periodtype.
- HibernateDataStore: bổ sung cho interface DataStore, định nghĩa các
phương thức được cung cấp trong DataStore.
Trang 55 / 137
- DataStoreException: kiểm soát ngoại lệ.
Luận văn tốt nghiệp
0112049 - 0112322
OrganizationUnit
id : int name : string parent : OrganizationUnit
OrganizationUnitGroup id : int name : string members : Set
1 1
0..* 0..*
OrganizationUnit() OrganizationUnit()
OrganizationStore interface
HibernateOrganizationStore implementation OrganizationStore
OrganizationStoreException extends Exception
(cid:153) Gói org.hisp.dhis.organizationstore:
Hình 3.8: Gói OrganizationStore
Các thành phần:
- Đối tượng: OrganizationUnit. Thể hiện một đơn vị y tế.
- Interface: OrganizationStore: cung cấp các phương thức thao tác trên đối
tượng OrganizationUnit.
- HibernateOrganizationStore: bổ sung cho interface OrganizationStore, định
nghĩa các phương thức được cung cấp trong interface.
Trang 56 / 137
- OrganizationStoreException: kiểm soát ngoại lệ.
Luận văn tốt nghiệp
0112049 - 0112322
Period (from org.hisp.dhi s.datastore)
DataElement id name description active type
1..* 1..*
id : int startDate : date endDate : date periodType : PeriodType
1..* 1..*
1 1
1 1
DataElement()
Period() Period()
1..* 1..*
DataValue dataElement period name source flag value storedBy timestamp comment
DataValue()
ReportGenerator interface
1..*1..*
DataElementGroup id name member flag
DefaultReportGenerator implements ReportGenerator
fillReport() exportToHtml() exportToPdf() exportToXls() exportToCvs() getLocalReports() getReportParameters() getAllOrgUnits() getRootOrgUnits() getAllPeriodsOfPeriodType() getAllPeriodTypes() getRoutineDataValue() getOrgUnitTree()
ReportGeneratorException extends Exception
(cid:153) Gói org.hisp.dhis.reportgenerator:
Hình 3.9: Thiết kế gói reportgenerator.
Các thành phần:
- Đối tượng:
• DataValue: thể hiện một giá trị của phần tử dữ liệu
• DataElement: thể hiện một phần tử dữ liệu.
• DataElementGroup: nhóm các phần tử dữ liệu
- Interface: ReportGenerator – cung cấp các thao tác phát sinh báo cáo và các
thao tác trên các đối tượng trong gói.
- DefaultReportGenerator – định nghĩa cách thức thực hiện các phương thức
trong ReportGenerator interface.
Trang 57 / 137
- ReportGeneratorException: kiểm soát ngoại lệ.
Luận văn tốt nghiệp
0112049 - 0112322
Period (from org.hisp.dhis.datastore)
DataElement (from org.hisp.dhis.reportgenerator)
id : int startDate : date endDate : date periodType : PeriodType
1 1
1..* 1..*
1 1
1..* 1..*
Period() Period()
id name description active type
1..* 1..*
1 1
DataValue (from org.hisp.dhis.reportgenerator) dataElement period name source flag value storedBy timestamp comment
DataElement()
1..* 1..*
DataValue()
0..* 0..*
1..* 1..*
1 1 PeriodType (from org.hisp.dhis.datastore) id : int name : string
ReportFile (from org.hisp.dhis.rp.reportfile)
PeriodType() PeriodType()
DataElementGroup (from org.hisp.dhis.reportgenerator) id name member flag
ReportType (from org.hisp.dhis.rp.reporttype)
1 1
id : int name : string
0..* 0..*
id : int orgUnit : OrganizationUnit period : Period documentFormat : string date : date delStatus : boolean reportType : ReportType reportFileName : string
0..* 0..*
1 1
ReportType() ReportType()
ReportFile() ReportFile()
OrganizationUnit (from org.hisp.dhis.organizationstore) id : int name : string parent : OrganizationUnit
RoleType (from org.hisp.dhis.rp.user)
OrganizationUnit() OrganizationUnit()
1 1
id : int name : string roles : Role
Group (from org.hisp.dhis.rp.user) id : int name : string roles : Role description : string
1..* 1..*
User (from org.hisp.dhis.rp.user)
RoleType() RoleType()
1 1
Group() Group()
1..* 1..*
0..* 0..*
0..* 0..*
1..* 1..*
0..* 0..* Role (from org.hisp.dhis.rp.user) id : int name : string
id : int name : string password : string fullname : string pax : string orgUnit : OrganizationUnit status : boolean group : Group
Role() Role()
User() User()
2.1.2. Sơ đồ lớp:
Trang 58 / 137
Hình 3.10: Sơ đồ lớp
Luận văn tốt nghiệp
0112049 - 0112322
2.1.3. Diễn giải:
2.1.3.1 Danh sách các lớp đối tượng:
Stt Tên đối tượng Ý nghĩa
1 Period Giai đoạn, lớp cơ sở
Cung cấp các thông tin về khoảng thời
gian lập báo cáo.
Các công việc chính: thêm, xoá khoảng
thời gian.
2 PeriodType Loại giai đoạn, lớp cơ sở
Cung cấp các thông tin về loại giai đoạn
của từng giai đoạn.
Các công việc chính: thêm, xoá loại giai
đoạn.
3 OrganizationUnit Đơn vị y tế, lớp cơ sở.
Cung cấp thông tin về các đơn vị y tế
được hỗ trợ bởi hệ thống.
4 OrganizationUnitGr Nhóm đơn vị y tế, lớp cơ sở.
oup Phân nhóm các đơn vị y tế trong hệ thống.
5 ReportType Loại báo cáo, lớp cơ sở.
Cung cấp thông tin về loại báo cáo.
6 ReportFile Báo cáo y tế, lớp cơ sở.
Cung cấp các thông tin liên quan đến một
báo cáo được gởi đến hệ thống
Chức năng chính: thêm, xoá, tìm kiếm báo
cáo…
7 User Người dùng, lớp cơ sở.
Cung cấp các thông tin liên quan đến
người sử dụng hệ thống: tên tài khoản,
Trang 59 / 137
mật khẩu, tên đầy đủ,…
Luận văn tốt nghiệp
0112049 - 0112322
Chức năng chính: kiểm tra đăng nhập,
thêm người dùng, đăng kí người dùng.
8 Group Nhóm người dùng, lớp cơ sở.
Cung cấp các thông tin về nhóm người
dùng, quyền hạn của từng nhóm.
Chức năng chính: thêm mới, phân quyền
cho nhóm người dùng.
9 Role Quyền hạn, lớp cơ sở.
Cung cấp thông tin về các quyền hạn, khả
năng được cung cấp bởi hệ thống.
Đối tượng chỉ đọc.
10 RoleType Nhóm quyền hạn, lớp cơ sở.
Cung cấp thông tin về nhóm quyền hạn,
có liên quan đến vấn đề thể hiện các chức
năng lên trang web.
Đối tượng chỉ đọc.
11 DataElement Phần tử dữ liệu. Cung cấp các đối tượng
phần tử dữ liệu.
12 DataElementGroup Nhóm các phần tử dữ liệu
13 DataValue Giá trị của phần tử dữ liệu.
Bảng 3.1: Danh sách các lớp đối tượng
2.1.3.2 Danh sách các quan hệ:
Stt Tên quan hệ Ý nghĩa
1 Period (1..*) Mỗi giai đoạn đều thuộc về một loại giai
PeriodType (1) đoạn. Ngược lại, mỗi loại giai đoạn có
thể chứa nhiều giai đoạn khác nhau.
2 ReportType (1) Mỗi báo cáo đều thuộc về một loại báo
ReportFile (0..*) cáo duy nhất. Ngược lại, mỗi loại báo
Trang 60 / 137
cáo có thể nhiều hoặc chưa có báo cáo
Luận văn tốt nghiệp
0112049 - 0112322
nào hết.
3 OrganizationUnit (1) Mỗi báo cáo đều có một và chỉ một đơn
ReportFile (0..*) vị y tế chịu trách nhiệm lập báo cáo và
gởi đi. Ngược lại một đơn vị y tế có thể
có nhiều báo cáo khác nhau.
4 Period (1) Mỗi báo cáo thuộc về một giai đoạn cụ
ReportFile (0..*) thể. Ngược lại một giai đoạn có thể có
nhiều hoặc chưa có báo cáo nào.
5 User (0..*) Một người dùng thuộc về duy nhất một
Group (1) nhóm người dùng. Ngược lại, nhóm
người dùng có thể có nhiều hoặc chưa có
người dùng nào.
6 User (1..*) Một người dùng khi được cung cấp tài
OrganizationUnit (1) khoản phải thuộc về một đơn vị y tế nào
đó. Ngược lại, một đơn vị y tế có nhiều
nhóm người dùng khác nhau.
7 Role (0..*) Mỗi quyền hạn thuộc về một hoặc nhiều
Group (0..*) nhóm người dùng khác nhau. Ngược lại
một nhóm người dùng có thể có nhiều
hoặc chưa được cấp bất kì quyền hạn
nào.
8 Role (1..*) Mỗi quyền hạn thuộc về một hoặc nhiều
RoleType (1..*) nhóm quyền hạn. Ngược lại, mỗi nhóm
quyền hạn sẽ có ít nhất là một quyền
hạn.
9 DataValue(1) Mỗi phần tử dữ liệu chỉ có một giá trị.
DataElement(1..*) Ngược lại, mỗi giá trị dữ liệu có thể
thuộc về một hoặc nhiều phần tử dữ liệu
Trang 61 / 137
khác nhau.
Luận văn tốt nghiệp
0112049 - 0112322
Mỗi phần tử dữ liệu thuộc về một hoặc 10 DataElement(1..*)
nhiều nhóm phần tử dữ liệu. Ngược lại, DataElementGroup(1.
mỗi nhóm phần tử dữ liệu có thể có 1 .*)
hoặc nhiều phần tử dữ liệu
11 DataValue(1..*) Mỗi giá trị dữ liệu có thể có nhiều giai
Period(1) đoạn khác nhau. Ngược lại, mỗi giai
đoạn chỉ thuộc một giá trị mà thôi.
Bảng 3.2: Danh sách các quan hệ
2.2. Thiết kế các lớp xử lí action.
org.hisp.dhis.rp.organizationunit. action
org.hisp.dhis.rp. period.action
org.hisp.dhis.reportgener ator.web.action
org.hisp.dhis.rp. report.action
org.hisp.dhis.rp.authorization. action
org.hisp.dhis.rp.user. action
org.hisp.dhis.rp. language
2.2.1. Sơ đồ các gói:
Hình 3.11: Sơ đồ gói
(cid:153) Gói org.hisp.dhis.rp.language:
Cung cấp chức năng đa ngôn ngữ cho hệ thống. Thành phần chính là lớp
Trang 62 / 137
Language.java.
Luận văn tốt nghiệp
0112049 - 0112322
(cid:153) Gói org.hisp.dhis.rp.period.action:
Cung cấp các chức năng liên quan đến vịêc hiển thị giai đoạn trên trang web.
Các đối tượng xử lí bao gồm: AddPeriodAction; DeletePeriodAction;
GetListPeriodAction; PeriodPageLoad.
(cid:153) Gói org.hisp.dhis.rp.report.action:
Cung cấp các chức năng liên quan đến đối tượng reportfile. Các đối tượng xử
lí bao gồm: DeleteReportAction; PermanentDeleteReport; RecoveryPage;
ResetSearchPage; ResetUploadReportPage; SearchPageLoad; SearchReportAction;
UndoDeleteReport; UploadAction; UploadReportPage.
(cid:153) Gói org.hisp.dhis.rp.organizationunit.action:
Cung cấp các chức năng liên quan đến việc hiển thị cấu trúc đơn vị y tế. Các
đối tượng xử lí bao gồm: GetAllRootUnit; GetCityByCountry; GetDistrictByCity;
GetWardByDistrict.
(cid:153) Gói org.hisp.dhis.rp.authorization.action:
Cung cấp các khả năng kiểm tra quyền hạn. Các đối tượng xử lí bao gồm:
CheckingRoleAction; CheckingRoleTypeAction.
(cid:153) Gói org.hisp.dhis.rp.user.action:
Cung cấp các khả năng quản lí người dùng và phân quyền sử dụng. Các đối
tượng xử lí bao gồm: AddRolesForGroupAction; AddUserPageLoad;
DeleteUserAction; GroupAddAction; GroupDeleteAction; GroupListLoadAction;
LoadRolesAddGroupAction; LoadSearchUserPage; LoginAction; LogoutAction;
SearchUserAction; SetActiveUser; UserAddAction; UserEditAction;
UserListAction; UserSaveAction; UserSignUpAction; UserSignUpLoadAction.
(cid:153) Gói org.hisp.dhis.reportgenerator.web.action:
Cung cấp các khả năng kết xuất báo cáo. Các lớp xử lí bao gồm:
FillReportAction, GenerateReportAction và PrepareReportAction.
2.2.2. Nội dung các xử lí chính:
(cid:153) Kiểm tra quyền hạn và hiển thị trang.
Tất cả các xử lí trong hệ thống trước khi trả về một trang html phải gọi bước
Trang 63 / 137
xử lí này. Xử lí này kiểm tra khả năng của người dùng đối với các chức năng trên
Luận văn tốt nghiệp
0112049 - 0112322
trang sắp hiển thị, qua đó quyết định xem sẽ thể hiện những chức năng nào cũng
như làm mờ hay vô hiệu hoá những chức năng nào.
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.
Việc kiểm tra bao gồm hai phần: kiểm tra trên từng chức năng, và kiểm tra
trên từng nhóm chức năng được hiển thị trên trang. Ví dụ: ta có nhóm chức năng
“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á. Tương tự nếu người dùng không có quyền download
thì khi trang này hiển thị, chức năng download sẽ bị vô hiệu hoá.
#set ($temp = 0)
#foreach($integer in $listRole)
#if($reportsearch_id == $integer.intValue())
#set ($temp = 1)
#end
#end
#if($temp == 1)
value="$locHash.get("searchforuser")" onClick="SearchReport(1)">
#else
value="$locHash.get("searchforuser")" title="noright"> #end
Xử lí kiểm tra chức năng trên trang bằng velocity:
#set($temp = 0)
#foreach($integer in $listRoleType)
#if($periodTypeManagement_id == $integer.intValue())
#set($temp = 1)
#end
Trang 64 / 137
Xử lí kiểm tra nhóm chức năng trên trang bằng velocity:
Luận văn tốt nghiệp
0112049 - 0112322
#end
#if($temp == 1)
value="$locHash.get("addperiodtype")">
#else
type="button" value="$locHash.get("addperiodtype")">
#end
(cid:153) Kết xuất báo cáo.
Khi trang được gọi, hệ thống sẽ yêu cầu xác định tập tin mẫu báo cáo, xác
định khoảng thời gian lập báo cáo, xác định đơn vị y tế liên quan và xác định định
dạng của tập tin báo cáo.
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.
(cid:153) Phân quyền người dùng.
Chức năng này xác lập lại quyền hạn của nhóm người dù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).
Và tuỳ theo nhóm người dùng sẽ hiển thị nội dung của hai danh sách này khác nhau.
Sử dụng javascript cho phép quản trị viên di chuyển các nội dung giữa hai
danh sách.
Xử lí Phân quyền nhóm người dùng được gọi để cập nhật lại khả năng của
nhóm người dùng khi có yêu cầu cập nhật từ người dùng.
(cid:153) Hiển thị đa ngôn ngữ.
Chức năng đa ngôn ngữ cho phép người dùng lựa chọn ngôn ngữ hiển thị.
Trang 65 / 137
Việc chọn lựa được xác lập trên trang login và ngôn ngữ đó sẽ được hiển thị trong
Luận văn tốt nghiệp
0112049 - 0112322
toàn bộ hệ thống. Chức năng này được thực hiện thông qua xử lí cung cấp bởi lớp
Language.java trong gói org.hisp.dhis.rp.language.
Nội dung các hiển thị được định nghĩa trong các tập tin .properties theo định
dạng sau:
Tên tập tin: DHIS2MessageBundle_en.properties nếu là tiếng Anh.
Và DHIS2MessageBundle_vi.properties nếu là tiếng Việt (hai kí tự đầu)
Nội dung các hiển thị bao gồm hai phần:
Khoá = Nội dung#
Khoá là giá trị duy nhất, để có thể tham chiếu tới nhằm lấy ra kết quả hiển thị
là Nội dung. (Kết thúc nội dung hiển thị bằng kí tự #).
Khi có một yêu cầu chuyển đổi ngôn ngữ được gọi, tập tin ngôn ngữ tương
ứng (tập tin .properties) sẽ được xác định và các nội dung sẽ được hiển thị lên trang
thông qua mã velocity như sau:
$locHash.get(“keyword”)
Với keyword là khoá như đã trình bày ở trên. Và locHash là một đối tượng
kiểu Hashtable trong lớp Language.
(cid:153) Tìm kiếm báo cáo.
Chức năng tìm kiếm báo cáo cho phép người dùng tìm kiếm dựa trên các đơn
vị y tế, theo loại báo cáo và theo khoảng thời gian (giai đoạn). Phạm vi tìm kiếm
được xác định theo từng năm và giá trị năm này được nhập bởi người dùng.
Khi chức năng này được gọi, cấu trúc của các đơn vị y tế được hiển thị trong
4 combo box (xem xử lý hiển thị cấu trúc đơn vị y tế bên dưới) cùng với đó là các
thông tin về loại báo cáo và giai đoạn. Người dùng có thể tìm kiếm dựa trên tất cả
các đơn vị y tế, tất cả các loại báo cáo và tất cả các giai đoạn.
Chức năng tìm kiếm được thực hiện thông qua xử lí SearchReportAction
trong gói: org.hisp.dhis.rp.report.action. Một trong các hàm chính sử dụng trong xử
lí này là phương thức searchReportFile() của đối tượng reportfile
(org.hisp.dhis.rp.reportfile). Phương thức này sử dụng đối tượng cung cấp bởi
Hibernate là query định nghĩa các câu truy vấn có nhận giá trị tham số đầu vào. Tuỳ
Trang 66 / 137
theo điều kiện tìm kiếm của người dùng mà thiết lập đối tượng query và giá trị các
Luận văn tốt nghiệp
0112049 - 0112322
tham số đầu vào được phương thức searchReportFile() thực hiện khác nhau. Kết
quả trả về là một Iterator.
Định nghĩa đối tượng query trong tập tin ánh xạ đối tượng report file
name="org.hisp.dhis.service.report.ReportManager.searchReportFile. orgunitreporttypeperiod">
report.reportType = ? and report.period in (from Period period where period.periodType = ?)and report.delStatus = false and year(report.date)= ? order by report.id desc]]>
(ReportFile.hbm.xml)
Giá trị đầu vào của phương thức searchReportFile() bao gồm: mã đơn vị y tế,
mã loại báo cáo, mã giai đoạn và năm (trong trường hợp điều kiện tìm kiếm là tất
cả, thì mã tương ứng có giá trị là -1). Tuỳ theo giá trị của các điều kiện tìm kiếm
này, phương thức searchReportFile sẽ lựa chọn đối tượng query cần thiết và gọi
query
=
session.getNamedQuery("org.hisp.dhis.service.report.ReportManager.
searchReportFile.orgunitreporttypeperiod");
query.setInteger( 0,orgUnit );
query.setInteger( 1,reportTypeId );
query.setInteger( 2,periodId );
query.setInteger( 3,year );
listReport = query.list();
return listReport.iterator();
thực thi:
Kết quả tìm được sẽ được phân trang hiển thị căn cứ theo giá trị của tham số
DefaultMaxRow trong tập tin configuration.properties.
(cid:153) Hiển thị cấu trúc đơn vị y tế.
Cấu trúc các đơn vị y tế được chia thàn 4 cấp: cấp quốc gia, cấp tỉnh/thành
phố trực thuộc trung ương, cấp quận, huyện và thành phố trực thuộc tỉnh, cấp xã,
Trang 67 / 137
phường.
Luận văn tốt nghiệp
0112049 - 0112322
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.
3. Cấu trúc cơ sở dữ liệu
3.1.Ánh xạ các lớp đối tượng sang cơ sở dữ liệu quan hệ.
Lớp đối tượng Cơ sở dữ liệu quan hệ
Thuộc tính Kiểu dữ liệu Thuộc tính Kiểu dữ liệu
Period Period
id int integer id
startDate date date startDate
endDate date date endDate
periodType int periodType PeriodType
PeriodType PeriodType
id int intteger id
name varchar string name
ReportType ReportType
id int integer id
name varchar reportTypeName string
ReportFile ReportFile
id integer id int
documentFormat string documentFormat varchar
reportFileName string reportFileName varchar
date date date date
reportType ReportType reporttype int
orgUnit OrganizationUnit organizationUnit int
period Period period int
delStatus boolean delStatus int
OrganizationUnitGroup OrgUnitGroup
Trang 68 / 137
id integer id int
Luận văn tốt nghiệp
0112049 - 0112322
name string name varchar
OrganizationUnit OrganizationUnit
id integer id int
name string name varchar
OrganizationUnit parent parent int
childrens Set
User User
id integer id int
username string username varchar
password string password varchar
fullname string fullname varchar
rank string rank varchar
orgUnit int OrganizationUnit orgUnitId
group Group groupId int
active boolean active int
Group GroupUser
id integer id int
name string name varchar
level integer level int
description string description varchar
roles Set RolesOfGroup(id,elt)
Role Role
id integer id int
description string description varchar
actionClass string actionClass varchar
RoleType RoleType
id integer id int
Trang 69 / 137
name string name string
Luận văn tốt nghiệp
0112049 - 0112322
roles Set RolesOfRoleType(id,elt)
Trang 70 / 137
Bảng 3.3: Ánh xạ đối tượng sang cơ sở dữ liệu quan hệ
Luận văn tốt nghiệp
0112049 - 0112322
3.2. Cấu trúc của cơ sở dữ liệu sau khi ánh xạ.
3.2.1. Mô hình thực thể kết hợp
Hình 3.11: Mô hình thực thể kết hợp
3.2.2. Thuyết minh cho mô hình
Các thực thể:
BÁO CÁO (REPORTFILE):
Tập tin báo cáo được tạo lập bởi người phụ trách của từng đơn vị. Các báo
cáo này có thể được tạo bởi các công cụ hỗ trợ và sau đó upload lên server (và lưu
thông tin vào cơ sở dữ liệu). 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. Mỗi tập tin báo cáo xác định đơn vị lập báo cáo (Organization Unit) và báo
Trang 71 / 137
cáo khoảng thời gian nào (Period).
Luận văn tốt nghiệp
0112049 - 0112322
LOẠI BÁO CÁO (REPORTTYPE):
Có nhiều loại báo cáo tuỳ thuộc vào nội dung của các báo cáo. 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.
GIAI ĐOẠN (PERIOD):
Mỗi giai đoạn (period) xác định khoảng thời gian báo cáo. Mỗi giai đoạn xác
định thời điểm đầu và thời điểm cuối để báo cáo các thông tin, số liệu. Tuỳ thuộc
vào từng loại (periodtype) mà sẽ xác định khoảng thời gian, có thể là 1 tháng, 3
tháng, hoặc 1 năm,…
LOẠI GIAI ĐOẠN (PERIODTYPE):
Mỗi giai đoạn thuộc về một loại giai đoạn nhất. Với từng loại giai đoạn,
dùng để xác định khoảng thời gian cho giai đoạn.
ĐƠN VỊ (ORGANIZATIONUNIT):
Thực thể đơn vị thể hiện cho 1 đơn vị y tế ngoài thực tế. Cấu trúc đơn vị gồm
các cấp quốc gia, thành phố, quận/huyện, phường xã. Mỗi đơn vị cũng có mối quan
hệ với một đơn vị khác. Một đơn vị thuộc về một đơn vị quản lý cấp trên duy nhất
và có thể có nhiều đơn vị cấp con. 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.
NHÓM ĐƠN VỊ (ORGANIZATIONUNITGROUP):
Mỗi đơn vị thuộc về một nhóm đơn vị (hay còn gọi là cấp của đơn vị) duy
nhất. Có nhiều nhóm đơn vị như Nhóm cấp thành phố, cấp phường xã,…
NGƯỜI DÙNG (USER):
Mỗi người khi sử dụng hệ thống phải có một tài khoản với tên đăng nhập và
mật khẩu đăng nhập. Mỗi người dùng mới nếu muốn sử dụng phải đăng kí với
người quản trị để được cấp tài khoản. Mỗi người dùng sẽ xác định thuộc nhóm
người dùng nào (Group) và là nhân viên của đơn vị nào (Organization Unit). Mỗi
người dùng có quyền thao tác với hệ thống với các mức khác nhau, tuỳ thuộc nhóm
Trang 72 / 137
người dùng nào.
Luận văn tốt nghiệp
0112049 - 0112322
NHÓM NGƯỜI DÙNG (GROUP):
Nhóm người dùng được định nghĩa bởi Admin và xác định cấp (level) của
từng nhóm và được mô tả thông tin (description) về nhóm người dùng này. Ứng với
từng nhóm sẽ có các quyền thao tác khác nhau trên hệ thống.
QUYỀN (ROLE):
Quyền người dùng được định nghĩa tương ứng với từng thao tác(Action)
được xây dựng trong chương trình. Mỗi nhóm người dùng không được cấp quyền
hoặc có thể cấp quyền thực hiện được thực hiện nhiều thao tác. Những người dùng
thuộc nhóm nào thì sẽ đựơc thực hiện các thao tác tương ứng với quyền của nhóm
đó.
LOẠI QUYỀN (ROLETYPE):
Loại quyền liên quan đến user control thể hiện trên giao diện chương trình.
Trang 73 / 137
Một loại quền khi định nghĩa sẽ xác định các quyền chứa trong đó.
Luận văn tốt nghiệp
0112049 - 0112322
3.2.3. Mô hình quan hệ
Trang 74 / 137
Hình 3.12: Lược đồ quan hệ
Luận văn tốt nghiệp
0112049 - 0112322
4. Thiết kế giao diện
4.1. Sơ đồ liên kết các trang
Trang 75 / 137
Hình 3.13: Sơ đồ liên kết các trang
Luận văn tốt nghiệp
0112049 - 0112322
4.2. Nội dung và thiết kế các trang chức năng chính.
4.2.1. Đăng nhập và gởi đăng kí người dùng.
Hình 3.14: Màn hình đăng nhập
Mô tả:
(cid:190) (1) Chọn ngôn ngữ hiển thị trên trang. Hỗ trợ giao diện đa ngôn ngữ với
2 ngôn ngữ: tiếng Việt và tiếng Anh.
(cid:190) (2) “Đăng nhập” nếu người dùng đã được cấp tài khoản (tên đăng nhập
và mật khẩu).
(cid:190) (3) “Đăng kí người dùng” nếu người dùng chưa có tài khoản đăng nhập
và muốn cung cấp thông tin để đăng kí một tài khoản.
Các sự kiện cần xử lý:
Stt Sự kiện Xử lý
1 Trước khi màn hình đăng Lấy tất cả các đơn vị dữ liệu từ sơ sở dữ liệu,
nhập được load hỗ trợ cho chức năng “đăng kí người dùng”
Trang 76 / 137
2 Chọn ngôn ngữ sử dụng Khi người dùng chọn ngôn ngữ, giao diện
Luận văn tốt nghiệp
0112049 - 0112322
chương trình sẽ chuyển đổi ngôn ngữ theo
ngôn ngữ chọn tương ứng.
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.
4 Nhấn nút “Đăng nhập” Tên đăng nhập và mật khẩu được kiểm tra
xem có tài khoản này đúng và đã được kích
hoạt chưa.
Nếu tài khoản này đúng, sẽ được lưu vào
session.
Nếu tài khoản không đúng, sẽ thông báo lỗi.
Trang 77 / 137
Bảng 3.4: Bảng mô tả màn hình Đăng nhập
Luận văn tốt nghiệp
0112049 - 0112322
4.2.2. Trang chủ
Hình 3.15: Trang chủ
Mô tả:
(cid:190) (1) “Trở ra”: Thoát khỏi hệ thống
(cid:190) (2) “Đổi mật khẩu”: Hỗ trợ người dùng thay đổi mật khẩu đăng nhập
vào hệ thống.
(cid:190) (3) Các thao tác hỗ trợ cho người quản trị (quản lí người dùng, quản lí
hệ thống, lập báo cáo, bảo trì cơ sở dữ liệu)
(cid:190) (4) Liên kết đến các trang khác cùng dự án HISP
(cid:190) (5) Hố trợ các thao tác liên quan đến hoạt động y tế: tìm kiếm, upload
các báo cáo y tế.
Trang 78 / 137
Các sự kiện xử lý:
Luận văn tốt nghiệp
0112049 - 0112322
Stt Sự kiện Xử lý
1 Trước khi trang chủ được Khi đăng nhập thành công, người dùng đăng
hiển thị nhập được lưu xuống session và được kiểm
tra quyền thông qua quyền của nhóm người
dùng mà người dùng đó thuộc về.
Tương ứng với quyền của người dùng mà các
thao tác trên trang được cho phép hay không
cho phép.
2 Liên kết “Trở ra” Người dùng thoát khỏi hệ thống.
Thông tin lưu trữ vể người dùng trên session
sẽ được xoá.
3 Liên kết “Thay đổi mật Lấy thông tin (tên đăng nhập và mật khẩu)
khẩu” của người dùng hiện tại từ session.
Chuyển sang trang thay đổi mật khẩu để nhận
và kiểm tra mật khẩu mới.
Người dùng phải nhập lại mật khẩu cũ để
kiểm tra và nhập 2 lần mật khẩu mới để xác
nhận.
Khi người dùng đồng ý thay đổi mật khẩu, hệ
thống sẽ kiểm tra mật khẩu cũ và xác nhận
mật khẩu mới. Nếu mật khẩu hợp lệ sẽ cập
nhật lại mật khẩu mới cho người dùng.
4 Liên kết “Quản lí người Chuyển sang trang quản lí người dùng. Cho
dùng” phép thực hiện các thao tác Thêm mới tài
khoản, Tra cứu người dùng, hoặc kích hoạt
các tài khoản mà người dùng đã đăng kí. Chỉ
được thao tác trên các người dùng của đơn vị
Trang 79 / 137
y tế của họ.
Luận văn tốt nghiệp
0112049 - 0112322
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
5 Liên kết “Quản trị hệ Chuyển sang trang Quản trị hệ thống. Cho
thống” phép thực hiện các thao tác liên quan đến
Nhóm người dùng: Thêm mới nhóm người
dùng, phân quyền cho nhóm người dùng,
Phục hồi các báo cáo đã bị xoá.
6 Liên kết “Bảo trì cơ sở dữ Chuyển sang trang Bảo trì cơ sở dữ liệu. Cho
liệu” phép thực hiện các thao tác liên quan đến dữ
liệu: Giai đoạn, loại giai đoạn, cấu trúc đơn vị
y tế, loại báo cáo. Đây là các trường liên quan
đến các thao tác và các dữ liệu khác của hệ
thống nên ít thay đổi.
Cho phép liên kết đến các trang khác của 7 Các liên kết:
cùng dự án HISP. “Ward Paitent module”
Hisp home: Trang chủ của Hisp “Report engine”
Ward Paitent mô đun: Quản lí bệnh nhân “Hisp home”
8 Liên kết “Tìm kiếm báo Liên kết đến trang tìm kiếm báo cáo. Cho
cáo” phép người dùng tra cứu thông tin, nội dung
báo cáo theo các thông tin cung cấp.
9 Liên kết “Upload” Liên kết đến trang Upload báo cáo. Cho phép
người dùng upload các báo cáo tương ứng với
Loại báo cáo, giai đoạn báo cáo, đơn vị báo
cáo,…
Các tập tin báo cáo sẽ được lưu trữ trên server
Trang 80 / 137
và thông tin của báo cáo được lưu xuống cơ
Luận văn tốt nghiệp
0112049 - 0112322
sở dữ liệu.
Bảng 3.5: Bảng mô tả Trang chủ
4.2.3. Trang tìm kiếm báo cáo
Hình 3.16: Màn hình tìm kiếm báo cáo
Mô tả:
(cid:190) (1) Nhận các thông tin về đơn vị báo cáo
(cid:190) (2) Nhận các thông tin liên quan đến báo cáo như loại báo cáo, giai
đoạn báo cáo, năm báo cáo, …
(cid:190) (3) Tra cứu báo cáo theo các thông tin đã cung cấp
(cid:190) (4) Kết quả tra cứu
Stt Sự kiện Xử lý
Trang 81 / 137
1 Trước khi trang tra cứu báo Lấy thông tin của các đơn vị y tế theo từng
Luận văn tốt nghiệp
0112049 - 0112322
cáo được hiển thị cấp.
Lấy thông tin của đơn vị y tế cấp cao nhất
(Cấp quốc gia)
Từ đơn vị cấp cao nhất sẽ lần lượt lấy được
các đơn vị y tế cấp dưới tương ứng.
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
tìm kiếm như: Đơn vị y tế, loại báo cáo, giai
đoạn.
Hoặc người dùng có thể để tìm kiếm mặc định
với tất cả đơn vị y tế hoặc với tất cả các loại,
giai đoạn.
3 Nhấn nút “Tra cứu” Hệ thống sẽ tìm kiếm các báo cáo theo các
thông tin mà người dùng đã cung cấp
Danh sách các báo cáo tìm được sẽ hiển thị
bên dưới và được chia theo trang tuỳ thuộc
vào số lượng các báo cáo tìm được.
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ề.
4 Liên kết “Tải về” Hỗ trợ người dùng tải các báo cáo đã tìm
được về máy.
5 Nhấn nút “Xoá” Người dùng có thể xoá các báo cáo tìm được.
Tuy nhiên, để thực hiện được các thao tác này
(tra cứu, xoá hoặc tải báo cáo), người dùng
Trang 82 / 137
phải được cấp quyền thao tác tương ứng với
Luận văn tốt nghiệp
0112049 - 0112322
từng thao tác.
Nếu người dùng không có quyền thực hiện
thao tác nào thì hiển thị của liên kết đó được
ẩn đi, và có hiển thị thông báo “không thực
hiện được thao tác này”.
Bảng 3.6: Bảng mô tả màn hình Tìm kiếm báo cáo
(1)
(2)
(3)
(4)
(5)
4.2.4. Trang phân quyền sử dụng hệ thống.
Hình 3.17: Màn hình phân quyền hệ thống
Mô tả:
(cid:190) (1) Chọn nhóm người dùng để phân quyền.
(cid:190) (2) Nhóm các quyền không thuộc (chưa được cấp) nhóm người dùng
này.
Trang 83 / 137
(cid:190) (3) Nhóm các quyền thuộc (đã được cấp) nhóm người dùng này.
Luận văn tốt nghiệp
0112049 - 0112322
(cid:190) (4) Chọn các quyền cho nhóm người dùng.
(cid:190) (5) Chấp nhận cấp cho nhóm người dùng các quyền đã xác định.
Stt Sự kiện Xử lý
Lấy tất cả các nhóm người dùng, để hiển thị 1 Trước khi trang phân quyền
trên danh sách các nhóm người dùng. nhóm người dùng được
hiển thị
2 Khi trang hiển thị Mặc định hiển thị đơn vị được chọn là đơn
vị của người dùng đang đăng nhập.
Lấy danh sách 2 nhóm quyền: Nhóm quyền
mà nhóm người dùng đã được cấp và Nhóm
quyền mà nhóm người dùng chưa được cấp.
Thêm một quyền cho nhóm người dùng. 3 Nhấn nút “>>”
Xoá một quyền đã cấp cho nhóm người 4 Nhấn nút “<<”
dùng
5 Nhấn nút “Chấp nhận” Hệ thống sẽ cập nhật lại danh sách các
quyền đã được cấp cho nhóm người dùng.
Trang 84 / 137
Bảng 3.7: Bảng mô tả màn hình Phân quyền hệ thống
Luận văn tốt nghiệp
0112049 - 0112322
(2)
(1)
(3)
4.2.5. Trang kết xuất báo cáo.
Hình 3.18: Màn hình kết xuất báo cáo
Mô tả:
(cid:190) (1) Cung cấp các thông tin về báo cáo cần lập (kết xuất)
(cid:190) (2) Chọn tập tin mẫu báo cáo
(cid:190) (3) Kết xuất báo cáo
Các sự kiện xử lý:
Stt Sự kiện Xử lý
1 Trước khi trang kết xuất Lấy tất cả các đơn vị theo các cấp, loại giai
báo cáo được hiển thị đoạn. Tương ứng với từng loại giai đoạn sẽ
hiển thị các giai đoạn
2 Khi trang hiển thị Mặc định hiển thị đơn vị được chọn là đơn
vị của người dùng đang đăng nhập.
3 Nhấn nút “Browse” Xác định tập tin mẫu báo cáo. Đây là những
Trang 85 / 137
mẫu báo cáo được thiết kế sẵn tuỳ theo yêu
Luận văn tốt nghiệp
0112049 - 0112322
cầu nội dung và hình thức báo cáo.
4 Nhấn nút “Lập báo cáo” Từ các thông tin mà người dùng đã xác
định, hệ thống sẽ tìm kiếm các dữ liệu phù
hợp để tổng hợp thành báo cáo theo mẫu đã
chọn.
Trang 86 / 137
Bảng 3.8: Bảng mô tả màn hình Kết xuất báo cáo
Luận văn tốt nghiệp
0112049 - 0112322
CHƯƠNG 4: GIỚI THIỆU CÔNG NGHỆ VÀ MÔI TRƯỜNG
PHÁT TRIỂN
Nội dung phần này chúng em xin trình bày ngắn gọn giới thiệu các công nghệ
được sử dụng để phát triển report portal, vai trò của từng công nghệ và vị trí ứng
dụng chúng trong kiến trúc của report portal. Phần nghiên cứu chi tiết từng công
nghệ chúng em xin trình bày trong phần phụ lục.
1. Spring framework
1.1. Lí do sử dụng Spring?
Spring là một framework hiện rất được sử dụng phổ biến trên thế giới. Đặc
điểm nổi trội của Spring nằm ở tính gọn nhẹ, 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.
Dự án DHIS 2.0 được phát triển bao gồm 19 mô đun khác nhau, mỗi mô đun
được phát triển gần như đồng thời tại nhiều quốc gia, do đó chính vì đặc điểm này
mà Spring phát huy tính hiệu quả của nó.
1.2. Vấn đề Inversion of Control trong Spring
(cid:153) Khái niệm về IoC.
Inversion of Control hay Dependencies Injection ám chỉ một kĩ thuật đơn
giản trong việc cung cấp các thành phần và các ràng buộc và quản lí các ràng buộc
này trong suốt quá trình tồn tại của đối tượng. Một thành phần mà phụ thuộc vào
các ràng buộc khác được gọi là một target. Theo một cách hiểu khác, IoC cung cấp
các dịch vụ mà qua đó các thành phần có thể truy xuất và tương tác đến các ràng
buộc của nó. Một ví dụ đơn giản là: giả sử ta có một đối tượng A phụ thuộc vào một
thể hiện của đối tượng B, theo cách truyền thống, A phải khởi tạo một thể hiện của
đối tượng B bằng toán tử new. Nhưng với Spring, một thể hiện của B sẽ được cung
Trang 87 / 137
cấp cho đối tượng A vào thời điểm thực thi. Điều này có nghĩa là Spring hay chính
Luận văn tốt nghiệp
0112049 - 0112322
xác hơn là IoC cung cấp cho đối tượng tất cả các ràng buộc, các phụ thuộc của
chúng mà không cần đối tượng phải tự tạo các thể hiện cho các ràng buộc đó.
Inversion of Control được chia thành hai thành phần phụ: Dependency
Injection and Dependency Lookup. 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. Dependency
Lookup bao gồm hai dạng: cơ chế đẩy các ràng buộc (Dependency pull) và cơ chế
tra cứu các ràng buộc theo ngữ cảnh (Contextualized Dependency Lookup). Để so
sánh sự tiện lợi và cách thức kiểm soát các thành phần và ràng buộc của các dạng
này, ta xét một ví dụ sau: giả sử ta có một interface tên là MessageOut chứa một
thành phần tên là drawer, khi đó cách thức lấy thành phần này theo các dạng trên
như sau:
public static void main (String [] args) throws Exception
{
//Lấy bean factory.
BeanFactory factory = getBeanFactory();
//Lấy thành phần renderer thông qua factory trên
MessageOut messageOut = ( MessageOut) factory.getBean(“drawer”);
messageOut.drawer();
}
- Dependency pull:
- Contextualized Dependency Lookup:
CDL cũng tương tự như vậy. Tuy nhiên, CDL thực hiện điều đó khác một
chút so với Dependency Pull. Thay vì tìm các thành phần hoặc các ràng buộc
tại một nơi nào đó trong registry, CDL thực hiện bằng cách để thành phần
public interface ManagedComponent
{
public void performLookup( Container container);
}
Trang 88 / 137
này bổ sung cho một interface như sau:
Luận văn tốt nghiệp
0112049 - 0112322
Bằng cách bổ sung cho interface này, thành phần này sẽ được quản lí bởi
container. Khi một container sẵn sàng cung cấp các thành phần cho đối tượng, nó
gọi phương thức performLookup() trên từng thành phần hoặc các ràng buộc, và như
thế các đối tượng chỉ cần tìm trong container để lấy các ràng buộc mà mình cần như
public class ContextualizeDependencyLookup implements
ManagedComponent
{
private Dependency myDep;
public void performLookup( Container container)
{
this.myDep = (Dependency)
container.getDependency(“myDependency”);
}
}
trong ví dụ sau:
- Constructor Dependency Injection: CDI là một dạng của DI, đây là cơ chế
bổ sung các ràng buộc bằng các hàm khởi tạo. Theo đó, bản thân đối tượng khai báo
một và nhiều phương thức khởi tạo mang các tham số là các ràng buộc của chúng,
public class ContructorInjection
{
private DataStore dataStore;
public ContructorInjection ( DataStore dataStore)
{
this.dataStore = dataStore;
}
}
và IoC sẽ cung cấp các ràng buộc này cho đối tượng ngay khi chúng được khởi tạo.
- Setter Dependency Injection: SDI là một dạng tương tự như CDI như thay
vì thông qua các phương thức khởi tạo, việc cung cấp các ràng buộc cho đối tượng
Trang 89 / 137
thông qua phương thức setter.
Luận văn tốt nghiệp
0112049 - 0112322
public class ContructorInjection
{
private DataStore dataStore;
public void setDataStore ( DataStore dataStore)
{
this.dataStore = dataStore;
}
}
- So sánh giữa cơ chế Injection và cơ chế Lookup: mặc dù IoC bao gồm cả
hai cơ chế trên và Spring đều hỗ trợ tất cả nhưng tuỳ trường hợp mà sử dụng một
trong hai cơ chế trên. Nếu bạn sử dung EJB 2.0 và làm việc với J2EE container, bắt
buộc bạn phải sử dung Lookup và trong Spring nếu sử dụng Injection thì “có vẻ tốt
hơn”, các thành phần và các ràng buộc của chúng trở nên liên kết chặt chẽ với nhau
hơn. Thêm vào đó, việc sử dụng Injection làm cho mã nguồn của chương trình trở
nên linh động và đơn giản hơn. 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. Thêm một lí do nữa là việc sử dụng Lookup sẽ rất khó
kiểm tra do các mức cô lập khác nhau của container nhưng với Injection tất cả chỉ là
các phương thức khởi tạo và các phương thức setters.
- So sánh giữa Setter và Constructor: cơ chế Constructor đặc biệt hữu dụng
khi bạn chắc chắn rằng phải có một thể hiện của các ràng buộc của đối tượng trước
khi đối tượng hoặc thành phần đó được sử dụng. Tuy nhiên Spring có hỗ trợ một kĩ
thuật đảm bảo ràng các ràng buộc đều được xác định nếu sử dụng phương thức
setter và việc thể hiện của ràng buộc có tồn tại hay không không cần phải quan tâm
đến nữa. Ngoài ra, cách sử dụng phương thức setter cho phép linh động hơn trong
một số trường hợp, đặc biệt là ta có thể sử dụng phương thức này trong các
Trang 90 / 137
interface điều mà phương thức khởi tạo không thể nào làm được. Tuy nhiên cần hạn
Luận văn tốt nghiệp
0112049 - 0112322
chế sử dụng phương thức setter trên các interface vì chẳng có gì đảm bảo ràng các
lớp bổ sung cho interface này sẽ sử dụng tất cả các ràng buộc mà interface đó yêu
cầu cung cấp thông qua phương thức setter. 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….
1.3. Khái niệm về bean và bean factory.
Thành phần chính yếu của Dependency Injection trong Spring là
BeanFactory. Khái niệm này chỉ một hộp điều khiển có tác dụng quản lí các thành
phần và các ràng buộc và bất kì thành phần nào được quản lí bởi BeanFactory được
gọi là Bean. Ứ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.
Sau khi việc cấu hình hoàn tất, ứng dụng mới có thể truy xuất đến các Bean thông
qua BeanFactory. Hai lớp bổ sung chính cho BeanFactory là
DefaultListableBeanFactory và XmlBeanFactory.
BeanFactory
DefaultListableBeanFactory
PropertiesBeanDefinitionReader XmlBeanDefinitionReader
Trang 91 / 137
Hình 4.1: Mối quan hệ giữa các lớp hỗ trợ Bean
Luận văn tốt nghiệp
0112049 - 0112322
2. Hibernate
2.1. Lí do sử dụng Hibernate.
Hibernate là một middleware được thiết kế để hổ trợ cho việc ánh xạ đối tượng
sang cơ sở dữ liệu quan hệ. Hibernate đóng vai trò liên kết giữa ứng dụng và
database server, giúp đơn giản code đặc biệt là phần SQL code – trong truy vấn và
các thao tác liên quan đến cơ sở dữ liệu. Ví trí của Hibernate được thể hiện trong
Application Classes
Hibernate
Database Server
mô hình sau:
Hình 4.2: Hibernate trong ứng dụng web
Như trong mô hình trên ta thấy Hibernate nằm giữa các lớp đối tượng Java
truyền thống và hệ quản trị cơ sở dữ liệu. Với Hibernate, chúng ta không cần phải
quan tâm đến việc thông tin của đối tượng được lưu trữ như thế nào? Phải truy vấn
thông tin làm sao? Thay vào đó, chỉ cần xác định đối tượng nào cần được ánh xạ và
ánh xạ đối tượng đó xuống cơ sở dữ liệu như thế nào (cid:198) Độc lập với cơ sở dữ liệu.
Một ích lợi khác là Hibernate giúp giải quyết các vấn đề bất đối xứng giữa
Trang 92 / 137
đối tượng và cơ sở dữ liệu quan hệ như được trình bày sau đây.
Luận văn tốt nghiệp
0112049 - 0112322
2.2. Các vấn đề bất tương xứng giữa đối tượng và cơ sở dữ liệu quan hệ.
2.2.1. Thế nào là tính bền vững:
Hầu hết các ứng dụng đều yêu cầu dữ liệu phải bền vững. “Bền vững” là một
trong những khái niệm cơ bản trong việc phát triển ứng dụng. Nếu dữ liệu không
được hệ thống bảo toàn khi máy chủ tắt, hệ thống có thể sẽ xảy ra sự cố. Tính bền
vững chủ yếu đề cập đến việc lưu trữ dữ liệu trong Cơ sở dữ liệu quan hệ (relaional
database).
(cid:153) Cơ sở dữ liệu quan hệ:
Cơ sở dữ liệu quan hệ được sử dụng phổ biến và thường xuyên. Nhiều đơn
vị, tổ chức đã sử dụng cơ sở dữ liệu quan hệ. Cơ sở dữ liệu quan hệ được thiết lập
do nó có phương thức hoạt động rất mạnh mẽ, rất linh hoạt để quản trị dữ liệu cho
người dùng.
Hệ quản trị cơ sở dữ liệu quan hệ không đặc trưng cho Java và cơ sở dữ liệu
quan hệ cũng không đặc trưng cho một ứng dụng riêng biệt nào. Kỹ thuật “quan hệ”
hỗ trợ cách thức để chia sẻ dữ liệu giữa những ứng dụng khác nhau hoặc giữa
những kỹ thuật khác nhau trên những phần của cùng một ứng dụng.
(cid:153) Tính bền vững trong các ứng dụng hướng đối tượng:
Trong các ứng dụng hướng đối tượng, tính bền vững luôn cho phép các đối
tượng tồn tại lâu hơn thay vì chỉ trong tiến trình tạo ra đối tượng đó. Trạng thái của
đối tượng có thể được lưu trữ trên đĩa cùng với trạng thái cuả nó tại các thời điểm.
Các đối tượng cũng có thể được tái tạo lại để ứng dụng trong các tiến trình sau đó.
Những ứng dụng này không giới hạn những đối được đơn lẻ - những đối
tượng tương thích có thể được tạo lập tính bền vững và sau đó tái tạo lại trong một
tiến trình khác. Hầu hết những đối tượng là không bền vững (đối tượng tạm thời),
một đối tượng tạm thời có thời gian tồn tại giới hạn bởi thời gian của tiến trình tạo
ra nó. Hầu hết các ứng dụng java đều chứa đựng sự kết hợp của các đối tượng bền
vững và các đối tượng tạm thời.
Nhiều cơ sở dữ liệu quan hệ hiện đại cung cấp sự mô tả có cấu trúc dữ liệu
Trang 93 / 137
bền vững, có thể sắp xếp, tìm kiếm, tích hợp dữ liệu. Hệ quản trị cơ sở dữ liệu chịu
Luận văn tốt nghiệp
0112049 - 0112322
trách nhiệm quản lý sự trùng lặp và tính toàn vẹn dữ liệu, kể cả việc cung cấp tính
bảo mật dữ liệu.
Các vấn đề mà hệ quản trị cơ sở dữ liệu quan tâm đến khi được sử dụng:
(cid:131) Cách thức lưu trữ, tổ chức và phục hồi dữ liệu có cấu trúc.
(cid:131) Quản lý sự trùng lặp và tính toàn vẹn dữ liệu.
(cid:131) Đảm bảo chia sẻ dữ liệu.
2.2.2. Mô hình ghép đôi không xứng:
Xét ví dụ: Chúng ta cần 1 lớp để mô tả thông tin cho một đối tượng “User”
và một lớp khác để mô tả cho đối tượng khác “BillingDetails”. Ta phải xác định
mối quan hệ giữa các lớp trong cả 2 phía:
public class User
{
private String userName;
private String name;
private String address;
private Set billingDetails;
….
}
public class BillingDetails
{
private String accountNumber;
private String accountName;
private String accountType;
private User user;
….
}
User Billing Details
Create table USER
(
USERNAME VARCHAR(10) NOT NULL PRIMARY KEY,
Trang 94 / 137
Dùng các câu lệnh SQL để định nghĩa cơ sở dữ liệu:
Luận văn tốt nghiệp
0112049 - 0112322
NAME VARCHARR(50) NOT NULL,
ADDRESS VARCHAR(100)
)
create table BILLINGDETAILS
(
ACCOUNT_NUMBER VARCHAR(10) NOT NULL PRIMARY KEY,
ACCOUNT_NAME VARCHAR(50) NOT NULL,
ACCOUNT_TYPE VARCHAR(15) NOT NULL,
USERNAME VARCHAR(10) FOREIGN KEY REFERENCES USER
)
Mối quan hệ giữa 2 thực thể này được mô tả là khoá ngoại USERNAME
trong bảng BILLINGDETAILS. Việc mô tả như thế không khó khăn cho việc viết
các câu lệnh để insert, update, delete thông tin của User và BillingDetails.
Sự không tương thích sẽ xuất hiện khi thêm nhiều thực thể và thêm các mối
quan hệ giữa các thực thể này vào ứng dụng.
Nếu như bên cạnh lưu trữ thông tin của User, chúng ta cần lưu trữ thêm
thông tin địa chỉ một cách riêng biệt (street, city, state, country, ZIP code). Thực thể
Address được thêm vào như hình vẽ:
User Billing Details Address
Thực tế, chúng ta không cần thêm một bảng Address vì với một câu truy vấn
từ bảng User ta cũng có thể lấy được thông tin về Address của User đó. Chúng ta có
thể chọn phương án định nghĩa một cột hoặc nhiều cột để lưu trữ thông tin về địa
chỉ của User.
(cid:153) Vấn đề về “Tính chia nhỏ”:
Nói đến “tính chia nhỏ” tức là đề cập đến kích thước của các đối tượng trong
ứng dụng. Các đối tượng trong java và các dữ liệu bảng có thể có nhiều cách chia
nhỏ khác nhau. Xét đến ví dụ đã nêu trên, việc thêm một loại dữ liệu để lưu trữ đối
tượng Address trên một cột duy nhất có thể được xem là cách tốt nhất. Tuy nhiên,
Trang 95 / 137
sẽ có một vài vấn đề khi chúng ta cần lấy thông tin riêng lẻ của đối tượng Address.
Luận văn tốt nghiệp
0112049 - 0112322
Để giải quyết yêu cầu này, chúng ta sẽ chia nhỏ việc lưu trữ thông tin Address của
Create table USER(
USERNAME VARCHAR(10) NOT NULL PRIMARY KEY,
NAME VARCHARR(50) NOT NULL,
ADDRESS_STREET VARCHAR(50),
ADDRESS_CITY VARCHAR(15),
ADDRESS_STATE VARCHAR(15),
ADDRESS_ZIPCODE VARCHAR(5),
ADDRESS_COUNTRY VARCHAR(15)
)
user trên nhiều cột. Bảng User được xây dựng lại như sau:
Ở đây, các lớp đối tượng có thể được xây dựng và sắp xếp ở các mức khác
nhau của sự chia nhỏ. Thực thể User được chia nhỏ gồm các thuộc tính (username,
name, address). Sau đó Address lại được chia nhỏ để lưu trữ các thông tin riêng lẻ
(Address_street, Address_city, Address_state, Address_zipcode, Address_country).
(cid:153) Vấn đề về “Lớp kế thừa”:
Trong java, chúng ta thường sử dụng tính kế thừa bằng cách xây dựng các
lớp chính và lớp phụ (lớp kế thừa). Trở lại ví dụ trên, bây giờ lưu trữ thêm thông tin
liên quan đến User là CreditCard và BankAccount. Có nhiều cách để xây dựng đối
tượng User nhưng thông thường chúng ta xây dựng các đối tượng kế thừa. Ở đây, ta
xây dựng thêm 2 lớp CreditCard và BankAccount là 2 lớp kế thừa của
BillingDetails. 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.
(cid:153) Vấn đề về “định danh”:
Thông thường, vấn đề về định danh các đối tượng ít được quan tâm nhưng
trong một vài trường hợp chúng ta phải chú ý đến vấn đề này. Chẳng hạn, khi ta
Trang 96 / 137
quan tâm đến 2 đối tượng là Users và chúng ta phải giải quyết vấn đề về nhận dạng
Luận văn tốt nghiệp
0112049 - 0112322
khi chúng hoàn toàn giống nhau. Có nhiều cách để giải quyết, có thể xác định 2 đối
tượng trong java, nhưng chung 1 cơ sở dữ liệu.
Các đối tượng java định nghĩa 2 khái niệm về sự giống nhau:
• Định danh đối tượng (tương đương về vị trí lưu trữ, xác định bởi biểu
thức a = = b)
• Đẳng thức được xác định bởi phương thức equals().
Định danh trong bảng dữ liệu được thể hiện như là giá trị khoá chính. Vấn đề
là chúng ta sẽ xác định cột nào được xem là khoá chính, để có thể khắc phục được
sự tồn tại các dòng dữ liệu giống nhau.
Trong ví dụ trên, chúng ta xác định USERNAME là khoá chính của bảng
USER. Như vậy, chúng ta sẽ không thể cập nhật lại giá trị của USERNAME trong
bảng USER cũng như giá trị của nó trong khoá ngoại ở bảng BILLINGDETAILS.
Chúng ta sẽ sử dụng khoá thay thế để giải quyết các vấn đề trên và người dùng
không cần quan tâm nhiều đến các khoá thay thế này. Chúng ta có thể xây dựng lại
Create table USER
(
USER_ID BIGINT NOT NULL PRIMARY KEY,
USERNAME VARCHAR(10) NOT NULL UNIQUE,
NAME VARCHARR(50) NOT NULL,
….
)
create table BILLINGDETAILS
(
BILLING_DETAILS_ID BIGINT NOT NULL PRIMARY KEY,
ACCOUNT_NUMBER VARCHAR(10) NOT NULL UNIQUE,
ACCOUNT_NAME VARCHAR(50) NOT NULL,
ACCOUNT_TYPE VARCHAR(15) NOT NULL,
USER_ID BIGINT FOREIGN KEY REFERENCES USER
)
Trang 97 / 137
cấu trúc của bảng USER như sau:
Luận văn tốt nghiệp
0112049 - 0112322
Các cột USER_ID và BILLING_DETAILS_ID là các giá trị tự động phát
sinh trong hệ thống. Khi xây dựng như trên, không xảy ra hiện tượng trùng lặp dữ
liệu. Username trong hệ thống là duy nhất và chúng ta có thể cập nhật khi cần thiết.
(cid:153) Vấn đề về “ Sự kết hợp”
Sự kết hợp được thể hiện bởi các mối quan hệ giữa các thực thể. Các lớp
User, Address, BillingDetails đều có mối kết hợp với nhau. Tuy nhiên, lớp
BillingDetails có thể đứng 1 mình, được lưu trữ bởi bảng riêng lẻ các thông tin của
chúng, không bị ảnh hưởng bởi sự tồn tại của các bảng khác. Để xác định các mối
kết hợp, chúng ta có thể sử dụng đối tượng quan hệ và định nghĩa các cột là khoá
ngoại liên quan giữa các bảng.
Ví dụ, mối kết hợp có thể được xác định trực tiếp từ đối tượng này đến đối
Public class User
{
private Set billingDetails;
}
public class BillingDetails
{
private User user;
}
tượng khác. Trong mỗi lớp đối tượng đều thể hiện được mối kết hợp này.
Trong trường hợp khác, khoá ngoại cũng không được thể hiện một cách trực
tiếp mà chúng ta sẽ tạo ra các mối kết hợp với việc kết bảng và tính chất chiếu.
public class User
{
private Set billingDetails;
}
public class BillingDetials
{
private Set User users;
}
Trang 98 / 137
Ví dụ về xây dựng mối kết hợp nhiều - nhiều (many-to-many):
Luận văn tốt nghiệp
0112049 - 0112322
Khi ta xác định mối quan hệ nhiều-nhiều cho 2 đối tượng User và
Create table USER_BILLING_DETAILS
(
USER_ID BIGINT FOREGIN KEY REFERENCES USER,
BILLING_DETAILS_ID FOREGIN KEY REFERENCES BILLING_DETAILS,
PRIMARY KEY (USER_ID, BILLING_DETAILS_ID)
)
BillingDetails, chúng ta cần xác định sự liên kết bảng trong cơ sở dữ liệu như sau:
(cid:153) Vấn đề về “Định hướng đồ thị đối tượng”:
Có nhiều cách khác nhau để truy xuất đến các đối tượng trong java và trong
cơ sở dữ liệu quan hệ. Ví dụ, trong java, chúng ta có thể truy xuất đến thông tin
billing của user bằng cách gọi aUser.getBillingDetails().getAccountNumber(). Đây
là cách thức thông dụng nhất để truy xuất các thông tin đối tượng, từ đối tượng này
đến đối tượng khác.
Tuy nhiên, đó không phải là cách hiệu quả để lấy dữ liệu từ cơ sở dữ liệu.
Trong cơ sở dữ liệu, cách thức để lấy dữ liệu hiệu quả là sử dụng các phép kết các
bảng lại với nhau.
Khi cần lấy thông tin User:
Select * from USER u where u.USER_ID = 123
Hoặc khi cần lấy các thông tin BillingDetails của 1 User:
Select *
From USER u
Left outer join BILLING_DETAILS bd on bd.USER_ID = u.USER_ID
Where u.USER_ID = 123
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 ở đây chính là vấn đề về cách thức truy xuất đến dữ
liệu trong java và trong cơ sở dữ liệu quan hệ.
Trang 99 / 137
Tóm lại:
Luận văn tốt nghiệp
0112049 - 0112322
Khi xây dựng và phát triển các ứng dụng java, việc xây dựng các đối tượng
trong java và việc lưu trữ trên cơ sở dữ liệu quan hệ thường xảy ra hiện tượng
“không tương xứ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. Các vấn đề này phải
được giải quyết để hạn chế tối đa về chi phí khắc phục khi gặp sự cố.
3. Webwork, Velocity
3.1. Webwork framework.
3.1.1. Giới thiệu webwork framework.
Webwork là một web framework khá phổ biến hiện nay trên thế giới, có
chức năng tương tự với một web framework khá nổi tiếng khác của Jakarta là
Struts. Ngoài ra Webwork còn cung cấp thêm ba chức năng khác là: dispatcher,
Web-specific result và một tập các tag được sử dùng ở tầng view của mô hình
MVC.
Những ưu điểm của Webwork:
(cid:190) Các câu lệnh đơn giản, dễ đọc.
(cid:190) Dễ mở rộng các tùy chỉnh: Mã nguồn nhỏ và dễ thiết kế. Nếu Webwork
không chạy đúng như những gì bạn muốn, bạn có thể dễ dàng chỉnh sửa
hoặc mở rộng.
(cid:190) Interface được sử dụng trong Webwork , tất cả đều rõ ràng sẽ đơn giản
(cid:190) Hoàn toàn tách biệt với tầng Web trong mô hình MVC. Dễ dàng dùng lại
các hành động (actions) trong các ứng dụng Swing, Applets, Web
Services, EJBs, custom workflow engines, hay các unit test.
(cid:190) Vì tính đơn giản và phân chia thành các tầng, việc phát triển kiểm thử
cũng trở nên dễ dàng.
3.1.2. Xwork và cấu hình Webwork thực thi các actions
Xword là một framework điều khiển chung được sử dụng để thực thi các
hành động. Xwork rất đơn giản và dễ dùng. Nó chỉ gồm một interface đơn là
Trang 100 / 137
com.opensymphony.xwork.Action.
Luận văn tốt nghiệp
0112049 - 0112322
Khi mỗi hành động thi hành, nó sẽ trả code về cho XWork framework. Code
này đơn giản chỉ là một chuỗi (kiểu String) như: “success” hay “error” framework
sẽ cho biết là kết quả của hành động là gì. Kết quả đó có thể là một hành động khác,
hay một trang web (thường là JSP, Velocity, HTML). Mặc định thì chỉ có một lớp
kết quả kèm theo trong XWork là ActionChainResult. Công dụng của nó là sẽ
chuyển kết quả từ action này sang action kế tiếp. Với chuỗi nhiều action kế tiếp
nhau, các mô hình logic phức tạp sẽ có thể được xây dựng từ những action đơn
giản. Tất cả các kết quả sẽ dựa vào các tham số trong XWork.xml để quyết định kết
quả của hành động.
Bên cạnh kết quả của hành động, XWork còn cung cấp nhiều tính năng cao
cấp khác như diễn đạt ngôn ngữ, xác nhận tính hợp lệ của framework, cũng như hỗ
trợ bộ chận (interceptor).
Tương tự như vậy Webwork cung cấp các lớp implement từ Result Interface và
giúp cho ứng dụng web kết hợp với các action trở nên đơn giản. Các kết quả được
kèm theo trong WebWork là:
Servlet cung cấp • ServletDispatcherResult:
javax.servlet.http.HttpServletRequest để hỗ trợ RequestDispatchers. Một
RequestDispatchers cho phép tồn tại HTTP request được sử dụng để
request luân phiên nội dung trên ứng dụng web server. Sử dụng hiệu ứng
này, bạn có thể biểu diễn kết quả với JSP hay HTML trong khi URL của
request gốc vẫn trong vị trí của trình duyệt. Kết quả sẽ chuyển request
đến vị trí được đặc tả.
• ServletRedirectResult – Servlet này giống như kết quả dispatcher. Ngoài
việc chuyển request đến vị trí được đặc tả, sẽ có một quá trình hồi đáp
được chuyển ngược lại cho trình duyệt.
• Velocity Result: Webwork hỗ trợ nhiều công nghệ cho tầng View. Nếu
tầng View của bạn là Velecity template, bạn có thể sử dụng kết quả
dispatcher hoặc redirect để biểu diễn trang web. Tuy nhiên bạn phải tính
Trang 101 / 137
toán và xử lý nhiều hơn vì cú pháp của Velocity vẫn còn hạn chế. Việc sử
Luận văn tốt nghiệp
0112049 - 0112322
dụng kết quả Velocity sẽ đọc velocity template ngay lập tức và trả kết quả
output trực tiếp đến HttpServletResponse.
Ghi chú: Velocity là template được sử dụng phổ biến trong cộng đồng những
người sử dụng Webwork, và cũng rất nổi tiếng cho những người sử dụng mô hình
MVC như Struct. Webwork đòi hỏi phải có Velocity vì Velocity nằm trong
Webwork, tuy nhiên nó không đòi hỏi phải sử dụng Velocity trong tầng View của
bạn
Trước tiên chúng ta phải cấu hình Webwork. Để làm điều này, chúng ta cần
phải bảo đảm đã có xwork-1.0.jar và webwork-2.0.jar trong WEB-INF/lib và sau đó
com.opensymphony.webwork.dispatcher.ServletDispatcher
com.opensymphony.webwork.views.velocity.WebWorkVelocity
Servlet
Trang 102 / 137
thêm vào trong Web.xml nội dung như sau:
Luận văn tốt nghiệp
0112049 - 0112322
location> Lưu ý: (cid:190) Dispatcher đầu tiên của Webwork là Servlet. Trong file cấu hình trên, nó được ánh xạ đến *.action, nhưng việc ánh xạ này hoàn toàn phục thuộc vào bạn. Nhiều người thích *.jspa hoặc *.do hơn. (cid:190) Webwork đòi hỏi velocity phải được khởi tạo đúng trước khi có thể được sử dụng. Bạn phải đảm bảo rằng WebworkVelocityServlet phải được thiết lập tham số cho load-on-startup. Nếu bạn không có muốn sử dụng velocity bạn có thể bỏ qua bước này. (cid:190) Cuối cùng, để sử dụng JSP taglib bạn phải đặc tả chúng trong web.xml như trên. 3.2. Velocity template 3.2.1. Giới thiệu Velocity template. Velocity là một ngôn ngữ template được tạo ra nhằm cung cấp một cách tiếp cận dễ dàng hơn trong việc xử lí, thể hiện các thông tin động trên một trang web. 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. Theo đó, velocity giúp tách biệt mối quan hệ giữa một người thiết kế web và một lập trình viên. Velocity không những chỉ được sử dụng trên các trang web mà còn được tham chiếu vào trong các lớp đối tượng Java. 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ế Trang 103 / 137 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í như thế nào mà chỉ tập trung vào việc thể hiện luồng thông tin động có được cho người dùng. (cid:57) Cú pháp lặp, phép gán và toán tử điều kiện trong Velocity: Velocity cung cấp một tập các toán tử đơn giản phục vụ hiệu quả cho việc hiển thị dữ liệu động lên trang web. Sau đây là các toán tử đơn giản và thông dụng nhất. Toán tử lặp: #foreach ($name in $listName) #end Thực hiện duyệt từng đối tượng trong danh sách $listName, kiểu dữ liệu của danh sách có thể là Set, List hoặc Collection. Mỗi đối tượng lấy ra trong biến #name có thể lấy các thuộc tính của đối tượng thông qua phương thức get của mỗi đối tượng. Toán tử gán: #set ($temp = 1) #if ($temp == 1) #else
#end Toán tử điều kiện: 3.2.2. Sử dụng velocity và webwork trong môi trường Java và trên trang HTML. public class User { private String name; public getName(){ return name; } } Trang 104 / 137 Xét một đối tượng Java sau: Giả sử ta muốn hiển thị một danh sách các người dùng hiện tại. Ta định public class ListUsers extends ActionSupport { private List listUsers; public String execute() { listUsers = UserManager.getAllUser(); return SUCCESS; } public List getListUsers(); { return listUsers; } } nghĩa một lớp action lấy danh sách người dùng như sau: Nội dung cấu hình action trong tập tin xwork.xml như sau: #foreach ($user in $listUsers)Luận văn tốt nghiệp
0112049 - 0112322
Luận văn tốt nghiệp
0112049 - 0112322
$user.name
#end
Trên trang user.htm hiển thị danh sách người dùng như sau:
Trong ví dụ trên, khi action getlist được gọi, nó sẽ lấy ra danh sách các
người dùng và trả về trang user.htm. 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
$listUsers. Sau đó, vòng lặp #foreach…#end duyệt từng đối tượng user trong danh
Trang 105 / 137
sách và thực hiện lấy giá trị name của từng đối tượng. Biến $user.name có nghĩa là
Luận văn tốt nghiệp
0112049 - 0112322
velocity tự động thực hiện gọi phương getName() hoặc getname() để lấy giá trị
Trang 106 / 137
name của đối tượng user cho biến $user.name và hiển thị lên trang web.
Luận văn tốt nghiệp
0112049 - 0112322
CHƯƠNG 5: CÀI ĐẶT VÀ THỬ NGHIỆM
1. Cài đặt
1.1 Môi trường phát triển
Công cụ soạn thảo (IDE): Eclipse.
Ngôn ngữ lập trình: Java
Các công nghệ sử dụng: Spring framework, Hibernate, Webwork, Velocity.
1.2 Mô tả chi tiết từng xử lí trong các lớp đối tượng
1.2.1. Interface ReportManager
Gói org.hisp.dhis.rp.report
Lớp định nghĩa các phương thức: HibernateReportManager
Tên phương thức Vào / Ra Mô tả xử lí
addReportFile()
Vào: mã đơn vị y tế, định dạng tập tin báo cáo, ngày gởi báo cáo, mã giai
đoạn, mã loại báo cáo.
Ra: mã báo cáo vừa được lưu vào.
Xử lí:
- Đọc đối tượng period theo mã giai đoạn.
- Đọc đối tượng reporttype theo mã loại báo cáo.
- Đọc đối tượng organizationunit theo mã đơn vị y tế.
- Lấy đối tượng session.
- Khởi tạo đối tượng report với các thuộc tính ở trên.
- Lưu đối tượng report vào cơ sở dữ liệu.
getReportFile()
Vào: mã báo cáo cần lấy.
Ra: đối tượng report.
Xử lí:
Trang 107 / 137
- Lấy đối tượng session.
Luận văn tốt nghiệp
0112049 - 0112322
- Duyệt cơ sở dữ liệu lấy ra đối tượng report có id bằng với mã báo cáo.
getAllReportFile()
Vào: không có.
Ra: iterator các đối tượng report tìm được.
Xử lí:
- Lấy đối tượng session.
- Đọc cơ sở dữ liệu lấy ra tất cả các đối tượng report và đưa vào một iterator.
searchReportFile()
Vào: mã đơn vị y tế, mã giai đoạn, mã loại báo cáo, năm.
Ra: iterator các đối tượng report tìm được.
Xử lí:
- Lấy đối tượng session.
- Tuỳ theo giá trị của các tham số đầu vào, xác định điều kiện tìm kiếm và
đối tượng query phù hợp.
.searchReportFile.orgunitreporttypeperiod> trong tập tin cấu hình ánh
- Đọc đối tượng query xạ. - Gọi phương thức list() của đối tượng query ở trên. - Lấy iterator từ List trả về bởi phương thức ở trên và trả về cho người dùng. permanentDeleteReport() Vào: mã báo cáo cần xoá. Ra: mã lỗi thông báo thành công hoặc thất bại. Xử lí: - Lấy đối tượng session. - Đọc đối tượng report theo điều kiện mã báo cáo truyền vào. - Xoá đối tượng này khỏi cơ sở dữ liệu. - Huỷ tập tin liên quan đến đối tượng này trong ổ cứng. temporaryDeleteReport() Trang 108 / 137 Vào: mã báo cáo cần xoá. Ra: mã lỗi thông báo thành công hoặc có phát sinh lỗi. Xử lí: - Lấy đối tượng session. - Đọc đối tượng report trong cơ sở dữ liệu theo mã báo cáo truyền vào. - Cập nhật thông tin trạng thái xoá của đối tượng này. - Lưu đối tượng này vào trong cơ sở dữ liệu. unDeleteReport() Vào: mã báo cáo. Ra: mã lối cho biết đã thực hiện thành công hay có lỗi phát sinh. Xử lí: - Lấy đối tượng session. - Đọc đối tượng report có id là mã báo cáo truyền vào từ cơ sở dữ liệu. - Cập nhật trạng thái xoá cho đối tượng này là false. - Lưu đối tượng vào cơ sở dữ liệu. getUnDeleteReport() Vào: không có Ra: iterator các đối tượng report có trạng thái xoá là true. Xử lí: - Lấy đối tượng session. - Đọc tất cả các đối tượng trong cơ sở dữ liệu có trạng thái xoá là true vào trong một iterator. - Trả kết quả tìm được về cho người dùng hoặc các xử lí khác. checkingPeriodRelation() Vào: mã loại giai đoạn Ra: 0: không tồn tại đối tượng report nào liên quan đến đối tượng period có id bằng giá trị của tham số mã giai đoạn ở trên. Ngược lại là 1. Xử lí: - Lấy đối tượng session. Trang 109 / 137 - Gọi đối tượng query .checkingPeriodRelation.period> đã được định nghĩa trong tập tin cấu hình ánh xạ ReportFile.hbm.xml. - Gọi phương thức list() của đối tượng query ở trên. Nếu List trả về không có chứa bất kì đối tượng nào thì trả về 0. Ngược lại trả về 1. checkingPeriodTypeRelation() Vào: mã loại giai đoạ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. Ngược lại là 1. Xử lí: - Lấy đối tượng session. checkingPeriodTypeRelation.periodtype> đã được định nghĩa trong tập - Gọi đối tượng query tin cấu hình ánh xạ ReportFile.hbm.xml. - Gọi phương thức list() của đối tượng query ở trên. Nếu List trả về không có chứa bất kì đối tượng nào thì trả về 0. Ngược lại trả về 1. Bảng 5.1: Chú giải interface ReportManager 1.2.2. Interface ReportTypeManager Gói org.hisp.dhis.rp.reporttype Lớp định nghĩa các phương thức: HibernateReportTypeManager Tên phương thức Vào / Ra Mô tả xử lí addReportType() Vào: tên loại báo cáo. Ra: mã loại báo cáo vừa được lưu vào. Xử lí: - Lấy đối tượng session. - Khởi tạo đối tượng reporttype với name là giá trị đầu vào. - Lưu đối tượng reporttype này vào cơ sở dữ liệu. Trang 110 / 137 getReportType() Vào: mã loại báo cáo cần lấy. Ra: đối tượng reporttype. Xử lí: - Lấy đối tượng session. - Duyệt cơ sở dữ liệu lấy ra đối tượng reporttype có id bằng với mã báo cáo. getAllReportType() Vào: không có. Ra: List các đối tượng reporttype tìm được. Xử lí: - Lấy đối tượng session. - Đọc cơ sở dữ liệu lấy ra tất cả các đối tượng reporttype trả về List các đối tượng tìm được cho người dùng. delReportType() Vào: mã loại báo cáo cần xoá. Ra: mã lỗi cho biết đã xoá thành công hay có lỗi phát sinh. Xử lí: - Lấy đối tượng session. - Xoá đối tượng reporttype có id bằng với mã loại báo cáo truyền vào bằng phương thức delete() của session. Bảng 5.2: Chú giải interface ReportTypeManager 1.2.3. Interface OrganizationStore Gói: org.hisp.dhis.organizationstore. Lớp định nghĩa các phương thức: HibernateOrganizationStore Tên phương thức Vào / Ra Mô tả xử lí addOrgUnit() Vào: tên đơn vị y tế, mã đơn vị y tế cấp cha của nó (nếu có) Ra: mã đơn vị y tế vừa được lưu vào. Xử lí: Trang 111 / 137 - Lấy đối tượng session. - Khởi tạo đối tượng organizationunit với name bằng giá trị của tham số truyền vào. - Lưu đối tượng orgunit trên vào cơ sở dữ liệu. getOrgUnit() Vào: mã đơn vị y tế cần lấy Ra: đối tượng organizationunit Xử lí: - Lấy đối tượng session. - Duyệt cơ sở dữ liệu lấy ra đối tượng organizationunit có id bằng với mã báo cáo. getAllOrganizationUnit() Vào: không có. Ra: iterator các đối tượng organizationunit tìm được. Xử lí: - Lấy đối tượng session. - Đọc cơ sở dữ liệu lấy ra tất cả các đối tượng organizationunit và đưa vào một iterator. getAllRootOrgUnit() Vào: không có Ra: iterator các đối tượng organizationunit tìm được. Xử lí: - Lấy đối tượng session. - Lấy các đối tượng organizationunit trong cơ sở dữ liệu có parent là null và trả về một List cho người dùng. delOrgUnit() Vào: mã đơn vị y tế cần xoá. Ra: mã lỗi thông báo thành công hoặc thất bại. Xử lí: Trang 112 / 137 - Lấy đối tượng session. - Xoá đối tượng organizationunit có id bằng với mã đơn vị y tế truyền vào khỏi cơ sở dữ liệu. Bảng 5.3: Chú giải interface OrganizationStore. 1.2.4. Interface DataStore Gói org.hisp.dhis.datastore Lớp định nghĩa các phương thức: HibernateDataStore Tên phương thức Vào / Ra Mô tả xử lí addPeriodType() Vào: tên loại giai đoạn. Ra: mã loại giai đoạn vừa được thêm vào trong cơ sở dữ liệu Xử lí: - Lấy đối tượng session. - Khởi tạo đối tượng periodtype với name bằng với giá trị của tham số truyền vào. - Lưu đối tượng periodtype vào cơ sở dữ liệu. getPeriodType() Vào: mã loại giai đoạn. Ra: đối tượng periodtype. Xử lí: - Lấy đối tượng session. - Duyệt cơ sở dữ liệu lấy ra đối tượng periodtype có id bằng với mã báo cáo. getAllPeriodType() Vào: không có. Ra: List các đối tượng report tìm được. Xử lí: - Lấy đối tượng session. - Đọc cơ sở dữ liệu lấy ra tất cả các đối tượng periodtype và trả về kết quả cho người dùng hoặc cho các xử lí khác. Trang 113 / 137 delPeriodType() Vào: mã loại giai đoạn Ra: mã lỗi cho biết thành công hay có lỗi phát sinh. Xử lí: - Lấy đối tượng session. - Xoá đối tượng periodtype trong cơ sở dữ liệu thoả điều kiện căn cứ theo giá trị của tham số truyền vào. addPeriod() Vào: ngày bắt đầu, ngày kết thúc, mã loại giai đoạn. Ra: mã giai đoạn của đối tượng period vừa được lưu vào trong cơ sở dữ liệu. Xử lí: - Lấy đối tượng session. - Khởi tạo đối tượng period bao gồm giá trị của các tham số truyền vào ở trên. - Lưu đối tượng period này vào trong cơ sở dữ liệu. getPeriod() Vào: mã giai đoạn cần lấy Ra: đối tượng period. Xử lí: - Lấy đối tượng session. - Đọc đối tượng report trong cơ sở dữ liệu theo mã giai đoạn truyền vào. - Trả về đối tượng period tìm được cho người dùng. delPeriod() Vào: mã giai đoạn. Ra: mã lối cho biết đã thực hiện thành công hay có lỗi phát sinh. Xử lí: - Lấy đối tượng session. - Xoá đối tượng period trong cơ sở dữ liệu có id bằng với giá trị của tham số truyền vào. Trang 114 / 137 getAllPeriodsOfPeriodType() Vào: mã loại giai đoạn Ra: List các đối tượng period tìm được. Xử lí: - Lấy đối tượng session. - Đọc đối tượng periodtype trong cơ sở dữ liệu có id bằng giá trị của tham số truyền vào. - Đọ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. - Trả kết quả tìm được về cho người dùng hoặc các xử lí khác. getAllPeriod() Vào: Không có Ra: List các đối tượng period tìm được. Xử lí: - Lấy đối tượng session. - Đọc tất cả các đối tượng period trong cơ sở dữ liệu và trả về một List các đối tượng cho người dùng hoặc cho các xử lí khác. Bảng 5.4: Chú giải interface DataStore. 1.2.5. Interface UserManager Lớp định nghĩa các phương thức: HibernateUserManager Tên phương thức Vào / Ra Mô tả xử lí addUser() Vào: tên tài khoản, mật khẩu, tên đầy đủ, chức vụ, mã nhóm người dùng, mã đơn vị y tế, active Ra: Mã người dùng của đối tượng user vừa được lưu vào cơ sở dữ liệu. Xử lí: - Đọc đối tượng group theo mã nhóm người dùng. - Đọc đối tượng organizationUnit theo mã đơn vị y tế. - Lấy đối tượng session. Trang 115 / 137 - Khởi tạo đối tượng user với các thuộc tính đã nêu. - Lưu đối tượng user vào cơ sở dữ liệu. getUser() Vào: mã người dùng Ra: đối tượng người dùng Xử lý: - Lấy đối tượng session - Đọc đối tượng user theo mã người dùng cung cấp -Trả đối tượng user tìm được cho người dùng. delUser() Vào: mã người dùng Ra: mã lỗi cho biết thực hiện thành công hay không thành công. Xử lý: - Lấy đối tượng session. - Xoá đối tượng user có id là mã người dùng truyền vào. getUserActive() Vào: tên tài khoản, mật khẩu Ra: Đối tượng người dùng Xử lí: - Lấy đối tượng session - Đọc đối tượng session đã được kích hoạt (active =true) có username và password là tên tài khoản và mật khẩu đã cung cấp - Trả về đối tượng người dùng tìm được. getAllUser() Vào: Không có Ra: iterator các đối tượng người dùng Xử lí: - Lấy đối tượng session - Đọc tất cả các user trong cơ sở dữ liệu và trả về danh sách các đối tượng Trang 116 / 137 người dùng, đưa vào iterator. getAllUserByActive() Vào: điều kiện lọc: active Ra: iterator các đối tượng thoả điều kiện active Xử lí: - Lấy đối tượng session - Đọ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. getAllUserByLevelGroupandOrgUnit() Vào: mã nhóm người dùng và mã đơn vị y tế Ra: list các người dùng thuộc đơn vị y tế và thuộc nhóm người dùng có cấp thấp hơn cấp của nhóm người dùng này. Xử lí: - Đọc đối tượng group theo mã nhóm người dùng cung cấp. - Đọc đối tượng organizationunit theo mã đơn vị y tế cung cấp. - Lấy biến session - Đọ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. getUserByOrgUnit() Vào: mã đơn vị y tế Ra: list các đối tượng user Xử lí: - Đọc đối tượng organizationunit theo mã đơn vị y tế - Lấy biến session - Đọc tất cả các đối tượng user có orgunitid là mã đơn vị y tế nêu trên. registerUser() Vào: tên tài khoản, mật khẩu, tên đầy đủ, chức vụ, mã đơn vị y tế Ra: Mã người dùng mới được lưu vào. Xử lí: Trang 117 / 137 - Đọc đối tượng organizationunit theo mã đơn vị y tế nhận vào - Lấy biến session -Khởi tạo đối tượng user mới theo các thuộc tính đã cung cấp (mặc định là group: null và active là false - Lưu đối tượng user vừa tạo vào cơ sở dữ liệu. updateUser() Vào: mã người dùng, mật khẩu cũ, mật khẩu mới, xác nhận mật khẩu mới Ra: Đối tượng user đã cập nhật Xử lí: - Đọc đối tượng user có mã người dùng đã cung cấp. - Lấy biến session - Kiểm tra mật khẩu cũ với mật khẩu người dùng nhập vào. - Kiểm tra và xác nhận mật khẩu mới. - Lưu đối tượng user với mật khẩu mới. activeUser() Vào: mã người dùng Ra: đối tượng người dùng đã được kích hoạt Xử lý: - Đọc đối tượng user theo mã người dùng đã cung cấp - Lấy biến session - Cập nhật thuộc tính active của user thành true - Lưu đối tượng user lại với trạng thái mới. getGoup() Vào: mã nhóm người dùng Ra: đối tượng nhóm người dùng Xử lí: - Lấy biến session - Đọc đối tượng group theo mã nhóm người dùng đã cung cấp. Trang 118 / 137 - Trả đối tượng group tìm được cho người dùng getAllGroup() Vào: Không có Ra: list các đối tượng nhóm người dùng Xử lí: - Lấy biến session - Đọc tất cả các đối tượng group có trong cơ sở dữ liệu, và trả về list các đối tượng nhóm người dùng. getListGroupByLevel() Vào: cấp của nhóm người dùng Ra: list các đối tượng nhóm người dùng có cấp thấp hơn cấp nêu trên. Xử lí: - Lấy biến session - Đọc tất cả cá đối tượng group có trong cơ sở dữ liệu mà có level lớn hơn level truyền vào, trả về list các đối tượng. getListGroupMinLevel() Vào: Không có Ra: list các đối tượng nhóm người dùng có cấp thấp nhất Xử lí: - Lấy biến session - Tìm cấp thấp nhất của tất cả các nhóm người dùng - Đọc tất cả các đối tượng group mà có level là thấp nhất tìm được ở trên, trả về list các đối tượng. addGroup() Vào: tên nhóm người dùng, mô tả nhóm người dùng, cấp của nhóm Ra: Mã nhóm người dùng mới được lưu vào Xử lí: - Lấy đối tượng session - Khởi tạo đối tượng group theo các thông tin về tên, mô tả và cấp nêu trên Trang 119 / 137 - Lưu đối tượng nhóm người dùng mới vừa được tạo. delGroup() Vào: mã nhóm người dùng Ra: mã lỗi thông báo thực hiện thành công hay không thành công Xử lí: - Lấy đối tượng session. - Xoá đối tượng group có id là mã nhận vào ở trên getRole() Vào:mã quyền sử dụng Ra: Đối tượng quyền sử dụng Xử lí: - Lấy biến session - Đọc và trả về đối tượng role tìm được tương ứng với mã quyền ở trên. getAllRole() Vào: Không có Ra: list các đối tượng quyền sử dụng Xử lí: - Lấy biến session - Đọc tất cả các đối tượng role có trong cơ sở dữ liệu và trả về list các đối tượng. addRole() Vào: tên quyền, lớp action Ra: Mã quyền mới được lưu vào Xử lí: - Lấy biến session. - Khởi tạo đối tượng role mới với thuộc tính đã nêu. - Lưu đối tượng vào cơ sở dữ liệu. delRole() Vào: mã qụyền Ra: Mã lỗi xác định thực hịên thành công hay không. Trang 120 / 137 Xử lí: - Lấy biến session. - Xoá đối tượng role có id là mã quyền truyền vào. Trả về mã lỗi. getRoleType() Vào:mã nhóm quyền sử dụng Ra: Đối tượng nhóm quyền sử dụng Xử lí: - Lấy biến session - Đọc và trả về đối tượng roletype tìm được tương ứng với mã nhóm quyền ở trên. getAllRoleType() Vào: Không có Ra: list các đối tượng nhóm quyền sử dụng Xử lí: - Lấy biến session - Đọc tất cả các đối tượng roletype có trong cơ sở dữ liệu và trả về list các đối tượng. addRoleType() Vào: tên nhóm quyền Ra: Mã nhóm quyền mới được lưu vào Xử lí: - Lấy biến session. - Khởi tạo đối tượng roletype mới với thuộc tính đã nêu. - Lưu đối tượng vào cơ sở dữ liệu. delRoleType() Vào: mã nhóm qụyền Ra: Mã lỗi xác định thực hịên thành công hay không. Xử lí: - Lấy biến session. Trang 121 / 137 - Xoá đối tượng roletype có id là mã nhóm quyền truyền vào. Trả về mã lỗi. addRoleOfRoleType() Vào: mã nhóm quyền, mã quyền Ra: đối tượng nhóm quyền Xử lí: - Đọc đối tượng roletype có id là mã nhóm quyền truyền vào. - Đọc đối tượng role có id là mã quyền truyền vào. - Lấy biến session. - Thêm đối tượng role vào đối tượng roletype tại roles. - Lưu các nội dung cập nhật của roletype. removeRoleOfRoleType() Vào: mã nhóm quyền, mã quyền Ra: đối tượng nhóm quyền Xử lí: - Đọc đối tượng roletype có id là mã nhóm quyền truyền vào. - Đọc đối tượng role có id là mã quyền truyền vào. - Lấy biến session. - Xoá bớt đối tượng role trong đối tượng roletype tại roles. - Lưu các nội dung cập nhật của roletype. addRoleOfGroup() Vào: mã nhóm người dùng, mã quyền Ra: đối tượng nhóm người dùng Xử lí: - Đọc đối tượng group có id là mã nhóm người dùng truyền vào. - Đọc đối tượng role có id là mã quyền truyền vào. - Lấy biến session. - Thêm đối tượng role vào đối tượng group tại roles. - Lưu các nội dung cập nhật của group. removeRoleOfGroup() Trang 122 / 137 Vào: mã nhóm người dùng, mã quyền Ra: đối tượng nhóm người dùng Xử lí: - Đọc đối tượng group có id là mã nhóm người dùng truyền vào. - Đọc đối tượng role có id là mã quyền truyền vào. - Lấy biến session. - Xoá đối tượng role trong đối tượng group tại roles. - Lưu các nội dung cập nhật của group. getListRoleOfGroup() Vào: mã nhóm người dùng Ra: list các quyền Xử lí: - Đọc đối tượng group có id là mã nhóm người dùng truyền vào. - Lấy biến session - Lấy danh sách các đối tượng role trong đối tượng group, đưa vào Set, từ đó chuyển sang dạng list các đối tượng role. getListRoleTypeOfGroup() Vào: mã nhóm người dùng Ra: list các nhóm quyền mà nhóm người dùng có được. Xử lí: - Đọc đối tượng group có id là mã nhóm người dùng truyền vào. - Lấy biến session - Lấy list các đối tượng role mà nhóm người dùng có thể thực hiện. - Lấy list các đối tượng roletype tương ứng với từng role tìm được trên. - Trả về list các đối tượng roletype mà nhóm người dùng có thể thực hiện thông qua đối tượng trung gian là role. getListRoleNotOfGroup() Vào: mã nhóm người dùng Ra: list các quyền Trang 123 / 137 Xử lí: - Đọc đối tượng group có id là mã nhóm người dùng truyền vào. - Lấy biến session - Lấy danh sách các đối tượng role không thuộc đối tượng group, trả về list các đối tượng role. getListRoleOfRoleType() Vào: mã nhóm quyền Ra: list các quyền Xử lí: - Đọc đối tượng roletype có id là mã nhóm quyền truyền vào. - Lấy biến session - Lấy danh sách các đối tượng role trong đối tượng roletype, đưa vào Set, từ đó chuyển sang dạng list các đối tượng role. Trang 124 / 137 Bảng 5.5: Chú giải interface UserManager. 1.3. Nội dung xây dựng các tập tin ánh xạ đối tượng sang cơ sở dữ liệu quan hệ. name="periodType" class="org.hisp.dhis.datastore.PeriodType"/>
1.3.1. Đối tượng period (Period.hbm.xml)
1.3.2. Đối tượng periodtype (PeriodType.hbm.xml) name="org.hisp.dhis.data.reportType.ReportType" table="ReportType"> Trang 125 / 137 1.3.3. Đối tượng reporttype (ReportType.hbm.xml) name="org.hisp.dhis.service.report.ReportFile" table="ReportFile"> column="reporttype" class="org.hisp.dhis.data.reportType.ReportType" cascade="save-update"/> name="period" class="org.hisp.dhis.datastore.Period"/> column="OrganizationUnit" class="org.hisp.dhis.organizationstore.OrganizationUnit" cascade="save-update"/> from ReportFile as report where report.orgUnit= ? and report.reportType = ? and report.period in (from Period period where period.periodType = ?) and report.delStatus = false and year(report.date)= ? order by report.id desc]]> Trang 126 / 137 1.3.4. Đối tượng reportfile (Report.hbm.xml) name="org.hisp.dhis.service.report.ReportManager.searchReportFile .orgunitreporttype">
from ReportFile as report where report.orgUnit= ? and report.reportType= ? and report.delStatus = false and year(report.date)= ? order by report.id desc]]> from ReportFile as report where report.orgUnit= ? and report.period in (from Period period where period.periodType = ?) and report.delStatus = false and year(report.date)= ? order by report.id desc]]> name="org.hisp.dhis.service.report.ReportManager.searchReportFile .reporttypeperiod">
from ReportFile as report where report.reportType= ? and report.period in (from Period period where period.periodType = ?) and report.delStatus = false and year(report.date)= ? order by report.id desc]]> from ReportFile as report where report.orgUnit=? and report.delStatus = false and year(report.date)= ? order by report.id desc]]> from ReportFile as report where report.period in (from Period period where period.periodType = ?) and report.delStatus = false and year(report.date)= ? Trang 127 / 137 order by report.id desc]]> from ReportFile as report where report.reportType= ? and report.delStatus = false and year(report.date)= ? order by report.id desc]]> from ReportFile as report where report.delStatus = false and year(report.date)= ? order by report.id desc]]> from ReportFile as report where report.delStatus = false and report.period in (from Period period where period.periodType = ?)]]> from ReportFile as report where report.period = ? and report.delStatus = false]]> from ReportFile as report where report.reportType.id = ? and report.delStatus = false]]> name="org.hisp.dhis.organizationstore.OrganizationUnit" table="orgunit"> Trang 128 / 137 1.3.5. Đối tượng organizationunit (OrganizationUnit.hbm.xml) class="org.hisp.dhis.organizationstore.OrganizationUnit"/> class="org.hisp.dhis.organizationstore.OrganizationUnit"/> table="orgunitgroup"> table="groupmember"> class="org.hisp.dhis.organizationstore.OrganizationUnit"/> Trang 129 / 137 1.3.6.Đối tượng organizationunitgroup OrganizationUnitGroup.hbm.xml) cascade="save-update" class="org.hisp.dhis.rp.user.Group"/> cascade="save-update" class="org.hisp.dhis.organizationstore.OrganizationUnit"/>
Trang 130 / 137 1.3.7. Đối tượng user (User.hbm.xml) table="RolesOfGroup">
1.3.8. Đối tượng group (Group.hbm.xml) Trang 131 / 137 1.3.9. Đối tượng role (Role.hbm.xml)
table="RolesOfRoleType">
1.3.10. Đối tượng roletype (RoleType.hbm.xml) 2. Thử nghiệm Bạn có thể download Jetty tại địa chỉ: http://sourceforge.net/project/showfiles.php?group_id=7322&package_id=132252 • Cài đặt jetty 5.1.4: Bạn chỉ cần tạo một thư mục và bung nén tất cả vào đó • Chép file dhis-rp-beta.war vào thư mục webapps của Jetty • Chép thư mục chứa file đa ngôn ngữ (src/main/resources/org...) vào trong Trang 132 / 137 thư mục cài Jetty • Chạy trình chủ: Chọn Start -> Run -> gõ cmd để vào cửa sổ dòng lệnh. Đến thư mục cài jetty và gõ: java -jar start.jar để chạy trình chủ Web server. Nếu muốn tắt trình chủ, nhấn Ctr+C • 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 đó, chạy trình duyệt IE hoặc Mozilla. Trên thanh address bar gõ địa chỉ: Trang 133 / 137 http://localhost:8080/initdatabase.action. Mục đích của action này là khởi tạo cơ sở dữ liệu trên bộ nhớ chính. Sau đó người dùng có thể đăng nhập vào hệ thống bằng username: admin/ password: admin để Trang 134 / 137 kiểm tra tất cả các chức năng hiện có của hệ thống. CHƯƠNG 6: NHẬN XÉT VÀ ĐÁNH GIÁ 1. Đánh giá ưu và khuyết điểm. 1.1 Ưu điểm. - Hệ thống được phát triển bằng Java và các công nghệ mã nguồn mở nên không phải quan tâm đến vấn đề bản quyền. - Được xây dựng theo mô hình ba lớp với sự tách biệt về vai trò và chức năng giữa các lớp rất rõ ràng nên dễ bảo trì, sử đổi. - Cung cấp đầy đủ chức năng hỗ trợ người dùng trong việc xây dựng và chia sẻ báo cáo. - Cơ chế phân quyền và kiểm tra quyền hạn người dùng linh hoạt, có thể thay đổi tuỳ thích. - Riêng đối với công việc triển khai hệ thống DHIS 1.3 có thể nói bước đầu đã thành công. Hiện nay tại thành phố đã có 6 quận và 2 bệnh viện thí điểm sử dụng DHIS 1.3 và sử dụng công cụ kết xuất báo cáo (viết bằng VB mà chúng tôi đã thực hiện) để phát sinh báo cáo cho chương trình Bà mẹ. 1.2 Khuyết điểm. - Do đây là lần đầu tiên chúng em đựơc tham gia vào một dự án thực sự mà lại của nước ngoài nên gặp không ít khó khăn về các nguyên tắc làm việc, trao đổi ý kiến. Thêm vào đó là việc tiếp cận cùng lúc rất nhiều công nghệ mới nên kiến thức thu được chỉ đủ để thực hiện đề tài, không mang tính chuyên sâu. - Khả năng áp dụng thực tiễn của chương trình là khá cao. Tuy nhiên, chương trình cần phải được sửa đổi lại để có thể phù hợp với cách thức làm việc và các yêu cầu thực tế phát sinh khác. Vấn đề này nguyên nhân là do hiện nay việc chia sẻ báo cáo trong thực tế được thực hiện thủ công hoặc qua thư từ, chưa thực sự ứng dụng internet hay LAN, do đó khái niệm gửi báo cáo, chia sẻ báo cáo thông qua internet là còn mới mẻ. Chính điều này gây không ít khó khăn cho việc xác định yêu cầu Trang 135 / 137 thực tế của người dù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. 2. Hướng phát triển trong tương lai. Theo kế hoạch của dự án, hiện nay hệ thống DHIS 1.3 đã và đang được triển khai trong toàn thành phố Hồ Chí Minh và Huế (quá trình triển khai kéo dài từ tháng 2 đến hết tháng 7 năm 2005). Hệ thống DHIS 1.3 sẽ bắt đầu được sử dụng sau tháng 7 và kéo dài đến hết năm 2006. Cuối năm 2006, dự án mới có kế hoạch có triển khai hệ thống DHIS 2.0 ở Việt Nam hay không. Một trong những nguyên nhân là tốc độ internet hiện nay ở Việt Nam không cao và cơ sở vật chất về công nghệ thông tin, nguồn nhân lực, chi phí đều rất khó khăn, thói quen của người sử dụng cũng là một trở ngại rất lớn. Do đó, mô đun report portal chỉ dừng lại ở tính năng chia sẻ báo cáo và hỗ trợ kết xuất báo cáo. Trong tương lai, report portal sẽ tích hợp luôn cả chức năng ghi nhận số liệu báo cáo hàng ngày, số liệu thống kê hàng tháng, hàng quí,… phục vụ cho quá trình kết xuất báo cáo (Hiện nay, khả năng kết xuất báo cáo được tách riêng ra một cơ sở dữ liệu khác.). Tương lai, report portal sẽ thực sự trở thành một cổng phân tích dữ liệu y tế hoàn chỉnh với đầy đủ chức năng lưu Trang 136 / 137 trữ số liệu y tế, kết xuất báo cáo và chia sẻ báo cáo giữa các đơn vị y tế. TÀI LIỆU THAM KHẢO 1. Hibernate in Action – Christian Bauer – Gavin King (MANNING 2004) 2. Professional Hibernate – Eric Pugh, Joseph D.Gradecki (WILEY 2005) 3. Better, Faster, Lighter Java – Bruce A. Tate and Justin Gehtland (O’REILLY 2004) 4. Pro Spring 5. Java™ Open Source Programming With XDoclet, JUnit,WebWork, Hibernate - Joe Walnes, Ara Abrahamian, Mike Cannon-Brookes, Pat Lightbody - Copyright © 2004 by Wiley Publishing, Inc., Indianapolis, Indiana 6. Java eXtreme Programming Cookbook – Eric M.Burke & Brian M.Coyner, O’Reilly 7. Professional Java Tools for Extreme Programming – Copyright 2004 by Wily Dreamtech India(P) Ltd – Richard Hightower, Warner Onstine, Paul Visan, Damon Payne, Joseph D. Gradecki, Kate Rhodes, Robert Watkins, Erik Mede. Các website tham khảo: 1. http://www.hibernate.org 2. www.hisp.info 3. www.opensymphony.com/webwork 4. http://www.junit.org Trang 137 / 137 5. www.springframework.orgLuận văn tốt nghiệp
0112049 - 0112322
Luận văn tốt nghiệp
0112049 - 0112322
Luận văn tốt nghiệp
0112049 - 0112322
Luận văn tốt nghiệp
0112049 - 0112322
Luận văn tốt nghiệp
0112049 - 0112322
Luận văn tốt nghiệp
0112049 - 0112322
Luận văn tốt nghiệp
0112049 - 0112322
Luận văn tốt nghiệp
0112049 - 0112322
Luận văn tốt nghiệp
0112049 - 0112322
Luận văn tốt nghiệp
0112049 - 0112322
Luận văn tốt nghiệp
0112049 - 0112322
Luận văn tốt nghiệp
0112049 - 0112322
Luận văn tốt nghiệp
0112049 - 0112322
Luận văn tốt nghiệp
0112049 - 0112322
Luận văn tốt nghiệp
0112049 - 0112322
Luận văn tốt nghiệp
0112049 - 0112322
Luận văn tốt nghiệp
0112049 - 0112322
Luận văn tốt nghiệp
0112049 - 0112322
Luận văn tốt nghiệp
0112049 - 0112322
Luận văn tốt nghiệp
0112049 - 0112322
Luận văn tốt nghiệp
0112049 - 0112322
Luận văn tốt nghiệp
0112049 - 0112322
Luận văn tốt nghiệp
0112049 - 0112322
Luận văn tốt nghiệp
0112049 - 0112322
Luận văn tốt nghiệp
0112049 - 0112322
Luận văn tốt nghiệp
0112049 - 0112322
Luận văn tốt nghiệp
0112049 - 0112322
Luận văn tốt nghiệp
0112049 - 0112322
Luận văn tốt nghiệp
0112049 - 0112322