Report DNN Portal

51
Cơ bản về Portal 1.1. Portal là gì? Portal, tên đầy đủ là Web Portal, là một hệ thống hoạt động trên Web, định danh và xác thực người dùng đăng nhập, từ đó sẽ cung cấp một giao diện web để người dùng dễ dàng truy cập, khai thác thông tin và dịch vụ cũng như thao tác, tuỳ biến các công việc tác nghiệp của mình một cách nhanh chóng và đơn giản. Portal có các tính năng giúp người quản trị thu thập, quản lý nhiều nguồn thông tin khác nhau, từ đó phân phối chúng dưới dạng các dịch vụ cho từng người dùng khác nhau tuỳ thuộc vào nhóm quyền, vào nhu cầu cũng như mục đích của người dùng đó. Portal thực hiện việc này hết sức linh động, từ những công việc như tìm xem và đặt mua sách trong một kho hàng trực tuyến, xem và thay đổi thông tin về sinh viên và giáo viên trên các ứng dụng quản lý giảng dạy, đến việc đăng và chia sẻ các thông tin, tài nguyên, bài viết trên các diễn dàn hay cung cấp việc truy cập thống nhất và thuận lợi đến các thông tin nội bộ trong một website của công ty... Portal như một cổng vào vạn năng cho người dùng tìm kiếm thông tin và tác nghiệp một cách thuận lợi và dễ dàng. 1.2. Sự phát triển của web portal Khái niệm “Web Portal” đã xuất hiện từ khá lâu, chỉ sau khi ra đời WWW một thời gian ngắn. Ban đầu, các website chỉ như các báo quảng cáo điện tử, chứa các thông tin của một doanh nghiệp để khách hàng của họ có thể truy cập để xem và theo dõi một cách thuận tiện. Lúc đó, Portal được dùng để chỉ một trang chủ, chứa các liên kết đến các nội dung trong một website nào đó. Ngoài ra, nó còn chứa một công cụ tìm kiếm nội bộ, cho phép người dùng dễ dàng tìm các thông tin nằm trong nội dung các trang web. Chính vì vậy, cái tên Web Portal mang ý nghĩa: một cái “cổng” để truy nhập vào website. Web Portal tựa như một danh bạ Web (Web directory) liên kết với một search engine đơn giản, tất cả chỉ dùng nội bộ trong một website. Sau thời gian đầu, các website không chỉ mang ý nghĩa đại diện để giới thiệu của các công ty, chúng trở thành những

Transcript of Report DNN Portal

Page 1: Report DNN Portal

Cơ bản về Portal

1.1. Portal là gì?

Portal, tên đầy đủ là Web Portal, là một hệ thống hoạt động trên Web, định danh và xác thực người dùng đăng nhập, từ đó sẽ cung cấp một giao diện web để người dùng dễ dàng truy cập, khai thác thông tin và dịch vụ cũng như thao tác, tuỳ biến các công việc tác nghiệp của mình một cách nhanh chóng và đơn giản. Portal có các tính năng giúp người quản trị thu thập, quản lý nhiều nguồn thông tin khác nhau, từ đó phân phối chúng dưới dạng các dịch vụ cho từng người dùng khác nhau tuỳ thuộc vào nhóm quyền, vào nhu cầu cũng như mục đích của người dùng đó. Portal thực hiện việc này hết sức linh động, từ những công việc như tìm xem và đặt mua sách trong một kho hàng trực tuyến, xem và thay đổi thông tin về sinh viên và giáo viên trên các ứng dụng quản lý giảng dạy, đến việc đăng và chia sẻ các thông tin, tài nguyên, bài viết trên các diễn dàn hay cung cấp việc truy cập thống nhất và thuận lợi đến các thông tin nội bộ trong một website của công ty... Portal như một cổng vào vạn năng cho người dùng tìm kiếm thông tin và tác nghiệp một cách thuận lợi và dễ dàng.

1.2. Sự phát triển của web portal

Khái niệm “Web Portal” đã xuất hiện từ khá lâu, chỉ sau khi ra đời WWW một thời gian ngắn. Ban đầu, các website chỉ như các báo quảng cáo điện tử, chứa các thông tin của một doanh nghiệp để khách hàng của họ có thể truy cập để xem và theo dõi một cách thuận tiện. Lúc đó, Portal được dùng để chỉ một trang chủ, chứa các liên kết đến các nội dung trong một website nào đó. Ngoài ra, nó còn chứa một công cụ tìm kiếm nội bộ, cho phép người dùng dễ dàng tìm các thông tin nằm trong nội dung các trang web. Chính vì vậy, cái tên Web Portal mang ý nghĩa: một cái “cổng” để truy nhập vào website. Web Portal tựa như một danh bạ Web (Web directory) liên kết với một search engine đơn giản, tất cả chỉ dùng nội bộ trong một website.

Sau thời gian đầu, các website không chỉ mang ý nghĩa đại diện để giới thiệu của các công ty, chúng trở thành những công cụ tác nghiệp trực tuyến rất thuận tiện dành cho cả khách hàng, đối tác và các nhân viên cũng như ban quản trị doanh nghiệp. Do đó các tính năng quan trọng nên tích hợp vào một website như các tính năng đăng nhập và xác thực người dùng, các tính năng quản lý nội dung, tính năng cá nhân hoá, đa ngôn ngữ cũng như các tính năng tác nghiệp cụ thể đối với từng website. Web Portal cung cấp khả năng tích hợp các tính năng này một cách dễ dàng thành một trang web duy nhất. Web Portal đầu tiên kiểu này là Americal Online (AOL - _http://www.aol.com/ )

Hiện tại, Web Portal không chỉ là một “cổng vào”, dẫn đường người dùng truy cập website, mà đã trở thành một siêu website, nghĩa là ngoài chứa đựng mọi thông tin và dịch vụ cần có như một website thông thường, nó còn có khả năng quản trị giao diện cũng như nội dung của nhiều website, thêm bớt không những nội dung mới mà còn các dịch vụ mới, tích hợp các module thông dụng nhất như các forum, chat room, blog hay RSS feed…và quan trọng là, cung cấp việc truy cập các nguồn thông tin rất đa dạng và khác nhau này chỉ thông qua một lần đăng nhập duy nhất (single sign-on).

Bên cạnh đó khả năng lưu trữ lớn với CSDL cho phép lưu trữ khối lượng thông tin lớn (hàng GB) dưới nhiều hình thức: text, picture, audio, video…

Page 2: Report DNN Portal

Khả năng bảo mật cao với sự áp dụng các giao thức bảo mật tiên tiến nhất, tất cả các thông tin được mã hóa trước khi truyền đi. Hệ thống được bảo mật ở nhiều mức như: Mức hệ thống, mức cơ sở dữ liệu, mức chương trình.

Một Web Portal nổi tiếng hiện nay là My Yahoo! (_http://my.yahoo.com/) của Yahoo, người dùng chỉ cần đăng nhập một lần duy nhất trong trang này để truy cập vào một trang web riêng mà Yahoo đã thiết kế sẵn, với nhiều module có sẵn như tin tức, bản tin thời tiết, bản đồ… Ngoài ra ở trang My Yahoo cũng có các link liên kết đến các ứng dụng web của Yahoo quen thuộc như Messenger, Mail, Group, Blog, Music… và người dùng sẽ không cần phải đăng nhập lại.

Sang Tiếng Việt, Web Portal được dịch là “Cổng giao tiếp điện tử”, “Cổng giao dịch điện tử” hoặc ngắn gọn hơn: “Cổng điện tử”. Tuy nhiên, cũng như tên tiếng Anh của chúng, các từ này thật sự chưa thể phản ánh hết được chính xác thế nào là một Portal

Mô hình portal

Industry

Enterprise, Legacy &

Business IntelligenceUser Data

and

InformationCommunication

&

Collaboration

Web Pages & Links

Process Automation

Servcies

Supplier

Government

Customer

Wireless

Web

Page 3: Report DNN Portal

Hình ảnh về một portal

3. Các loại Portal

Có nhiều cách phân loại Portal, ở đây phân loại theo mục đích sử dụng cũng như quy mô thì có thể chia các Portal hiện có thành ba loại:

3.1. Các Portal công cộng (Puclic Portal)

Các Portal loại này thường giống như khái niệm về Portal ở những thời kỳ đầu, được thiết kế ra dành cho một lượng rất lớn người dùng dễ dàng truy cập vào các ứng dụng trên web (web-based) khác thông qua các liên kết và hộp tìm kiếm chỉ bằng một lần đăng nhập duy nhất. Nổi tiếng nhất trong loại Portal này là các Portal My Yahoo, AOL hay Excite. Các Portal kiểu này hướng đến đại đa số người dùng, do vậy chúng thường tập trung vào khả năng cá nhân hoá (Personalization), đa ngôn ngữ (Localization), phát triển các tính năng phổ biến sao cho người dùng có thể sử dụng dễ dàng. Khả năng quản lý số lượng người dùng rất lớn cũng như cho phép tìm kiếm nhanh thông tin từ một lượng dữ liệu khổng lồ là thế mạnh của loại portal này tuy nhiên vì phục vụ số đông nên chúng không dành cho các công việc nghiệp vụ cụ thể nào cả.

3.2. Các Portal tác nghiệp (Enterprise Portal)

Các Portal loại này quản lý số lượng người dùng không nhiều bằng các loại Portal công cộng, nhưng cũng rất lớn. Các Portal loại này chuyên dùng cho các doanh nghiệp lớn, phục vụ cho tác nghiệp, chuyên làm các công việc nghiệp vụ như quản lý mạng lưới bán lẻ, ngân hàng, website bán hàng cỡ lớn hay quản lý tài nguyên công ty... Do vậy, chúng được thiết kế rất tốt, thực hiện được các nghiệp vụ phức tạp, liên kết nhiều kiểu dữ liệu khác nhau. Các Portal này rất đắt, chỉ những công ty vừa và lớn trên thế giới mới sử dụng. Ở Việt Nam, hầu hết các hãng dùng loại này là các công ty đa quốc gia hay các

Page 4: Report DNN Portal

công ty liên doanh lớn. Các Portal này không khác gì các phần mềm Business Solution (phần mềm giải pháp nghiệp vụ) như Microsoft Solomon hay Lotus Domino, chỉ khác là chúng hoạt động trong môi trường Web. Có thể kể ra đây một số các Portal loại này - loại Portal chuyên nghiệp nhất - như Microsoft SharePoint, Oracle ApplicationServer, IBM WebSphere...

3.3. Các Portal Website (Website Portal)

Các Portal kiểu này thường dùng để tạo ra các Website, chính xác hơn là các Website có thể tùy biến (customizable website). Các Portal này cung cấp các tính năng rất cơ bản và chung, giúp các nhà phát triển web có thể dễ dàng tạo ra một website cho riêng mình. Các Portal này hỗ trợ các tính năng cá nhân hoá và đa ngôn ngữ ở mức vừa phải, có thể thêm vào các mô đun tác nghiệp không quá phức tạp. Để làm được điều này, các Portal được mở một phần hoặc hoàn toàn mã nguồn, để người dùng Portal (thường là quản trị Website) có thể tự xây dựng các mô đun, tất nhiên là theo chuẩn của Portal, để tích hợp vào website của mình hoặc thậm chí đem bán cho các site khác có cùng nguồn gốc. Các portal này tương đối đơn giản, chỉ sử dụng một vài cơ sở dữ liệu phổ biến, tuy nhiên cũng không kém phần linh động khi tuỳ biến giao diện cũng như thao tác nghiệp vụ.

Hiện nay các Portal kiểu này được sử dụng nhiều nhất, cả ở trên thế giới cũng như Việt Nam. Các Portal này thường miễn phí hoặc được bán với giá rất rẻ. Các công ty thiết kế web thường chọn các Portal này để mở rộng, tạo ra các website cho khách hàng mà không mất nhiều công sức để nghiên cứu cũng như cài đặt. Ở Việt nam, các Portal Website hay được dùng nhiều nhất là uPortal, Liferay, JetSpeed, ExoPlatform và DotNetNuke. Bốn Portal đầu được viết bằng Java, và đã được thương mại hoá (vẫn miễn phí các phiên bản cũ hơn).

4. Tính năng của hệ thống Portal cần xây dựng

Hệ thống cần xây dựng có các tính năng như sau:4.1. Đăng nhập một lần (Single Sign-On - SSO)

Để truy cập vào dữ liệu và dịch vụ khác nhau, người dùng chỉ cần đăng nhập một lần duy nhất. Hệ thống Portal thực hiện điều này thông qua quá trình quản lý phiên (Session Management). Thông qua quá trình này, người dùng dễ dàng truy cập và thao tác dữ liệu, nhưng không phải lo lắng gì về mặt an ninh bảo mật vì Portal đã dùng những công nghệ bảo mật an toàn nhất ngầm phía dưới một phiên làm việc từ khi người dùng đăng nhập đến khi đăng xuất.

4.2. Cá nhân hoá (Personalization)

Khi người dùng đăng ký với hệ thống, họ sẽ được cấp một tài khoản. Mỗi tài khoản người dùng đăng nhập vào đều được cấp cho một “khung trời riêng”, họ có cảm giác như là một website của riêng mình, họ có thể tuỳ biến được giao diện tuỳ theo ý thích, thêm bớt các mô đun, hình ảnh… giống như post hay delete một bài viết của mình trên forum vậy. Khả năng này còn thể hiện ở chỗ: nhà quản trị website có thể trực quan hoá các công việc thêm bớt, thay đổi vị trí các mô đun mà không động đến một dòng HTML hay mã nguồn của Website mình. Điều này có được là do Portal sử dụng các công nghệ bố trí giao diện động như DHTML, CSS, XSL…

4.3. Tự hoạt động (Self-services)

Page 5: Report DNN Portal

Các mô đun của hệ thống Portal - được coi là phần tử cơ bản nhất cấu tạo nên Portal - có khả năng tự hoạt động một cách độc lập, không phụ thuộc hay ảnh hưởng các mô đun khác. Mỗi khi được thêm vào, chúng có nguồn dữ liệu khác nhau, vòng đời khác nhau và phương thức hoạt động khác hẳn nhau. Để có thể tích hợp chúng lại mà không ảnh hưởng gì đến toàn bộ hệ thống, các mô đun phải có một chuẩn riêng khi viết.

4.4. Đa nguồn dữ liệu (Multi Data Sources) và Đa nền tảng (Multi Platforms)

Một trong những khả năng quan trọng khác của hệ thống Portal là chúng có thể sử dụng kết hợp nhiều nguồn dữ liệu khác nhau. Các dữ liệu này có thể ở dạng file, dạng cơ sở dữ liệu quan hệ, dạng cơ sở dữ liệu hướng đối tượng, thậm chí ngay trong dạng cơ sở dữ liệu quan hệ, Portal có thể chấp nhận nhiều loại hệ quản trị cơ sở dữ liệu khác nhau. Bởi vì hệ thống Portal được xây dựng theo kiến trúc 3 lớp, phân tách việc kết nối cơ sở dữ liệu, việc tác nghiệp và việc hiển thị giao diện ra thành ba tầng độc lập.Hệ thống Portal co tính năng đa nền tảng, có thể chạy trên các nền hệ điều hành khác nhau, các Web Server khác nhau, các nền web hay mobile. Bởi vì hệ thống Portal kế thùa từ Liferay Portal – là Portal có kiến trúc mở, thống nhất, sử dụng các ngôn ngữ độc lập nền tảng, sử dụng các chuẩn chuyên trao đổi và xây dựng dịch vụ như các công nghệ Web Service hay Service Oriented Architecture (SOA).

4.5. Đa ngôn ngữ (Localization)

Tính năng đa ngôn ngữ không được hỗ trợ trong hệ thống Portal cần xây dựng vì đây là hệ thống sử dụng cho cơ quan, đơn vị của Việt Nam nên nó hoàn toàn thuần tiếng Việt. Nhưng như thế không có nghĩa là nó không có tính năng đa ngôn ngữ.

5. Các dịch vụ mà hệ thống Portal cung cấp

Hệ thống Portal cần xây dựng cung cấp các nhóm dịch vụ như sau:

5.1. Các dịch vụ cơ bản:

Post bài định dạng HTML/Document, Danh sách liên kết, Upload/Download Files, Thao tác ảnh…

5.2. Các dịch vụ cộng đồng ảo (Virtual community hay Collaboration):

Cộng đồng ảo là “một địa điểm ảo” trên internet mà các cá nhân hay tổ chức có thể tập hợp để giúp đỡ, hợp tác với nhau mà ranh giới về vị trí địa lý không còn có ý nghĩa.

Cung cấp môi trường cộng tác (collaborative) thông qua việc quản lý và khai thác thống nhất toàn diện các dịch vụ cơ bản như: Forum, Mail, Calendar, Task Management, Report Systems, Conferences, Discussion Groups, News Groups, v.v...

5.3. Các dịch vụ cung cấp thông tin:

Thông báo, Bản tin...

5.4. Các dịch vụ tìm kiếm:

Hỗ trợ tìm kiếm nhanh và mạnh theo nhiều tiêu chí: tiêu đề, ngày, từ khóa, phân loại… và trong toàn bộ nội dung trang. Kết hợp với các trang tìm kiếm như Google, Yahoo, Vinaseek…

Page 6: Report DNN Portal

5.5. Các dịch vụ hiển thị tự động và đa kết nối:

Có thể soạn trước các bài và cài đặt ngày giờ cho hiển thị lên trang báo, sẽ tạo ra tính năng online về nội dung, mà không tốn nhiều công sức. Ngoài ra có thể tích hợp với các nguồn tin hay hệ thống dữ liệu khác.

5.6. Các dịch vụ trợ giúp người dùng:

Thông tin cá nhân, Lịch biểu…

5.7. Các dịch vụ tác nghiệp:

Quản lý nội dung, Hợp tác dự án, Quản lý bán hàng, quản lý nhân sự…

6. Lợi ích của hệ thống Portal

Hệ thống Portal hỗ trợ cộng đồng người dùng trực tuyến, các cán bộ, nhân viên, các đối tác và các nhà cung cấp... dưới nhiều hình thức kết hợp khác nhau. Cơ sở hạ tầng Portal giúp việc khởi tạo, tích hợp, quản lí và cá nhân hóa toàn diện các thông tin và ứng dụng cho mỗi người dùng riêng biệt phục vụ các nhu cầu và sở thích của một cộng đồng riêng biệt. Các lợi ích thực sự của hệ thống Portal này đem lại nhìn từ khía cạnh hiệu quả ứng dụng thực tế đó là:· Nâng cao hiệu quả làm việc cho các cá nhân và tổ chức, đối tác... nhờ truy cập bảo mật, tích hợp tới các thông tin và ứng dụng liên quan, cũng như truy cập tổng thể tới tất cả các cá nhân, thông tin, tổ chức và các nhà cung cấp từ bất kì đâu, bất kì khi nào.· Cải thiện các tiến trình hợp tác nhờ luồng thông tin tốt hơn giữa con người và các ứng dụng, và nhờ các môi trường cộng tác giúp giảm thời gian để chuyển đổi thông tin thô thành tri thức.· Giảm gánh nặng của việc triển khai và quản lí thông tin và các dịch vụ ứng dụng trong một tổ chức.· Bảo toàn đầu tư lâu dài. Có nền tảng công nghệ đảm bảo, do công nghệ Internet đã phát triển rất cao so với thời kỳ xuất hiện World Wide Web vào đầu những năm 90 của thế kỷ trước. Những công nghệ tạo nên thời đại Portal đều hỗ trợ tính mở và kế thừa rất mạnh, sao cho việc mở rộng các qui mô phục vụ bằng các phần mềm ứng dụng mới được “lắp ráp” vào Portal đang có, mà không phải hủy bỏ hoặc sửa chữa lớn như những web site trước đây vì vậy duy trì, quản lý, mở rộng, nâng cấp, tái sử dụng dễ dàng, tiết kiệm chi phí đầu tư để xây dựng lại hệ thống.· Cho phép các hãng thứ 3 tham gia vào việc cung cấp ứng dụng hệ thống, các dịch vụ trung gian... Khả năng này làm phong phú, đa dạng khả năng úng dụng và triển khai của hệ thống Portal.

7. Sự khác nhau cơ bản giữa Portal và Website

Portal (cổng giao dịch điện tử) là một bước tiến hóa của website truyền thống. Nó ra đời để giải quyết những vấn đề mà website truyền thống gặp phải. Xây dựng hệ thống Portal thay vì Website bởi vì hệ thống Portal cần xây dựng có những ưu điểm so với Website có cùng chức năng như sau: · Là "siêu web site“, gọi tắt là Portal, đối với người dùng vẫn chỉ là sử dụng trang web thông qua trình duyệt (tức là web browser), nhưng đằng sau đó là sự thay đổi thuật ngữ và quan niệm mới về triết lý phục vụ thay cho cách hiểu “tuyên truyền”

Page 7: Report DNN Portal

thông qua web site như trước đây.· Hệ thống Portal tạo ra các Website, các Website này có thể tùy biến trực quan (cả về giao diện và dữ liệu), giúp cho người phát triển Website, người quản trị website và người dùng Website có thể xây dựng, quản lý và sử dụng chúng một cách dễ dàng, thuận tiện.· Các mô đun trong Portal có tính độc lập cao, hoạt động không ảnh hưởng tới các mô đun khác.· Người dùng Portal có khả năng truy cập thông tin có được từ nhiều nguồn dữ liệu khác nhau.· Người phát triển dựa theo các chuẩn có sẵn để tích hợp thêm các mô đun tác nghiệp mới.

Xu hướng “tiến hóa” chung của web site theo hướng tiến đến portal:

Phía ngoài, cung cấp một cổng giao dịch thân thiện, đủ các chức năng cho người dùng, trong đó có chức năng cá nhân hóa.

Phía trong, là cung cấp một hạ tầng điện tử, nhằm tạo quyền chủ động trong việc cung cấp, tích hợp thông tin và liên kết với các hệ thống, các dịch vụ thông tin khác.

Cung cấp môi trường cộng tác (collaborative) thông qua việc quản lý và khai thác thống nhất toàn diện các dịch vụ cơ bản như: Forum, Mail, Calendar, Task Management, Report Systems, Conferences, Discussion Groups, News Groups, v.v... Các dịch vụ này là một phần của kho tài nguyên dịch vụ trên portal để người dùng lựa chọn. Việc quản lý người dùng được thực hiện một lần và thống nhất trên tất cả các ứng dụng dịch vụ của portal.

Portal Giải pháp phát triển Website công nghệ mới

Công nghệ portal sau hơn năm năm ra đời, đã liên tục phát triển và phổ biến rộng rãi. Với ưu điểm về kế thừa và chuẩn hoá các phân hệ chương trình, portal không dừng lại trong các dự án đồ sộ do các nhà khổng lồ về công nghệ như IBM, Oracle, Microsoft, Sun Microsystem cung cấp mà còn phổ biến trong cộng đồng các nhà phát triển ứng dụng mã nguồn mở và các công ty phần mềm địa phương. Ngày nay, portal còn có thể hiểu như là một thế hệ mới của công nghệ phát triển các ứng dụng Web.

Một số Portal nổi tiếng:

IBM Websphere Oracle Microsoft Share Point Sun One Open source Portals

Page 8: Report DNN Portal

Sun One Portal

Giới thiệu portal mã nguồn mở điển hình: . DNN Portal (Giải pháp phát triển Website công nghệ mới)

 DNN portal là một giải pháp phát triển Website trên một portal frame work mã mở (DNN) do các chuyên gia Microsoft phát triển. DNN được đánh giá là sản phẩm viết bằng VB.NET hay nhất năm 2003 do tạp chí VB magazine bình chọn.

DNN Portal là một hệ thống quản lý nội dung mã nguồn mở viết bằng ngôn ngữ lập trình VB.NET trên nền tảng ASP.NET, hệ quản trị cơ sở dữ liệu có thể là MS SQL server hoặc Oracle. DNN được đánh giá là hệ thống quản trị nội dung mã nguồn mở .NET phát triển mạnh nhất hiện nay với số lượng thành viên đông đảo và phát triển rất nhanh trên khắp thế giới. Xây dựng cộng đồng ứng dụng và triển khai web và portal, phát triển và trao đổi các module phần mềm và skin giao diện DNN.

.Net là công nghệ phát triển Web do Microsoft xây dựng, và là công nghệ phát triển các ứng dụng Web thương mại phổ biến nhất hiện nay. Đây là công nghệ mũi nhọn của Microsoft và có nhiều ưu điểm nổi bật. Ngoài ra, việc phát triển Web theo công nghệ này giúp bạn tránh được những rủi ro về nhân lực trong phát triển tiếp theo và chỉnh sửa hệ thống vì lập trình viên .NET là rất dễ tìm.

Các tính năng cơ bản của giải pháp DNN portal:

1. Hệ thống quản lý nội dung trực quan:

DNN portal quản lý nội dung theo menu tình huống (hướng đối tượng), tức là trên mỗi module của hệ thống, sẽ có một menu tương ứng xuất hiện ngay tại một ICON bên trái Title của Module. Nhân viên quản trị sẽ dễ dàng tìm ra các chức năng điều khiển hay quản trị của module này một cách nhanh chóng tương ứng với quyền quản trị của anh ta. Trước đây, các hệ thống quản trị Website được cung cấp trên một giao diện riêng, khi hệ

Page 9: Report DNN Portal

thống mở rộng và đa chức năng công việc quản lý trở nên quá phức tạp khi menu quản trị chứa quá nhiều Items.

Khả năng quản lý nội dung trực quan 

Các module được hiển thị và phân bố trên giao diện portal dễ dàng nhờ vào các từ khoá định trước trên các vùng khác nhau của giao diện. Bạn cũng có thể di chuyển một module từ khu vực này sang khu vực khác bằng một lệnh trên menu tình huống hoặc dùng cách Drag and Drop (Kéo thả).

Khi soạn thảo nội dung thông tin theo dạng Richtext, giải pháp này cũng cung cấp một công cụ WYSIWYG (What You See Is What You Get) đầy đủ, thuận tiện và hiện đại nhất: với khả năng chèn Flash file, Movie, … điều chỉnh các thuộc tính của đối tượng, làm sạch code…

Page 10: Report DNN Portal

Công cụ soạn thảo văn bản Richtext tiên tiến nhất trên Web

Hệ thống định hướng Website hoàn chỉnh: Menu được phát sinh động trên một cấu trúc Website với các trang Web tổ chức phân cấp. Có nhiều cách để xây dựng hệ thống định hướng cho các trang Web như dạng Menu truyền thống (hình 2) hoặc dạng cây, hỗ trợ hiển thị đường dẫn đến mỗi tràng….

Cấu trúc site (Site Map) cũng được quản lý một cách dễ dàng. Bạn có thể thêm một trang mới vào hệ thống đúng vào vị trí bạn muốn (tổ chức dạng cây) và cho phép hoặc không cho phép xuất hiện trên Menu.

Ngoài ra hệ thống này cũng cung cấp sẵn chức năng SUBMIT TO GOOGLE để cung cấp thông tin cho công cụ tìm kiếm, giúp việc quảng bá Website dễ dàng hơn. Bạn chỉ cần nhấp vào nút Submit to google ở cuối trang khi soạn thảo thông tin, thông tin trên trang đó sẽ được đưa vào cơ sở dữ liệu của Google.

2. Quản lý giao diện độc lập, linh hoạt:

Giao diện được phát triển riêng độc lập với chương trình, một nhà thiết kế giao diện cho Website có thể làm việc độc lập, chỉ cần một số tiêu chuẩn về giao diện phải tuân thủ, các nhà thiết kế không phải quan tâm nhiều đến vấn đề kỹ thuật của hệ thống, giao diện sau khi làm xong sẽ được tích hợp nhanh chóng vào hệ thống.

Page 11: Report DNN Portal

Hệ thống cũng cho phép quản lý nhiều giao diện, các trang Web khác nhau có thể chọn các giao diện khác nhau để thể hiện. Giao diện dễ dàng thay đổi trong khi vẫn đảm bảo hệ thống đang làm việc trực tuyến.

Ngoài ra DNN portal không có nhiều ràng buộc kỹ thuật vào giao diện, nên nhà thiết kế có thể tuỳ ý sáng tạo cho giao diện của mình.

Hệ thống quản lý giao diện của DNN portal là một trong những ưu điểm nổi bật so với các Portal khác. Do vậy DNN portal phù hợp cho các Website có yêu cầu giao diện cao và phục vụ công tác đối ngoại cho các doanh nghiệp, tổ chức…

3. Quản trị hệ thống với đầy đủ chức năng

Quản lý phân quyền là một trong những chức năng quan trọng của Portal. Hệ thống phân quyền của DNN Portal cung cấp rất chặt chẽ, cho phép nhà quản trị có thể tạo ra nhiều nhóm quyền (role) khác nhau và sau đó phân công cho người dùng (user).

Hệ thống phân quyền của các module có thể tích hợp và phân công thông qua các quyền đã tạo ra của hệ thống; do vậy việc phân quyền có thể thực hiện đến từng chức năng nhỏ của module.

Hệ thống cũng cung cấp sẳn công cụ quản lý thành viên.

Việc đăng nhập có thể tích hợp với hệ thống Authentication của hệ điều hành Windows nên khi triển khai trên Intranet có thể tăng mức độ bảo mật và đảm bảo việc đăng nhập một cửa.

DNN portal cung cấp công cụ quản lý File/ Folder qua giao diện Admin web với đầy đủ các chức năng như tạo thư mục, Upload, download, zip/Unzip cũng như việc phân quyền truy xuất vào hệ thống Website này.

Đối với việc quản lý các trang thông tin, hệ  thống cũng cho phép khôi phục dữ liệu đã xoá (recylce bin). Việc này làm giảm rủi ro trong quản lý nội dung.

Ngoài ra trong việc quản trị hệ thống, giải pháp này còn cung cấp nhiều chức năng khác như: thống kê truy cập, quản lý nhật ký truy xuất, quản lý bộ nhớ đệm, thời khoá biểu vận hành của ứng dụng trên Portal, cơ chế cài đặt Module mới thuận tiện và khả năng quản lý nhiều Website thành viên.           

3. An toàn và bảo mật:

Mức độ người dùng:

Hệ thống được quản lý phân quyền tập trung và chủ động tạo các quyền, nhóm quyền riêng cho từng phân hệ hoặc toàn bộ website, do đó những thành viên phụ trách phần nào sẽ chỉ có quyền truy xuất thông tin vào phần đó, hệ thống password sẽ dễ quản

Page 12: Report DNN Portal

lý, dễ kiểm soát. Password được lưu giữ trong Database đã được mã hoá theo chuẩn (SA1)

Mức độ dữ liệu:

Mã hoá dữ liệu (Password), Sử dụng SSL(Security Socket Layer) dành cho hệ thống thành viên, đăng nhập, hệ thống Backup với Back up Server

Mức độ công nghệ:

Lập trình 3 lớp, với lớp truy xuất dữ liệu riêng, lớp xử lý tác vụ, lớp xác nhận người dung.

Users có thể tích hợp với Active Directory của Windows và các quyền truy xuất theo NTFS, đảm bảo khả năng bảo mật cao nhất theo tiêu chuẩn của Windows.

Chương trình Portal có khả năng cài đặt trên nhiều server cùng lúc (Cả Database), có giải pháp dự phòng và cân bằng truyền tải.

 Mức độ hệ thống: Do hạ tầng mạng quyết định, hệ thống có thể được thiết kế với lớp ngoài cùng được trang bị một IDS hoặc IPS (Intrusion Detection System) đảm nhiệm việc chống xâm nhập của hacker được tích hợp với fire wall.

4. Khả năng phát triển và mở rộng

Phát triển mở rộng với module, giao diện được xây dựng độc lập, theo chuẩn là một trong những thế mạnh của tất cả các Portal, và DNN Portal cũng chứa đựng khả năng này.

Ngày nay trên thế giới, công nghệ DNN cũng đã rất phổ biến, và nhiều nhà phát triển có thể cung cấp các phân hệ cho hệ thống này. Giải pháp DNN Portal do EQ cung cấp sẽ vẫn kế thừa được những phiên bản mới nhất của DNN, cũng như có thể tích hợp các module viết cùng chuẩn của các nhà cung cấp khác.

2. Chức năng được tích hợp

- Quản lý tài liệu, phân quyền truy xuất, download, upload (Documents)- Quản lý nhiều giao diện (Skins)- Quản lý thành viên (Users)- Thống kê người truy cập: Trên từng trang, từng web site, IP … (UserOnline)- Hệ thống quản trị nội dung, tin tức (CMS)- Chức năng tự động lọc lấy tin từ website khác (InfoFilter)- Hệ thống bán hàng trực tuyến (Shopping Cart)- Hệ thống quản lý và hiển thị hình ảnh, bộ sưu tập hình ảnh (Gallery)- Hệ thống hỗ trợ trực tuyến (Help Desk)- Quản lý, báo cáo dự án (Proeject Management)- Chức năng tạo thông báo, sự kiện theo thời gian (Events)

Page 13: Report DNN Portal

- Chức năng tạo các câu hỏi thăm dò (Poll/Vote/Servey)- Chức năng tạo lịch biểu (Calendar)- Chức năng quản lý banner quảng cáo (Banners)- Chức năng trao đổi thảo luận (Disscussion & Forum)- Quản lý các thông số hệ thống (Site Settings)- Quản lý các module chương trình (Module Definition)- Lưu giữ chi tiết SiteLogs, EventLogs- Phân quyền tập trung, chặt chẽ đến từng phần thông tin trên trang (Security Roles)- Có thể tích hợp module login bằng quyền Windows cho các hệ thống nội bộ- Quản lý tác vụ tự động (System Schedule)- Quản lý và chạy nhiều website trên 1 portal

và còn nhiều các chức năng khác đang được DNN phát triển

KIẾN TRÚC CỦA MODULE DOTNETNUKE

Phần I-1

Chúng ta sẽ tìm hiểu kiến trúc của một module DNN, cụ thể là ví dụ về module Survey (Thăm dò ý kiến) đi

kèm với bản DotNetNuke. Phần 1, chúng ta sẽ tìm cách thiết lập một dự án phát triển, và giao diện người

sử dụng cho module của chúng ta.

Chúng ta sẽ xem xét cách tạo module cho DotNetNuke, và đặc biệt là xem Mô hình Cung ứng

Dữ liệu (Data Provider Model) của DNN . Chúng ta sẽ không đi từng bước để phát triển các

module mà cung cấp cho bạn một tổng quan về kiến trúc và điểm khởi đầu để phát triển các

module riêng của bạn cho DNN.

Modules là gì?

Modules cung cấp cho người phát triển khả năng mở rộng thêm chức năng của DotNetNuke.

DotNetNuke cung cấp nền tảng có thể lắp thêm mà được mở rộng bởi phát triển modules. Một

hộp chứa của module được cung cấp bởi DotNetNuke để chứa module cần phát triển. Modules

có thể được phát triển bằng bất cứ ngôn ngữ .NET nào, thậm chí DNN được phát triển bằng

VB.NET, người phát triển C# vẫn tạo module và lắp vào lõi nền của DNN. Nền tảng có thể lắp

thêm này được hoàn chỉnh bởi việc tạo ra module riêng đã biên dịch, chúng thực hiện và sử

dụng những giao diện cụ thể đối với DNN. Một khi bạn biên dịch module thì chỉ cần tạo giao diện

người sử dụng (UI) dưới dạng tệp ascx mà cho phép người sử dụng tương tác với module của

bạn.

Hộp chứa của Module (Module Containers)

Module containers cung cấp nhiều tính năng cho người phát triển. Ngoài việc cho phép bạn giao

tiếp với nền tảng lõi DNN, module containers còn cung cấp:

Page 14: Report DNN Portal

<!--[if !supportLists]-->·         Cơ chế bảo mật: Bạn có thể định nghĩa quyền xem và sửa cho các

module của bạn. DNN sẽ quản lý việc kiểm tra bảo mật cho module của bạn. Bạn không

cần phải viết riêng cơ chế bảo mật của mình mà dùng sự bảo mật dựa trên vai trò được

cung cấp bởi nền tảng.<!--[endif]-->

<!--[if !supportLists]-->·         Xem và cảm nhận: Module container có thể được tùy biến với nhiều

cách xem khác nhau, hơn nữa module container và DNN cung cấp cho bạn khả năng đặt

module trong trang của DNN. Nó còn cho phép người sử dụng tùy biến hiển thị của

module, ví dụ như chế độ phóng to và thu nhỏ.<!--[endif]-->

<!--[if !supportLists]-->·         Lưu giấu: Là một cơ chế tăng tốc, bạn có thể định nghĩa việc lưu

giấu ở mức container. Điều này cho phép các modules không cần phải cập nhật cho mỗi

yêu cầu để có được nội dung được ẩn, do đó đem lại sự cải thiện tốc độ.<!--[endif]-->

Thiết lập Môi trường Phát triển

Bây giờ chúng ta đã biết module thực sự là gì, hãy tiếp tục tạo ra dự án phát triển cho module. Có nhiều phương pháp để tạo module cho DNN, nhưng ở đây ta thiết lập một dự án riêng để tạo module và sau đó biên dịch nó thành module chạy (assemblies) trong thư mục bin của DNN. Quy trình sau cung cấp một phương pháp để thiết lập một dự án cho module của portal trong Visual Studio.NET

Tạo một dự án lớp, hãy sử dụng cấu trúc đặt tên logic. Ví dụ: CompanyName.ModuleName.

<!--[if !supportLists]-->1.      Khi tạo thư mục dự án mới, tạo thư mục trong DotNetNuke Root\

DestopModules\  Thư mục<!--[endif]-->

<!--[if !supportLists]-->2.      Xóa namespace từ thuộc tính của dự án. Kích chuột phải vào thuộc

tính của dự án, dưới mục general, xóa trong hộp root namespace.<!--[endif]-->

<!--[if !supportLists]-->3.      Thêm một tham chiếu đến dự án DotNetNuke trong dự án module

mới của bạn.<!--[endif]-->

Đó là dành cho dự án chính của module. Bây giờ nếu bạn muốn thêm một bộ cung ứng dữ liệu

(data provider) vào dự án của bạn thì bạn thực hiện như thủ tục trên ngoại trừ tên của dự án của

bạn là CompanyName.ModuleName.SQLDataProvider (hoặc Access tùy thuộc vào cơ sở dữ liệu

nào bạn dùng). Thêm vào đó, bạn tạo tham chiếu đến dự án DotNetNuke, tạo tham chiếu đến dự

án module chính và thành phần chạy Microsoft.ApplicationBlock.Data. Điều này sẽ giúp trong

việc trừu tượng dữ liệu.

Khi dự án của bạn xong, trông nó sẽ giống như sau trong solution explorer của Visual

Studio.NET:

Page 15: Report DNN Portal

Bây giờ hãy tìm hiểu một chút về kiến trúc DNN. Hình sau được lấy từ tài liệu của DotNetNuke. Nó cung cấp hình ảnh về kiến trúc của DNN. Trước tiên với các điều khiển ascx sẽ cung cấp giao diện người sử dụng. Giao diện sau đó sẽ giao tiếp với Tầng Quy tắc Nghiệp vụ - Business Logic Layer (BLL), như trong sơ đồ, BLL được chứa trong lớp SurveyDB.vb, và cung cấp tất cả dữ liệu cho giao diện người sử dụng. Dưới BLL chúng ta có Bộ cung cấp Dữ liệu Trừu tượng – Abstract Data Provider, chúng ta sẽ tìm hiểu thêm ở những phần sau nhưng lớp này cung cấp một tầng trừu tượng cho ứng dụng của chúng ta. Bộ cung cấp này không dành riêng cho một cơ sở dữ liệu nào, mà chính lớp của bộ cung cấp dữ liệu sẽ cung cấp các phương thức đè lên lớp trừu tượng và tương tác với cơ sở dữ liệu cụ thể của chúng ta. Bộ cung cấp trừu tượng trong ví dụ này là lớp DataProvider.vb nằm bên trong dự án module thăm dò ý kiến chính. Dưới tầng trừu tượng chúng ta có Tầng Truy cập Dữ liệu – Data Access Layer, lớp này là dành riêng cho từng loại cơ sở dữ liệu và là duy nhất mà qua đó chúng ta muốn module của mình tương tác với cơ sở dữ liệu này. Lớp này là dự án SQLDataProvider như hình vẽ trên. Cuối cùng Microsoft.ApplicationBlocks.Data cung cấp các chức năng để tương tác với cơ sở dữ liệu cụ thể, và giải phóng người phát triển khỏi việc viết mã lệnh SQL Server cụ thể

Page 16: Report DNN Portal

Bây giờ chúng ta đã tìm hiểu kiến trúc và cách tạo dự án, bây giờ hãy bắt đầu viết mã lệnh. Các

mã lệnh trong bài viết này là ví dụ của module thăm dò ý kiến đi kèm với DotNetNuke, bạn hãy

thử sức mình xem.

Tạo Điều khiển của Bạn (Create Your Controls)

Trước tiên, bạn cần tạo một số điều khiển để người sử dụng. Trong ví dụ này chúng ta có điều khiển Survey.ascx, đây là điều khiển chính để đưa ra giao diện xem cho người sử dụng. Các điều khiển khác dành cho quản lý điều tra, đó là EditSurvey.ascx, EditSurveyOptions.ascx.

Phần I-2

Trong phần này chúng ta tiếp tục tìm hiểu về kiến trúc module của DNN module, cụ thể là

module Thăm dò ý kiến (Survey module). Trong phần đầu, chúng ta đã xem xét việc thiết lập

phát triển một dự án và giao diện người sử dụng cho module.

Điều khiển Xem (View Control)

Trong điều khiển xem, đây là điều khiển chính Survey.ascx control, mở tệp mã nguồn tương ứng

(the code behind file). Trong lớp này bạn chú ý đến đoạn sau: :D

Imports DotNetNuke

Page 17: Report DNN Portal

 

Namespace YourCompanyName.Survey

    Public MustInherit Class Survey

        Inherits PortalModuleControl

        ::

        ::

End Class

 

Bạn thấy rằng module không kế thừa lớp WebControls mà thay vào đó lại kế thừa

PortalModuleControl của DNN. PortalModuleControl, nằm trong lớp

/components/desktopcontrols.vb, cung cấp một số thuộc tính và phương thức rất quan trọng của

DNN, ví dụ:

IsEditable: Thuộc tính xác định liệu người sử dụng hiện thời có quyền sửa (edit) module hay

không.

UserId – mã định danh (id) của người sử dụng hiện thời

Help File path – đường dẫn đến tệp trợ giúp

Portal alias – bí danh hoặc tên của cổng thông tin (portal)

Portal ID – id của cổng hiện thời

Tab ID – id của tab hiện thời của trong DotNetNuke

Module ID – id của module hiện thời

Settings hash – bảng lưu tham số cấu hình cho riêng module

Trong ví dụ cụ thể này, chúng ta có một số tương tác cơ bản với một cơ sơ dữ liệu thông qua

BLL. Toàn bộ mã nguồn của module này đi cùng với DotNetNuke như một ví dụ. Hãy sử dụng nó

như một mẫu cho các dự án của bạn.

Điều khiển Sửa (Edit Control)

Giờ ta đã biết về điều khiển xem, đa số các module có ít nhất hai điều khiển ascx, một cho việc

xem dành cho người sử dụng, và các điều khiển khác dành để sửa đổi một số tính năng của một

module. Điều khiển sửa này cung cấp cho bạn cách tùy biến module cho từng thể hiện bên trong

DotNetNuke portal. Ví dụ, trong module thăm dò ý kiến bạn có thể muốn tạo ra nhiều thăm dò

cho portal của mình. Bạn có thể làm điều đó bằng cách truyền những giá trị riêng cho module

Page 18: Report DNN Portal

thông qua điều khiển sửa. DNN framwork đưa ra tính năng này bằng việc nhập vào ModuleID

cung cấp bởi PortalModuleControl, cũng như bảng tham số thiết lập (Setting hash), dùng như

thanh ghi để chứa thông tin riêng của module.

Hãy xem cách lưu và lấy các giá trị thiết lập vào tham số thiết lập:

Private Sub cmdUpdate_Click(ByVal sender As Object, _

         ByVal e As System.EventArgs) Handles cmdUpdate.Click

   Dim objModules As New DotNetNuke.ModuleController

   objModules.UpdateModuleSetting(ModuleId, "surveyclosingdate", txtClosingDate.Text)

   objModules.UpdateModuleSetting(ModuleId, "surveygraphwidth", txtGraphWidth.Text)

   ' Redirect back to the portal home page

   Response.Redirect(NavigateURL())

End Sub

 

Bạn chú ý Click handler ở trên, chúng ta viết một số giá trị vào tham số thiết lập cho module cụ

thể. Chúng ta xác định ModuleID, được cung cấp bởi PortalModuleControl, và sau đó lưu giá trị

trường text vào trong tham số. Điều đó thật dễ dàng chỉ với vài dòng lệnh. Lấy thông tin từ bảng

tham số cũng rất đơn giản:

txtClosingDate.Text = CType(Settings("surveyclosingdate"), String)

txtGraphWidth.Text = CType(Settings("surveygraphwidth"), String)

 

Ở trên, chúng ta đã thực hiện việc lưu và lấy dữ liệu từ bảng tham số và đưa lên các điều khiển

text.

Khai báo cho DotNetNuke Biết Về các Module của Bạn

Nhiều bạn có thể quen thuộc với các tệp cài đặt Private Assembly, bạn chỉ cần upload một tệp

zip vào DNN và tất cả được cài đặt tự động. Khi bạn đang phát triển module, bạn thường phải

làm việc này bằng tay, và để DNN biết về vị trí các điều khiển ascx của bạn. Các cấu phần đã

dịch (assemblies) của bạn được biên dịch và lưu vào thư mục bin của DNN như vậy DNN có thể

truy cập vào chúng khi cần, nhưng bạn vẫn cần khai báo cho DNN biết về module mới của bạn.

Bạn có thể định nghĩa bằng tay module của bạn như sau:

Page 19: Report DNN Portal

<!--[if !supportLists]-->·         <!--[endif]-->Dưới menu Host Setting, chuyển đến Module Definitions.

<!--[if !supportLists]-->·         <!--[endif]-->Trong Module Definitions, chọn Add New Definition từ menu của

module phía góc trên bên trái.

<!--[if !supportLists]-->·         <!--[endif]-->Bạn sẽ thấy màn hình Edit Module Difinitions.

<!--[if !supportLists]-->·         <!--[endif]-->Từ đó bạn thêm định nghĩa mới.

<!--[if !supportLists]-->·         <!--[endif]-->Khi định nghĩa được tạo ra, thì thêm các điều khiển dành cho

người sử dụng vào module. Đối với module thăm dò ý kiến bạn sẽ cần thêm như sau:

<!--[if !supportLists]-->o        <!--[endif]-->Survey.ascx – Kiểu là View

<!--[if !supportLists]-->o        <!--[endif]-->EditSurvey.ascx – Kiểu là Edit, Khóa là Edit.

<!--[if !supportLists]-->o        <!--[endif]-->EditSurveyOptions.ascx – Kiểu là Edit, Khóa là Options.

Tạo Cấu trúc Cơ sở dữ liệu

Bây giờ DNN biết về module Survey, bạn muốn tạo cấu trúc cơ sở dữ liệu. Nếu đây là cài đặt

module đã dịch (PA) bạn chỉ cần cài đặt nó, nhưng để an toàn khi dự án phát triển thì nên chạy thủ

công SQL script. Có thể dùng Query Analyzer từ meny SQL Server tool. Trước tiên, bạn cần mở

script nằm trong thư mục SQLDataProvider dành cho module Survey. Sau đó, xóa các dẫn

hướng (directive) {databaseowner} và {objectqualifier} từ script. Các dẫn hướng này dành cho

DNN khi cài đặt module dưới dạng tệp module đã dịch. Khi đã bỏ các dẫn hướng, chạy script để

sinh ra cơ sở dữ liệu.

Tham chiếu đến các Khóa của Module

Trong chú ý cuối cùng của phần tạo module, chúng ta sẽ tìm hiểu về tham chiếu tới các khóa của

điều khiển của bạn bên trong mã nguồn. Mở ví dụ thăm dò ý kiến, và mở rộng phương thức

initialize trong phần mã nguồn của điều khiển survey.ascx. Bạn sẽ chú ý đến vị trí mà module tạo

ra tùy chọn của menu cho từng điều khiển:

' PortalModuleControl base class settings for this module

MyBase.HelpFile = "help.txt" ' a local document stored in the same folder as the user control

MyBase.HelpURL = "http://www.dotnetnuke.com" ' a URL for support on the module

' action menu items

MyBase.Actions.Add(GetNextActionID, "View Options", "", URL:=EditURL(, , "Options"), _

         secure:=SecurityAccessLevel.Edit, Visible:=True)

MyBase.Actions.Add(GetNextActionID, "Add Survey", "", URL:=EditURL(), _

Page 20: Report DNN Portal

         secure:=SecurityAccessLevel.Edit, Visible:=True)

 

Ở đây, chúng ta đã tạo ra các lựa chọn của thực đơn, và sau đó tham chiếu tới chúng bằng các

khóa của chúng. Ví dụ, hãy xem phương thức MyBase.Action.Add, chúng ta thêm các lựa chọn

của thực đơn và tham chiếu tới chúng bằng Key trong giá trị cuối cùng được gửi đến EditURL.

Bạn có thể thấy “Options” được truyền. Đây là khóa chúng ta đã định nghĩa trước đó trong phần

định nghĩa module. Chúng ta cũng đồng thời xác định thông tin bảo mật cho thực đơn.

Hy vọng  bài viết này cung cấp cho bạn thông tin tổng quan về kiến trúc của module thăm dò ý kiến đi kèm với DNN. Hãy dùng ví dụ này để xây dựng module riêng của bạn. Phần tiếp theo chúng ta sẽ thảo luận về mô hình bộ cung ứng dữ liệu (data provider model) của DotNetNuke và bạn sẽ phát triển trên nó như thế nào.

Phần II-1

Trong phần hai này, chúng ta sẽ tìm hiểu Tầng Quy tắc Nghiệp vụ (Business Logic Layer), và

Tầng trừu tượng Dữ liệu (Data Abstraction Layer) của Kiến trúc module của DotNetNuke.

Trong phần trước, chúng ta đã bàn đến việc cài đặt dự án cho module của bạn như

thế nào, chúng ta cũng đã bắt đầu phát triển một số phần giao diện người sử dụng

cho module của mình. Trong bài viết này, chúng ta sẽ tìm hiểu sự khác biệt của kiến

trúc DNN đối với đa số các ứng dụng .NET khác, đặc biệt là mô hình cung ứng dữ liệu

(data provider model). Mô hình cung ứng là một đề tài nổi bật trong phiên bản sắp tới

của Visual Studio 2005, và nó làm cho DNN mềm dẻo để kết nối được với bất kỳ cơ sở

dữ liệu nào bên dưới. Ở đây, chúng ta sẽ bàn đến Tầng Quy tắc Nghiệp vụ và Tầng

trừu tượng Dữ liệu của kiến trúc DNN, trong phần III chúng ta sẽ kết thúc bằng việc

xem xét tổng quan về lớp Cung ứng Dữ liệu.

BLL, và DAL

Chúng nghĩa là gì?

<!--[if !supportLists]-->·         <!--[endif]-->Business Logic Layer (BLL) – chứa tất cả quy tắc của nghiệp

vụ của bạn. Ví dụ, nếu bạn ghi nợ một tài khoản và cũng ghi có ở một tài khoản khác, điều này

phải thể hiện ở BLL.

<!--[if !supportLists]-->·         <!--[endif]-->Data Abstraction Layer – Đây là một tầng trong ứng dụng

của bạn, nó kết nối tới bộ cung ứng dữ liệu. Nó chứa các phương thức có thể ghi đè mà bộ cung

ứng của bạn sẽ ghi đè lên đối với từng loại cơ sở dữ liệu cụ thể. BLL của ứng dụng của bạn sẽ giao

tiếp với DAL thông qua một lớp hỗ trợ đối tượng nghiệp vụ module (CBO).

Lớp hỗ trợ đối tượng nghiệp vụ module cơ bản là một lớp mà sinh ra một tập hợp đối

tượng hoặc đối tượng mà bạn đã tạo ra bên trong module của bạn. Thông thường

Page 21: Report DNN Portal

những đối tượng này trực tiếp liên quan đến các thủ tục lưu (stored procedures) hoặc

truy vấn từ cơ sở dữ liệu.

Phản ánh Trừu tượng (Reflection versus Abstraction)

Có rất nhiều thay đổi rõ ràng trong DNN , trong DNN 1.x chúng ta lấy dữ liệu từ cơ sở dữ liệu bằng

reflection. Vấn đề chính xảy ra đối với kiến trúc trước của DNN là thiếu sự xác định rõ ràng giữa các tầng

khác nhau, vd. Tầng dữ liệu, quy tắc nghiệp vụ, và tầng người sử dụng. Bây giờ, với mô hình cung ứng

chúng ta có sự tách biệt rõ ràng giữa các tầng.

Một bước tiến lớn khác trong kiến trúc DNN là tốc độ. Nhờ vào các kỹ thuật trừu tượng và lưu giấu

(abstraction and caching techniques), đã có sự tăng tốc tuyệt vời như thể hiện ở bảng dưới đây:

DotNetNuke 2.0 ( DAL enhancement )

Total number of requests:                                             93,254

Total number of connections:                                          93,253

 

Average requests per second:                                          310.85

Average time to first byte (msecs):                                   2.37

Average time to last byte (msecs):                                    2.46

Average time to last byte per iteration (msecs):                      29.58

 

Number of unique requests made in test:                               12

Number of unique response codes:                             1

 

DotNetNuke 1.0.10 ( SqlCommandGenerator )

Total number of requests:                                    42,350

Total number of connections:                                          42,350

                

Average requests per second:                                          141.17

Average time to first byte (msecs):                                   6.02

Average time to last byte (msecs):                           6.15

Average time to last byte per iteration (msecs):                      116.94

Page 22: Report DNN Portal

                

Number of unique requests made in test:                               17

Number of unique response codes:                             2

 

Bạn thấy thời gian đáp ứng đã được cải tiến tuyệt vời!

Tầng Quy tắc Nghiệp vụ (Business Logic Layer)

Bây giờ ta tìm hiểu thêm về các lớp bạn cần tạo để tương tác với cơ sở dữ liệu. Trong phần I, chúng ta đã

bàn về các phần giao diện người sử dụng của module thăm dò ý kiến, bây giờ ta sẽ nói đến phần BLL.

Trong ví dụ thăm dò ý kiến, lớp BLL là SurveyDB.vb, trong các module của bạn, bạn nên theo cùng qui ước

đặt tên, vd: ModuleNameDB. Bên trong tệp này có ít nhất hai lớp cho module của bạn, một lớp ModuleInfo

và một lớp ModuleController, chẳng hạn SurveyInfor và SurveyController. Đây là mô tả về hai lớp này:

ModuleInfo: Đặt và lấy các thuộc tính công bố của các đối tượng được sinh bởi các lớp điều khiển.

ModuleController: Được dùng để lưu giữ các đối tượng, chủ yếu sử dụng lớp trợ giúp đối tượng nghiệp vụ

(custom business objects helper class) để đổ dữ liệu từ bộ cung cấp vào tập hợp các đối tượng.

Hãy xem lớp SurveyInfo và tìm hiểu điều gì đang diễn ra bên trong:

Imports System

Imports System.Data

Imports DotNetNuke

 

Namespace YourCompanyName.Survey

    Public Class SurveyInfo

        ' local property declarations

        Private _SurveyId As Integer

        ::

        ' initialization

        Public Sub New()

Page 23: Report DNN Portal

        End Sub

        ' public properties

        Public Property SurveyId() As Integer

            Get

                Return _SurveyId

            End Get

            Set(ByVal Value As Integer)

                _SurveyId = Value

            End Set

        End Property

        ::

 End Class

       

Thông thường một lớp đơn giản trình bày các thuộc tính cho lớp điều khiển. Hãy xem lớp điều khiển:

Public Class SurveyController

  Public Function GetSurveys(ByVal ModuleId As Integer) As ArrayList

    Return CBO.FillCollection(DataProvider.Instance().GetSurveys(ModuleId), _

      GetType(SurveyInfo))

  End Function

 

  Public Function GetSurvey(ByVal SurveyID As Integer, _

      ByVal ModuleId As Integer) As SurveyInfo

    Return CType(CBO.FillObject(DataProvider.Instance().GetSurvey(SurveyID, ModuleId), _

      GetType(SurveyInfo)), SurveyInfo)

Page 24: Report DNN Portal

  End Function

 

  Public Sub DeleteSurvey(ByVal SurveyID As Integer)

    DataProvider.Instance().DeleteSurvey(SurveyID)

  End Sub

 

  Public Function AddSurvey(ByVal objSurvey As SurveyInfo) As Integer

    Return CType(DataProvider.Instance().AddSurvey(objSurvey.ModuleId, objSurvey.Question, _

      objSurvey.ViewOrder, objSurvey.OptionType, objSurvey.CreatedByUser), Integer)

  End Function

 

  Public Sub UpdateSurvey(ByVal objSurvey As SurveyInfo)

    DataProvider.Instance().UpdateSurvey(objSurvey.SurveyId, objSurvey.Question, _

      objSurvey.ViewOrder, objSurvey.OptionType, objSurvey.CreatedByUser)

  End Sub

End Class

 

Vậy lớp điều khiển là gì? Nếu bạn xem mã lệnh trên bạn sẽ thấy các phương thức, GetSurveys,

GetSurvey, DeletetSurvey, AddSurvey, và UpdateSurvey. Trong đa số trường hợp, các phương

thức này tương ứng trực tiếp với một thủ tục lưu (stored procedure) bên trong cơ sở dữ liệu của

bạn. Ví dụ, có thủ tục lưu GetSurveys trong cơ sở dữ liệu nhận ModuleID như tham số, và trả về

một bản ghi. Bây giờ trong lớp điều khiển bạn sẽ làm tương tự như vậy, trong phương thức

GetSurveys bạn nhận ModuleID như đầu vào (sẽ được truyền cho lớp cung ứng để thực thi cơ

sở dữ liệu). Sau đó kết quả trả về sẽ có kiểu SurveyInfo. Hãy nhớ rằng trong SurveyInfo chúng ta

đã định nghĩa các thuộc tính cho lớp của chúng ta, các thuộc tính này thông thường tương ứng

với các trường chứa trong cơ sở dữ liệu. Bây giờ chúng ta sẽ tạo một đối tượng tập hợp cho

module để làm việc thay cho một record set hay data reader. Nó được kết hợp với các lớp cung

ứng dữ liệu mang đến sự trừu tượng cho các loại cơ sở dữ liệu khác nhau.

Xem xét lớp này kỹ hơn, bạn sẽ thấy là phương thức GetSurveys trước tiên gọi một phương

thức CBO, nó sẽ truyền một thể hiện (đối tượng) của lớp trừu tượng dữ liệu. CBO hoặc lớp đối

tượng nghiệp vụ lấy dữ liệu từ cơ sở dữ liệu thông qua lớp trừu tượng dữ liệu, và đổ dữ liệu vào

tập hợp các đối tượng như là kết quả trả về cho BLL. Vậy ý tưởng chính ở đây là chúng ta không

Page 25: Report DNN Portal

làm việc trực tiếp với dữ liệu từ lệnh gọi đến cơ sở dữ liệu, các module xử lý tập hợp các đối

tượng có chứa các thuộc tính mà chúng ta đã định nghĩa trong lớp SurveyInfo.

Một điều khác cần chú ý là khi bạn thực hiện các thao tác cập nhật, thêm, và xóa không cần bọc

lệnh gọi bên trong phương thức CBO, bởi vì trong đa số các trường hợp không có giá trị trả về từ

cơ sở dữ liệu.

 

Phần II-2

Trong phần này chúng ta sẽ tìm hiểu Business Logic Layer và Data Abstraction Layer của Kiến

trúc module của DotNetNuke.

Trừu tượng Cơ sở dữ liệu (Database Abstraction)

Bây giờ chúng ta bàn đến BLL, hãy tìm hiểu về trừu tượng thêm một chút, chúng ta biết rằng các phương

thức trong BLL tương ứng với các thủ tục lưu (trong trường hợp của SQL), nhưng thực sự thì các lệnh gọi

này được trừu tượng như thế nào? Sự trừu tượng này được cung cấp bởi lớp DataProvider.vb của chúng ta

trong ví dụ Survey. Bạn có thể xem mã lệnh ở dưới, lớp này chứa các phương thức có thể đè (overridable

methods) mà lớp SQLDataProvider thực sự sẽ cung cấp. Với việc trừu tượng hóa các phương thức này trong

lớp trừu tượng DataProvider.vb, tất cả những điều chúng ta cần làm là thêm một cấu phần đã dịch

(assembly) mới cho cơ sở dữ liệu mà chúng ta sử dụng bên dưới cho DNN, không cần phải biên dịch lại

hoặc thay đổi module. Lớp trừu tượng này trở thành một phần của dự án module của bạn.

Imports System

Imports System.Web.Caching

Imports System.Reflection

 

Namespace YourCompanyName.Survey

  Public MustInherit Class DataProvider

    ' provider constants - eliminates need for Reflection later

    Private Const [ProviderType] As String = "data" ' maps to  in web.config

    Private Const [NameSpace] As String = "YourCompanyName.Survey" ' project namespace

    Private Const [AssemblyName] As String = "YourCompanyName.Survey" ' project assemblyname

    Public Shared Shadows Function Instance() As DataProvider

      Dim strCacheKey As String = [NameSpace] & "." & [ProviderType] & "provider"

Page 26: Report DNN Portal

      ' Use the cache because the reflection used later is expensive

      Dim objConstructor As ConstructorInfo = _

        CType(DotNetNuke.DataCache.GetCache(strCacheKey), ConstructorInfo)

      If objConstructor Is Nothing Then

        ' Get the provider configuration based on the type

        Dim objProviderConfiguration As DotNetNuke.ProviderConfiguration = _

          DotNetNuke.ProviderConfiguration.GetProviderConfiguration([ProviderType])

        ' The assembly should be in \bin or GAC,

        ' so we simply need to get an instance of the type

        Try

          ' Override the typename if a ProviderName is specified

          ' ( this allows the application to load a different

          ' DataProvider assembly for custom modules )

          Dim strTypeName As String = [NameSpace] & "." & _

            objProviderConfiguration.DefaultProvider & _

            ", " & [AssemblyName] & "." & objProviderConfiguration.DefaultProvider

          ' Use reflection to store the constructor of the class that implements DataProvider

          Dim t As Type = Type.GetType(strTypeName, True)

            objConstructor = t.GetConstructor(System.Type.EmptyTypes)

          ' Insert the type into the cache

          DotNetNuke.DataCache.SetCache(strCacheKey, objConstructor)

        Catch e As Exception

          ' Could not load the provider - this is likely due to binary compatibility issues

        End Try

Page 27: Report DNN Portal

      End If

    Return CType(objConstructor.Invoke(Nothing), DataProvider)

  End Function

 

' all core methods defined below

 

  Public MustOverride Function GetSurveys(ByVal ModuleId As Integer) As _

    IDataReader

  Public MustOverride Function GetSurvey(ByVal SurveyID As Integer, _

    ByVal ModuleId As Integer) As IDataReader

  Public MustOverride Function AddSurvey(ByVal ModuleId As Integer, ByVal Question As _

    String, ByVal ViewOrder As Integer, ByVal OptionType As String, _

    ByVal UserName As String) As Integer

  Public MustOverride Sub UpdateSurvey(ByVal SurveyId As Integer, ByVal Question As _

    String, ByVal ViewOrder As Integer, ByVal OptionType As String, ByVal UserName As String)

  Public MustOverride Sub DeleteSurvey(ByVal SurveyID As Integer)

  Public MustOverride Function GetSurveyOptions(ByVal SurveyId As Integer) As _

    IDataReader

  Public MustOverride Function AddSurveyOption(ByVal SurveyId As Integer, _

    ByVal OptionName As String, ByVal ViewOrder As Integer) As Integer

  Public MustOverride Sub UpdateSurveyOption(ByVal SurveyOptionId As Integer, _

    ByVal OptionName As String, ByVal ViewOrder As Integer)

  Public MustOverride Sub DeleteSurveyOption(ByVal SurveyOptionID As Integer)

  Public MustOverride Sub AddSurveyResult(ByVal SurveyOptionId As Integer)

Page 28: Report DNN Portal

 End Class

End Namespace

 

Hãy xem mã lệnh trong lớp trừu tượng làm gì.

<!--[if !supportLists]-->-         <!--[endif]-->Trừu tượng các lệnh gọi đến cơ sở dữ liệu dùng các phương

thức có thể đè.

<!--[if !supportLists]-->-         <!--[endif]-->Chứa một phương thức instance() để xác định bộ cung cấp

dữ liệu để dùng cho module của chúng ta (sẽ bàn đến ở phần sau).

<!--[if !supportLists]-->-         <!--[endif]-->Chứa tất cả các phương thức truy cập dữ liệu cho các modulé

của bạn mà sau đó được chuyên tới bộ cung ứng dữ liệu để tương tác trực tiếp với một cơ sở dữ

liệu cụ thể.

Nhìn vào phương thức instance của lớp, bạn sẽ thấy nó kiểm tra xem bộ cung ứng của cơ sở dữ liệu nào

chúng ta sẽ sử dụng cho module, nó sẽ nạp đúng bộ cung ứng và bộ cung ứng của chúng ta sẽ cho phép

tương tác với cơ sở dữ liệu trực tiếp cho module. Cách mà bộ cung cấp được xác định trong DotNetNuke là

sửa đổi tệp Web.config ở phần khóa DotNetNuke. Mặc định cài đặt của DotNetNuke, có hai bộ cung ứng

sẵn có là Access và SQL Server, và ngầm định Access được xác định, nhưng có thể thay đổi bằng cách trỏ

defaultProvider đến SQLDataProvider. Hãy xem Web.config với sửa đổi SQL này.

 

<dotnetnuke>

   <data defaultProvider="SqlDataProvider" >

      <providers>

         <clear/>

         <add name = "SqlDataProvider"

                        type = "DotNetNuke.Data.SqlDataProvider, DotNetNuke.SqlDataProvider"

                        connectionString = "Server=localhost;Database=Demo;uid=sa;pwd=;"

                             providerPath = "~\Providers\DataProviders\SqlDataProvider\"

                        objectQualifier = ""

                        databaseOwner = "dbo"

         />

Page 29: Report DNN Portal

        <add name = "AccessDataProvider"

                        type = "DotNetNuke.Data.AccessDataProvider, DotNetNuke.AccessDataProvider"

                        connectionString = "PROVIDER=Microsoft.Jet.OLEDB.4.0;"

                             providerPath = "~\Providers\DataProviders\AccessDataProvider\"

                        objectQualifier = "DotNetNuke"

                        databaseFilename = "DotNetNuke.mdb.resources"

         />

     </providers>

   </data>

</dotnetnuke>

 Trong phần ba chúng ta sẽ bàn đến việc phát triển trên SQLDataProvider. Phần cuối này chúng tôi sẽ giải thích cách bạn tạo một gói cài đặt cấu phần riêng để chuyển giao như thế nào

Phần III-1

Trong phần cuối này, chúng ta sẽ tìm hiểu kiến trúc của lớp cung ứng của cơ sở dữ liệu, và cuối

cùng là tạo ra gói chuyển giao và cài đặt module trong DNN.

Lớp Cung ứng Cơ sở dữ liệu (The Database Provider Class)

Dự án lớp cung ứng của cơ sở dữ liệu là cấu phần cho phép trực tiếp tương tác với một cơ sở dữ liệu cụ thể.

Cho tới giờ, chúng ta vẫn ở bên trong cấu phần module và toàn bộ tương tác cơ sở dữ liệu được trừu tượng

với cơ sở dữ liệu bằng việc sử dụng Lớp Trừu tượng Dữ liệu  (Data Abstraction Layer) được cung cấp bởi lớp

DataProvider.vb của module. Bây giờ chúng ta sẽ xem một lớp cụ thể tương tác với cơ sở dữ liệu, trong ví

dụ này đó là lớp SQLDataProvider.vb của dự án SQLDataProvider của module thăm dò ý kiến.

Hãy xem lại xem bạn đã thiết lập dự án cho SQLDataProvider như thế nào:

<!--[if !supportLists]-->-         <!--[endif]-->Tạo dự án lớp mới.

<!--[if !supportLists]-->-         <!--[endif]-->Đổi các thuộc tính của dự án như sau:

<!--[if !supportLists]-->o        <!--[endif]-->Đổi tên thành

Company.ModuleName.SQLDataProvider

<!--[if !supportLists]-->o        <!--[endif]-->Xóa namespace.

<!--[if !supportLists]-->o        <!--[endif]-->Thêm các tham chiếu:

Page 30: Report DNN Portal

<!--[if !supportLists]-->§         <!--[endif]-->DotNetNuke (dự án)

<!--[if !supportLists]-->§         <!--[endif]-->Company.ModuleName (dự án)

<!--[if !supportLists]-->§         <!--[endif]-->Microsoft.ApplicationBlocks.Data

<!--[if !supportLists]-->o        <!--[endif]-->Đổi đường dẫn biên dịch thành thư mục bin của

DotNetNuke của bạn.

Bạn có thể xem ảnh của giải pháp ở phần I.

Lớp Cung ứng Dữ liệu (The Data Provider Class)

Hãy xem một số điểm quan trọng của bộ cung ứng dữ liệu SQL:

<!--[if !supportLists]-->-         <!--[endif]-->Cơ sở dữ liệu cụ thể, đối với mỗi cơ sở dữ liệu bạn muốn sử

dụng, bạn sẽ cần một bộ cung ứng dữ liệu cho module của mình.

<!--[if !supportLists]-->-         <!--[endif]-->Thực hiện lời gọi sử dụng IdataReader để lấy thông tin từ cơ

sở dữ liệu.

<!--[if !supportLists]-->-         <!--[endif]-->Đè các phương thức đã khai báo trong tầng trừu tượng của

bộ cung ứng dữ liệu.

<!--[if !supportLists]-->-         <!--[endif]-->Có thể sửa đổi thoải mái dựa vào loại cơ sở dữ liệu cụ thể.

Bây giờ chúng ta đã biết tương tác cơ sở dữ liệu thực sự làm gì, hãy xem mã lệnh của ví dụ module Survey:

Imports System

Imports System.Data

Imports System.Data.SqlClient

Imports Microsoft.ApplicationBlocks.Data

Imports DotNetNuke

Namespace YourCompanyName.Survey

    Public Class SqlDataProvider

        Inherits DataProvider

        Private Const ProviderType As String = "data"

        Private _providerConfiguration As ProviderConfiguration = _

             ProviderConfiguration.GetProviderConfiguration(ProviderType)

        Private _connectionString As String

Page 31: Report DNN Portal

        Private _providerPath As String

        Private _objectQualifier As String

        Private _databaseOwner As String

        Public Sub New()

            ' Read the configuration specific information for this provider

            Dim objProvider As Provider = _

              CType(_providerConfiguration.Providers(_providerConfiguration.DefaultProvider), _

                 Provider)

            ' Read the attributes for this provider

            _connectionString = objProvider.Attributes("connectionString")

            _providerPath = objProvider.Attributes("providerPath")

            _objectQualifier = objProvider.Attributes("objectQualifier")

            If _objectQualifier <> "" And _objectQualifier.EndsWith("_") = False Then

                _objectQualifier += "_"

            End If

            _databaseOwner = objProvider.Attributes("databaseOwner")

            If _databaseOwner <> "" And _databaseOwner.EndsWith(".") = False Then

                _databaseOwner += "."

            End If

        End Sub

 

        Public ReadOnly Property ConnectionString() As String

            Get

                Return _connectionString

            End Get

        End Property

Page 32: Report DNN Portal

 

        Public ReadOnly Property ProviderPath() As String

            Get

                Return _providerPath

            End Get

        End Property

 

        Public ReadOnly Property ObjectQualifier() As String

            Get

                Return _objectQualifier

            End Get

        End Property

 

        Public ReadOnly Property DatabaseOwner() As String

            Get

                Return _databaseOwner

            End Get

        End Property

 

        ' general

        Private Function GetNull(ByVal Field As Object) As Object

            Return Null.GetNull(Field, DBNull.Value)

        End Function

 

        Public Overrides Function GetSurveys(ByVal ModuleId As Integer) As IDataReader

            Return CType(SqlHelper.ExecuteReader(ConnectionString, _

Page 33: Report DNN Portal

              DatabaseOwner & ObjectQualifier & "GetSurveys", ModuleId), IDataReader)

        End Function

        Public Overrides Function GetSurvey(ByVal SurveyID As Integer, _

            ByVal ModuleId As Integer) As IDataReader

            Return CType(SqlHelper.ExecuteReader(ConnectionString, _

              DatabaseOwner & ObjectQualifier & "GetSurvey", SurveyID, ModuleId), IDataReader)

        End Function

        ::

        ::

        ::

End Class

Bạn có thể thấy ở mã nguồn trên đây, chúng ta có một số thuộc tính dành cho chuỗi kết nối cơ

sở dữ liệu được định nghĩa trong web.config, đường dẫn của bộ cung ứng, cũng được xác định

trong web.config; hãy nhớ bài trước chúng ta đã xác định vị trí bộ cung ứng dữ liệu ở đâu? Đó là

giá trị của provider path (_providerPath) này trong lớp của chúng ta. Cuối cùng, chúng ta có hai

chuỗi nữa, database owner (_databaseOwner), và object qualifier (_objectQualifier).

Database owner cho phép chúng ta xác định giá trị và truyền cho các phương thức của cơ sở dữ

liệu, điều này giải quyết một số vấn đề trong quá khứ gặp phải là viết mã lệnh cứng dbo hoặc giá

trị khác cho tài khoản của databse owner. Bằng cách này một ISP có thể xác định các tài khoản

khác nhau cho các cơ sở dữ liệu khác nhau và không phải tính đến bảo mật và quyền hạn.

Object qualifier là tiền tố (prefix name) cho cấu trúc bảng, hiện thời để trống.

Dưới các thuộc tính, bạn có các phương thức tương ứng với các thủ tục lưu nằm trong cơ sở dữ

liệu DNN. Bạn cũng có SQL ở đây hoặc các truy vấn có tham số, bất kỳ điều gì cần để kết nối

trực tiếp đến cơ sở dữ liệu. Khi hàm của bạn trả về kiểu IDataReader để được quản lý ở tầng

trừu tượng, nó sẽ được đẩy vào tập hợp đối tượng nhờ lớp trợ giúp đối tượng nghiệp vụ tùy biến

(CBO.vb) được cung cấp bởi nền tảng DNN (nhớ lại bài viết trước).

Một khi tất cả các tầng của bạn được hoàn thành, hãy biên dịch chúng thành phiên bản (release)

và chuẩn bị để đóng gói (distribution).

Đóng gói Module của Bạn

Chúng ta đã tìm hiểu mọi tầng của kiến trúc module DotNetNuke, bây giờ hãy chuẩn bị để

chuyển giao module. Trong các bước sau chúng ta sẽ tạo một gói cấu phần riêng biệt (private

Page 34: Report DNN Portal

assembly package) từ module thăm dò ý kiến sao cho nó có thể được chuyển giao dễ dàng đến

các cổng DNN khác.

Tạo Cơ sở dữ liệu để Đóng gói

Bây giờ bạn đã tạo được dự án của bộ cung ứng, chúng ta cần tạo ra mã lệnh SQL (SQL script)

để sinh ra cấu trúc cho cơ sở dữ liệu của chúng ta. Bạn còn nhớ các chuỗi database owner và

object qualifier được xác định trong lớp cung ứng dữ liệu? Chúng ta sẽ cần xác định các biến

này trong mã lệnh SQL để triển khai. DotNetNuke sẽ tìm để kiểm tra giá trị tìm được. Tạo mã

lệnh này chỉ cần xử lý thêm một chút sau khi bạn dùng SQL Query Analyzer và kết xuất (export)

mã lệnh tạo ra từ cơ sở dữ liệu. Đúng thế, trước hết bạn sinh mã lệnh SQL thông qua Query

Analyzer hoặc Enterprise Manager, nhưng chúng ta sẽ cần thêm một vài thông tin bổ sung vào

mã lệnh này để DNN tạo đúng cấu trúc cơ sở dữ liệu.

Sau khi bạn sinh mã lệnh SQL, bạn sẽ cần thêm các tiền tố sau vào trước tên bảng và các tham

chiếu thủ tục lưu trong mã lệnh mới được tạo.

{databaseOwner}{objectQualifier}

Các tiền tố này sau này sẽ được thay bằng giá trị được định nghĩa trong web.config tại thời điểm

sinh cơ sở dữ liệu trong khi cài đặt module. Do đó, ví dụ sau của mã lệnh SQL để sinh một bảng:

if not exists (select * from dbo.sysobjects where

 id = object_id(N'{databaseOwner}{objectQualifier}[SurveyOptions]')

 and OBJECTPROPERTY(id, N'IsTable') = 1)

CREATE TABLE {databaseOwner}{objectQualifier}SurveyOptions (

         [SurveyOptionID] [int] IDENTITY (1, 1) NOT NULL ,

         [SurveyID] [int] NOT NULL ,

         [ViewOrder] [int] NOT NULL ,

         [OptionName] [nvarchar] (500) NOT NULL ,

         [Votes] [int] NOT NULL

) ON [PRIMARY]

 

GO

Bạn có thể thấy chúng tôi hiện sáng tiền tố sau đó trong mã lệnh sinh thủ tục lưu bạn sẽ thấy chúng sẽ

được thêm vào trong bất kỳ nào tham chiếu đến bảng:

Page 35: Report DNN Portal

create procedure {databaseOwner}{objectQualifier}UpdateSurveyOption

 

@SurveyOptionID int,

@OptionName     nvarchar(500),

@ViewOrder      int

 

as

 

update {objectQualifier}SurveyOptions

set    OptionName = @OptionName,

       ViewOrder = @ViewOrder

where  SurveyOptionID = @SurveyOptionID

 

GO

Khi mã lệnh SQL của bạn được hoàn thành, hãy lưu nó và đặt tên theo quy ước:

mãphiênbản.kiểubộcungứngdữliệu, ví dụ: 01.00.00.SQLDataProvider

Nó sẽ được đưa vào trong gói chuyển giao. Tùy thuộc vào bộ cung ứng dữ liệu nào được thiết

lập trong DNN, nó sẽ tìm đến mã lệnh sinh cơ sở dữ liệu thích hợp dựa vào giá trị mở rộng.

Một tệp khác bạn nên tạo như một phần của gói chuyển giao là mã lệnh dỡ cài đặt. Mã lệnh này

chủ yếu chứa đoạn chương trình dỡ để xóa các bảng và thủ tục lưu trong trường hợp người

quản trị portal muốn xóa module của bạn khỏi hệ thống DNN. Quy ước đặt tên của mã lệnh dỡ

cài đặt này như sau:

uninstall.kiểubộcungứngdữliệu, ví dụ: uninstall.SqlDataProvider

Phần III-2

Trong bài viết cuối này về kiến trúc của module, chúng ta sẽ tìm hiểu kiến trúc của lớp cung ứng

cơ sở dữ liệu, và cuối cùng là tạo ra bộ đóng gói và cài đặt module của chúng ta trong DNN.

Tạo Định nghĩa cho Đóng gói DNN của bạn

Page 36: Report DNN Portal

Tệp định nghĩa cài đặt cấu phần DNN là một tệp XML mô tả cấu trúc của module của bạn. Nó chứa một số

mẩu thông tin để DNN cài đặt module của bạn vào trong ứng dụng. Hãy xem mẫu đi kèm với module thăm

dò ý kiến.

<?xml version="1.0" encoding="utf-8" ?>

   <dotnetnuke version="2.0" type="Module">

   <folders>

     <folder>

       <name>CompanyName - Survey</name>

       <description>Survey allows you to create custom surveys

          to obtain public feedback</description>

       <version>01.00.00</version>

       <modules>

         <module>

           <friendlyname>CompanyName - Survey</friendlyname>

           <controls>

             <control>

               <src>Survey.ascx</src>

               <type>View</type>

             </control>

             <control>

               <key>Edit</key>

               <title>Create Survey</title>

               <src>EditSurvey.ascx</src>

               <iconfile>icon_survey_32px.gif</iconfile>

               <type>Edit</type>

             </control>

             ::

           </controls>

Page 37: Report DNN Portal

        </module>

      </modules>

 

Hãy xem đoạn XML ở trên. Bạn có thể thấy chúng ta định nghĩa module tại mức cao nhất. Sau đó chúng ta

cần cho DNN biết module có chứa gì, đó sẽ là giao diện người sử dụng hoặc các tệp ascx. Trong module

thăm dò ý kiến, chúng ta có ba định nghĩa, chúng tôi nêu ra hai trong số đó, một là điều khiển xem và một

là điều khiển sửa. Bạn có thể thấy bên trong điều khiển sửa chúng ta đã định nghĩa tên tệp được sử dụng,

tên khóa, tiêu đề của module container, biểu tượng và kiểu của điều khiển, trong trường hợp này đó là điều

khiển sửa. Vì đây là điều khiển sửa, chúng ta có thể dùng giá trị Boolean cung cấp bởi DNN để kiểm tra

quyền xem liệu người sử dụng có quyền truy cập vào các chức năng sửa trên module hay không (bạn còn

nhớ “IsEditable” từ phần I không?).

Như vậy chúng ta đã định nghĩa được cấu trúc cơ bản của module, chúng ta cần định nghĩa các tệp thực tế

để tạo nên module của chúng ta. Các tệp này gồm có DLL, điều khiển ascx, bộ cung cấp dữ liệu, hình ảnh,

và bất kỳ tệp nào chúng ta sử dụng để hỗ trợ cho ứng dụng riêng của chúng ta.

      ::

     <files>

       <file>

         <name>Survey.ascx</name>

       </file>

       <file>

         <name>EditSurvey.ascx</name>

       </file>

       <file>

         <name>EditSurveyOptions.ascx</name>

       </file>

       <file>

         <name>YourCompanyName.Survey.dll</name>

       </file>

       <file>

         <name>YourCompanyName.Survey.SqlDataProvider.dll</name>

Page 38: Report DNN Portal

       </file>

       <file>

         <name>01.00.00.SqlDataProvider</name>

       </file>

       <file>

         <name>Uninstall.SqlDataProvider</name>

       </file>

       <file>

         <name>YourCompanyName.Survey.AccessDataProvider.dll</name>

       </file>

       <file>

         <name>01.00.00.AccessDataProvider</name>

       </file>

       <file>

         <name>Uninstall.AccessDataProvider</name>

       </file>

       <file>

      ::

     </files>

   </folder>

 </folders>

</dotnetnuke>

Bây giờ tệp đã được tạo ra, hãy lấy toàn bộ tệp của module của bạn và nén chúng thành một tệp zip. Đây

là cấu phần riêng biệt (private assembly) mà bạn có thể chuyển giao. Hãy nhớ rằng bạn không cần phải

đựa các tệp chương trình nguồn vào gói này, chỉ cần cấu phần đã biên dịch, tệp ascx, và các tệp hỗ trợ

khác --  không cần tệp lớp filename.vb.

Cài đặt Cấu phần

Cuối cùng, bạn có module được đóng gói để chuyển giao, hãy tìm hiểu xem cài đặt nó vào portal DNN như

thế nào. DNN cung cấp một phương pháp rất đơn giản để cài đặt module vào portal thông qua chương

Page 39: Report DNN Portal

trình Quản lý Tệp (File Manager). Đây là lý do giải thích tại sao mọi công việc bạn làm để tạo một cấu

phần, một mã lệnh tạo SQL, và tệp .dnn, đi cùng với nhau như vậy người quản trị có thể dễ dàng cài đặt nó

vào hệ DNN. Sử dụng thủ tục sau để cài đặt module của bạn:

<!--[if !supportLists]-->1.      <!--[endif]-->Đăng nhập vào với quyền Host.

<!--[if !supportLists]-->2.      <!--[endif]-->Vào mục File Manager dưới thực đơn Host.

<!--[if !supportLists]-->3.      <!--[endif]-->Dưới thực đơn Options, chọn Add New File(s).

<!--[if !supportLists]-->4.      <!--[endif]-->Trong màn hình Upload File, chọn nút Custom Module.

<!--[if !supportLists]-->5.      <!--[endif]-->Kích chuột nút browse để tìm ra gói cấu phần của bạn.

<!--[if !supportLists]-->6.      <!--[endif]-->Kích Add để hiển thị gói trong danh sách

<!--[if !supportLists]-->7.      <!--[endif]-->Kích Upload để tải cấu phần lên máy chủ.

Một khi tệp đã được tải lên, DNN sẽ xem tệp .dnn để tìm thông tin nó cần để thiết lập module của

bạn vào portal. File Manager sẽ hiển thị trạng thái của việc cài đặt module trên màn hình. Nếu có

lỗi nào xuất hiện trong quá trình cài đặt, DNN sẽ cho bạn biết bằng cách đưa ra màn hình lỗi chữ

màu đỏ in đậm.

Nếu tất cả cài đặt đúng, bạn có thể thêm module vào trang bằng việc chọn nó từ thực đơn thả.

KIẾN TRÚC DNN PORTAL

Page 40: Report DNN Portal

Nhân DNN: DNN được phát triển trên nền asp.net của MS

Mô hình hoạt động của .NET

2.5. Mô hình lập trình với DotNetNuke

2.5.1. Mô hình các đối tượng trong DNN components

Chúng ta hãy xem xét một ví dụ của việc tạo ra các lớp để có thể thao tác với đối tượng lớp nhân viên (ứng với bảng HT_NhanVien trong CSDL). Các components được tạo ra sẽ có dạng thức như sau. Trong ví dụ này, phương thức lấy thông tin của một nhân viên theo khóa chính MaNhanVien được sử dụng để cho thấy các đối tượng trong kiến trúc của DNN.

Mô hình của các đối tượng trong DNN được trình bày trong sơ đồ dưới đây

CT Khung Portal

Hiển thị thông tin

Themes, Skin, Transcoding

Xử lý các tác vụ của người dùng

Module tác vụ

Module tác vụ

Module tác vụ

Module tác vụ

Page 41: Report DNN Portal

Controller Class

Đối tượng điều khiển, sự dụng các phương thức của DataProvider để truy xuất dữ liệu.

Info Class

Lớp mô tả các đối tượng lưu trữ thông tin

DataProvider Class

Lớp ảo (abstract) định nghĩa các phương thức truy nhập dữ liệu. Lớp ảo này cho phép phát triển độc lập các mô tả truy nhập dữ liệu.

SqlDataProvider Class

Đối tượng truy nhập dữ liệu thực sự

Store Procedure

Các thủ tục ở CSDL MSSQL server được SqlDataProvider sử dụng