Tải bản đầy đủ (.pdf) (101 trang)

DTTX_CNTT_xay dung he thong tra cuu loi lap trinh

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (5.81 MB, 101 trang )

<span class='text_page_counter'>(1)</span><div class='page_container' data-page=1>

HUTECH


<b>KHOA CÔNG NGH</b>

<b>Ệ THÔNG TIN </b>



<b>= = =  = = = </b>



<b>LU</b>

<b>ẬN VĂN TỐT NGHIỆP</b>



<i>ĐỀ TÀI: </i>


<b>XÂY D</b>

<b>ỰNG HỆ THỐNG HỖ TRỢ </b>


<b>TRA C</b>

<b>ỨU LỖI LẬP TRÌNH </b>



<b>GVHD : NGUYỄN CHÁNH THÀNH </b>


<b>SVTH : NGUYỄN DUY HÒA – MSSV: 10102062 </b>
<b> VÕ ĐỨC HIỀN – MSSV: 10102056 </b>
<b>LỚP : 01CNPM </b>


</div>
<span class='text_page_counter'>(2)</span><div class='page_container' data-page=2>

HUTECH



Luận văn tốt nghiệp là một trong những sự kiện
quan trong đời người , và ngày hôm nay chúng em đã
hoàn thành được điều ấy. Và điều mà chúng em muốn nói
đến đầu tiên là lời chân thành cảm ơn sâu sắc đến bậc


thầy cô, nhất là tất cả thầy cô giáo trường Đại Học


Kỹ thuật Công Nghệ, đặc biệt là đội ngũ thầy cô giáo


khoa Công Nghệ Thông Tin đã tận tình dạy dỗ, truyền



đạt những kiến thức vơ cùng q báo để cho chúng em


có thể hồn thành được đề án tốt nghiệp như ngày hơm


nay.


Và đặc biệt cảm ơn đến thầy Nguyễn Chánh Thành,
người đã tận tình hướng dẫn chúng em thực hiện tốt đề
tài này.


Và cũng xin gởi lời cảm ơn đến các bạn, những
người đã có những gớp ý chân thành và quý giá trong


quá trình thực hiện đề tài này.


Dù có nhiều nổ lực trong quá trình hiện th ực đề


tài, nhưng ở lần đầu tiên nên cũng khó tránh khỏi
những vương mắc và sai sót. Chúng em rất mong nhận
được những ý kiến đóng góp, và sự hướng dẫn chân tình


của quý thầy cô.


Xin chân thành cảm ơn.


</div>
<span class='text_page_counter'>(3)</span><div class='page_container' data-page=3>

HUTECH


<b>Chương I: GIỚI THIỆU VỂ ĐỀ TÀI1 </b>


<b>I. Giới thiệu1 </b>
<b>II.Chức năng1 </b>



<b>Chương II: KIẾN THỨC MÔI TRƯỜNG PHÁT TRIỂN VÀ ADD-IN2 </b>
<b>I. Môi trường phát triển DTE2 </b>


<b>I.1. Đối tượng DTE2 </b>


<b>I.2. Thêm một tham chiếu tới không gian tên EnvDTE4 </b>
<b>I.3. Tham chiếu đối tượng DTE 5 </b>


<b>I.4. Những đối tượng chính trong project5 </b>
<b>I.4.1. Đối tượng Events5 </b>


<b>I.4.2. Đối tượng BuildEvents6 </b>
<b>I.4.3. Đối tượng CommandEvents7 </b>
<b>I.4.4. Đối tượng TaskListEvents8 </b>


<b>I.4.5. Đối tượng OutputWindowEvents9 </b>
<b>I.4.6. Đối tượng Window10 </b>


<b>I.4.7. Đối tượng OutputWindowPane10 </b>
<b>II. </b> <b>Kỷ thuật Add-In11 </b>


<b>II.1. Tạo một đối tượng Add-in12 </b>


<b>II.2. Các bước tạo đối tượng Add-in bằng Wizard12 </b>
<b>II.3. Kết quả các lệnh của đối tượng Add-in14 </b>


<b>II.4. Để phục hồi các lệnh của đối tượng Add-in tới menu14 </b>
<b>II.5. Điều khiển đối tượng Add-In với Add-In Manager15 </b>
<b>II.6. Để nạp một đối tượng Add-In ngay tức thì16 </b>



<b>II.7. Chỉ định Add-in nạp lên khi môi trường khởi động16 </b>


<b>II.8. Triệu gọi các đối tượng Add-In thơng qua dịng lệnh Devenv17 </b>
<b>II.9. Đăng ký đối tượng Add-In17 </b>


<b>II.10.Các sự kiện chính trong Add-In project19 </b>
<b>II.10.1. Phương thức OnConnect19 </b>


<b>II.10.2. Phương thức OnStartupComplete21 </b>
<b>II.10.3. Phương thức OnAddInsUpdate22 </b>
<b>II.10.4. Phương thức OnBeginShutdown23 </b>
<b>II.10.5. Phương thức OnDisconnection24 </b>
<b>Chương III: KIẾN THỨC WEB SERVICE26 </b>
<b>I. Giới thiệu về Web Service26 </b>


<b>I.1. Vấn đề chia sẽ dữ liệu26 </b>


<b>I.2. Giải quyết bằng phát triển các ứng dụng phân tán26 </b>
<b>I.3. Web Service27 </b>


</div>
<span class='text_page_counter'>(4)</span><div class='page_container' data-page=4>

HUTECH


<b>II.2. Các thành phần của Web service29 </b>


<b>II.2.1. Web service Directories29 </b>
<b>II.2.2. Web service Discovery30 </b>
<b>II.2.3. Web service Description30 </b>
<b>II.2.4. Web service Wire Format30 </b>


<b>II.3. Giao tiếp giữa Client và Web service31 </b>


<b>III. Giao thức triệu gọi Web Services31 </b>


<b>III.1. </b> <b>HTTP-GET31 </b>
<b>III.2. </b> <b>HTTP-POST33 </b>
<b>III.3. </b> <b>SOAP33 </b>


<b>IV. Xây dựng, triển khai và sử dụng Web Service34 </b>
<b>IV.1. </b> <b>Xây dựng Web service34 </b>


<b>IV.2. </b> <b>Triển khai Web service36 </b>


<b>IV.2.1. Triển khai Web service bằng cách copy36 </b>


<b>IV.2.2. Các thành phần được triển khai trong Web service37 </b>
<b>IV.2.3. Sử dụng Web service38 </b>


<b>IV.2.3.1 Thêm Web Reference vào ứng dụng khách(client)38 </b>
<b>IV.2.3.2 Phát sinh lớp Proxy40 </b>


<b>IV.2.3.3 Tạo một đối tượng của lớp Proxy41 </b>


<b>IV.2.3.4 Truy xuất Web Service sử dụng một đối tượng proxy42 </b>
<b>V. Bảo mật42 </b>


<b>V.1. Authentication43 </b>


<b>V.1.1. Anonymous Access44 </b>
<b>V.1.2. Windows Authentication45 </b>


<b>V.1.2.1. Role - Base Security45 </b>


<b>V.1.2.2. Basic Authentication46 </b>
<b>V.1.2.3. Digest Authentication46 </b>


<b>V.1.2.4. Integrated Windows Authentication47 </b>
<b>V.1.3. Passport Authentication47 </b>


<b>V.1.4. Form Authentication47 </b>
<b>V.1.4.1. Login Form48 </b>
<b>V.1.4.2. Định dạng IIS48 </b>


<b>V.1.4.3. Định dạng ASP.NET49 </b>
<b>V.2. Authorization49 </b>


<b>V.2.1. File Authorization49 </b>
<b>V.2.2. URL Authorization50 </b>


<b>Chương IV: PHÂN TÍCH - THIẾT KẾ - THỰC HIỆN52 </b>
<b>I. Phân tích52 </b>


<b>I.1. Nhiệm vụ52 </b>
<b>I.2. Phương án52 </b>


<b>I.2.1. Xây dựng ứng dụng Admin Website </b>
<b> </b> <b>và Web Service theo mơ hình đa tầng52 </b>


</div>
<span class='text_page_counter'>(5)</span><div class='page_container' data-page=5>

HUTECH


<b>I.2.4. Ngơn ngữ sử dụng: ASP.NET54 </b>


<b>I.2.5. Phân tích các nghiệp vụ của hệ thồng bằng ngôn ngữ UML55 </b>
<b>I.2.6. Xây dựng add-in55 </b>



<b>II. Thiết kế và thực hiện56 </b>
<b>II.1. Thiết kế cơ sở dữ liệu56 </b>


<b>II.1.1. Biểu đồ quan hệ56 </b>


<b>II.1.2. Các bảng dữ liệu của hệ thống58 </b>
<b>II.1.2.1. Bảng ErrorCode58 </b>


<b>II.1.2.2. Bảng ErrorItems58 </b>
<b>II.1.2.3. Bảng Items58 </b>
<b>II.1.2.4. Bảng Chapters58 </b>
<b>II.1.2.5. Bảng Parts59 </b>
<b>II.1.2.6. Bảng Books59 </b>
<b>II.1.2.7. Bảng Users59 </b>
<b>II.1.3. Các StoreProcedure59 </b>
<b>II.2. Phân tích hệ thống61 </b>


<b>II.2.1. Sơ đồ họat động61 </b>


<b> II.2.2 Sơ đồ tuần tự chức năng của Add-in63 </b>
<b> II.2.3. Sơ đồ tuần tự chức năng Web Admin64 </b>


<b>II.2.3.1. Sơ đồ tuần tự chức năng quản lý sách64 </b>


<b>II.2.3.2. Sơ đồ tuần tự chức năng quản lý phần trong sách65 </b>
<b>II.2.3.3. Sơ đồ tuần tự chức năng quản lý chương66 </b>


<b>II.2.3.4. Sơ đồ tuần tự chức năng quản lý mục67 </b>
<b>II.2.3.5. Sơ đồ tuần tự chức năng quản lý lỗi68 </b>



<b>II.2.3.6. Sơ đồ tuần tự chức năng quản lý thêm mục vào lỗi69 </b>
<b>II.2.3.7. Sơ đồ tuần tự chức năng quản lý chi tiết lỗi70 </b>


<b> II.2.4. Sơ đồ tuần tự cho chức năng tìm kiếm trong Web Client71 </b>
<b>II.3. Phần Add-In72 </b>


<b>II.3.1. Cài đặt phần Add-in72 </b>


<b>II.3.2. Thêm đối tượng Add-in thông qua hộp thoại Add-in Manager73 </b>
<b>II.3.3. Hiển thị danh sách lỗi73 </b>


<b>II.3.4. Hiển trị trang thông tin chi tiết lỗi74 </b>
<b>II.4. Phần Web Admin75 </b>


<b>II.4.1. Màn hình chính quản lý sách75 </b>
<b>II.4.2. Màn hình chi tiết sách76 </b>


<b>II.4.3. Màn hình thêm sách mới76 </b>
<b>II.4.4. Màn hình xố sách77 </b>


<b>II.4.5. Màn hình chỉnh sửa sách78 </b>
<b>II.4.6. Màn hình quản lý phần(Parts)78 </b>
<b>II.4.7. Màn hình quản lý chương79 </b>
<b>II.4.8. Màn hình quản lý mục80 </b>


<b>II.4.9. Màn hình chi tiết và cập nhật nội dung mục80 </b>
<b>II.4.10.Màn hình thêm mục mới81 </b>


</div>
<span class='text_page_counter'>(6)</span><div class='page_container' data-page=6>

HUTECH



<b>II.4.14.Màn hình thêm mục cho lỗi83 </b>


<b>II.5. Phần Web Client84 </b>


<b>II.5.1. </b> <b>Màn hình tìm kiếm84 </b>


<b>II.5.2. </b> <b>Màn hình nội dung mục liên quan đến lỗi85 </b>
<b>II.6. Phần Web Service85 </b>


<b>II.6.1. </b> <b>Tổng quát85 </b>


<b>II.6.2. </b> <b>Chi tiết các phương thức86 </b>
<b> </b>


<b>Chương V: ĐÁNH GIÁ DỰ ÁN VÀ HƯỚNG PHÁT TRIỂN87 </b>
<b>I. </b> <b>Đánh giá87 </b>


</div>
<span class='text_page_counter'>(7)</span><div class='page_container' data-page=7>

HUTECH



Hình 2.1: Mơ hình đối tượng tự động trên Visual Studio .NET3


H ình 2.2: Tạo Add-in project bằng trình Visual Studio Add-in Wizard12
H ình 2.3: Hộp thoại Add-In Manager15


H ình 3.1: Các thành phần của Web service giúp client xác định và gọi các
phương thức của Web service30


Hình 3.2: Thứ tự trong lớp HttpWebClientProtocol.32
H ình 3.3: Hộp thoại New Project34



H ình 3.4: Hộp thoại New Project35


H ình 3.5 Màn hình project Web Services35
H ình 3.6: Màn hình cấu hình IIS36


H ình 3.7: Hộp thoại Properties của trang web37
H ình 3.8: Màn hình Add Web Reference39
H ình 3.9: Hộp thoại Add Web Reference39
H ình 3.10: Hộp thoại Add Web Reference40


H ình3.11: Màn hình hiển thị các file trong Web Services41
Hình 3.12: Tổng quan về bảo mật.42


Hình 3.13: Hộp thoại default Web Site Properties44
Hình 3.14: Hộp thoại Authentication Methods44
Hình 3.15: Mànhình Computer Management46
Hình 3.16: Access Control List50


H ình 4.1: Biểu đồ quan hệ của hệ thống56
Hình 4.2: Sơ đồ hoạt động của hệ thống61


H ình 4.3: Sơ đồ tuần tự chức năng của Add-in63
Hình 4.4: Sơ đồ tuần tự chức năng quản lý sách64


</div>
<span class='text_page_counter'>(8)</span><div class='page_container' data-page=8>

HUTECH



Hình 4.11: Sơ đồ tuần tự chức năng tìm kiếm trong Web Client71
Hình 4.12: Cài đặt hệ thống Add-in v ào Visual Studio .NET 200372
Hình 4.13: Hộp thoại Add-In Manager73



Hình 4.14: Màn hình hiển thị Tab Add-In73
Hình 4.15: Màn hình hiển thị trang chi tiết lỗi74
Hình 4.16: Màn hình quản lý sách75


Hình 4.17: Màn hình hiển thị chi tiết sách76
Hình 4.18: Màn hình thêm sách mới76
Hình 4.19: Màn hình xố sách77
Hình 4.20: Màn hình cập nhật sách78


Hình 4.21: Màn hình quản lý phần trong sách78
Hình 4.22: Màn hình quản lý chương trong sách79
Hình 4.23: Màn hình quản lý mục trong sách80
Hình 4.24: Màn hình cập nhật mục80


Hình 4.25: Màn hình thêm mục mới81
Hình 4.27: Màn hình quản lý lỗi82
Hình 4.28: Màn hình cập nhật lỗi82
Hình 4.29: Màn hình xố lỗi83


Hình 4.30: Màn hình thêm mục vào lỗi84
Hình 4.31: Màn hình tra cứu lỗi84


</div>
<span class='text_page_counter'>(9)</span><div class='page_container' data-page=9>

HUTECH



B<b>ảng 2.1: Sự kiện và hoạt động của đối tượng BuildEvents6 </b>
Bảng 2.2: Sự kiện và hoạt động của đối tượng CommandEvents7
Bảng 2.3: Sự kiện và hoạt động của đối tượng TaskListEvents8
Bảng 2.4: Sự kiện và hoạt động của đối tượng OutputWindEvents9
Bảng 2.5: Các tuỳ chọn cho load đối tượng Add-in18



Bảng 2.6: Ý ngh ĩa của cờ CommandPreload18


Bảng 3.1: Kiểu và các giá trị của thuộc tính trong authentication43
Bảng 3.2: Chức năng phân quyền trong bảo mật Authorization51
Bảng 4.1: B ảng ErrorCode


Bảng 4.2: Bảng ErrorItems
Bảng 4.3: Bảng Items
B ảng 4.4: Bảng Chapters
B ảng 4.5: Bảng Parts
B ảng 4.6: Bảng Books
B ảng 4.7: Bảng Users


Bảng 4.8: B ảng Các Store Procedure


Bảng 4.9: Chức năng các control trong màn hình quản lý sách75
B<b>ảng 4.10: Chức năng các control trong màn hình chi tiết sách76 </b>
Bảng 4.11: Chức năng các control trong màn hình thêm sách mới77
Bảng 4.12: Chức năng các control trong màn hình xố sách77
B<b>ảng 4.13: Chức năng các control trong màn hình cập nhật sách78 </b>


B<b>ảng 4.14: Chức năng các control trong màn hình quản lý phần trong sách79 </b>
B<b>ảng 4.15: Chức năng các control trong màn hình quản lý chương trong sách79 </b>
B<b>ảng 4.16: Chức năng các control trong màn hình quản lý mục trong sách80 </b>
Bảng 4.7: Chức năng các control trong màn hình cập nhật mục81


</div>
<span class='text_page_counter'>(10)</span><div class='page_container' data-page=10>

HUTECH



</div>
<span class='text_page_counter'>(11)</span><div class='page_container' data-page=11>

HUTECH




<b>BỘ GIÁO DỤC & ĐÀO TẠO </b> <b>CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM </b>
<b> ĐẠI HỌC DL KỸ THUẬT CÔNG NGHỆ TP.HCM </b> <b>ĐỘC LẬP – TỰ DO – HẠNH PHÚC </b>


<b>144/24 Điện Biên Phủ - Q. Bình Thạnh - TPHCM </b> <b>_____oOo_____ </b>
<b>ĐT: 5120254 - 5120294 </b>


<b>Khoa: Công Nghệ Thông Tin </b>
<b>Bộ môn: Công nghệ phần mềm </b>


<b>NHI</b>

<b>ỆM VỤ THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP </b>



<i>Chú ý: Sinh viên phải dán nhiệm vụ bản này vào trang thứ nhất </i>
<i>trong tập báo cáo đố án tốt nghiệp </i>


H<b>ọ và tên : Nguyễn Duy Hoà </b> <b>MSSV : 10102062 </b>


<b>Võ Đức Hiền </b> <b>MSSV : 10102056 </b>


<b>Ngành : Công nghệ phần mềm </b> L<b>ớp : 01CNPM </b>
<b>1. Đầu đề đồ án tốt nghiệp : </b>


<b>XÂY D</b>

<b>ỰNG HỆ THỐNG HỖ TRỢ TRA CỨU LỖI LẬP TRÌNH </b>


<b>2. Nhiệm vụ : </b>


<b>a. Dữ liệu ban đầu: </b>


Tìm hiểu Web Service, môi trường phát triển Visual Studio .NET 2003 và
kỹ thuật Add-in.


<b>b. Nội dung: </b>



<b> Phân tích thiết kế các yêu cầu của hệ thống: </b>
Phân tích và thiết kế sơ đồ hoạt động của hệ thống.
Phân tích và thiết kế sơ đồ tuần tự của các nhiệp vụ
Phân tích và thiết kế cơ sở dữ liệu


<b> Hiện thực các yêu cầu của hệ thống: </b>


Xây dựng phần Add-In vào môi trường phát triển của VS.NET 2003.
Xây dựng Web Server theo mơ hình 3 lớp.


<b>3. Ngày giao nhiệm vụ đồ án : 3/10/2005 </b>
<b>: 9/1/2006 </b>


</div>
<span class='text_page_counter'>(12)</span><div class='page_container' data-page=12>

HUTECH



<b>CHỦ NHIỆM KHOA</b>


<i>(Ký và ghi rõ họ tên) </i>


<b>PHẦN DÀNH CHO BỘ MƠN </b>


</div>
<span class='text_page_counter'>(13)</span><div class='page_container' data-page=13>

HUTECH



<b>Nguyễn Duy Hồ -- V õ Đức Hiền </b> <b> Trang 1 </b>


<b>Chương I: </b>

<b>GI</b>

<b>ỚI THIỆU VỂ ĐỀ TÀI </b>



<b>I. Gi</b>

<b>ới thiệu </b>




Lập trình là một cơng việc vơ cùng khó khăn, địi hỏi lập trình viên phải
có kiến thức rộng rãi cũng như một kỹ năng lập trình tốt để có thể bắt tay thực
hiện các dự án phần mềm. Vấn đề một người lập trình cần có 1 công cụ hỗ trợ
nhằm giải đáp các thắc mắc liên quan đến kiến thức lập trình là nhu cầu rất
thiết thực trong quá trình dạy học trong ngành Cơng nghệ thơng tin để có thể có
cơng c<b>ụ nào giúp trút bớt gánh nặng trong việc lập trình. Đề tài “Xây dựng hệ </b>
<b>thống hỗ trợ tra cứu lỗi lập trình trong mơi trường lập trình Visual Studio </b>
<b>.NET 2003” mà chúng tôi nh</b>ận thật sự là một điều mà không chỉ cá nhân tôi
mà rất nhiều các lập trình viên khác hằng mong ước.


Đề tài này xây dựng một công cụ hỗ trợ việc tra cứu lỗi trong môi
trường lập trình Visual Studio .NET 2003. Cơng cụ này bao gồm 2 phần; phần
add-in tương tác với môi trường phát triển của VS.Net 2003 (IDE), ngồi ra
cịn hổ trợ thêm một Web Server cho phép phần add-in truy cập tới kho dữ liệu
để nhận về thông tin liên quan đến lỗi. Ngồi ra, Web Server cịn cho phép các
client đăng ký, truy cập và xem các thông tin về lỗi.


<b>II. Ch</b>

<b>ức năng </b>



Đầu tiên, để sử dụng hệ thống hỗ trợ tra cứu lỗi lập trình, người dùng
cần cài đặt cơng cụ này. Hệ thống hỗ trợ tra cứu lỗi có các chức năng sau:


• Sau khi biên dịch, phần Add -in sẽ truy cập vào hệ thống Visual Studio
.NET 2003 lấy danh sách lỗi, và hiển thị trong tab OutputWindow.
• Từ tab OutputWindow này cho phép người dùng click vào hyperlink


bên cạnh mã lỗi để mang về thơng tin liên quan đến lỗi đó.


• Đối với người quản trị cơ sở dữ liệu, họ có thể truy cập vào hệ thống
bằng quyền Admin và quản trị dữ liệu.



</div>
<span class='text_page_counter'>(14)</span><div class='page_container' data-page=14>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 2 </b>


<b>Chương II: </b>

<b>KI</b>

<b>ẾN THỨC MÔI TRƯỜNG PHÁT TRIỂN VÀ </b>


<b>ADD-IN </b>



<b>I. </b>

<b>Môi trường phát triển DTE </b>


<b>I.1. </b>

<b>Đối tượng DTE </b>



Là đối tượng trên cùng trong mơ hình đối tượng tự động hoá của bộ
Visual Studio.


Tất cả các đối tượng và các thành viên trong mơ hình tự động hố Visual
<b>Studio.NET đều dựa trên đối tượng DTE. Đối tượng DTE tiêu biểu cho môi </b>
trường phát triển được tích hợp trên Visual Studio.NET và là đối tượng trên
cùng trong mơ hình hệ thống cấp bậc. Nó đặt trong một không gian tên gọi là
<b>EnvDTE. Tên c</b>ủa sản phẩm tạo ra trên .NET đối với khô ng gian tên này là
<b>“envdte” và được chứa đựng trong một file gọi là envdte.dll. Tên thư viện có </b>
dạng như COM là Microsoft Development Environment 7.0” và được chứa
<b>đựng trong file gọi là dte.olb. </b>


</div>
<span class='text_page_counter'>(15)</span><div class='page_container' data-page=15>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 3 </b>


</div>
<span class='text_page_counter'>(16)</span><div class='page_container' data-page=16>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 4 </b>



Để truy cập tới các thuộc tính chỉ định trong dự án như VBProjects hay
CSharpProjects, hãy dùng c<b>ấu trúc DTE.GetObject(“VBProjects”). </b>


Minh hoạ:


Sub DTEExample()


Dim objTextDoc As TextDocument


Dim objEP As EditPoint


'Tạo một tài liệu văn bản mới.


<b> DTE</b>


'Lấy quyền điều khiển tới tài liệu mới.


.ItemOperations.NewFile("General\Text File")


<b> Set objTextDoc = DTE</b>


Set objEP = objTextDoc.StartPoint.CreateEditPoint


.ActiveDocument.Object("TextDocument")


'Tạo một EditPoint và thêm đoạn văn bản.


objEP.Insert "A test sentence."



End Sub


<b>I.2. </b>

<b>Thêm m</b>

<b>ột tham chiếu tới không gian tên EnvDTE </b>



Dù bạn chọn đối tượng .NET assembly hay loại thư viện dạng COM tuỳ
thu<b>ộc vào project của bạn. Khi bạn tạo một đối tượng Add-in sử dụng trình </b>
<b>Add-In Wizard (trong b</b>ất kỳ ngơn ngữ nào) hay khi bạn tạo một macro, thì
một tham chiếu tới không gian tên EnvDTE được thiết lập sẵn cho bạn. Nếu
bạn muốn truy cập tới phần bên ngồi của các đối tượng tự động hố của các
<b>đối tượng macro hay các đối tượng Add-in được tạo bởi trình Add-In Wizard </b>
thì bạn phải thiết lập bằng tay tham chiếu này.


Để thêm một tham chiếu tới không gian tên EnvDTE trong Visual C#
.NET, ta thực hiện như sau:


1. Trong khung Solution Explorer, bạn click phải chuột trên project
node ho<b>ặc trên Reference node và chọn AddReference. </b>


</div>
<span class='text_page_counter'>(17)</span><div class='page_container' data-page=17>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 5 </b>


<b>I.3. </b>

<b>Tham chi</b>

<b>ếu đối tượng DTE </b>



Một khi project của bạn đã có tham chiếu tới mơi trường EnvDTE, thì
b<b>ạn có thể thiết lập một tham chiếu tới đối tượng DTE theo đoạn code sau: </b>


EnvDTE.DTE myDTE;
myDTE =



(EnvDTE.DTE)Microsoft.VisualBasic.Interaction.CreateObject("Vis
ualStudio.DTE.7.1", "");


<b>-or- </b>


EnvDTE.DTE dte;


DTE =


(EnvDTE.DTE)System.Runtime.InteropServices.Marshal.GetActiveObj


ect("VisualStudio.DTE.7.1") // Lấy một thực thể của môi //


trường Visual Studio .NET IDE hiện hành đang chạy.


Nhưng để truy cập vào bên trong môi trường phát triển của VS.NET
2003, lấy mã lỗi và hiển thị trên VS.NET 2003, chương trình cần sử dụng các
đối tượng sau đây làm việc như các macro: đối tượng Events, BuildEvents,


CommandEvents, TaskListEvents, OutputWindowEvents, Window,


OutputWindowPane và các phương thức sự kiện OnConnect,


OnStartupComplete, OnAddInsUpdate, OnBeginShutdown, OnDisconnection.


<b>I.4. </b>

<b>Nh</b>

<b>ững đối tượng chính trong project </b>


<b>I.4.1. </b>

<b>Đối tượng Events </b>



Cho phép truy cập tới tất cả các sự kiện trong mơ hình mở rộng. Các sự
kiện này cũng có thể được phơi bày từ các đối tượng chỉ định bên trong mơ


hình m<b>ở rộng DTE. </b>


<b>DTE </b>


<b>Events </b>
Nhận xét:


</div>
<span class='text_page_counter'>(18)</span><div class='page_container' data-page=18>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 6 </b>


Minh hoạ:


Public Module Module1


Dim WithEvents bldevents As BuildEvents
Dim applicationObject As EnvDTE.DTE


Sub EventsExample()


Dim addInInstance As EnvDTE.AddIn


applicationObject = CType(Application, EnvDTE.DTE)


bldevents = CType(applicationObject.Events.BuildEvents,
EnvDTE.BuildEvents)


End Sub


Private Sub bldevents_OnBuildDone(ByVal Scope As


EnvDTE.vsBuildScope,


ByVal Action As EnvDTE.vsBuildAction) Handles
bldevents.OnBuildDone


MsgBox("Build complete")
End Sub


End Module


<b>I.4.2. </b>

<b>Đối tượng BuildEvents </b>



Cung cấp các sự kiện cho giải pháp tạo dựng.
<b>DTE </b>


<b>Events </b>


<b>BuildEvents </b>
Thuộc tính:


<b>public BuildEvents BuildEvents {get;} </b>


Tr<b>ả về đối tượng BuildEvents, cung cấp các sự kiện cho các giải pháp </b>
xây dựng.


Các sự kiện:


<b>Sự kiện </b> <b>Hoạt động </b>


OnBuildBegin Xuất hiện trước khi solution xây dựng, trước khi


dự án bắt đầu xây dựng


OnBuildDone Xuất hiện sau khi một solution hoàn tất quá
trình xây dựng.


OnBuildProjConfigBegin Xuất hiện khi việc định hình một dự án bắt đầu.
OnBuildProjConfigDone Xuất hiện khi việc định hình một dự án kết thúc.


</div>
<span class='text_page_counter'>(19)</span><div class='page_container' data-page=19>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 7 </b>


<b>I.4.3. </b>

<b>Đối tượng CommandEvents </b>



Cung cấp các sự kiện dòng lệnh cho các client tự động hoá.
<b>DTE </b>


<b>Events </b>


<b> </b> <b>CommandEvents </b>
Thuộc tính:


<b>public CommandEvents CommandEvents( </b>
<i>string Guid, </i>


<i>int ID </i>


) {get;}


Tham số:



<i>Guid</i><b>: được yêu cầu. Đây là GUID cho nhóm lệnh. Nếu Guid là </b>
<b>Null hoặc Nothing, thì CommandEvents trả về một đối tượng </b>
<b>CommandEvents </b>tượng trưng cho tất cả các lệnh trong môi trường.


<i>ID</i>: được yêu cầu. Một chỉ mục trong nhóm lệnh tương ứng với
l<b>ệnh cụ thể. Nếu ID là Null hay Nothing, thì CommandEvents trả về một đối </b>
<b>tượng CommandEvents tượng trưng cho tất cả các lệnh trong nhóm. </b>


Giá trị trả về:


Một đối tượng CommandEvents.
Các sự kiện:


<b>Sự kiện </b> <b>Hoạt động </b>


AfterExecute Xuất hiện sau khi một lệnh thực thi
BeforeExecute Xuất hiện trước khi một lệnh thực


thi


<i>Bảng 2.2: Sự kiện và hoạt động của đối tượng CommandEvents </i>
Nhận xét:


<b>Đối tượng CommandEvents được trả về bởi thuộc tính </b>
<b>CommandEvents của đối tượng Events. </b>


Minh hoạ:


<System.ContextStaticAttribute()> Public WithEvents


CommandEvents As


</div>
<span class='text_page_counter'>(20)</span><div class='page_container' data-page=20>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 8 </b>


Public Sub CommandEvents_AfterExecute(ByVal Guid As String,
ByVal ID As


Integer, ByVal CustomIn As Object, ByVal CustomOut As Object)
Handles


CommandEvents.AfterExecute
MsgBox("test")


End Sub


<b>I.4.4. </b>

<b>Đối tượng TaskListEvents </b>



Cung cấp các sự kiện cho các thay đổi tới danh sách tác vụ.
<b>DTE </b>


<b>Events </b>


<b>TaskListEvents </b>
Thuộc tính:


<b>public TaskListEvents TaskListEvents( </b>
<i>string Filter </i>



) {get;}


Tham số:


<i>Filter: tuỳ chọn. Đây là tên của danh mục tác vụ. Nếu Filter được </i>
h<b>ỗ trợ, thì đối tượng TaskListEvents chỉ cung cấp các sự kiện cho danh mục </b>
<i>đó. Nếu Filter không được hỗ trợ một giá trị danh mục hợp lệ, thì thuộc tính </i>
<b>TastListEvents b</b>ị hỏng.


Giá trị trả về:


M<b>ột đối tượng TaskListEvents. </b>
Các sự kiện:


<b>Sự kiện </b> <b>Hoạt động </b>


TaskAdded Xuất hiện khi một tác vụ mới được thêm tới Task List.
TaskModified Xuất hiện khi một tác vụ trong Task List được sửa đổi.
TaskNavigated Xuất hiện lập tức trước khi bạn điều hướng tới nguồn của


một tác vụ trong Task List.


TaskRemoved Xuất hiện khi một tác vụ bị loại bỏ khỏi Task List.
<i>Bảng 2.3: Sự kiện và hoạt động của đối tượng TaskListEvents </i>


Ghi chú:


</div>
<span class='text_page_counter'>(21)</span><div class='page_container' data-page=21>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 9 </b>



<b>I.4.5. </b>

<b>Đối tượng OutputWindowEvents </b>



Cung cấp các thay đổi tới cửa sổ Output.
<b>DTE </b>


<b>Events </b>


<b>OutputWindowEvents </b>
Thuộc tính:


<b>public OutputWindowEvents OutputWindowEvents( </b>
<i>string Pane </i>


) {get;}


Tham số:


<i>Pane: tu</i><b>ỳ chọn. Đây là tên của một cửa sổ kết quả Output. Nếu </b>
<b>Pane được hỗ trợ, thì đối tượng OutputWindowEvents chỉ cung cấp các sự </b>
kiện cho khung đó.


Giá trị trả về:


Khung không cần phải tồn tại khi đối tượng


<b>OutputWindowEvents </b>được tạo. Nếu khung được tạo bất kỳ lúc nào thì các
sự kiện sẽ được tự động cung cấp cho nó.


Các sự kiện



<b>Sự kiện </b> <b>Hoạt động </b>


PaneAdded Xu<b>ất hiện khi một khung cửa sổ Output mới được tạo </b>


PaneClearing Xu<b>ất hiện khi tất cả văn bản trong khung cửa sổ Output bị xoá </b>
PaneUpdated Xuất hiện khi văn bản mới được thêm tới một khung trong cửa


s<b>ổ Output. </b>


<i>Bảng 2.4: Sự kiện và hoạt động của đối tượng OutputWindEvents </i>
Ghi chú:


</div>
<span class='text_page_counter'>(22)</span><div class='page_container' data-page=22>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 10 </b>


<b>I.4.6. </b>

<b>Đối tượng Window </b>



<b>Đối tượng Window hiển thị một cửa sổ trong mơi trường. </b>
<b>DTE </b>


<b>Windows </b>
<b>Window </b>
Thuộc tính:


<b>public Window Window {get;} </b>
Giá trị trả về:


M<b>ột đối tượng Window. </b>


Minh hoạ:


Sub WindowExample()


Dim objTW As TextWindow
Dim objPane As TextPane
Dim objStart As TextPoint


objTW = ActiveWindow.Object
objPane = objTW.ActivePane


MsgBox("The active pane is " & Str(objPane.Height) & " lines
high and " & Str(objPane.Width) & " columns wide.")


objStart = objPane.StartPoint


MsgBox("It begins at line " & Str(objStart.Line) & ", column
" & Str(objStart.LineCharOffset) & ".")


objPane.Window.Close()
End Sub


<b>I.4.7. </b>

<b>Đối tượng OutputWindowPane </b>



Hiển thị một khung trong cửa sổ Output.
<b>DTE </b>


<b>Windows </b>
<b>Window </b>



<b>OutputWindow </b>


<b>OutputWindowPanes </b>
<b>OutputWindowPane </b>
Ghi chú:


</div>
<span class='text_page_counter'>(23)</span><div class='page_container' data-page=23>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 11 </b>


chọn với một hộp xổ xuống tại đỉnh của cửa sổ. Chẳng hạn, quá trình build
errors thì đi với khung “Build Errors”, trong khi mỗi cơng cụ lệnh bên ngồi đi
với khung cửa sổ output riêng biệt của nó.


Minh hoạ:


Sub OutputWindowPaneExample()


' Create a tool window handle for the Output window.
Dim win As Window =


DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput)
' Create handles to the Output window and its panes.
Dim OW As OutputWindow = win.Object


Dim OWp As OutputWindowPane


' Add a new pane to the Output window.


OWp = OW.OutputWindowPanes.Add("A New Pane")


' Add a line of text to the new pane.


OWp.OutputString("Some Text")
End Sub


<b>II. K</b>

<b>ỷ thuật Add-In </b>



Để tạo một công cụ cho một nhiệm vụ hoặc để tạo một cơng cụ để giúp
những lập trình viên khác tạo ra các phần mền của họ, bạn có thể sử dụng mơ
hình với kỹ thuật tự động trên Visual Studio .NET. mơ hình với kỹ thuật tự
động, được biết đến trong phiên bản trước của Visual Studio .NET như mơ
hình có khả năng mở rộng, là một giao diện lập trình cho phép bạn truy cập tới
các thủ tục bên dưới có chạy mơi trường phát triển được tích hợp, cho phép
hiệu chỉnh, thao tác và tự động hố nó. Chẳng hạn, bạn có thể tạo các dự án và
các mục lục dự án một cách lập trình hay tự động hố việc xây dựng một dự án
và các tiến trình triển khai dự án.


Chú ý: Khả năng mở rộng là khả năng cho phép phát triển và mở rộng
chức năng của IDE. Kỹ thuật tự động hố nói đến mã được tạo ra theo thao tác
của user và các cơng cụ mà tự động hố các tác vụ trong mơi trường và chạy
IDE theo cách được lập trình.


</div>
<span class='text_page_counter'>(24)</span><div class='page_container' data-page=24>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 12 </b>


cách khác nhau, bao g<b>ồm Add-in Manager, toolbar command hay các nút, các </b>
dịng l<b>ệnh, hay thơng qua các sự kiện như khởi động IDE. </b>


Trong phần hỗ trợ tới mơ hình đối tượng chung được cung cấp bởi


Visual Studio .NET tới tất cả các ngôn ngữ lập trình , các cơng cụ và các gói
của nó, riêng với các ngơn ngữ lập trình trên Visual Studio .NET cũng có thể
cung cấp các bổ sung kỹ thuật riêng của chúng tới mơ hình đối tượng tự động
hoá nhằm hỗ trợ các đặc điểm riêng biệt và các thành phần. Tất yếu bạn có thể
tạo một đối tượng Add-in mà làm việc rất tốt với bấ t kỳ ngôn ngữ nào trên
Visual Studio .NET, hay đối với ngôn ngữ nào được ghép vào để cung cấp
những điểm đặc biệt của một ngôn ngữ riêng biệt, chẳng hạn VB hay VC++.


<b>II.1. T</b>

<b>ạo một đối tượng Add-in </b>



Trình Add-in Wizard cho phép tạo một đối tượng Add-in với đầy đủ các
khung chức năng mà có thể chạy ngay sau khi bạn hồn tất nó. Sau khi trình
Add-in Wizard tạo một bộ khung cơ bản, bạn có thể thêm code tới nó và hiệu
chỉnh nó.


Chú ý: các đối tượng dc tạo trong VS.NET 2003 sẽ khơng làm việc
chính xác trong VS.NET 2002.


Bạn có thể tạo một macro để truy cập tới mơ hình tự động hố trên VS
như một sự lựa chọn cho việc tạo ra một đối tượng Add-in.


<b>II.2. </b>

<b>Các bước tạo đối tượng Add-in bằng Wizard </b>



</div>
<span class='text_page_counter'>(25)</span><div class='page_container' data-page=25>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 13 </b>


<b>Trình Add-in Wizard cho phép b</b>ạn cung cấp một tên hiển thị và mô tả
<b>cho đối tượng Add-in, cả hai xuất hiện trong hộp thoại Add-In Manager. Bạn </b>
có thể chọn để cho trình Wizard tạo mã mà cho phép thêm một lệnh tới menu


<b>Tools để load và triệu gọi đối tượng Add-in. Khi trình Wizard hồn tất, bạn có </b>
được mơt project mới với một mơđun đơn giản để cài đặt đối tượng Add-in.
B<b>ạn cũng có được setup project để tạo ra file .msi mà có thể được dùng để cài </b>
đặt đối tượng Add-in trên hệ thống khác (hay để cập nhật việc đăng ký của đối
<b>tượng Add-in trên máy triển khai mà đôi khi là cần thiết đối với những gì mà </b>
b<b>ạn làm với đối tượng Add-in của bạn). </b>


Các bước thực hiện:


1. Tạo một VS Add-In project mới. Bạn có thể tìm thấy project này từ
m<b>ục Extensibility Projects bên dưới Other Projects </b>


2.<b> Chọn một ngôn ngữ từ khung Select a Programming Language. </b>
Điều này cho phép bạn chọn một ngôn ngữ đối với đối tượng Add-in
được tạo ra.


3.<b> Chọn một hoặc nhiều ứng dụng từ khung Select an Application </b>
<b>Host</b>. Điều này cho phép bạn chọn các ứng dụng mà bạn cũng muốn
chạy đối tượng Add-in sau khi tạo.


4. Nhập vào tên và mô tả cho đối tượng Add-in của bạn trong khung
<b>Enter a Name and Description. Tên này s</b>ẽ được hiển thị trong
<b>danh sách Available Add-Ins c</b>ủa hộp thoại Add-In Manager và cho
các user biết được đối tượng Add-in làm gì, làm như thế nào, và hơn
thế nữa.


5.<b> Trong khung Choose Add-in Options, hãy chỉ định những gì mà </b>
bạn muốn đối tượng Add-in xuất hiện trong menu Tools, khi nào bạn
muốn đối tượng Add-in xuất hiện, và những gì mà đối tượng sẽ cho
phép đối với các đối tượng khác hoặc không. Điều này cho phép bạn


chỉ định các tuỳ chọn theo thói quen chắc chắn cho đối tượng Add-in
của bạn.


</div>
<span class='text_page_counter'>(26)</span><div class='page_container' data-page=26>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 14 </b>


hãy chỉ định thông tin mà bạn muốn hiển thị. Điều này cho phép bạn
tạo một cửa sổ Help About chứa các thông tin về phiên bản, thông
tin hỗ trợ, thông tin bản quyền cho đối tượng Add-in của bạn và hơn
thế nữa. Sau 6 bước, các tuỳ chọn mà bạn đã chọn được hiển thị
trong một trang tổng kết.


7.<b> Chọn Finish để tạo đối tượng Add-in. </b>


Lúc này bạn có được một đối tượng Add -in với đầy đủ các chức năng,
nhưng còn rỗng.


<b>II.3. K</b>

<b>ết quả các lệnh của đối tượng Add-in </b>



Khi b<b>ạn tạo ra một đối tượng Add-in sử dụng trình Add-in Wizard và </b>
sau khi chạy nó, một thực thể khác của VS.NET khởi động, cho phép bạn kiểm
tra và bãy lỗi đối tượng tổng kết. Một hoặc nhiều lệnh cho đối tượng Add -in
được đặt trên một hoặc nhiều menu, chẳng hạn menu Tools. Sau khi bạn hoàn
tất bước bãy lỗi đối tượng Add-in và sau đó đóng lại thực thể thứ hai của
VS.NET, thông tin về lệnh sẽ được lưu lại.


<b>II.4. </b>

<b>Để phục hồi các lệnh của đối tượng Add-in tới menu </b>



Các bước thực hiện:



1. Xây dựng setup project đã bởi trình wizard.
2. Đóng tất cả các thực thể của VS.NET.
3. Chạy file .msi từ setup project.


4. Khởi động lại VS.NET.


</div>
<span class='text_page_counter'>(27)</span><div class='page_container' data-page=27>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 15 </b>


<b>II.5. </b>

<b>Điều khiển đối tượng Add-In với Add-In Manager </b>



Add-In Manager là một công cụ để load và loại bỏ các đối tượng Add-in
trong IDE, và rất tiện để chỉ định các hành vi load lên của chúng. Add -In
Manager liệt kê tất cả các đối tượng được đăng ký hiện thời. Sử dụng Add-In
Manager, bạn có thể load hay unload một đối tượng Add-In ngay tức thì, hay
chỉ định một đối tượng Add-In khi mơi trường phát triển khởi động hoặc khi nó
được khởi động thơng qua một dịng lệnh, như với một thao tác tạo dựng.


Chỉ có các đối tượng được đăng ký xuất hiện trong danh sách các đối
tượng Add-In có hiệu lực.


Chú ý: Bạn có thể dùng phím TAB để di chuyển tới các dịng lệnh và
phần Startup, thay vì bạn phải sử dụng tổ hợp phím ALT + S và ALT + C để di
chuyển tới lui giữa các vùng chọn.


<i> H ình 2.3: Hộp thoại Add-In Manager </i>
Các bước thực hiện:



1. Chọn nó từ danh sách


2.<b> Chọn vào check box trong dòng Startup, và click OK. </b>


</div>
<span class='text_page_counter'>(28)</span><div class='page_container' data-page=28>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 16 </b>


đối tượng Add-in. Nếu đối tượng Add-in khơng có một giao diện đồ họa (UI),
nó sẽ load lên một cách âm thầm và bắt đầu chạy.


Mẹo: Nếu bạn cố load một đối tượng mà không thể được định vị thì
<b>trình Add-In Manager s</b>ẽ thốt bỏ đăng ký nó để nó khơng cịn xuất hiện trong
danh sách nữa.


<b>II.6. </b>

<b>Để load một đối tượng Add-In ngay tức thì </b>



Các bước thực hiện:


1. Chọn nó từ danh sách


2.<b> Chọn vào check box trong dòng Startup, và click OK. </b>


Nếu đối tượng Add-in có một giao diện (interface), thì nó sẽ xuất hiện,
hay đối tượng Add-in có thể xuất hiện như một nút tên toolbar hay một lệnh
trên menu tùy theo bạn chọn lựa, điều này phụ thuộc vào cách bạn lập trình cho
đối tượng Add-in. Nếu đối tượng Add-in khơng có một giao diện đồ họa (UI),
nó sẽ load lên một cách âm thầm và bắt đầu chạy.


Mẹo: Nếu bạn cố load một đối tượng mà không thể được định vị thì


trình Add-In Manager sẽ thốt bỏ đăng ký nó để nó khơng cịn xuất hiện trong
danh sách nữa.


<b>II.7. Ch</b>

<b>ỉ định Add-in nạp lên khi môi trường khởi động </b>



Các bước thực hiện:


1. Chọn đối tượng Add-in từ danh sách.


2.<b> Chọn ơ Load at startup trong dịng Startup. </b>


</div>
<span class='text_page_counter'>(29)</span><div class='page_container' data-page=29>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 17 </b>


<b>II.8. Tri</b>

<b>ệu gọi các đối tượng Add-In thơng qua dịng lệnh Devenv </b>



<b>Thơng thường khi sử dụng trình Add-In Manager để khởi động các đối </b>
tượng Add-in, bạn cũng có thể gọi một đối tượng Add-in bằng cách dùng dòng
l<b>ệnh Devenv. Để làm điều này, hãy sử dụng khoá chuyển đổi /command với </b>
cấu trúc như sau:


<i>devenv /command <command>.<name> </i>


Ở đây, command.name là tên lệnh trong đối tượng Add-in của bạn.


<b>II.9. </b>

<b>Đăng ký đối tượng Add-In </b>



Một khi một đối tượng Add-In được tạo ra, nó phải được đăng ký như là
một thành phần COM với các bản Microsoft Windows. Trình Add-in Wizard


sẽ tự động thực hiện việc đăng ký này cho bạn, nhưng nếu bạn không sử dụng
trình Add-in Wizard để tạo ra đối Add-in, bạn phải làm điều này bằng tay theo
các bước sau:


1. Mở cửa sổ dòng lệnh.


2. Nếu bạn đang sử dụng VB.NET hay VC#.NET, hãy đánh
<i> regasm <name>.dll </i>


ở đây, <name> là tên của đối tượng Add-In.
N<i>ếu bạn sử dụng VC++.NET, hãy dùng regsvr32 </i>


Sau khi một đối tượng Add -in được đăng ký, nó được nhận ra bởi mơi
<b>trường triển khai được tích hợp (IDE). Để liệt kê nó trong hộp thoại Add-In </b>
<b>Manager, b</b>ạn phải tạo ra các khoá đăng ký cho nó, như dịng bên dưới.
Trong vài trường hợp, sẽ là có ích để biết được những gì mà các khố đăng ký
<b>được giả tạo bởi trình Add-In Wizard. Trình Add-In Wizard tạo một mã </b>
<i>chương trình thống nhất ( progID) cho mỗi đối tượng Add -in và chèn nó vào </i>
trong phần đăng ký. Một progID bao gồm tên của dự án và theo sau là tên của
<i>môđun lớp, như MyProj.MyClass. </i>


</div>
<span class='text_page_counter'>(30)</span><div class='page_container' data-page=30>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 18 </b>


•<b> FriendlyName – tuỳ chọn. Là tên xuất hiện trong danh sách các đối </b>
<b>tượng Add-In có hiệu lực của trình Add-In Manager. Giá trị này là </b>
tuỳ chọn nhưng nó có yêu cầu sử dụng cao.


•<b> Description – tuỳ chọn. Là một chuỗi được hiễn thị bên dưới của </b>


h<b>ợp thoại Add-in Manager khi đối tượng Add -in được thêm vào. </b>
Giá trị này là tuỳ chọn nhưng nó có yêu cầu sử dụng cao.


•<b> LoadBehavior – tuỳ chọn. Một trường các bít kiểu DWORD với các </b>
cờ theo sau (đối với Visual Studio, Visual Basic và VSA). Các giá trị
này là tuỳ chọn nhưng nó có yêu cầu sử dụng cao.


<b>Cờ hiệu </b> <b>Giá trị </b> <b>Mô tả </b>


<b>ID_UNLOADED </b> 0 Đối tượng Add-in không được load
ngay lập tức.


<b>ID_STARTUP </b> 1 Đối tượng Add-in nên được load khi
IDE khởi động


<b>ID_COMMAND_LINE </b> 4 Đối tượng Add-in nên được load khi
<i>devenv </i>được triệu gọi từ dòng lệnh
với một thành phần chuyển khoá.
<i>Bảng 2.5: Các tuỳ chọn cho load đối tượng Add-in </i>


•<b> CommandPreload – tuỳ chọn. Là một giá trị dạng Boolean cho biết </b>
khi nào là lần đầu tiên mà Visual Studio đã khởi động từ khi đối
tượng Add-in được đăng ký. Chẳng hạn, cờ này cho phép bạn chỉ
định mỗi khi một đối tượng Add-in được load để đặt các lệnh trong
các menu, và ngay sau đó nó không đượ c load cho đến khi một user
cuối cùng sử dụng một trong các lệnh này, mà sau đó load lên theo
yêu c<b>ầu đối tượng Add-in trong tất cả các thực thể kế tiếp của IDE. </b>


<b>Giá trị </b> <b>Mô tả </b>



0 Cho biết đối tượng Add-in đã cài đặt các lệnh của nó.
1 Cho biết đối tượng Add-in vẫn cần cài đặt các lệnh


của nó.


</div>
<span class='text_page_counter'>(31)</span><div class='page_container' data-page=31>

HUTECH



<b>Nguyễn Duy Hồ -- V õ Đức Hiền </b> <b> Trang 19 </b>


B<b>ạn có thể đánh dấu phương thức OnConnection mà bạn cài đặt để biết </b>
v<b>ới loại kết nối là ext_cm_UISetup. Nếu thế, bạn có thể thực thi </b>


•<b> CommandLineSafe – tuỳ chọn. Cho biết dù đối tượng Add -in có </b>
được thiết kế hay không để tránh hiển thị một giao diện người dùng
<i><b>(UI) khi được triệu gọi bởi dịng lệnh devenv. </b></i>


•<b> SatelliteDllPath và SatelliteDllName – tuỳ chọn. Các mục tên và </b>
mô tả trong phần đăng ký có thể được định vị. Nếu giá trị của chúng
bắt đầu với dấu # và theo sau đó là một số ngun có thể chuyển
ki<b>ểu, thì giá trị dạng chuỗi được hiển thị trong hợp thoại Add-in </b>
<b>Manager là giá tr</b>ị của mã nguồn được chỉ định bên trong file vệ tinh
trung tâm DLL. File vệ tinh trung tâm DLL này được xác định bởi
một hoặc hai mục đăng ký có giá trị tuỳ chọn sau :


o<b> SatelliteDllPath – Nếu được hiển thị, giá trị này là một tên </b>
đường dẫn đầy đủ dạng chuổi chỉ tới một thư mục, kết thúc
b<b>ởi một dấu (\). Trình Add-in Manager tìm kiếm file Dll vệ </b>
tinh trung tâm trong khu vực bởi sự trùng khớp đường dẫn
c<b>ủa giá trị </b>



o<b> SatelliteDllPath, mã khu vực của máy được cài đặt, dấu ( \), </b>
và giá tr<b>ị SatelliteDllName. </b>


<b>SatelliteDllName – Là giá tr</b>ị dạng chuỗi chứa tên file. Thư mục
chứa file hoặc là thư mục chứa các thư viện liên kết động (DLL),
ho<b>ặc là thư mục được tính trước được mơ tả cho SatelliteDllPath. </b>


<b>II.10. Các s</b>

<b>ự kiện chính trong Add-In project </b>


<b>II.10.1. </b>

<b>Phương thức OnConnect </b>



Xuất hiện khi một đối tượng Add-In được load vào môi trường.
<b>void OnConnection( </b>


<i> object Application, </i>


<i>ext_ConnectMode ConnectMode, </i>
<i>object AddInInst, </i>


</div>
<span class='text_page_counter'>(32)</span><div class='page_container' data-page=32>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 20 </b>


Tham số:


<i>Application</i>: đối tượng có khả năng mở rộng ở mức cao


<i>ConnectMode: M</i>ột hằng số ext_cm chỉ định các đối tượng Add-In được
nạp.


<i>AddInInst: m</i>ột đối tượng Add-In đại diện cho một thực thể của Add-In


<i>Custom: M</i>ột mảng các biến mà bạn có thể dùng để cung cấp cho dữ liệu


bổ sung.
Nhận xét:


<b>OnConnect là m</b>ột phương thức mà khi giao diện dạng host của nó


<b>(IDTExtensibility2</b>) được cài đặt, nó hành động như một sự kiện xuất hiện khi
một đối tượng Add-In được load. Điều này xuất hiện khi:


•<b> Một user load đối tượng Add-In thông qua hộp thoại Add-In </b>
<b>Manager. </b>


• Một đối tượng Add-In được đánh dấu bắt đầu khi ứng dụng chủ của
nó load


•<b> Đối tượng Connect của một đối tượng Add-In tương ứng được thiết </b>
l<b>ập True. </b>


Minh hoạ:


Chú ý đoạn code này chỉ làm việc trong một Add-In project, không làm
việc trong các macro.


Imports Microsoft.Office.Core
imports Extensibility
imports System.Runtime.InteropServices
Imports EnvDTE
<GuidAttribute("B25D9733-A1B2-420D-8F6B-478E2B051C83"),
ProgIdAttribute("MyAddin1.Connect")> _



Public Class Connect


Implements Extensibility.IDTExtensibility2


Dim applicationObject As EnvDTE.DTE
Dim addInInstance as EnvDTE.AddIn


Public Sub OnConnection(ByVal application As Object, ByVal
connectMode As Extensibility.ext_ConnectMode, ByVal addInInst
As Object,


ByRef custom As System.Array) Implements


Extensibility.IDTExtensibility2.OnConnection
applicationObject = CType(application, EnvDTE.DTE)
addInInstance = CType(addInInst, EnvDTE.AddIn)
End Sub


</div>
<span class='text_page_counter'>(33)</span><div class='page_container' data-page=33>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 21 </b>


<b>II.10.2. </b>

<b>Phương thức OnStartupComplete </b>



Xuất hiện khi mơi trường đã hồn tất quá trình khởi động.
<i><b>void OnStartupComplete( object[] custom ); </b></i>
Tham số:



<i>custom: m</i>ảng các biến mà bạn có thể dùng để cung cấp dữ liệu bổ sung.
Ghi chú:


<b>OnStartupComplete là m</b>ột phương thức mà khi giao diện chủ của nó
(IDTExtensibility2) được cài đặt, nó hoạt động như một sự kiện xuất hiện khi
môi trường đã kết thúc quá trình khởi động.


S<b>ự kiện OnStartupComplete xuất hiện khi ứng dụng chủ của nó hồn </b>
tất tiến trình khởi động của nó, trong trường hợp mà đối tượng Add-In load tại
lúc môi trường khởi động. Nếu đối tượng Add-In không được load lên lúc ứng
d<b>ụng load, thì sự kiện OnStartupComplete khơng xuất hiện, ngay cả khi user </b>
<b>load đối tượng Add-In thông qua hộp thoại Add-In Manager. Khi sự kiện này </b>
xu<b>ất hiện, nó xuất hiện sau sự kiện OnConnection. </b>


B<b>ạn có thể dùng sự kiện OnStartupComplete để chạy đoạn code mà </b>
tương tác với ứng dụng, nhưng không nên chạy cho đến khi ứng dụng kết thúc
quá trình load. Chẳng hạn, nếu bạn muốn hiển thị một form mà cho user một
chọn các tài liệu để tạo khi chúng bắt đầu ứng dụng, bạn có thể đặt đoạn mã đó
bên trong th<b>ủ tục sự kiện OnStartupComplete. </b>


Minh hoạ:


Imports Microsoft.Office.Core
imports Extensibility


imports System.Runtime.InteropServices
Imports EnvDTE


<GuidAttribute("B25D9733-A1B2-420D-8F6B-478E2B051C83"),
ProgIdAttribute("MyAddin1.Connect")> _



Public Class Connect


Implements Extensibility.IDTExtensibility2


Dim applicationObject As EnvDTE.DTE
Dim addInInstance as EnvDTE.AddIn


Public Sub OnStartupComplete(ByRef custom As System.Array)
Implements Extensibility.IDTExtensibility2.OnStartupComplete
Msgbox("IDE startup complete event occuring.")


</div>
<span class='text_page_counter'>(34)</span><div class='page_container' data-page=34>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 22 </b>


<b>II.10.3. </b>

<b>Phương thức OnAddInsUpdate </b>



Xuất hiện khi một đối tượng Add-in được load hay unload trong môi
trường.


<b>void OnAddInsUpdate( </b>
<i> object[] custom </i>


);


Tham số:


<i>custom: M</i>ột mảng các biến mà bạn có thể dùng để cung cấp cho dữ liệu


bổ sung.


Chú ý:


<b>OnAddInsUpdate là m</b>ột phương thức m à khi giao diện chủ của nó
được cài đặt, nó hoạt động khi một sự kiện tạo ra một thay đổi tới danh sách
<b>các đối tượng Add -In trong hộp thoại Add-In Manager, như khi m</b>ột đối
tượng được load hay unload.


S<b>ự kiện OnAddInsUpdate xuất hiện trong vài trường hợp khác của các </b>
đối tượng Add-In. Chẳng hạn, nếu cả hai đối tượng Add -In A và B hiện tại
cùng được load, và sau đó thì đối tượng Add -In C được load, thì sự kiện
OnAddInsUpdate xuất hiện trong các đối tượng A và B. Nếu C bị unload thì sự
ki<b>ện OnAddInsUpdate lại xuất hiện trong A và B. </b>


Minh hoạ:


Imports Microsoft.Office.Core
imports Extensibility


imports System.Runtime.InteropServices
Imports EnvDTE


<GuidAttribute("B25D9733-A1B2-420D-8F6B-478E2B051C83"),
ProgIdAttribute("MyAddin1.Connect")> _


Public Class Connect


Implements Extensibility.IDTExtensibility2



Dim applicationObject As EnvDTE.DTE
Dim addInInstance as EnvDTE.AddIn


Public Sub OnAddInsUpdate(ByRef custom As System.Array)
Implements Extensibility.IDTExtensibility2.OnAddInsUpdate
Msgbox("Add-In update event occuring.")


</div>
<span class='text_page_counter'>(35)</span><div class='page_container' data-page=35>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 23 </b>


<b>II.10.4. </b>

<b>Phương thức OnBeginShutdown </b>



Xuất hiện khi môi trường đang shut down.
<b>void OnBeginShutdown( </b>


<i> object[] custom </i>
);


Tham số:


<i>custom: M</i>ột mảng các biến mà bạn có thể dùng để cung cấp cho
dữ liệu bổ sung.


Chú ý:


<b>OnBeginShutdown là m</b>ột phương thức mà khi giao diện chủ của nó
được cài đặt, nó hoạt động như một sự kiện xuất hiện khi môi trường đang shut
down.



S<b>ự kiện OnBeginShutdown xuất hiện khi một ứng dụng chủ bắt đầu </b>
tiến trình shutdown của nó; nghĩa là khi một ứng dụng đóng trong khi đối
tượng Add-In vẫn được load. Nếu đối tượng Add-in hiện tại không được load
khi <b>ứng dụng đóng, thì sự kiện OnBeginShutdown khơng xuất hiện. Khi điều </b>
này x<b>ảy ra thì sự kiện này xuất hiện trước sự kiện OnDisConnection. </b>


Ta c<b>ũng có thể dùng sự kiện OnBeginShutdown để chạy khi user đóng </b>
một ứng dụng. Chẳng hạn, ta có thể chạy đoạn code mà lưu lại dữ liệu của form
tới một file.


S<b>ự kiện OnBeginShutdown cũng có thể xuất hiện nhiều hơn một lần. </b>
Nếu một đối tượng quản lý sự kiện thoát khỏi thao tác shutdown mơi trường,
thì <b>ở lần sau khi mơi trường bắt đầu shutdown, sự kiện OnBeginShutdown sẽ </b>
lại xuất hiện.


Minh hoạ:


Imports Microsoft.Office.Core
imports Extensibility


imports System.Runtime.InteropServices
Imports EnvDTE


<GuidAttribute("B25D9733-A1B2-420D-8F6B-478E2B051C83"),
ProgIdAttribute("MyAddin1.Connect")> _


Public Class Connect


Implements Extensibility.IDTExtensibility2



</div>
<span class='text_page_counter'>(36)</span><div class='page_container' data-page=36>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 24 </b>


Dim addInInstance as EnvDTE.AddIn


Public Sub OnBeginShutdown(ByRef custom As System.Array)
Implements Extensibility.IDTExtensibility2.OnBeginShutdown
Msgbox("Shutdown event occuring.")


End Sub
End Class


<b>II.10.5. </b>

<b>Phương thức OnDisconnection </b>



Xuất hiện khi một Add-in được load từ môi trường.
<b>void OnDisconnection( </b>


<i>ext_DisconnectMode RemoveMode, </i>
<i>object[] custom </i>


);
Tham số


<i>RemoveMode: là m</i>ột hằng số ext_dm chỉ định cách đối tượng Add -in
được load


<i>custom: m</i>ột mảng các kiểu giá trị của biến mà cung cấp dự liệu bổ sung.


Điều này không được dùng bởi Visual Studio .NET.


Ghi chú:


<b>OnDisconnection là m</b>ột phương thức mà khi giao diện chủ của nó
được cài đặt, nó hoạt động như một sự kiện xuất hiện khi một đối tượng Add-in
được load.


Một đối tượng Add-in có thể bị unload trong một vài cách sau:


• Xố check box tiếp theo tới đối tượng Add-in trong hộp
tho<b>ại Add-In Manager. </b>


• Đóng ứng dụng chủ của nó. Nếu một đối tượng Add -In
được load và ứng dụng của nó đóng, thì sau đó đối tượng
Add-In b<b>ị unload. Nếu thuộc tính loadBehavior của đối </b>
<b>tượng Add-In được thiết lập lúc Startup, thì nó đư ợc load </b>
lại khi một ứng dụng bắt đầu trở lại.


</div>
<span class='text_page_counter'>(37)</span><div class='page_container' data-page=37>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 25 </b>


Minh hoạ:


Imports Microsoft.Office.Core
imports Extensibility


imports System.Runtime.InteropServices
Imports EnvDTE



<GuidAttribute("B25D9733-A1B2-420D-8F6B-478E2B051C83"),
ProgIdAttribute("MyAddin1.Connect")> _


Public Class Connect


Implements Extensibility.IDTExtensibility2


Dim applicationObject As EnvDTE.DTE
Dim addInInstance as EnvDTE.AddIn


Public Sub OnDisconnection(ByVal RemoveMode As


Extensibility.ext_DisconnectMode, ByRef custom As System.Array)
Implements Extensibility.IDTExtensibility2.OnDisconnection
Msgbox("Add-In disconnection event occuring.")


</div>
<span class='text_page_counter'>(38)</span><div class='page_container' data-page=38>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 26 </b>


<b>Chương III: </b>

<b>KI</b>

<b>ẾN THỨC WEB SERVICES </b>



<b>I. Gi</b>

<b>ới thiệu về Web Services </b>


<b>I.1. Vấn đề chia sẽ dữ liệu </b>



Các máy tính cần được chia sẽ dữ liệu với nhau. Có nhiều công việc cần
phải chia sẽ dữ liệu như: Những nhà kinh doanh cần chia sẽ dữ liệu với đối tác,
bộ phận này trong công ty cần gởi dữ liệu đến bộ phận khác, các ứng dụng của


người dùng này cần phải làm việc với ứng dụng của người dùng khác.


Microsoft đã nhận ra nhiều loại ứng dụng khác nhau có thể chia sẽ cùng
dữ liệu như:


• Những nhà cung cấp dữ liệu, những người cung cấp dữ liệu cho
thị trường chứng khoáng.


• Mơi trường xử lý dữ liệu giữa các đại lý trong cùng một công ty
cần chia sẽ dữ liệu của khách hàng, thơng tin hố đơn.


• Tích hợp các ứng dụng lớn như tích hợp giũa dữ liệu về email
của công ty với dữ liệu về nhân sự.


<b>I.2. Gi</b>

<b>ải quyết bằng phát triển các ứng dụng phân tán </b>



Phát triển ứng dụng phân tán(Distributed application Development) là
nghệ thuật và kỹ thuật để lấy dữ liệu từ máy này sang máy khác. Có nhiều công
nghệ cho việc xây dựng các ứng dụng có thể gởi và nhận dữ liệu.
CORBA(Common Object Request Broker Architerture), RMI(Remote Method
Invocation), và DCOM(Distributed Component Object Model). Những công
nghệ này đa số đều có các nhược điểm, và khơng được sử dụng cho các môi
trường không đồng nhất.


DCOM được xây dựng dựa trên COM (Component Object Model) là
một chuẩn nhị phân mà hầu như không thể triển khai được bên ngồi mơi
trường Microsoft Windows.


</div>
<span class='text_page_counter'>(39)</span><div class='page_container' data-page=39>

HUTECH




<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 27 </b>


<b>I.3. Web Services </b>



Web service là một cơng nghệ phân tán gồm có những đối tượng(object)
và phương thức(method) có thể được gọi lên từ bất kỳ client nào thông qua
giao thức HTTP. Web service được xây d ựng chủ yếu dựa trên giao thức
SOAP(Simple Object Access Protocol) để hổ trợ truyền thông điệp qua tầng
v<i>ận chuyển HTTP và sử dụng định dạng XML để mô tả dữ liệu. . Dữ liệu liên </i>
quan đến việc gọi phương thức và các tham số được truyền đến Web service ở
<b>định dạng XML sử dụng giao thức SOAP trên tầng vận chuyển HTTP. </b>


<b>I.3.1. </b>

<b>Các đặc điểm của Web service </b>



• Cho phép các ứng dụng giao tiếp thông qua mạng LAN, intranet, và
<b>Internet. </b>


•<b> Độc lập ngơn ngữ. </b>
•<b> Độc lập giao thức. </b>
•<b> Độc lập nền. </b>


Một trong những thách thức lớn đối với các nhà phát triển là tích hợp
ứng dụng. Tích hợp ứng dụng là kết hợp một nhóm nhiều ứng dụng và chuyển
chúng thành các ứng dụng Web dễ sử dụng, thậm chí khi các chương trình này
chạy trên các hệ điều hành khác nhau, được tạo ra từ các ngôn ngữ khác nhau
và được xây dựng bằng nhiều mơ hình đối tượng khác nhau.


Web service giao tiếp bằng cách sử dụng các giao thức Web chuẩn và
các định dạng dữ liệu, như là HTTP, XML, và SOAP(Simple Object Access
Protocol). Bất kỳ những hệ thống nào có hỗ trợ những chuẩn Web như vậy có


thể chạy được Web service.


</div>
<span class='text_page_counter'>(40)</span><div class='page_container' data-page=40>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 28 </b>


<b>I.3.2. L</b>

<b>ợi ích khi sử dụng Web service </b>


<b>I.3.2.1. Liên k</b>

<b>ết lỏng(Loosely couple) </b>



Loose couple có nghĩa là mỗi dịch vụ tồn tại độc lập với các dịch vụ
khác hình thành nên ứng dụng. Điều này cho phép các phần riêng lẽ của ứng
dụng được sửa chữa mà không ảnh hưởng đến những phần không liên quan,
đây là một yêu cầu thực tiễn trong thiết kế các kiến trúc hướng dịch vụ(Service
<b>Oriented Architecture). </b>


<b>I.3.2.2. Hổ trợ cấu trúc hướng dịch vụ </b>



Web service thể hiện sự kết hợp giữa sự phát triển dựa trên dịch vụ
(service-based development) của các ứng dụng và Web. Trong mơ hình
SOA(Service oriented Architecture), các quy trình cơng việc tạo nên ứng d ụng
<b>được tách biệt độc lập với nhau, dễ dàng phân tán các dịch vụ. </b>


<b>I.3.2.3. D</b>

<b>ễ dàng tích hợp </b>



Khơng giống như những phương pháp tích hợp khác, Web service đang
được chấp nhận rộng rãi trong ngành công nghiệp phần mềm. Sự chấp nhận
rộng rãi này giúp giảm bớt nỗi lo của các cơng ty có thể bị “lock” về công nghệ
trong tương lai. Các chuẩn của Web service dể đọc, cho phép những nhà phát
tri<b>ển xem được chính xác những gì đang xảy ra trong hệ thống. </b>



<b>I.3.2.4. D</b>

<b>ễ truy xuất </b>



Web service được phân tán trên Internet. Web service sử dụng giao thức
vận chuyển như HTTP, tác động đến các kiến trúc đang có và cho phép thơng
<b>tin được u cầu và nhận trong thời gian thực. </b>


<b>II. </b>

<b>Cơ sở hạ tầng Web Services </b>


<b>II.1. Các chu</b>

<b>ẩn và giao thức </b>



<b>II.1.1. Extend Markup Language(XML): </b>



</div>
<span class='text_page_counter'>(41)</span><div class='page_container' data-page=41>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 29 </b>


HTML dùng để mô tả các nội dung mà con người có thể xem được, trong khi
XML thì được sử dụng cho các xử lý của máy tính.


<b>II.1.2. HyperText Tranfer Protocol(HTTP) </b>



HTTP là một trong những giao thức được sử dụng rộng rãi nhất trên
Internet. Mỗi khi trình duyệt truy xuất một trang Web, HTTP là giao thức vận
chuyển đang được sử dụng.


HTTP hỗ trợ rất tốt cho các giao tiếp có request và response. Request
-Response có nghĩa là khi một yêu cầu được thực hiện, và sự phản hồi cho yêu
c<b>ầu đó được đáp lại ngay lập tức. </b>


<b>II.1.3. Simple Object Access Protocol(SOAP) </b>




Giao thức truy xuất đối tượng đơn giản, được xây dựng dựa trên ngôn
ngữ XML, là giao thức truyền nhận thông tin của Web service. Ở cấp độ kỹ
thuật, SOAP không đưa ra cách chuyển dữ liệu mới. Chuyển dữ liệu SOAP dựa
<b>trên phương thức HTTP-POST nhưng thêm phần mô tả dữ liệu bằng XML. </b>


<b>II.1.4. Web Service Description Language(WSDL) </b>



Là ngôn ngữ đánh dấu văn bản dựa trên XML được dùng để mô tả Web
<b>service. </b>


<b>II.1.5. Universal Description, Discovery, and </b>


<b>Intergration(UDDI) </b>



Thực hiện cơng việc đăng ký (register), tìm kiến (find) và kết hợp (bind)
Web service với ứng dụng.


<b>II.2. </b>

<b>Các thành ph</b>

<b>ần của Web service </b>


<b>II.2.1. </b>

<b>Web service Directories</b>


</div>
<span class='text_page_counter'>(42)</span><div class='page_container' data-page=42>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 30 </b>


information), thông tin liên kết( binding information), và các kỹ thuật dịch
v<b>ụ(service specifications). </b>


<b>II.2.2. </b>

<b>Web service Discovery</b>


Sử dụng quá trình này, client định vị các tài liệu(document) để mô tả
một XML Service sử dụng WSDL. Quá trình discovery hổ trợ client biết về sự


t<b>ồn tại của Web Service. </b>


<b>II.2.3. </b>

<b>Web service Description</b>


Thành phần này cung cấp thông tin giúp client biết được về các hoạt
động nào thực hiện đối với Web Service. Web Service Description là một tài
liệu dạng XML để chỉ rỏ định dạng của các thơng điệp mà một Web Service có
th<b>ể hiểu. </b>


<b>II.2.4. </b>

<b>Web service Wire Format</b>


Để hổ trợ việc giao tiếp giữa các hệ thống khác nhau, XML Web service
sử dụng các định dạng đường truyền mở(open wire formats). Các định dạng
đường truyền mở là các giao thức có thể được hiểu bởi bất kỳ hệ thống nào có
kh<i>ả năng hổ trợ các chuẩn web chung như HTTP và SOAP. </i>


</div>
<span class='text_page_counter'>(43)</span><div class='page_container' data-page=43>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 31 </b>


<b>II.3. </b>

<b>Giao ti</b>

<b>ếp giữa Client và Web service </b>



Quá trình giao tiếp giữa client và Web service tương tự như việc gọi các
thủ tục từ xa(RPC). Client sử dụng một đối tượng proxy của Web service trên
máy cục bộ để gọi các phương thức trên Web service.


Tương tác giữa client và Web Service bao gồm các phần sau được thực
hiện:


1. Client tạo ra một đối tượng của lớp prox y Web service trên máy


của client.


2. Client gọi một phương thức trên đối tượng proxy.


3. Cơ sở hạ tầng của Web service trên máy của client đồng bộ
hoá(serialize) các phương thức gọi và các tham số vào trong một
thông điệp SOAP và gởi đến Web service trên mạng.


4. Cơ sở hạ tầng trên server của Web service (giải đồng bộ)deserialize
thông điệp SOAP và tạo ra một thực thể của Web Service. Sau đó
Cơ sở hạ tầng này gọi phương thức cùng các tham số(arguments)
trên Web service.


5. Web Service thực thi phương thức và trả về gi á trị cùng các tham
số xuất cho cơ sở hạ tầng.


6. Cơ sở hạ tầng đồng bộ(serialize) giá trị trả về các tham số vào một
thông điệp SOAP và gởi tới client.


7. Cơ sở hạ tầng trên client giải đồng bộ(deserialize) thông điệp
SOAP chứa giá trị trả về và các tham số và gởi đến đối tượng
proxy.


8. Đối tượng proxy gởi giá trị trả về và các tham số cho client.


<b>III. Giao th</b>

<b>ức triệu gọi Web Services </b>


<b>III.1. HTTP-GET </b>



</div>
<span class='text_page_counter'>(44)</span><div class='page_container' data-page=44>

HUTECH




<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 32 </b>


Ví dụ:


http://localhost/StockTicker1/Service1.asmx/GetName?StockSymb
ol=msft


Xem xét một URL sau đây:


Dấu chấm hỏi cho biết đây là dạng triệu gọi HTTP-GET, tên của biến
<b>được truyền cho phương thức GetName là StockSymbol và có giá trị là: msft. </b>


Kết quả trả về của phương thức là gói dữ liệu được định dạng theo ngôn
ngữ XML với cấu trúc:


<?xml version = “1.0”?>


<[data type]>[value]</[data type]>


<?xml version = “1.0”?>
Ví dụ:


<int>13</int>


Triệu gọi phương thức của Web service bằng HTTP-GET thích hợp khi
tất cả các dữ liệu được truyền có dạng cặp tham số tên/giá trị(name/value
pairs), có ít thuộc tính cần truyền, và độ dài của thuộc tính ngắn. Triệu gọi bằng
giao thức GET cũng được dùng khi không quan tâm đến việc bảo mật dữ liệu.


.Net Framework cung c<b>ấp một lớp tên HttpGetClientProtocol để sử </b>


dụng giao thức HTTP-GET ở phía client.


</div>
<span class='text_page_counter'>(45)</span><div class='page_container' data-page=45>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 33 </b>


<b>III.2. HTTP-POST </b>



Triệu gọi phương thức của Web service bằng giao thức HTTP-POST
chủ yếu dựa vào phương thức chuyển dữ liệu POST của thẻ <form> trong
HTML mà chúng ta vẫn thường dùng khi Submit. Dữ liệu truyền bằng HTTP
-POST có khả năng mã hố và đóng gói đựơc số lượng dữ liệu lớn hơn
HTTP-GET.


Triệu gọi bằng giao thức HTTP-POST thích hợp khi có nhiều thuộc tính
hay tham số cần truyền có độ dài đáng kể. Xét về bảo mật thì HTTP -POST an
tồn hơn HTTP-GET vì giao thức triệu gọi HTTP-POST có thể được mã hoá.


Giống như giao thức HTTP-GET, HTTP-POAST chỉ truyền được dữ
liệu dạng cặp tham số tên/giá trị(name/value pairs).


.Net Framework cung c<b>ấp một lớp tên HttpPostClientProtocol để sử </b>
dụng giao thức HTTP-POST ở phía client.


<b>III.3. SOAP </b>



Chuyển dữ liệu GET/POST của HTTP chủ yếu dùng cơ chế đặt dữ liệu
trong các biến theo khuôn dạng name= value. Dữ liệu chuyển đi chứa rất ít
thơng tin để có thể tự mơ tả như kiểu dữ liệu, chiều dài, sự quan hệ với các dữ
liệu khác. Để mở rộng cách chuyển dữ liệu theo giao thức nền HTTP,


Microsoft và một số công ty khác như IMB, Lotus…đã xây dựng giao thức truy
xuất đối tượng đơn giản SOAP(Simple Object Access Protocol). SOAP sử
dụng cách mô tả dữ liệu của ngôn ngữ định dạng XML để đóng gói thơng tin
cần chuyển đi. SOAP tập trung vào phục vụ cho việc chuyển tham số, dữ liệu
của đối tượng. SOAP là hướng thay thế tốt hơn cho những giao thức triệu gọi
đối tượng phân tán trước đây như CORBA, RMI hay DCOM.


Một thông điệp SOAP được chuyển đi thường gồm có ba phần:


1.<b> Envelop(thơng tin gói): Chứa các mô tả về gói dữ liệu cần </b>
chuyển đi. Các mô tả này được xây dựng thông qua ngôn ngữ
<b>XML. </b>


</div>
<span class='text_page_counter'>(46)</span><div class='page_container' data-page=46>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 34 </b>


3.<b> Remote Procedure Call(Thông tin gọi thủ tục từ xa): Hỗ trợ </b>
mô tả tham số và lời gọi thủ tục của đối tượng phân tán cũng như
nh<b>ận kết quả trả về từ đối tượng. </b>


SOAP có thể được sử dụng để gởi các dối tượng phức tạp như
lớp(class), cấu trúc(struct), dataset.


Một trở ngại khi sử dụng giao thức SOAP là các thông điệp dạng SOAP
có chứa nhiều từ khơng cần thiết, bởi nó sử dụng định dạng XML. Vì vây khi
băng thông(bandwidth) của đường truyền nhỏ và dữ liệu truyền không lớn và
phức tạp thì có thể sử dụng giao thức HTTP-GET hay HTTP-POST.


.Net Framework cung c<b>ấp một lớp tên HttpSoapClientProtocol để sử </b>


dụng giao thức SOAP phía client.


<b>IV. Xây dựng, triển khai và sử dụng Web Services </b>


<b>IV.1. Xây d</b>

<b>ựng Web service </b>



Web Service cung cấp các chức năng cho ứng dụng client trên web. Để
tạo ra Web Service, trước tiên bạn phải chọn ngơn ngữ lập trình và tạo ra một
lớp để thừa kế từ System.Web.Services.WebService.


Mở VS.NET . Chọn File->New->Project để mở hộp thoại New Project.
1. Trong hộp thoại New Project, chọn Visual C# project trong ô Project


Types. Trong ô template, chọn ASP.NET Web Service, trong ô vị trí,
gõ tên và vị trí của Web Service như http://localhost/myService, và
nhấn OK.


</div>
<span class='text_page_counter'>(47)</span><div class='page_container' data-page=47>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 35 </b>


2. Hộp thoại Create New Web xuất hiện trong khi một thư mục Web
được tạo ra.


<i>H ình 3.4: Hộp thoại Create New Web </i>


Khi bạn tạo ra ASP.NET Web Service project, trang default được thể
hiện ở chế độ design, và một file .asmx được tạo ra, bạn viết code để cung cấp
chức năng cho Web Service. Code được lưu trong trong file *.asmx.cs và
được xem như là file code ẩn.



<i>H ình 3.4: Màn hình project Web Services </i>


3. Chọn Click here to switch to code view để viết viết các phương thức
xử lý, trước mỗi phương thức phải có dịng [WebMethod] .


Ví dụ:


[WebMethod(Description=”Add two Integer”)]
Viết một phương thức xử lý công hai số.
public void Add(int a, int b)


{


</div>
<span class='text_page_counter'>(48)</span><div class='page_container' data-page=48>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 36 </b>


<b>IV.2. Tri</b>

<b>ển khai Web service </b>



Khi triển khai Web service trên Web Server, dịch vụ(service) được đưa
lên trên Web và các ứng dụng client có thể truy xuất được. Web service có thể
được triển khai trên Web Server bằng hai cách. Cách thứ nhất là tạo ra một
Web Setup Project và cách thứ hai là copy các files Web service vào trong Web
Server. Ở đây chúng ta chỉ tìm hiểu cách triển khai thứ hai.


<b>IV.2.1. Triển khai Web service bằng cách copy </b>



1. Copy các file của ứng dụng Web service vào thư mục
Inetpub\wwwroot. Bạn chỉ cần copy các files .asmx, Web.config, và
<b>Global.asax vào thư mục ứng dụng và file .dll vào thư mục \bin. </b>


Các bước thực hiện:


<i>H ình 3.6: Màn hình cấu hình IIS </i>


C<b>ấu trúc thư mục của một Web service được triển khai. </b>


2.<b> Mở Internet Services Manager từ thư mục Administrative tools. </b>
3.<b> Mở rộng nút Default Web site. </b>


</div>
<span class='text_page_counter'>(49)</span><div class='page_container' data-page=49>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 37 </b>


<i>H ình 3.7: Hộp thoại Properties của trang web </i>


5. Nhấn vào nút Create trong hộp thoại và để định dạng thư mục ảo như
g<b>ốc của ứng dụng Web Service. </b>


Sau khi định dạng ứng dụng Web Service, dịch vụ Web đã sẵn sàng để
s<b>ử dụng. </b>


<b>IV.2.2. Các thành ph</b>

<b>ần được triển khai trong Web service </b>



1.<b> Thư mục ứng dụng Web(Web application directory) : Đây là </b>
thư mục gốc của Web service. Tất cả các file của Web service được
thể hiện trong thư mục này hay các thư mục con. Cần phải định
dạng thư mục ứng dụng như một ứng dụng Web IIS.


2.<b> File <WebService>.asmx : Đây là đường dẫn URL để các client </b>
truy xuất đến Web Service.



3.<b> File <WebService>.disco(tuỳ chọn): File này mô t</b>ả cơ chế
discovery của Web Service.


</div>
<span class='text_page_counter'>(50)</span><div class='page_container' data-page=50>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 38 </b>


5.<b> Thư mục \Bin: Thư mục này chứa các file nhị phân của Web </b>
service. Nếu bạn không định nghĩalớp Web Service trong cùng file
.asmx, assembly chứa lớp được thể hiện bên trong thư mục \Bin.
Sau khi triển khai Web Service trong Web Server, ứng dụng có thể định
vị trí Web Service bằng cách sử dụng cơ chế Discovery.


<b>IV.2.3. S</b>

<b>ử dụng Web service </b>



Để truy xuất Web Service từ ứng dụng client, cần phải thực hiện các
bước sau đây:


• Thêm Web Reference vào ứng dụng client bằng cách tìm kiếm
Web service muốn sử dụng.


• Phát sinh một lớp Proxy của Web service.


• Tạo ra một đối tượng của lớp proxy trong ứng dụng client.
• Truy xuất Web service bằng cách sử dụng đối tượng proxy.


<b>IV.2.3.1 Thêm Web Reference vào ứng dụng khách </b>



Để sử dụng các dịch vụ của Web service, trước tiên phải xác định vị trí


Web service bằng cơ chế Discovery. Muốn sử dụng Web Service, người lập
trình phải biết được vị trí của Web service và Web service đó có đáp ứng các
yêu cầu hay không. Nếu không biết được dịch vụ đó ở đâu, có thể tìm bằng
UDDI. Để hổ trợ khi tìm kiếm Web service, Visual Studio.NET cung cấp Web
Reference đối với mỗi Web service được sử dụng trong Project. Web
Reference là một thể hiện cục bộ(local representation) của Web Service trong
project.


</div>
<span class='text_page_counter'>(51)</span><div class='page_container' data-page=51>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 39 </b>


1. Click chuột phải vào nút References trong cửa sổ Solution Explorer.
Các bước thực hiện


<i>H ình 3.8: Màn hình Add Web Reference </i>


2. Chọn Add Web Reference từ shortcut menu. Hộp thoại Add Web
Reference xuất hiện.


</div>
<span class='text_page_counter'>(52)</span><div class='page_container' data-page=52>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 40 </b>


3. Trong thanh địa chỉ của hộp thoại Add Web Reference, gõ đường
dẫn của Web service bạn muốn sử dụng.


<i>H ình 3.10: Hộp thoại Add Web Reference </i>


<b>IV.2.3.2. </b>

<b>Phát sinh lớp Proxy </b>




Khi nhấn vào nút Add Reference trong hộp thoại Add Web Reference,
Visual Studio.NET tải mô tả dịch vụ đến máy cục bộ và phát sinh một lớp
proxy c<i><b>ủa Web service. Lớp proxy của Web service chứa các hướng dẫn để gọi </b></i>
mỗi phương thức Web service. Thêm vào đó, lớp proxy sắp xếp(marshals) các
tham số giữa Web service và ứng dụng khách. Visual Studio.NET sử dụng
WSDL để tạo ra lớp proxy. Lớp proxy được mô tả trong file . wsdl. Sau khi
thêm Web Reference đến một Web service và phát sinh một l ớp proxy, bạn
thêm một tham chiếu đến lớp proxy và tạo một đối tượng của lớp proxy trong
<i><b>ứng dụng khách. </b></i>


</div>
<span class='text_page_counter'>(53)</span><div class='page_container' data-page=53>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 41 </b>


<i>H ình 3.11: Màn hình hiển thị các file trong Web Services </i>


File .wsdl chứa lớp proxy được phát sinh bởi Visual Studio.NET. Lớp này
chứa các hướng dẫn để gọi các phương thức của Web Service.


<b>IV.2.3.3. Tạo một đối tượng của lớp Proxy </b>



Lớp proxy được phát sinh bằng cách thêm một tham chiếu đến Web
service được định nghĩa trong namespace của chính nó. Bạn cần phải
thêm(using) namespace của lớp proxy trong ứng dụng khách trước khi tạo một
đối tượng của lớp proxy. Sau khi thêm namespace của lớp proxy trong ứng
dụng, chúng ta có thể tạo ra đối tượng của lớp proxy bằng cách sử dụng toán tử
<b>new</b>. Đối tượng của lớp proxy cho phép gọi các phương thức của Web service
và truy xuất các kết quả giống như bất kỳ các phương thức khác của một thành
phần.



Trong hộp thoại Add Web Reference, tên mặc định của Web Service là
localhost, chúng ta có thể đổi tên theo ý nghĩa của Web Service đó.


Ví dụ


using Applicationname.ErrorService;


: Tên của Web Service là ErrorService, và chúng ta cần tạo ra đối
tượng của lớp Proxy.


</div>
<span class='text_page_counter'>(54)</span><div class='page_container' data-page=54>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 42 </b>


<b>IV.2.3.4. Truy xu</b>

<b>ất Web Service sử dụng một đối </b>


<b>tượng proxy </b>



Đối tượng của lớp proxy chuyển đổi các phương thức được gọi trên
Web Service thành một thông điệp yêu cầu và thông điệp phản hồi để trả về giá
trị mà chúng ta có thể truy xuất trong ứng dụng.


<b>V. Bảo mật </b>



Là một phần của .NET Framework, ASP.NET có một cở sở hạ tầng bảo
mật rất vững chắc. ASP.NET được xây dựng để làm việc với Microsoft Internet
Information Service(IIS), Window 2000, XP, 2003 và filesystem NTFS. Do đó,
có sự tích hợp chặt chẽ với cơ chế bảo mật trong các mơi trường trên.


Vai trị cơ bản của bảo mật trong ASP.NET là giới hạn có lựa chọn truy


xuất đến các phần của trang Web bằng các phương thức sau:


•<b> Authentication: Xác nhận client. </b>


•<b> Authorization: Quyết định client được quyền truy xuất đến tài </b>
nguyên nào mà client đó yêu cầu.


</div>
<span class='text_page_counter'>(55)</span><div class='page_container' data-page=55>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 43 </b>


<b>V.1. </b>

<b>Authentication </b>



Authentication là bước đầu tiên trong ba chức năng nền tảng để bảo mật
<i>ứng dụng Web. Authentication được thực hiện bằng cách sử dụng credentials, </i>
hay m<i>ột số dạng nhận diện. Client phải cung cấp credentials cho IIS và ứng </i>
dụng ASP.NET, thường là username và password.


<i>Credentials </i> sau đó được xác nhận quyền dựa vào sự cấp
quyền(authority). Dựa vào cách mà Authentication được định dạng, sự cấp
quyền đó có thể là bảo mật của Windows 2000,2003,XP hay dựa vào username
và password được lưu trữ, và các quyền được giữ trong file định dạng như
Web.config, cơ sở dữ liệu liên quan như SQL Server, hay file XML.


Authentication được cung cấp thông qua các module code được gọi là
<i>Authentication provider</i>. Authentication provider được hổ trợ bằng các file định
d<i>ạng của ASP.NET, có thể là machine.config hay web.config. </i>


Một đoạn trong file định dạng hổ trợ authentication có nội dung:



configuration>
<system.web>


<authentication mode="Forms" />
</system.web>


</configuration>


Thuộc tính “mode” xác định authentication provider được sử dụng và có thể
có bốn kiểu giá trị như sau:


<b> Các giá trị của thuộc tính </b>


<b>Mode </b> <b>Mô tả </b>


Wind
ows


<b>Windows authentication s</b>ẽ được sử dụng kết hợp với IIS. Đây
là kiểu mặc định.


Form
s


Các yêu cầu không được xác nhận sẽ được gọi đến một trang
đăng nhập để người dùng cung cấp các thông tin xác nhận.


Passp
ort



Dịch vụ xác nhận thương mại tập trung hoá(Centralized
commercial authentication service) được cung cấp bởi Microsoft,
dùng cho những nhà phát triển trang web, cung cấp việc kiểm tra
đăng nhập trên trang.


None Khơng có sự xác nhận nào được thực hiện. Hỗ trợ truy xuất ẩn
danh.


</div>
<span class='text_page_counter'>(56)</span><div class='page_container' data-page=56>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 44 </b>


<b>V.1.1. </b>

<b>Anonymous Access </b>



Truy xuất ẩn danh khi ứng dụng web không quan tâm đến việc người
dùng là ai. Trong trường hợp này, IIS không yêu cầu Credentials và việc xác
nhận không được thực hiện. Cho phép người dùng truy xuất ẩn danh là định
dạng mặc định của các trang Web.


Khi muốn định dạng IIS đối với kiểu truy xuất ẩn danh:
• Mở IIS, chọn Default Web Site>Properties.


<i>Hình 3.13: Hộp thoại default Web Site Properties </i>
• Chọn Tab Directory Security>Edit.


</div>
<span class='text_page_counter'>(57)</span><div class='page_container' data-page=57>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 45 </b>


Nếu Check box “Anonymous access” được check, bất kỳ các yêu cầu


nào sẽ được chấp nhận bởi IIS mà không yêu cầu các Credentials và việc xác
nhận không được thực hiện.


<b>V.1.2. </b>

<b>Windows Authentication </b>



Windows Authentication cung cấp cho nhà phát triển cách nâng cao bảo
mật dựa vào môi trường Windows 2000/2003/XP và hệ thống file NTFS.
Windows Authentication dựa trên cơ chế bảo mật của IIS. Sử dụng Windows
Authentication, một mức bảo mật cao được xây dựng trong ứng dụng Web mà
không cần viết code hay viết code rất ít. Điều quan trọng và cần thiết khi sử
dụng Windows Authentication là người dùng phải sử dụng mơi trường
Windows và đã có một user account trên Web Server hay trong Windows có
chứa Web Server đó.


Để định dạng IIS dùng Windows Authentication, theo các bước khi định
dạng Anonymous access. Bỏ chọn trong checkbox “Anonymous access”. Chọn
một hay nhiều checkbox bên dưới “Authenticated Access”.


Nếu chọn nhiều hơn một kiểu xác nhận truy xuất, IIS sẽ sử dụng xác
nh<b>ận Interrgrated Windows đầu tiên, nếu như nó được check. Tiếp đến là </b>
<b>Digest Authentication, và cuối cùng là Basic Authentication. </b>


Có ba loại Windows Authentications: Basic, Digest và integrated
Windows Authentication.


<b>V.1.2.1. Role - Base Security </b>



</div>
<span class='text_page_counter'>(58)</span><div class='page_container' data-page=58>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 46 </b>



<i>Hình 3.15: Mànhình Computer Management</i>

<b>V.1.2.2. Basic Authentication </b>



Basic Authentication là kiểu đơn giản và ít bảo mật nhất của Windows
Authentication. Trong kiểu xác nhận này, trình duyệt đưa ra một dialog box
chuẩn được cung cấp bởi Windows để người dùng nhập vào Credentials, gồm
có username và password. Các Credentials này sau đó đươc so xánh với các
account người dùng hợp lệ trên domain server hay trên máy cục bộ. Sau đó
credential được xác nhận và người dùng truy xuất đến các nguồn tài nguyên
yêu cầu.


<b>V.1.2.3. Digest Authentication </b>



</div>
<span class='text_page_counter'>(59)</span><div class='page_container' data-page=59>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 47 </b>


<b>V.1.2.4. Integrated Windows Authentication </b>



Integrated Windows Authentication sử dụng Credentials của người dùng
hiện tại cung cấp khi họ đăng nhập vào Windows. Dialog Box sẽ không xuất
hiện cho người dùng nhập thông tin nếu như Credentials cung cấp lúc đăng
nhập vào Windows không tương xứng với tài nguyên được yêu cầu.


Integrated Windows Authentication gồm có hai loại xác nhận khá c
nhau: NTLM(NT Lan Manager) chanllenge/response, và Kerberos. NTLM là
giao thức được sử dụng trong Windows NT, Windows 2000 Work Groups và
những môi trường hoà lẫn các Domain NT và 2000. Nếu môi trường là
Windows 2000 hay Windows XP Active Directory Domain, giao thức NTLM


tự động disable và giao thức xác nhận được chuyển sang Kerberos.


<b>V.1.3. </b>

<b>Passport Authentication </b>



Passport là dịch vụ xác nhận tập trung hoá của Microsoft. Dịch vụ này
cung cấp đăng nhập cho các trang web đã đăng ký với dịch vụ Passport, chấp
nhận các yêu cầu trong hợp đồng, đã trả phí yêu cầu, và đã cài đặt Passport
SDK.


<b>V.1.4. </b>

<b>Form Authentication </b>



Trong Form Authentication, một form đăng nhập được cung cấp cho
người dùng chưa được xác nhận để tiếp nhận thông tin. Thông tin này sẽ được
code trong ứng dụn g thực hiện việc kiểm tra bằng cách so xánh thông tin
credentials với username và password được chứa trong file lưu trữ. File lưu trữ
có thể là file định dạng Web.config, cơ sở dữ liệu, file XML, cơ sở dữ liệu của
Windows hay Active Directory.


</div>
<span class='text_page_counter'>(60)</span><div class='page_container' data-page=60>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 48 </b>


<b>V.1.4.1. Login Form </b>



Form đăng nhập cung cấp giao diện cho người dùng nhập username và
password, nó chứa code để kiểm tra đăng nhập.


Using System.Web.UI.Security;


Minh hoạ



void btn_Click(Object Source, EventArgs E)
{


if (CheckLogin(txtUserName.Text,txtPassword.Text))
{


lblMessage.Text = "Authenticated: <br>" +
txtUserName.Text +


"<br>" + txtPassword.Text;

FormsAuthentication.RedirectFromLoginPage(txtUserName.Text,
}
false);
else
{


lblMessage.Text = "Not Authenticated: <br>" +
txtUserName.Text +


"<br>" + txtPassword.Text;
}


}


Hàm CheckLogin do người dùng viết để kiểm tra username và password
người dùng nhập vào bằng cách so xánh với thông tin trong database, file
XML…



<b>Hàm RedirectFromLoginPage nh</b>ận hai tham số
• Tham số thứ nhất




: là username được liên kết với cookie.
Username không nhất thiết phải là tên account, đây là tên được
dùng cho cookie.


Tham số thứ hai: có kiểu bool để chỉ định trạng thái cookie có
liên tục hay khơng, khi ở trạng thái true, user không cần phải
đăng nhập lần thứ hai khi yêu cầu tài nguyên.


<b>V.1.4.2. </b>

<b>Định dạng IIS </b>



Chọn IIS>Default Web Site>Properties>Security Directory>Edit


Bỏ chọn tất cả các check box bên dưới “Authenticated Access” để
disable Window Authentication.


</div>
<span class='text_page_counter'>(61)</span><div class='page_container' data-page=61>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 49 </b>


<b>V.1.4.3. </b>

<b>Định dạng ASP.NET </b>



Công việc cuối cùng để thực hiện Form Authentication là định dạng
ASP.NET bằng cách định dạng file Web.config.


Để định dạng cho ứng dụng Web, đặt file định dạng Web.config trong


thư mục của ứng dụng trong trong thư mục gốc ảo( virtual root directory).


<configuration>


Minh hoạ


<system.web>


<authentication mode = "Forms">
<forms name="ProgAspNetCookie"


loginUrl="csLoginForm.aspx" />
</authentication>


<authorization>


<deny users="?" />
</authorization>


</system.web>
</configuration>


<b>V.2. </b>

<b>Authorization </b>



Khi người dùng đã được xác nhận, server phải kiểm tra xem người dùng
có được cho phép truy xuất đến tài ngun u cầu hay khơng. Đây là q trình
Authorization(cáp phép). Có hai loại cấp phép cho người dùng. File
Authorization và URL Authorization.


<b>V.2.1. </b>

<b>File Authorization </b>




Bất kỳ hệ điều hành nào có hổ trợ NTFS(Windows 2000,XP, Windows
2003 Server) sử dụng một hệ thống bảo mật dựa trên danh sách điều khiển truy
xuất ACL(Access Control Lists). ACLs điều khiển truy xuất đến bất kỳ file hay
thư mục dựa vào việc truy vấn thông tin thành viên trong Windows domain hay
Active Directory , và Groups mà thành viên đó tham gia.


</div>
<span class='text_page_counter'>(62)</span><div class='page_container' data-page=62>

HUTECH



<b>Nguyễn Duy Hồ -- V õ Đức Hiền </b> <b> Trang 50 </b>


nguyên. Mỗi người dùng được đưa vào một Group thích hợp và Group đó được
cung cấp các quyền cần thiết.


ACL có thể được kiểm tra trên bất kỳ file hay thư mục nào bằ ng cách
click chuột phải vào file hay thư mục đó, chọn Tab Security.


<i>Hình 3.16: Access Control List </i>


Có hai điều cần quan tâm khi sử dụng cơ chế File Authorization.
• Người dùng ứng dụng Web phải có Windows Account.


• Quản lý ACL đối với trang Web lớn và phức tạp rất khó khăn.


<b>V.2.2. </b>

<b>URL Authorization </b>



Chúng ta có thể cấp quyền người dùng dựa vào một danh sách hay các
quy tắc(list hay rules), cả hai cùng nằm trong một file định dạng. Cách này
được gọi là URL Authorization.



Các điều kiện truy xuất được chứa trong phần <authorization> của file
Web.config. Đối với tất cả các file định dạng, điều kiện được gán cho thư mục
hiện tại và các thư mục con nếu như các thư mục con này khơng có file
Web.config bên trong.


</div>
<span class='text_page_counter'>(63)</span><div class='page_container' data-page=63>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 51 </b>


Với mỗi thành phần truy xuất, bên trong có chứa một hay nhiều thuộc
tính. Các thuộc tính của thành phần truy xuất gồm có.


<b>T</b>


<b>ên </b> <b>Mơ tả </b>


R
oles


Xác định một hay nhiều vai trị, nếu có nhiều vai trị thì cách nhau
bằng dấu phẩy.


U
sers


Xác định một hay nhiều người dùng. Nhiều người dùng được cách
nhau bằng dấu phẩy. Có hai trạng thái đặc biệt là: * chỉ mọi người và
?chỉ những người chưa được xác nhận(Anonymous users)


V


erbs


Xác định hành động được gán cho user. Các giá trị hợp lệ là GET,
HEAD, hay POST.


<i>Bảng 3.2: Chức năng phân quyền trong bảo mật Authorization </i>
Ví dụ:


<location path="pages/public.aspx" >


Phần Authorization File Web.config


<system.web>


<authorization>


<allow users="*" />
</authorization>
</system.web>


</location>


<location path="pages" >
<system.web>


<authorization>


<allow users="Dan, Jesse " roles="Administrators" />
</authorization>



</div>
<span class='text_page_counter'>(64)</span><div class='page_container' data-page=64>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 52 </b>


<b>Chương IV: </b>

<b>PHÂN TÍCH - THIẾT KẾ - THỰC HIỆN </b>


<b>I. Phân tích </b>



<b>I.1. Nhi</b>

<b>ệm vụ </b>



Đề tài sẽ có hai phần chính là phần Web Server và phần Add-in.


<b>I.1.1. Ph</b>

<b>ần Webserver </b>



• Phần admin website:




cung cấp các trang web để cập nhật thông
tin về lỗi, về sách/chương/phần liên quan đến thông tin lỗi dựa
trên mã l<b>ỗi. </b>


Phần client website:




chỉ cung cấp trang web để tìm kiếm thông
tin liên quan đến lỗi (từ mã lỗi tương ứng) để nhận về phần giới
thiệu các sách liên quan, các chương/phần và bài học liên quan
<b>trong các sách đó. </b>



Phần web service:


<b>I.1.2. Ph</b>

<b>ần Add-in </b>



cung cấp hàm (với input: mã lỗi, output: phần
giới thiệu các sách liên quan, các chương/phần và bài học liên
<b>quan trong các sách đó) để tìm kiếm thông tin liên quan đến lỗi. </b>
Tạo một add-in nhằm truy cập Microsoft Visual Studio .Net IDE 2003
để lấy thơng tin về lỗi lập trình của người học/lậptrình viên, sau đó gọi hàm (từ
phần webservice nêu trên) để thực hiện truy vấn và hiển thị kết quả (dạng các
liên kết hyperlink) trong Add-in cho người học/lập trình viên xem (đồng thời
người học/lậptrình viên có thể bấm vào các hyperlink này để mở browser truy
c<b>ập chính xác đến mục liên quan đến lỗi đang bị xãy ra). </b>


<b>I.2. </b>

<b>Phương án </b>



<b>I.2.1. Xây dựng ứng dụng Admin Website và Web Service </b>


<b>theo mơ hình </b>

<b>đa tầng </b>



</div>
<span class='text_page_counter'>(65)</span><div class='page_container' data-page=65>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 53 </b>


Trong các ứng dụng khơng phân tầng, mã chương trình, cùng với định
dạng kết xuất, xử lý dữ liệu trộn lẫn vào nhau. Điều này sẽ gây khó khăn đối
với các dự án lớn cần hoạt động theo nhóm và tách biệt trong bước phát triển.
Trong mơ hình phân tầng, các nghiệp vụ xử lý của ứng dụng được cài đặt thành
những đối tượng riêng biệt.


Ứng dụng được phân theo ba tầng:



<b>1. Tầng dịch vụ người dùng (User services): chứa các trang </b>
ASP.NET(.aspx,asmx) định dạng giao diện và triệu gọi các đối
tượng ở tầng xử lý nghiệp vụ.


<b>2. Tầng xử lý dữ liệu (Data Layer): Các đối tượng ở phần </b>
Bussiness Layer thực hiện các chức năng chính của chương trình
bao gồm mã lệnh tách rời phần định dạng HTML. Giao tiếp với
tầng xử lý dữ liệu để trao đổi dữ liệu.


<b>3. Tầng xử lý dữ liệu (Data Layer): Bao gồm các đối tượng thực </b>
hiện việc kết nối và truy xuất cơ sở dữ liệu.


Mơ hình ba lớp này thư ờng được sử dụng trong các ứng dụng thương
mại điện tử thay cho mơ hình client/server. Các chức năng xử lý chính của ứng
dụng được nằm trong tầng xử lý nghiệp vụ và tầng xử lý dữ liệu. Nếu muốn
chuyển ứng dụng sang môi trường khác, chẳng hạn xây dựng ứng dụng
Desktop, chúng ta có thể sử dụng lại những đối tượng này mà khơng cần phải
thay đổi gì thêm.


Ứng dụng gồm 7 đối tượng xử lý:


<b>1. Books: ph</b>ục vụ việc quản lý thông tin sách
<b>2. Parts: ph</b>ục vụ việc quản lý phần trong sách
<b>3. Chapters: ph</b>ục vụ quản lý chương của sách
<b>4. Items: ph</b>ục vụ quản lý các mục trong sách
<b>5. </b> <b>CodeErrors: </b>phục vụ quản lý lỗi


<b>6. ErrorItems: ph</b>ục vụ quản lý chi tiết lỗi
<b>7. Users: ph</b>ục vụ quản lý thành viên



</div>
<span class='text_page_counter'>(66)</span><div class='page_container' data-page=66>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 54 </b>


<b>I.2.2. Xây d</b>

<b>ựng Web Client theo mơ hình phân tán sử dụng </b>


<b>cơng ngh</b>

<b>ệ Web Service </b>



Mơ hình phân tán là một kỹ mang lại rất nhiều lợi ích vì có thể được
triệu gọi qua mạng và sử dụng lại trên nhiều hệ điều hành khác nhau. ASP.NET
cung cấp kiến trúc hạ tầng để xây dựng các ứng dụng phân tán trên Web theo
giao thức triệu gọi SOAP, cho phép thực hiện chuyển đổi dữ liệu XML một
cách dễ dàng và hiệu quả. Đối với chức năng tìm kiếm thơng tin lỗi, phía Client
chỉ cần cung cấp mã lỗi, mã lỗ sẽ được truyền trên mạng đến Web Server để
tìm kiếm lỗi có trong cơ sở dữ liệu của Server. Khi tìm thấy, thơng tin lỗi sẽ
được đóng gọi theo định dạng SOAP và chuyển đến cho Client xử lý.


<b>I.2.3. Sử dụng hệ quản trị cơ sở dữ liệu SQL Server 2000 </b>



Microsot SQL Server là hệ quản trị cơ sở dữ liệu(DBMS) mạnh mẽ,
cung cấp cho người dùng những chức năng hoàn hảo trên lĩnh vực cơ sở dữ
liệu. SQL được tối ưu để chạy trên mỗi trường cơ sở dữ liệu rất lớn và có thể
phục vụ cùng lúc cho hàng ngàn người dùng. Microsoft SQL Server 2000 có
thể được kết hợp rất ăn ý với các server như IIS , E-Commerce, Proxy Server…


<b>I.2.4. Ngôn ngữ sử dụng: ASP.NET </b>



</div>
<span class='text_page_counter'>(67)</span><div class='page_container' data-page=67>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 55 </b>



<b>I.2.5. Phân tích các nghi</b>

<b>ệp vụ của hệ thồng bằng ngơn ngữ </b>


<b>UML </b>



Ngơn ngữ mơ hình hợp nhất(UML) là một tập hợp mơ hình quan niệm
với hệ thống ký hiệu. Bản thân UML không là một phương pháp lập trình vì nó
khơng có một cách xử lý nào cả. Nhưng khi được ghép nối với Enterprise
component modeling(ECM), nó sẽ trở thành một phương pháp lập trình. Ngơn
ngữ UML dùng kiểu phân tích và thiết kế hướng đối tượng để xây dựng nên mơ
hình của một hệ thống hướng đối tượng. Các chương trình này có thể được
dùng để tạo mã thực thi. Ngôn ngữ UML được phát triển bởi Grady Boock,
Jame Rumbaugh và Ivar Jacobson, dùng các khái niệm từ phương pháp Booch,
OMT & OOSE và kết hợp ý kiến từ các nhà phương pháp học khác. Bằng cách
hợp nhất các quan niệm từ các phương pháp lập trình hướng đối tượng chủ đạo.
UML có tham vọng đưa ra một tiêu chuẩn cho việc phân tích và thiết kế hướng
đối tượng.


Mơ hình hoạt động cũng như các nghiệp vụ của đề án được thiết kế bằng
ngôn ngữ UML thông qua phần mềm Rational Rose. Đây là một ngôn ngữ mô
phỏng các nghiệp vụ, các tác vụ của hệ thống phần mềm thông qua các biểu đồ
lớp, biểu đồ use case, biểu đồ tuần tự ... Qua đó giúp người dùng hình dung
được các chức năng cũng như các thao tác mà phần mềm lần lượcthực hiện.


Cụ thể đối với đề tài này, biểu đồ use case cho thấy các nghiệp vụ mà
phần mềm hỗ trợ và các actor thực hiện các chức năng trong mơ hình đó. Cịn
biểu đồ tuần tự (Sequence diagram) cho thấy các bước thực thi lần lược của hệ
thống.


<b>I.2.6. Xây d</b>

<b>ựng Add-in </b>




</div>
<span class='text_page_counter'>(68)</span><div class='page_container' data-page=68>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 56 </b>


.NET (VSMacros), bằng cách tạo các mở rộng cho IDE được gọi là Add-in.
Các Add-in được biên dịch thành các ứng dụng mà có thể thao tác với môi
trường làm việc và các tác vụ tự động hố. Các Add-in có thể được triệu gọi
theo một trong các cách khác nhau,bao gồm Add-in Manager,toolbarcommand
hay các nút, các dòng lệnh, hay thông qua các sự kiện như khởi động IDE.


Trong phần hỗ trợ tới mơ hình đối tượng chung được cung cấp bởi VS
tới all các ngôn ngữ lập trình , các cơng cụ và các gói của nó, riêng với các
ngơn ngữ lập trình trên Visual Studio .NET cũng có thể cung cấp thê m các kỹ
thuật riêng của chúng tới mơ hình đối tượng tự động hố. Và tất nhiên bạn có
thể tạo một đối tượng Add-in mà làm việc rất tốt với bất kỳ ngôn ngữ nào trên
Visual Studio .NET, hay đối với ngôn ngữ nào được ghép vào để cung cấp
những điểm đặc biệt của một ngôn ngữriêng biệt, chẳng hạn VB hay VC++.


<b>II. Thiết kế và thực hiện </b>



<b>II.1. Thi</b>

<b>ết kế cơ sở dữ liệu </b>


<b>II.1.1. Bi</b>

<b>ểu đồ quan hệ </b>



</div>
<span class='text_page_counter'>(69)</span><div class='page_container' data-page=69>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 57 </b>


Cơ sở dữ liệu của hệ thống gồm có 7 bảng để quản lý thơng tin lỗi, sách
và người dùng. Mỗi bảng mang ý nghĩa cụ thể như sau:



<b>Books: </b>Lưu trữ thông tin về sách bao gồm tên sách, tên tác giả, mã
sách, và hình ảnh của sách, và một mã(BookID) để quản lý số lượng sách.


<b>Parts</b>: Lưu trữ thông tin về các phần của sách, gồm có tên phần, mã
sách liên quan, và một mã(PartID) để quản lý số lượng phần của các sách.


<b>Chapters</b>: Lưu trữ thông tin về các chương trong sách, gồm có tên
chương, mã phần liên quan và một mã(ChapterID) để quản lý số lượng chương
trong các sách.


<b>Items</b>: Lưu trữ thông tin liên quan đến các mục trong sách, gồm có tên
mục, nội dung mục, mã chương có liên quan và một mã(ItemID) để quản lý số
lượng mục trong các sách.


<b>CodeErrors</b>: Lưu trữ mã lỗi lập trình, tên lỗi, mơ tả về lỗi, và một
mã(ErrorID) để quản lý số lượng lỗi quản lý.


<b>ErrorItems</b>: Lưu trữ thông tin chi tiết lỗi, gồm mã lỗi và mã các mục
<b>liên </b>quan đến lỗi đó. Ngồi ra cịn có mã(ErrorItemID) để quản lý số lượng chi
tiết lỗi.


</div>
<span class='text_page_counter'>(70)</span><div class='page_container' data-page=70>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 58 </b>


<b>II.1.2. Các b</b>

<b>ảng dữ liệu của hệ thống </b>


<b>II.1.2.1. B</b>

<b>ảng ErrorCode </b>



<b>T_CodeErrors </b>



Các trường Khóa Kiểu dữ liệu Độ dài Ý nghĩa


ErrorID X Int 4 Mã lỗi


CodeError Varchar 50 Mã lỗi lập trình


ErrorName Nvarchar 200 Tên lỗi lập trình


Description Nvarchar 4000 Mơ tả về lỗi lập


trình


Type Bit 1 Lỗi hay thông báo


<i>Bảng 4.1: Bảng ErrorCode </i>

<b>II.1.2.2. B</b>

<b>ảng ErrorItems </b>



<b>T_ErrorItems </b>


Các trường Khóa Kiểu dữ liệu Độ dài Ý nghĩa


ErrorItemID X Int 4 Mã chi tiết lỗi


ErrorID X Int 4 Mã lỗi


ItemID X Int 4 Mã mục liên
quan đến lỗi
<i>Bảng 4.2: Bảng ErrorItems</i>


<b>II.1.2.3. B</b>

<b>ảng Items </b>




<b>T_Items </b>


Các trường Khóa Kiểu dữ liệu Độ dài Ý nghĩa


ItemID X Int 4 Mã mục


ItemName NVarchar 150 Tên mục


ItemContent NVarchar 4000 Nội dung mục


ChapterID Int 4 Mã chương
<i>Bảng 4.3: Bảng Items</i>


<b>II.1.2.4. B</b>

<b>ảng Chapters </b>



<b>T_Chapters </b>


Các trường Khóa Kiểu dữ liệu Độ dài Ý nghĩa


ChapterID X Int 4 Mã chương


ChapterName Nvarchar 150 Tên chương
PartID Int 4 Mã phần


</div>
<span class='text_page_counter'>(71)</span><div class='page_container' data-page=71>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 59 </b>


<b>II.1.2.5. B</b>

<b>ảng Parts </b>




<b>T_Parts </b>


Các trường Khóa Kiểu dữ liệu Độ dài Ý nghĩa


PartID X Int 4 Mã phần


PartName Nvarchar 150 Tên phần


BookID Int 4 Mã sách
<i>Bảng 4.5: Bảng Parts</i>


<b>II.1.2.6. B</b>

<b>ảng Books </b>



<b>T_Books </b>


Các trường Khóa Kiểu dữ liệu Độ dài Ý nghĩa


BookID X Int 4 Mã sách


BookName Nvarchar 250 Tên sách


Author Nvarchar 50 Tên tác giả


ISBN Varchar 50 Mã sách


Picture Varchar 50 Hình ảnh
<i>Bảng 4.6: Bảng Books</i>


<b>II.1.2.7. B</b>

<b>ảng Users </b>




<b>T_Users </b>


Các trường Khóa Kiểu dữ liệu Độ dài Ý nghĩa


UserName X Varchar 50 Tên đăng nhập
PassWord Varchar 50 Mật khẩu


uRole Bit 1 Vai trò
<i>Bảng 4.7: Bảng Users</i>


<b>II.1.3. Các Store Procedure </b>



STT Tên STOREPROCEDURE Chức năng


1 usp_Books_Insert <sub>Thêm sách </sub>


2 usp_Books_Update <sub>C</sub>ập nhật sách


3 usp_Books_Delete <sub>Xóa sách </sub>


4 usp_Books_CheckISBN <sub>Ki</sub>ểm tra mã sách


trùng


5 usp_Books_GetAllBooks <sub>L</sub>ấy tất cả các sách


6 usp_Books_GetBookDetail <sub>L</sub>ấy chi tiết sách


7 usp_Parts_Insert <sub>Thêm ph</sub>ần vào sách



</div>
<span class='text_page_counter'>(72)</span><div class='page_container' data-page=72>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 60 </b>


9 usp_Parts_Update <sub>C</sub>ập nhật người dùng


10 usp_Parts_GetAllParts <sub>L</sub>ất tất cả các phần


11 usp_Parts_GetBookParts <sub>Ch</sub>ọn các phần có mã


sách nhập vào


12 usp_Parts_GetPartDetail <sub>L</sub>ấy chi tiết phần


13 usp_Chapters_Insert Thêm chương


14 usp_Chapters_Delete Xóa chương


15 usp_Chapters_Update <sub>C</sub>ập nhật chương


16 usp_Chapters_GetPartID <sub>L</sub>ấy mã phần của


chương


17 usp_Chapters_GetAllChapters <sub>L</sub>ấy các chương của


phần


18 usp_Chapters_GetChapterDetail <sub>L</sub>ấy chi tiết chương



19 usp_Items_Insert <sub>Thêm m</sub>ục


20 usp_Items_Delete <sub>Xóa m</sub>ục


21 usp_Items_Update <sub>C</sub>ập nhật mục


22 usp_Items_GetItemDetails <sub>L</sub>ấy chi tiết mục


23 usp_Items_GetChapterItems <sub>L</sub>ấy chương của mục


24 usp_Items_GetAllItems <sub>L</sub>ấy tất cả mục của


chương


25 usp_CodeErrors_Insert <sub>Thêm mã l</sub>ỗi


26 usp_CodeErrors_Delete <sub>Xóa mã l</sub>ỗi


27 usp_CodeErrors_Update <sub>C</sub>ập nhật mã lỗi


28 usp_CodeErrors_GetCodeErrorDetai


l Lấy chi tiết lỗi


29 usp_CodeErrors_GetAllCodeErrors <sub>L</sub>ấy tất cả các lỗi


30 usp_ErrorItems_Insert <sub>Thêm mã m</sub>ục và mã


lỗi.



31 usp_ErrorItems_Delete <sub>Xóa mã m</sub>ục và mã


lỗi


32 usp_ErrorItems_Update <sub>C</sub>ập nhật mã mục và


lỗi


33 usp_ErrorItems_GetErrorItemDetai


ls Lấy chi tiết mã mục


</div>
<span class='text_page_counter'>(73)</span><div class='page_container' data-page=73>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 61 </b>


<b>II.2. Phân tích h</b>

<b>ệ thống </b>


<b>II.2.1. </b>

<b>Sơ đồ họat động </b>



Xem thong tin chi tiet loi
Quan tri co so du lieu


Lay danh sach ma loi


Hien thi thong tin loi


Lay thong tin loi thong qua
ma loi



Add-In


Duyet thong tin loi qua trinh
duyet web
LogIn


Bien dich


User
DangKy


Client


Admin LogOut


<i>Hình 4.2: Sơ đồ hoạt động của hệ thống </i>


<b>Mô tả: hệ thống gồm các Actor : Admin, Add-In, Client và user. Trong </b>
đó các Actor này thực hiện các chức năng sau:


<b>1. Actor Admin </b>
Mơ tả


Khi đã hồn tất cơng việc quản trị cơ sở dữ liệu, Admin có thể Logout
khỏi hệ thống.


<b>: Khi Admin cung c</b>ấp username và password để đăng nhập vào hệ
thống, hệ thống sẽ kiểm tra username và password được nhập vào.


<b>+ N</b>ếu thông tin hợp lệ, hệ thống sẽ cho phép Admin vào hệ thống và


thực hiện các chức năng quản trị cơ sở dữ liệu.


</div>
<span class='text_page_counter'>(74)</span><div class='page_container' data-page=74>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 62 </b>


<b>2. Actor Client </b>
Mơ tả


<b>• N</b>ếu đã có username thì hệ thống gởi thơng báo và yêu cầu thay
đổi username.


: Đầu tiên, client phải đăng ký một account với hệ thống bằng các
cung cấp username và password.


Hệ thống sẽ kiểm tra username có trùng hay khơng.


<b>• N</b>ếu thơng tin đăng ký hợp lệ, thông tin đăng ký được lưu vào hệ
thống.


Sau khi đã đăng ký, người dùng có thể đăng nhập vào hệ thống với
account vừa tạo bằng cách nhập vào username và password. Nếu đăng nhập
thành cơng, client có thể tra cứu và xem chi tiết thông tin vể lỗi đó.


Khi kết thúc tìm kiếm, người dùng có thể LogOut khỏi hệ thống.
<b>3. Add-In </b>


Nếu quá trình biên dịch xảy ra lỗi, trình Add-In sẽ truy cập vào hệ thống
và lấy về danh sách mã lỗi, sau đó hiển thị trên một tab của OutputWindow.
Cột đầu tiên chứa mã lỗi, cột thứ hai chứa liên kết có mang theo mã lỗi này.


Sau khi user click vào liên kết này, một trang chứa đựng thông tin chi tiết về lỗi
này sẽ hiển thị. Ngồi việc tham khảo thơng tin này, user có thể click vào liên
kết của các mục liên quan đến lỗi và có được thơng tin của các mục này.


<b>4. User </b>


</div>
<span class='text_page_counter'>(75)</span><div class='page_container' data-page=75>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 63 </b>


<b>II.2.2. </b>

<b>Sơ đồ tuần tự chức năng của Add-in </b>



Visual Studio


2003 : Add-In : User Web Server : Admin <sub> : Client</sub>


1: LoadAdd-In()
2:


4: LayDSMaLoi()
5:


6: HienThiDSMaLoi()


10: LayThongTinChiTietLoi()
11:


13: HienThiTTCTLoiTrenTrangChinh()


21: XemThongTinLoiQuaTrinhDuyet()


16: QuanTriCSDL()


17:
8: LogIn()


9:


14: LogIn()
15:


19: LogOn()
20:
3: BienDich()


12: LogOut()
7: XemThongTinMotLoi()


18: LogOut()


22: LogOut()


</div>
<span class='text_page_counter'>(76)</span><div class='page_container' data-page=76>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 64 </b>


<b>II.2.3. </b>

<b>Sơ đồ tuần tự chức năng Web Admin </b>


<b>II.2.3.1. </b>

<b>Sơ đồ tuần tự chức năng quản lý sách </b>



: Admin Login Form BookForm BookBusine<sub>ss</sub> BookData Books



4: LayDSSach()
9: TraVeDataSet
10: LayMaSach()
15: TraVeChiTietSach
16: LayMaSach()
21:
22: LayMaSach()
27:
28: ThemSach()
34:
5: LayDSSach()
8: TraVeDataSet
11: LayThongTinCTSach()
14: TraVeChiTietSach
17: CapNhatSach()
20:
23: XoaSach()
26:
30: ThemSach()
33:
6: ChayStoreProc
7: TraVeDataSet
12: ChayStoreProc
13: TraVeDataSet
18: ChayStoreProc
19:
24: ChayStoreProc
25:
31: ChayStoreProc
32:


1: Login()
2:
35: LogOut()
3: QuanTriSach()
29: KiemTraTrungMaSach


</div>
<span class='text_page_counter'>(77)</span><div class='page_container' data-page=77>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 65 </b>


<b>II.2.3.2. </b>

<b>Sơ đồ tuần tự chức năng quản lý phần trong sách </b>



: Admin Form Login Form Part <sub>Bussiness</sub>Part Part Data Parts


1: LogIn()
2:


4: LayMaSach()
3: QuanTriCacPhanCuaSach()


5: LayDSCacPhan()


6: ChayStoreProc
7: TraVeDataset
8: TraVeDataset


9: TraVeDataset
10: LayMaPhan()


11: CapNhatThongTinPhan()



12: ChayStoreProc
13:
14:


15:
16: LayMaPhan()


17: XoaPhan()


18: ChayStoreProc
19:
20:


21:
22: ThemPhanMoi()


23: ThemPhanMoi


24: ChayStoreProc
25:
26:


27:
28: LogOut()


</div>
<span class='text_page_counter'>(78)</span><div class='page_container' data-page=78>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 66 </b>



<b>II.2.3.3. </b>

<b>Sơ đồ tuần tự chức năng quản lý chương </b>



: Admin Form Login ChapterForm BussinessChapter Chapter Data Chapters


1: LogIn()
2:


3: QuanTriChuongSach()


4: LayMaPhan()


5: LayDSCacChuong()


6: ChayStoreProc
7: TraVeDataset
8: TraVeDataset


9: TraVeDataSet
10: LayMaChuong()


11: CapNhatChuong()


12: ChayStoreProc
13:
14:


15:
16: LayMaChuong()


17: XoaChuong()



18: ChayStoreProc
19:
20:


21:
22: ThemChuong()


23: ThemChuong()


24: ChayStoreProc
25:
26:


27:
28: LogOut()


</div>
<span class='text_page_counter'>(79)</span><div class='page_container' data-page=79>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 67 </b>


<b>II.2.3.4. </b>

<b>Sơ đồ tuần tự chức năng quản lý mục </b>



: Admin Form Login Form Item <sub>Bussiness</sub>Item Item Data Items


1: SingIn()
2:


3: QuanTriMuc()



4: LayMaChuong()


5: LayDSCacMuc()


6: ChayStoreProc
7: TraVeDataset
8: TraVeDataset


9: TraVeDataset
10: LayMaMuc()


11: CapNhatMuc()


12: ChayStorProc
13:
14:


15:
16: LayMaMuc()


17: XoaMuc()


18: ChayStoreProc
19:
20:


21:
22: ThemMucMoi()


23: ThemMucMoi()



24: ChayStoreProc
25:
26:


27:
28: LogOut()


</div>
<span class='text_page_counter'>(80)</span><div class='page_container' data-page=80>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 68 </b>


<b>II.2.3.5. </b>

<b>Sơ đồ tuần tự chức năng quản lý lỗi </b>



: Admin Form Login Form Error <sub>Bussiness</sub>Error Error Data Errors


1: LogIn()
2:


3: QuanTriLoi()


4: LayDSCacLoi()


5: LayDSCacLoi()


6: ChayStoreProc
7: TraVeDataSet
8: TraVeDataSet


9: TraVeDataSet


10: LayMaLoi()


11: CapNhatLoi()


12: ChayStoreProc
13:
14:


15:
16: LayMaLoi()


17: XoaLoi()


18: ChayStoreProc
19:
20:


21:
22: ThemLoiMoi()


24: ThemLoiMoi()


25: ChayStoreProc
26:
28:


27:


29: LogOut()



23: KiemTraTrungMaLoi


</div>
<span class='text_page_counter'>(81)</span><div class='page_container' data-page=81>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 69 </b>


<b>II.2.3.6. </b>

<b>Sơ đồ tuần tự chức năng quản lý thêm mục vào lỗi </b>



: Admin Form Login <sub>ErrorItem</sub>Form <sub>Bussiness</sub>ErrorItem ErrorItem <sub>Data</sub> ErrorItems
1: LogIn()


2:


3: QuanTriMucVaLoi()


4: LayMaChuong()


5: LayDSCacMuc()


6: ChayStoreProc
7: TraVeDataset
8: TraVeDataset


9: TraVeDataSet
10: ThemMucVaLoi()


11: ThemMucVaLoi()


12: ThemMucVaLoi()
13:



14:
15:


16: LogOut()


</div>
<span class='text_page_counter'>(82)</span><div class='page_container' data-page=82>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 70 </b>


<b>II.2.3.7. </b>

<b>Sơ đồ tuần tự chức năng quản lý chi tiết lỗi </b>



: Admin Form Login <sub>ErrorItemDetail</sub>Form <sub>Bussiness</sub>ErrorItem ErrorItemDat<sub>a</sub> Error Items


1: SingIn()
2:


3: QuanTriChiTietMucVaLoi()


4: LayDSCacMucVaLoi()


5: LayDSCacMucVaLoi()


6: ChayStoreProc
7: TraVeDataset
8: TraVeDataset


9: TraVeDataset
10: LayMaMucVaLoi()



11: CapNhatMuc()


12: ChayStorProc
13:
14:


15:
16: LayMaMucVaLoi()


17: XoaMucVaLoi()


18: ChayStoreProc
19:
20:


21:


22: LogOut()


</div>
<span class='text_page_counter'>(83)</span><div class='page_container' data-page=83>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 71 </b>


<b>II.2.4. </b>

<b>Sơ đồ tuần tự cho chức năng tìm kiếm trong Web </b>


<b>Client </b>



: User Form LogIn Form Tim <sub>Kiem</sub> WebService Database


1: LogIn()



7: TimKiemThongTinLoi()


8: LayMaLoi()


9: LayThongTinLoi()
10:
11:


13:
12: SingOut()


2: KiemTraDangNhap()


3: KiemTraDangNhap()
4:


5:
6:


</div>
<span class='text_page_counter'>(84)</span><div class='page_container' data-page=84>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 72 </b>


<b>II.3. Ph</b>

<b>ần Add-In </b>



Sau khi tạo một project dạng Add -In, ta coding cho nghiệp vụ truy cập
vào hệ thống của Visual Studio .NET 2003 để lấy về danh sách mã lỗi mà
chương trình sau khi biên dịch có lỗi p hát sinh. Danh sách mã lỗi được hiển thị
ở tab Add-In Window Tool như ảnh (a.1) và các liên kết đến dạng hyperlink,
chứa thông tin mã lỗi. Sau khi user click vào một trong những liên kết này,


chương trình sẽ truy cập tới Web Services, dựa trên mã lỗi lấy về các thông tin
liên quan đến lỗi đó và hiển thị trên một trang của VS .NET 2003. User cũng
có thể tham khảo thêm thơng tin chi tiết hơn, cụ thể lỗi đó nằm trong mục nào,
phần nào, chương nào.


Nhưng trước hết, user phải cài đặt phần công cụ hỗ trợ kiểm lỗi.


<b>II.3.1. </b>

<b>Cài đặt phần Add-in </b>



Phần này sẽ cài đặt công cụ hỗ trợ công cụ kiểm tra lỗi vào môi trường
Visual Studio .NET 2003.


</div>
<span class='text_page_counter'>(85)</span><div class='page_container' data-page=85>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 73 </b>


<b>II.3.2. </b>

<b>Thêm đối tượng Add-in thông qua hộp thoại Add-in </b>


<b>Manager </b>



Sau khi cài đặ t song, ta mở Visual Studio .NET 2003, sau đó vào tool
<b>menu  Add-In Manager </b>


<i>Hình 4.13: Hộp thoại Add-In Manager </i>


Hợp thoại này cho phép người dùng chọn đối tượng Add-In được phép
plugin vàomôi trường Visual Studio .NET 2003.


Check vào Item “My AddIn” và chọn cho phép đối tượng này bắt đầu
lúc khởi động (check vào CheckBox của “My AddIn” ở cột StartUp). Hoặc có
thể plugout đối tượng nào đó ra khỏi mơi trường Visual Studio .NET 2003


bằng<b>cách uncheck vào đó. </b>


<b>II.3.3. Hi</b>

<b>ển thị danh sách lỗi </b>



Sau bước thực hiện trên, ta thấy bên dưới của VS.NET 2003 xuất hiện
một khung “C# Tool Window”, đây chính là bộ phận Add-In vừa mới được
<b>thêm vào. </b>


</div>
<span class='text_page_counter'>(86)</span><div class='page_container' data-page=86>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 74 </b>


Sau đó, ta tiến hành biên dịch chương trình, nếu q trình biên dịch có
lỗi xảy ra, thì chương trình Add-In sẽ truy cập vào hệ thống và đem về danh
sách các mã lỗi trong quá trình biên dịch. Bên phải mỗi lỗi là một liên kết, liên
kết này sẽ mang thông tin chi tiết về lỗi đó hiển thị lên một trang trong
VS.NET 2003. Điều này được thực hiện nhờ trình Add-In truy cập vào web
server, dùng mã lỗi này để truy vấn tới cơ sở dữ liệu và mang về thông tin liên
quan đến lỗi đó và hiển thị trên một trang trong VS.NET 2003.


<b>II.3.4. Hiển trị trang thông tin chi tiết lỗi </b>



Trang này hiển thị thông tin chi tiết liên q uan đến lỗi. Từ đó, ta có thể
biết được đó là lỗi gì, những mơ tả về lỗi đó. Đồng thời, ta cũng biết được lỗi
đó nằm ở mục nào, chương nào, phần nào và trong sách nào. Ta có thể click
tr<b>ực tiếp lên các mục đó để có thêm nhiều thơng tin bổ ích khác </b>


</div>
<span class='text_page_counter'>(87)</span><div class='page_container' data-page=87>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 75 </b>



<b>II.4. Ph</b>

<b>ần Web Admin </b>



<b>II.4.1. Màn hình chính qu</b>

<b>ản lý sách </b>



Chức năng: Hiển thị danh sách tất cả các sách trong cơ sở dữ liệu, ngồi
ra cịn cung cấp các điều khiển giúp xem chi tiết, thêm mới, cập nhật, xoá,
chỉnh sửa và thêm phần(Part) vào sách đó.


<i>Hình 4.16: Màn hình quản lý sách </i>


STT TÊN ĐIỀU KHIỂN CHỨC NĂNG


1 New Book Gọi màn hình nhập sách mới


2 Delete Gọi màn hình xố sách có mã được chọn


3 Edit Gọi màn hình cập nhật sách có mã được chọn


4 Biểu tượng cuốn sách Gọi màn hình thêm phần cho sách có mã đã
chọn.


</div>
<span class='text_page_counter'>(88)</span><div class='page_container' data-page=88>

HUTECH



<b>Nguyễn Duy Hồ -- V õ Đức Hiền </b> <b> Trang 76 </b>


<b>II.4.2. Màn hình chi ti</b>

<b>ết sách </b>



Chức năng: Hiển thị chi tiết thơng tin sách.



<i>Hình 4.17: Màn hình hi</i>

<i>ển thị chi tiết</i>

<i> sách </i>



STT TÊN ĐIỀU KHIỂN CHỨC NĂNG


1 OK Trở về màn hình sách


<i>B<b>ảng 4.10: Chức năng các control trong màn hình chi tiết sách </b></i>

<b>II.4.3. Màn hình thêm sách mới </b>



Chức năng: Cung cấp chức năng thêm sách mới vào cơ sở dữ liệu.
Admin điền thông tin sách vào textbox, chọn hình ảnh và nhấn Add để thêm
sách m<b>ới vào cơ sở dữ liệu. </b>


</div>
<span class='text_page_counter'>(89)</span><div class='page_container' data-page=89>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 77 </b>


STT TÊN ĐIỀU KHIỂN CHỨC NĂNG


1 Add Thêm sách vào cơ sở dữ liệu


2 New Thêm sách mới.


3 Back Trở về màn hình sách.


4 Browse Chọn hình ảnh cho sách.


<i>Bảng 4.11: Chức năng các control trong màn hình thêm sách mới </i>


<b>II.4.4. Màn hình xố sách </b>




Chức năng: Cho phép xóa sách có thơng tin hiển thị.


<i>Hình 4.19: Màn hình xố sách </i>


STT TÊN ĐIỀU KHIỂN CHỨC NĂNG


1 Delete Xố sách có thơng tin hiển thị.


</div>
<span class='text_page_counter'>(90)</span><div class='page_container' data-page=90>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 78 </b>


<b>II.4.5. Màn hình ch</b>

<b>ỉnh sửa sách </b>



Chức năng: Cho phép người dùng thay đổi thơng tin sách có mã được chọn.


<i>Hình 4.20: Màn hình cập nhật sách </i>


STT TÊN ĐIỀU KHIỂN CHỨC NĂNG


1 Update Cập nhật thông tin sách.


2 Back Trở về màn hình sách.


3 Browse Chọn hình cho sách.


<i>B<b>ảng 4.13: Chức năng các control trong màn hình cập nhật sách </b></i>


<b>II.4.6. Màn hình qu</b>

<b>ản lý phần(Parts) </b>




Chức năng: Cung cấp chức năng cập nhật, xóa tên phần có mã được
chọn. Ngịai ra, người dùng có thể thêm phần mới vào sách, gọi trang thêm
chương cho phần được chọn bằng cách chọn biểu tượng cuốn sách nhỏ.


</div>
<span class='text_page_counter'>(91)</span><div class='page_container' data-page=91>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 79 </b>


STT TÊN ĐIỀU KHIỂN CHỨC NĂNG


1 New Part Hiển thị textbox nhập tên phần.


2 OK Lưu tên phần vào sách.


3 Cancel Kết thúc nhập tên phần.


4 Edit Cập nhật tên phần


5 Del Xố phần có mã được chọn


6 Biểu tượng cuốn sách Thêm chương vào phần được chọn.


<i>B<b>ảng 4.14: Chức năng các control trong màn hình quản lý phần trong sách </b></i>


<b>II.4.7. Màn hình qu</b>

<b>ản lý chương </b>



Chức năng: Hiển thị các chương thuộc phần, sách lựa chọn. Cho phép
người dùng thêm các chương vào phần được chọn, cập nhật, xóa chương được
chọn. Người dùng có thể thêm mục vào chương được chọn bằng cách chọn


biểu tương cuốn sách nhỏ.


<i>Hình 4.22: Màn hình quản lý chương trong sách </i>


STT TÊN ĐIỀU KHIỂN CHỨC NĂNG


1 New Chapter Hiển thị textbox nhập tên chương.


2 OK Lưu tên chương vào sách.


3 Cancel Kết thúc nhập tên chương


4 Edit Cập nhật tên chương


5 Del Xố chương có mã được chọn


</div>
<span class='text_page_counter'>(92)</span><div class='page_container' data-page=92>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 80 </b>


<b>II.4.8. Màn hình qu</b>

<b>ản lý mục </b>



Chức năng: Hiển thị danh sách các mục của chương, phần, sách đã chọn.
Cho phép người dùng chọn chi tiết để xem thông tin đầy đủ về mục, xóa mục
được chọn hay thêm mục mới vào chương được chọn.


<i>Hình 4.23: Màn hình quản lý mục trong sách </i>


STT TÊN ĐIỀU KHIỂN CHỨC NĂNG



1 New Item Hiển thị textbox nhập tên và nội dung mục mới.


2 Details Chi tiết về mục được chọn


3 Del Xoá mục được chọn.


<i>Bảng 4.16: Chức năng các control trong màn hình quản lý mục trong sách </i>

<b>II.4.9. Màn hình chi ti</b>

<b>ết và cập nhật nội dung mục </b>



Chức năng: Cho phép người dùng xem thông tin chi tiết mục, và cập
nhật thông tinmục.


</div>
<span class='text_page_counter'>(93)</span><div class='page_container' data-page=93>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 81 </b>


STT TÊN ĐIỀU KHIỂN CHỨC NĂNG


1 Update Cập nhật thông tin trong textbox vào sách.


2 Cancel Kết thức chức năng cập nhật.
<i>Bảng 4.17: Chức năng các control trong màn hình cập nhật mục </i>


<b>II.4.10. Màn hình thêm m</b>

<b>ục mới </b>



Chức năng: Cho phép người dùng thêm mục mới vào chương được
chọn.


<i>Hình 4.25: Màn hình thêm mục mới </i>



STT TÊN ĐIỀU KHIỂN CHỨC NĂNG


1 Add new Thêm nội mục mới vào sách.


2 Cancel Kết thức chức năng cập nhật.
<i>Bảng 4.18: Chức năng các control trong màn hình thêm mục mới </i>


<b>II.4.11. Màn hình qu</b>

<b>ản lý lỗi </b>



</div>
<span class='text_page_counter'>(94)</span><div class='page_container' data-page=94>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 82 </b>


<i>Hình 4.26: Màn hình quản lý lỗi </i>


STT TÊN ĐIỀU KHIỂN CHỨC NĂNG


1 New Error Hiển thị phần nhập lỗi.


2 OK Thêm lỗi mới vào cơ sở dữ liệu.


3 Cancel Kết thúc phần nhập lỗi.


4 Details Gọi trang chi tiết lỗi được chọn


5 Delete Gọi trang xoá lỗi được chọn


6 Biểu tượng cuốn sách Gọi trang thêm các mục cho lỗi được chọn.


7 ErrorItemDetail Gọi trang chi tiết các mục của lỗi.


<i>Bảng 4.19: Chức năng các control trong màn hình quản lý lỗi </i>


<b>II.4.12. Màn hình chi tiết lỗi </b>



Chức năng: Cho phép người dùng xem thông tin chi tiết lỗi. Đồng thời
cho phép cập nhật thông tin lỗi.


</div>
<span class='text_page_counter'>(95)</span><div class='page_container' data-page=95>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 83 </b>


STT TÊN ĐIỀU KHIỂN CHỨC NĂNG


1 Update Cập nhật thông tin lỗi


2 Cancel Trở về màn hình lỗi.
<i>Bảng 4.20: Chức năng các control trong màn hình cập nhật lỗi </i>


<b>II.4.13. Màn hình xố l</b>

<b>ỗi </b>



Chức năng: Cho phép người dùng xóa lỗi có thơng tin được chọn.


<i>Hình 4.28: Màn hình xố lỗi </i>


STT TÊN ĐIỀU KHIỂN CHỨC NĂNG


1 Delete Xố lỗi có thơng tin hiển thị.


2 Cancel Trở về màn hình lỗi.
<i>Bảng 4.21: Chức năng các control trong màn hình xố lỗi </i>



<b>II.4.14. Màn hình thêm mục cho lỗi </b>



</div>
<span class='text_page_counter'>(96)</span><div class='page_container' data-page=96>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 84 </b>


<i>Hình 4.29: Màn hình thêm mục vào lỗi </i>


STT TÊN ĐIỀU KHIỂN CHỨC NĂNG


1 >> Thêm mục được chọn


2 << Huỷ chọn mục được chọn.


3 Add Thêm các mục vào lỗi có mã cho trước.


4 Cancel Trở về màn hình lỗi.


5 Errors Trở về màn hình lỗi.


<i>Bảng 4.22: Chức năng các control trong màn hình thêm mục vào lỗi </i>


<b>II.5. Ph</b>

<b>ần Web Client </b>



<b>II.5.1. Màn hình tìm ki</b>

<b>ếm </b>



Chức năng: Cho phép người dùng nhập vào mã lỗi và hiển thị các mục,
chương, phầnvà sách liên quan đến mã lỗi đó.



</div>
<span class='text_page_counter'>(97)</span><div class='page_container' data-page=97>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 85 </b>


STT TÊN ĐIỀU KHIỂN CHỨC NĂNG


1 Search Tìm kiếm các mục liên quan đến lỗi.


2 Tên các mục Hiển thị chi tiết nội dung mục.
<i>Bảng 4.32: Chức năng các control trong màn hình tra cứu lỗi </i>


<b>II.5.2. Màn hình n</b>

<b>ội dung mục liên quan đến lỗi </b>



Chức năng: Hiển thị nội dung của mục có thơng tin liên quan đến lỗi.


<i>Hình 4.31: Màn hình nội dung mục liên quan đến lỗi </i>


<b>II.6. Ph</b>

<b>ần Web Service </b>


<b>II.6.1. T</b>

<b>ổng quát </b>



</div>
<span class='text_page_counter'>(98)</span><div class='page_container' data-page=98>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 86 </b>


<b>II.6.2. Chi ti</b>

<b>ết các phương thức </b>



STT TÊN PHƯƠNG THỨC CHỨC NĂNG


1 AddUser Nhận vào UserName và Password, trả
về kiểu String là UserName nếu thành


công và chuổi trốnng nếu không thành
công. Giúp người dùng đăng ký thành
viên.


2 GetCodeErrorDetail Nhận vào mã lỗi, trả về chi tiết lỗi dạng


một đối tượng.


3 GetItemContent Nhận vào mã mục, trả về một dataset là


nội dung của mục có mã tươg ứng.


4 GetItemsList Nhận vào mã lỗi, trả về là một dataset


chứa các mục có liên quan đến mã lỗi
nhập vào.


5 GetChapterList Nhận vào mã lỗi, trả về là một dataset


chứa các chương của cuốn sách có
chứa mục liên quan đến mã lỗi nhập
vào.


6 GetPartList Nhận vào mã lỗi, trả về một dataset


chứa các phần có chứa chương, mục
liên quan đến mã lỗi nhập vào.


7 GetBookList Nhận vào mã lỗi, trả về dataset chứa



các sách có chứa phần, chương, mục
liên quan đến mã lội nhập vào.


8 IsMember Nhận vào UserName, kiểm tra xem


UserName này đã có trong database
hay chưa, trả về giá trị bool, giúp kiểm
tra thành viên khi đăng ký.


9 ValidateUser Nhận vào UserName và Password,


kiểm tra xem UserName và Password
có đúng hay khơng, trả về giá trị kiểu
bool.


</div>
<span class='text_page_counter'>(99)</span><div class='page_container' data-page=99>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 87 </b>


<b>Chương V: </b>

<b>ĐÁNH GIÁ DỰ ÁN VÀ HƯỚNG PHÁT </b>



<b>TRI</b>

<b>ỂN </b>



<b>I. </b>

<b>Đánh giá </b>



<b>I.1. Hoàn thành </b>



<b>I.1.1 Ph</b>

<b>ần Add-In </b>



Hoàn thành các thao tác Add-in vào bộ VS.NET 2003; lấy và hiển thị


danh sách mã lỗi khi chương trình biên dịch có lỗi; truy vấn tới web server,
thơng qua hyperperlink có chứa mã lỗi để lấy về thông tin chi tiết liên quan đến
lỗi đó; trên trang hiển thị thơng tin về lỗi, user có thể click trực tiếp lên các
m<b>ục, liên quan đến lỗi để có thêm nhiều thơng tin về lỗi. </b>


<b>I.1.2 Phần Web Server </b>



<b>• Web Admin: Các thao tác thêm ,xoá, s</b>ửa lổi, chi tiết lỗi,
sách, phần, chương, mục liên quan đến lỗi đã hoàn thành, giao diện dể hiểu,
giúp người dùng có thể dể dàng sử dụng. Các xử lý đã được thiết kế theo đúng
mơ hình ba l<b>ớp. </b>


<b>• Web Client: Ch</b>ức năng tìm kiếm thơng tin liên quan đến mã
lỗi được hoàn thành. Được truy xuất trên mạng cục bộ đến cơ sở dữ liệu của
<b>Server. </b>


<b>• Web Service: Các ch</b>ức năng nhận mã lỗi và trả về tên sách,
phần, chương mục liên quan đà hoàn thành, ngoài ra Web Service còn cung cấp
chức năng kiểm tra người dùng đã đăng ký, kiểm tra đăng nhập và thêm người
dùng m<b>ới hổ trợ cho chức năng đăng ký. </b>


<b>I.2. </b>

<b>Chưa hồn thành </b>



Bên c<b>ạnh đó, vẫn có những vấn đề nhỏ mà đề án chưa hoàn tất </b>


</div>
<span class='text_page_counter'>(100)</span><div class='page_container' data-page=100>

HUTECH



<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 88 </b>


<b>I.2.2. Ph</b>

<b>ần Web Server: </b>




• Phần Web Amdin: Giao diện cịn chưa đẹp.


• Phần Web Server: Bảo mật chưa cao, cho phep người dùng
đăng ký và khi sử mức bảo mật là đăng nhập để xử dụng.


• Phần Web Client: Giao diện chưa đẹp, đối với mỗi mã lỗi chỉ
tìm chính xác mã lỗi đó, khơng xử lý chức năng tìm mã lỗi gần giống với mã
lỗi cung cấp.


<b>II. </b>

<b>Hướng phát triển </b>



Đây là một đề án rất hay và có nhiều hướng phát triển. Chúng ta hãy
tưởng tượng các phần có khả năng plugin, chúng ngày càng có nhiều chức năng
hơn, trở nên thật sự hữu ích hơn, đáp ứng hầu như tất cả các mong muốn của
bạn. Đó là nhờ các bộ phận Add-in này. Chúng ta có thể tạo ra nhiều Add -in
với nhiều chức năng cập nhật, thật sự hữu ích cho các phần mềm ứng dụng
chẳng hạn như Win, Word, Exel, Access...


</div>
<span class='text_page_counter'>(101)</span><div class='page_container' data-page=101>

HUTECH


Ngày xu?t b?n 14/2/2003, Mã sách(ISBN) 0-321-11359-4


2. .NET Web Services Solutions, Tác gi? Kris Jamsa, N?m xu?t b?n: 2003, Mã
sách(ISBN): 0782141722


3. Programming ASP.NET, 2nd Edition, Tác gi? O’Reilly, Ngày xu?t b?n 9/2003, Mã
sách(ISBN)0-596-00487-7


4. Expert Web Services Security in the .NET Platform, Tác gi? Brian
Nantz và Laurence Moroneym, N?m xu?t b?n 2005, Mã sách(ISBN) 1590591151



B. TRANG WEB.





</div>

<!--links-->

×