Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

Hướng dẫn lập trình với SCSF phần I (smart client software factory)

1 018 vues

Publié le

Hướng dẫn lập trình với SCSF

Publié dans : Logiciels
  • Soyez le premier à commenter

Hướng dẫn lập trình với SCSF phần I (smart client software factory)

  1. 1. HƯỚNG DẪN LẬP TRÌNH VỚI SCSF VÀ ENTITY FRAMEWORK (HisFramework) Mục Lục Ph n I: T NG QUÁTầ Ổ ....................................................................................................................................1 I.Cài đ t SCSFặ ...........................................................................................................................................1 II.T o Business Moduleạ ...........................................................................................................................3 III.T o Viewạ ..............................................................................................................................................7 Phần I: TỔNG QUÁT Phần source cài đặt và tài liệu có thể tham khảo Internet (http://smartclient.codeplex.com/) I. Cài đặt SCSF A. Cài đặt Visual Studio 2010 Source cài đặt VS 2010: 172.16.160.7SoftwaresSoftware Development ToolsVisual StudioVisual Studio 2010. Source cài đặt SCSF: 172.16.160.7SoftwaresSoftware Development ToolsFor .NETSCSF B. Cài đặt SCSF Thứ tự cài đặt: 1. Visual Studio 2010 SDK (VsSDK_sfx.exe). 2. Cài đặt Visual Studio Extention 3. GAX 2010 (GAX2010.vsix). 4. GAT 2010 (GAT2010.vsix). 5. Smart Client Software Factory (SCSF2010.vsix). Các bước cài đặt đơn giản nên không hướng dẫn cụ thể. Sau khi cài đặt xong mở VS 2010 lên. Sau đó vào Menu Tool -> Extention Manager Xem các Extention có được enable chưa nếu chưa thì enable. C. Tạo Smart Client Solution
  2. 2. Tạo project mới Mở VS 2010 lên Vào menu File -> New -> Project. Hộp thoại New Project mở lên->Chọn các thông tin theo hình minh họa. Xuất hiện hộp thoại Create Smart Client Solution. Chọn Finish (Nếu ứng dụng dạng WPF bạn có thể check chọn “Allow solution to host WPF SmartParts”).
  3. 3. Cấu trúc của một Solution theo SCSF II. Tạo Business Module Đến phần này chúng ta đã biết cách tạo ra một Solution dạng SCSF và cấu trúc cơ bản của SCSF. Tiếp theo chúng ta sẽ tìm hiểu cách để tạo ra một Business Module với SCSF.
  4. 4. A. Tạo Business Module  Right Click trên thư mục Source của Solution chọn các thông tin theo hình minh họa.  Vì sao lại chọn thư mục Source mà không chọn thư mục InfraStructure.  Lý do để phân biệt với cấu trúc của SCSF. Nếu là dạng module dùng chung cho nhiều module khác bạn cũng có thể add vào thư mục InfraStructure.  Hộp thoại Add Buisiness Module được mở lên chọn các thông tin theo hướng dẫn.  Cách đặt tên Module theo qui tắc đặt tên Function (VD: ModuleTraining)
  5. 5.  Thông tin của module vừa tạo được add vào file ProfileCatalog.xml trong Shell Project  Bạn có thể cấu hình load module vừa tạo hay không bằng cách chuyển đoạn code sang dạng chú thích (giống html) B. Những việc cần làm sau khi tạo module
  6. 6.  Reference CABDevExpress.ExtensionKit.dll trong thư mục Lib của solution vào module vừa tạo.  Chuyển Module vừa tạo sang .Net Framework 4.0 bằng cách Right Click vào Module vừa tạo tại cửa sổ Solution Explore -> Chọn Properties.Ở Tab Application mục target framework chọn .NET Framework 4. C. Các thành phần sử dụng chung cho Module Khai báo các command  Mục đích tạo ra các Command để đăng ký lắng nghe các sự kiện theo tên command.  Vào Project (<TenModule>.Interface) của module. Ở thư mục Constants -> Chọn File CommandNames.cs.  Sau đó tạo ra một số command theo mẫu tùy, vào chức năng mà đặt tên cho phù hợp do kiểu const string nên thống nhất chung command là chữ in hoa. namespace CuscAppFramework.EquipmentReport.Interface.Constants { /// <summary> /// Constants for command names. /// </summary> public class CommandNames : CuscAppFramework.Infrastructure.Interface.Constants.CommandNames { //Tạo command cho báo cáo nhập mới trang thiết bị public const string IMP_REPORT = "IMP_REPORT"; // Tạo command cho trang thiết bị hiện có public const string EXISTING_REPORT = "EXISTING_REPORT"; } } Khai báo quyền trên chức năng  Để khai báo các quyền thao tác trên chức năng  Bạn vào Project (<TenModule>.Interface) của module. Ở thư mục Constants ->Chọn Add-> New -> Chọn Class  Đặt tên là Rules.cs (Tên bắt buộc không thay đổi)  Sau đó tạo Class Rules có cấu trúc như sau
  7. 7. public class Rules { // Quyền truy cập chức năng báo cáo nhập trang thiết bị public const string IMP_REPORT = "equipmentreport.impreport:access"; // Quyền xem báo cáo nhập trang thiết bị public const string IMP_REPORT_VIEW = "equipmentreport.impreport.view:access"; // Quyền xuất excel báo cáo nhập trang thiết bị public const string IMP_REPORT_EXCEL = "equipmentreport.impreport.excel:access"; } III. Tạo View View là thành phần chứa giao diện chức năng của module. Bản thân View là một user control và có thể chứa các user control khác. Để tạo View Right Click vào thư mục View của module cần tạo view sau đó chọn các thông tin theo hình hướng dẫn Hộp thoại tạo view được mở lên làm theo hướng dẫn Lưu ý cách đặt tên view theo cấu trúc sau <View><TenChucNang> theo quy tắc đặt tên Function. (Không cần tạo Folder cho view)
  8. 8. Mỗi khi tạo View sẽ kèm theo tạo Interface và Presenter cho View đó. Chi tiết và code các thành phần này sẽ được giới thiệu sau. Cấu trúc của View vừa tạo Sau khi tạo View để có thể design. Chọn Reresh lại solution. A. Viết Code cho IView (Theo cấu trúc của Cusc His Framework).
  9. 9. IView là interface cho View, Presenter sử dụng IView để trao đổi (Communication) với View Ví dụ IViewDonViTinh là interface cho View danh mục đơn vị tính cần có các thao tác: Thêm, sửa , xóa, bỏ qua, lưu và load dữ liệu Khi đó ta cần định nghĩa các hàm để thực thi công việc tương ứng cho ViewDonViTinh trên IViewDonViTinh như sau: public interface IViewDonViTinh { /// <summary> /// Load thông tin đối tượng /// </summary> void LoadData(); /// <summary> /// Thêm mới đối tượng /// </summary> void Add(); /// <summary> /// Hiệu chỉnh đối tượng /// </summary> void Modify(); /// <summary> /// Xóa đối tượng /// </summary> void Delete(); /// <summary> /// Lưu thông tin đối tượng /// </summary> void Save(); /// <summary> /// Hủy bỏ thao tác trước đó /// </summary> void Cancel(); } B. Viết code cho Presenter (Theo cấu trúc của Cusc His Framework) Là nơi chứa các nghiệp vụ logic của View Phần code bắt buộc phải có của mỗi Presenter để phù hợp với CuscHisFramework Thêm vào sử dụng CABDevExpress.SmartPartInfos using CABDevExpress.SmartPartInfos; /// <summary> /// XtraWindowSmartPartInfo /// </summary> /// <param name="smartPartInfoType"></param> /// <returns></returns> public XtraWindowSmartPartInfo GetSmartPartInfo(Type smartPartInfoType)
  10. 10. { XtraWindowSmartPartInfo smartPartInfo = (XtraWindowSmartPartInfo)Activator.CreateInstance(smartPa rtInfoType); smartPartInfo.Title = "Tên của view"; return smartPartInfo; } C. Viết code cho View (Theo cấu trúc của Cusc His Framework). Phần code bắt buộc phải có của View để phù hợp với Cusc His Framework View phải được kế thừa từ IsmartPartInfoProvider Khai báo sử dụng Button Service trên view /// <summary> /// Trạng thái các nút thêm, sửa, xóa, lưu và bỏ qua trên QuickAccess /// </summary> private IButtonState _buttonState; /// <summary> /// Trạng thái các nút thêm, sửa, xóa, lưu và bỏ qua trên QuickAccess /// </summary> [ServiceDependency] public IButtonState ButtonState { get { return _buttonState; } set { _buttonState = value; } } Khởi tạo bộ nút theo lưới dữ liệu VD: Nếu lưới có dữ liệu -> Bộ nút hiển thị thêm, sửa, xóa Nếu lưới không có dữ liệu -> Bộ nút chỉ hiển thị thêm… Có thể Mở rộng cho hàm khỏi tạo bộ nút vì không phải chức năng nào cũng có dữ liệu Nếu trên View thiết kế không có lưới dữ liệu bạn thay thông tin lưới dũa liệu = null void ParentForm_Activated(object sender, EventArgs e) { ButtonState.Init(this.luoiDuLieu, Infrastructure.Interface.Enum.EnumFormStatus. VIEW, Rules.CURENCIES_ADD, Rules.CURENCIES_MODIFY, Rules.CURENCIES_DELETE); ButtonState.SetAllowAdd(true); ButtonState.SetAllowDelete(true); ButtonState.SetAllowModify(true); } Rules.<QuyenTrenChucNang> Đã được khai báo ở lớp Rules.cs Để cài đặt nhanh interface trên IView
  11. 11. Chọn vào View cần cài đặt interface Chọn view code. Sau đó Right Click vào IView tương ứng của View-> Chọn Implement Interface. VS sẽ tự sinh ra các hàm tương ứng ở Iview. Sau đó bạn có thể code trên thêm vào các đoạn code xử lý (Hướng dẫn ở phần hai). D. Viết code cho Model (Theo cấu trúc của Cusc His Framework) Tạo thư mục Model cho Module Chỉ tạo Model cho một số xử lý phức tạp hoặc tạo dữ liệu cho các báo cáo không trả về dữ liệu của một Entity nào của mô hình Entity Framework. Nếu Model xử lý chung cho nhiều view đặt tên theo quy tắc <Model><TenModule> Nếu Model chỉ xử lý cho một view duy nhất đặt tên theo quy tắc sau <Model><TenChucNang> E. Kiểm quyền & Tạo menu cho chức năng mới trong Module controller Trước hết cần hiểu cấu trúc phần quyền của Cusc His Framework Cơ chế cấp quyền theo vai trò (Role).Vai trò bao gồm những chức năng (Quyền, Object) nào. Người dùng thuộc vai trò nào thì sẽ có quyền trên các chức năng tương ứng với vai trò đó.
  12. 12. Trước khi vào phần này bạn cần khai báo quyền trong cơ sở dữ liệu tương ứng với từng chức năng Ví dụ khai báo quyền trên chức năng Báo cáo nhập mới trang thiết bị Trước hết bạn nhập thông tin các quyền và bảng Object Thông tin này phải giống với thông tin khai báo trong file Rules.cs đã được đề cập ở phần trên.
  13. 13. Sau đó nhập thông tin vào bảng ObjectRole (Gán quyền cho vai trò System để admin có quyền trên chức năng). Sau khi đăng nhập có thể gán lại quyền lại bằng giao diện của chương trình. Kiểm quyền và tạo menu Vào Module controller của module cần tạo menu và kiểm quyền. Khai báo sử dụng using CuscAppFramework.<TenModule>.Interface.Constants; using CuscAppFramework.Infrastructure.Interface.Services;  Khai báo menu VD Khai báo menu danh mục (CatalogMenu) ở CuscAppFramework.Infrastructure.Interface.Constants File UIExtensionSiteNames.cs public const string CatalogMenu = "CatalogMenu";
  14. 14. Khai báo và register cho menu danh mục ở CuscAppFramework.Infrastructure.Shell File ShellApplication.cs RibbonPage pCatalogs = new RibbonPage("Danh mục"); RootWorkItem.UIExtensionSites.RegisterSite(UIExtensionSiteNames.CatalogMenu, pCatalogs); RootWorkItem.UIExtensionSites[UIExtensionSiteNames.Ribbon].Add(pCatalogs);  Khai báo đoạn code sử dụng Security Services (bắt buộc phải có trong mỗi module để kiểm quyền) ở module controller. /// <summary> /// Kiểm quyền người dùng /// </summary> private ISecurityHelper _securityHelper; [ServiceDependency] public ISecurityHelper SecurityHelper { get { return _securityHelper; } set { _securityHelper = value; } }  Sau đó tìm đến hàm ExtendMenu ở module controller và khai báo đoạn code kiểm tra quyền và tạo menu như sau Giải thích: Trong đoạn code này khai báo một nhóm danh mục(GroupCatalogs1) trên menu danh mục chính (CatalogMenu). Kiểm tra quyền trên danh mục tiền tệ (CURENCIES), đơn vị tính (UNITS ) theo các Rules đã được định nghĩa trước đó. Nếu có quyền thì tạo ra button và add button này vào GroupCatalogs1 ( BarButtonItem bbtn_curencies = new BarButtonItem();) . Sau khi kiểm quyền nếu có ít nhất một chức năng có quyền thì add GroupCatalogs1 vào menu danh mục (CatalogMenu) // Thêm group quan ly danh muc 1 if (GroupCatalogs1.ItemLinks.Count > 0) { WorkItem.UIExtensionSites[UIExtensionSiteNames.CatalogMenu].Add(GroupCatalogs1 ); } private void ExtendMenu()
  15. 15. { #region Nhom danh muc 1 RibbonPageGroup GroupCatalogs1 = new RibbonPageGroup(""); // Kiểm quyền danh mục tiền tệ if (SecurityHelper.Authorized(Rules.CURENCIES) || SecurityHelper.Authorized(Rules.CURENCIES _VIEW)) { BarButtonItem bbtn_curencies = new BarButtonItem(); bbtn_curencies.Caption = "Tiền tệ"; bbtn_curencies.Alignment = DevExpress.XtraBars.BarItemLinkAlignment.Left; bbtn_curencies.LargeGlyph = global::CuscAppFramework.Catalogs.Properties.Resources.DanhMu cTienTe; bbtn_curencies.LargeWidth = 50; bbtn_curencies.RibbonStyle = ((DevExpress.XtraBars.Ribbon.RibbonItemStyles) (((DevExpress.XtraBars.Ribbon.RibbonItemStyles.Large | DevExpress.XtraBars.Ribbon.RibbonItemStyles.S mallWithText) | DevExpress.XtraBars.Ribbon.RibbonItemStyles.SmallWithoutText))); GroupCatalogs1.ItemLinks.Add(bbtn_curencies); WorkItem.Commands[CommandNames.CURENCIES].AddInvoker(bbtn_curencies, "ItemClick"); } // Kiểm quyền danh mục đơn vị tính if (SecurityHelper.Authorized(Rules.UNITS) || SecurityHelper.Authorized(Rules.UNITS_VIEW)) { BarButtonItem bbtn_units = new BarButtonItem(); bbtn_units.Caption = "Đơn vị tính"; bbtn_units.Alignment = DevExpress.XtraBars.BarItemLinkAlignment.Left; bbtn_units.LargeGlyph = global::CuscAppFramework.Catalogs.Properties.Resources.DanhMucDo nViTinh; bbtn_units.LargeWidth = 70; bbtn_units.RibbonStyle = ((DevExpress.XtraBars.Ribbon.RibbonItemStyles) (((DevExpress.XtraBars.Ribbon.RibbonItemStyles.Large | DevExpress.XtraBars.Ribbon.RibbonItemStyles.S mallWithText) | DevExpress.XtraBars.Ribbon.RibbonItemStyles.SmallWithoutText))); GroupCatalogs1.ItemLinks.Add(bbtn_units); WorkItem.Commands[CommandNames.UNITS].AddInvoker(bbtn_units, "ItemClick"); } // Thêm group quan ly danh muc 1 if (GroupCatalogs1.ItemLinks.Count > 0) { WorkItem.UIExtensionSites[UIExtensionSiteNames.CatalogMenu].Add(GroupCatalogs1 ); } #endregion } Khai báo sự kiện mở View (chức năng) ở Shell Form trong Module controler Ví dụ khai báo sự kiện nhấn nút danh mục đơn vị tính trên Shell Form [CommandHandler(CommandNames.UNITS)] public void OnUnitsClick(object sender, EventArgs e)
  16. 16. { ShowViewInWorkspace<ViewUnits>(CuscAppFramework.Catalogs.Constants.SmartPartInfoNames.UNITS, Workspace Names.MainWorkspace); } Đến đây chúng ta có thể tạo được module và View theo SCSF và CuscHisFramework Chi tiết code cho từng phần với Entity Framework sẽ được giới thiệu ở phần II.

×