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>
<i>ĐỀ TÀI: </i>
<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>
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.
<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>
<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.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.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>
<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>
<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>
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
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
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
<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>
<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>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>
<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>
<b>Nguyễn Duy Hồ -- V õ Đức Hiền </b> <b> Trang 1 </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.
Đầ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.
<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 2 </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>
<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 3 </b>
<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
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>
<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 5 </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.
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ơ
<b>DTE </b>
<b>Events </b>
Nhận xét:
<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
ByVal Action As EnvDTE.vsBuildAction) Handles
bldevents.OnBuildDone
MsgBox("Build complete")
End Sub
End Module
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
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.
<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 7 </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
<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
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ú:
<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 9 </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ú:
<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 10 </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>
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
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ú:
<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")
OWp.OutputString("Some Text")
End Sub
Để 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.
<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
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>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
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
<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.
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.
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.
<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 15 </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>
<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.
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ì
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>
<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 17 </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.
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
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>
<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>
•<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ó.
<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>
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>
<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
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
<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 21 </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.")
<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 22 </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
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.")
<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 23 </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
<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
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.
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.
<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.")
<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 26 </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
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ự.
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.
<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 27 </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>
• 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ó
<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 28 </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>
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>
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>
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>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.
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>
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>
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>
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>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>
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ự
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>
Để 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>
<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 31 </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
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>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>
<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 33 </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.
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,
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>
<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>
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.
<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)
{
<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 36 </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.
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>
<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>
<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>
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.
<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.
Để 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.
Để sử dụng các dịch vụ của Web service, trước tiên phải xác định vị trí
<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.
<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>
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>
<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.
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.
<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 42 </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.
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
•<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.
<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 43 </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.
<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 44 </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.
<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
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>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 46 </b>
<i>Hình 3.15: Mànhình Computer Management</i>
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>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 47 </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
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.
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.
<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 48 </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.
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.
<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 49 </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
<configuration>
Minh hoạ
<system.web>
<authentication mode = "Forms">
<forms name="ProgAspNetCookie"
loginUrl="csLoginForm.aspx" />
</authentication>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</configuration>
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ấ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.
<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.
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.
<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
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>
<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 52 </b>
Đề tài sẽ có hai phần chính là phần Web Server và phần Add-in.
• 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:
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>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
<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 54 </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ý.
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>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 55 </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>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>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.
<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 58 </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>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>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>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
<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 59 </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>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>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>
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
<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
<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 61 </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à
<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.
<b>4. User </b>
<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 63 </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()
17:
8: LogIn()
9:
14: LogIn()
15:
19: LogOn()
20:
3: BienDich()
12: LogOut()
7: XemThongTinMotLoi()
18: LogOut()
22: LogOut()
<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 64 </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:
<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 65 </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()
<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 66 </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()
<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 67 </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()
<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 68 </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
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
<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 69 </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()
<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 70 </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()
<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 71 </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:
<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 72 </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,
Nhưng trước hết, user phải cài đặt phần công cụ hỗ trợ kiểm lỗi.
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.
<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 73 </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
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>
<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.
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>
<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 75 </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.
<b>Nguyễn Duy Hồ -- V õ Đức Hiền </b> <b> Trang 76 </b>
Chức năng: Hiển thị chi tiết thơng tin sách.
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>
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>
<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>
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ị.
<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 78 </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>
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ỏ.
<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>
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
<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
<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 80 </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>
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.
<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>
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>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.
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.
<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>
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>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>
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 đó.
<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>
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>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 86 </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
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.
<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 87 </b>
Hoàn thành các thao tác Add-in vào bộ VS.NET 2003; lấy và hiển thị
<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ên c<b>ạnh đó, vẫn có những vấn đề nhỏ mà đề án chưa hoàn tất </b>
<b>Nguyễn Duy Hoà -- V õ Đức Hiền </b> <b> Trang 88 </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.
Đâ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...
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.