SlideShare a Scribd company logo
1 of 16
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
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”).
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.
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)
 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
 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
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)
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).
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)
{
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
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ò
đó.
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.
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";
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()
{
#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)
{
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.

More Related Content

What's hot

Tai lieuhuongdansudung
Tai lieuhuongdansudungTai lieuhuongdansudung
Tai lieuhuongdansudungdanhhui2002
 
Tài Liệu Hướng Dẫn Cài đặt Sugarcrm trên linux (Ubuntu)
Tài Liệu Hướng Dẫn Cài đặt Sugarcrm trên linux (Ubuntu)Tài Liệu Hướng Dẫn Cài đặt Sugarcrm trên linux (Ubuntu)
Tài Liệu Hướng Dẫn Cài đặt Sugarcrm trên linux (Ubuntu)ducnguyenhuu
 
Tài Liệu Hướng Dẫn Cài đặt Sugarcrm Pro trên Windows 7
Tài Liệu Hướng Dẫn Cài đặt Sugarcrm Pro trên Windows 7Tài Liệu Hướng Dẫn Cài đặt Sugarcrm Pro trên Windows 7
Tài Liệu Hướng Dẫn Cài đặt Sugarcrm Pro trên Windows 7ducnguyenhuu
 
Create easymoduleinphpfox
Create easymoduleinphpfoxCreate easymoduleinphpfox
Create easymoduleinphpfoxEntu Di
 
Bài 1 Lập trình website theo mô hình MVC - Xây dựng ứng dụng web
Bài 1 Lập trình website theo mô hình MVC - Xây dựng ứng dụng webBài 1 Lập trình website theo mô hình MVC - Xây dựng ứng dụng web
Bài 1 Lập trình website theo mô hình MVC - Xây dựng ứng dụng webMasterCode.vn
 
Sức mạnh của jsf 2, phần 2 tạo khuôn mẫu và các thành phần phức hợp
Sức mạnh của jsf 2, phần 2 tạo khuôn mẫu và các thành phần phức hợpSức mạnh của jsf 2, phần 2 tạo khuôn mẫu và các thành phần phức hợp
Sức mạnh của jsf 2, phần 2 tạo khuôn mẫu và các thành phần phức hợpTuyet Tam
 
Mixing asp.net mvc & web form into hybrid project
Mixing asp.net mvc & web form into hybrid projectMixing asp.net mvc & web form into hybrid project
Mixing asp.net mvc & web form into hybrid projectMinh Tri Lam
 
Bài 4: Lập trình với CSDL ADO.NET & Kiến trúc không kết nối & Lập trình giao ...
Bài 4: Lập trình với CSDL ADO.NET & Kiến trúc không kết nối & Lập trình giao ...Bài 4: Lập trình với CSDL ADO.NET & Kiến trúc không kết nối & Lập trình giao ...
Bài 4: Lập trình với CSDL ADO.NET & Kiến trúc không kết nối & Lập trình giao ...MasterCode.vn
 
Bài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPT
Bài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPTBài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPT
Bài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPTMasterCode.vn
 
Nunit framework for .NET application
Nunit framework for .NET applicationNunit framework for .NET application
Nunit framework for .NET applicationMinh Tri Lam
 
Asp.net mvc framework qua cac vi du
Asp.net mvc framework  qua cac vi duAsp.net mvc framework  qua cac vi du
Asp.net mvc framework qua cac vi duKim Hyun Hai
 
Lập trình web asp.net MVC
Lập trình web asp.net MVCLập trình web asp.net MVC
Lập trình web asp.net MVCMasterCode.vn
 
Sao lưu & phục hồi database SQL Server | zBackup.vn
Sao lưu & phục hồi database SQL Server | zBackup.vnSao lưu & phục hồi database SQL Server | zBackup.vn
Sao lưu & phục hồi database SQL Server | zBackup.vnzBackupVN
 
All zend
All zendAll zend
All zendkuetli
 
Bài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPT
Bài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPTBài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPT
Bài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPTMasterCode.vn
 
Cac giai phap_lap_trinh_c___final_[bookbooming.com]
Cac giai phap_lap_trinh_c___final_[bookbooming.com]Cac giai phap_lap_trinh_c___final_[bookbooming.com]
Cac giai phap_lap_trinh_c___final_[bookbooming.com]bookbooming1
 
Lập trình C# 2008 cơ bản_Nhất Nghệ
Lập trình C# 2008 cơ bản_Nhất NghệLập trình C# 2008 cơ bản_Nhất Nghệ
Lập trình C# 2008 cơ bản_Nhất NghệTrần Thiên Đại
 
Quy tắc thiết kế giao diện và viết code C#
Quy tắc thiết kế giao diện và viết code C#Quy tắc thiết kế giao diện và viết code C#
Quy tắc thiết kế giao diện và viết code C#An Nguyen
 

What's hot (20)

Tai lieuhuongdansudung
Tai lieuhuongdansudungTai lieuhuongdansudung
Tai lieuhuongdansudung
 
Tài Liệu Hướng Dẫn Cài đặt Sugarcrm trên linux (Ubuntu)
Tài Liệu Hướng Dẫn Cài đặt Sugarcrm trên linux (Ubuntu)Tài Liệu Hướng Dẫn Cài đặt Sugarcrm trên linux (Ubuntu)
Tài Liệu Hướng Dẫn Cài đặt Sugarcrm trên linux (Ubuntu)
 
Tài Liệu Hướng Dẫn Cài đặt Sugarcrm Pro trên Windows 7
Tài Liệu Hướng Dẫn Cài đặt Sugarcrm Pro trên Windows 7Tài Liệu Hướng Dẫn Cài đặt Sugarcrm Pro trên Windows 7
Tài Liệu Hướng Dẫn Cài đặt Sugarcrm Pro trên Windows 7
 
Mo hinh-3-lop
Mo hinh-3-lopMo hinh-3-lop
Mo hinh-3-lop
 
Create easymoduleinphpfox
Create easymoduleinphpfoxCreate easymoduleinphpfox
Create easymoduleinphpfox
 
Bài 1 Lập trình website theo mô hình MVC - Xây dựng ứng dụng web
Bài 1 Lập trình website theo mô hình MVC - Xây dựng ứng dụng webBài 1 Lập trình website theo mô hình MVC - Xây dựng ứng dụng web
Bài 1 Lập trình website theo mô hình MVC - Xây dựng ứng dụng web
 
Sức mạnh của jsf 2, phần 2 tạo khuôn mẫu và các thành phần phức hợp
Sức mạnh của jsf 2, phần 2 tạo khuôn mẫu và các thành phần phức hợpSức mạnh của jsf 2, phần 2 tạo khuôn mẫu và các thành phần phức hợp
Sức mạnh của jsf 2, phần 2 tạo khuôn mẫu và các thành phần phức hợp
 
Mixing asp.net mvc & web form into hybrid project
Mixing asp.net mvc & web form into hybrid projectMixing asp.net mvc & web form into hybrid project
Mixing asp.net mvc & web form into hybrid project
 
Bài 4: Lập trình với CSDL ADO.NET & Kiến trúc không kết nối & Lập trình giao ...
Bài 4: Lập trình với CSDL ADO.NET & Kiến trúc không kết nối & Lập trình giao ...Bài 4: Lập trình với CSDL ADO.NET & Kiến trúc không kết nối & Lập trình giao ...
Bài 4: Lập trình với CSDL ADO.NET & Kiến trúc không kết nối & Lập trình giao ...
 
Bài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPT
Bài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPTBài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPT
Bài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPT
 
Nunit framework for .NET application
Nunit framework for .NET applicationNunit framework for .NET application
Nunit framework for .NET application
 
Asp.net mvc framework qua cac vi du
Asp.net mvc framework  qua cac vi duAsp.net mvc framework  qua cac vi du
Asp.net mvc framework qua cac vi du
 
Lập trình web asp.net MVC
Lập trình web asp.net MVCLập trình web asp.net MVC
Lập trình web asp.net MVC
 
Bai tap thuc hanh
Bai tap thuc hanhBai tap thuc hanh
Bai tap thuc hanh
 
Sao lưu & phục hồi database SQL Server | zBackup.vn
Sao lưu & phục hồi database SQL Server | zBackup.vnSao lưu & phục hồi database SQL Server | zBackup.vn
Sao lưu & phục hồi database SQL Server | zBackup.vn
 
All zend
All zendAll zend
All zend
 
Bài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPT
Bài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPTBài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPT
Bài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPT
 
Cac giai phap_lap_trinh_c___final_[bookbooming.com]
Cac giai phap_lap_trinh_c___final_[bookbooming.com]Cac giai phap_lap_trinh_c___final_[bookbooming.com]
Cac giai phap_lap_trinh_c___final_[bookbooming.com]
 
Lập trình C# 2008 cơ bản_Nhất Nghệ
Lập trình C# 2008 cơ bản_Nhất NghệLập trình C# 2008 cơ bản_Nhất Nghệ
Lập trình C# 2008 cơ bản_Nhất Nghệ
 
Quy tắc thiết kế giao diện và viết code C#
Quy tắc thiết kế giao diện và viết code C#Quy tắc thiết kế giao diện và viết code C#
Quy tắc thiết kế giao diện và viết code C#
 

Viewers also liked

Joomla CMS framework (1.6 - Old version)
Joomla CMS framework (1.6 - Old version) Joomla CMS framework (1.6 - Old version)
Joomla CMS framework (1.6 - Old version) Minh Tri Lam
 
Digital library opensource
Digital library opensourceDigital library opensource
Digital library opensourceMinh Tri Lam
 
Secure coding guide lines (Web Sercurity)
Secure coding guide lines (Web Sercurity)Secure coding guide lines (Web Sercurity)
Secure coding guide lines (Web Sercurity)Minh Tri Lam
 
Digital library standard and technology
Digital library standard and technologyDigital library standard and technology
Digital library standard and technologyMinh Tri Lam
 
KHẢO SÁT NHU CẦU QUẢN LÝ SỬ DỤNG VÀ CHIA SẺ TÀI NGUYÊN SỐ
KHẢO SÁT NHU CẦU QUẢN LÝ SỬ DỤNG VÀ CHIA SẺ TÀI NGUYÊN SỐKHẢO SÁT NHU CẦU QUẢN LÝ SỬ DỤNG VÀ CHIA SẺ TÀI NGUYÊN SỐ
KHẢO SÁT NHU CẦU QUẢN LÝ SỬ DỤNG VÀ CHIA SẺ TÀI NGUYÊN SỐMinh Tri Lam
 
ADO .NET Entity framework
ADO .NET Entity frameworkADO .NET Entity framework
ADO .NET Entity frameworkMinh Tri Lam
 
Jenkins (Continuous Integration System with Jenkins)
Jenkins (Continuous Integration System with Jenkins)Jenkins (Continuous Integration System with Jenkins)
Jenkins (Continuous Integration System with Jenkins)Minh Tri Lam
 
Vai trò của Jenkins trong mô hình phát triển phần mềm Agile
Vai trò của Jenkins trong mô hình phát triển phần mềm AgileVai trò của Jenkins trong mô hình phát triển phần mềm Agile
Vai trò của Jenkins trong mô hình phát triển phần mềm AgileMinh Tri Lam
 
MSSQL SERVER 2008 REPLICATION (PEER TO PEER)
MSSQL SERVER 2008 REPLICATION (PEER TO PEER)MSSQL SERVER 2008 REPLICATION (PEER TO PEER)
MSSQL SERVER 2008 REPLICATION (PEER TO PEER)Minh Tri Lam
 
SINGLE SIGN ON (SSO) WITH SECURITY ASSERTION MAKUP LANGUAGE (SAML)
SINGLE SIGN ON (SSO)  WITH SECURITY ASSERTION  MAKUP LANGUAGE (SAML)SINGLE SIGN ON (SSO)  WITH SECURITY ASSERTION  MAKUP LANGUAGE (SAML)
SINGLE SIGN ON (SSO) WITH SECURITY ASSERTION MAKUP LANGUAGE (SAML)Minh Tri Lam
 
Ila presentation final
Ila presentation finalIla presentation final
Ila presentation finalKaty Hite
 
MẪU BÁO CÁO KIỂM TOÁN HỆ THỐNG CƠ ĐIỆN TÒA NHÀ CHUNG CƯ.PDF
MẪU BÁO CÁO KIỂM TOÁN HỆ THỐNG CƠ ĐIỆN TÒA NHÀ CHUNG CƯ.PDFMẪU BÁO CÁO KIỂM TOÁN HỆ THỐNG CƠ ĐIỆN TÒA NHÀ CHUNG CƯ.PDF
MẪU BÁO CÁO KIỂM TOÁN HỆ THỐNG CƠ ĐIỆN TÒA NHÀ CHUNG CƯ.PDFSFP
 
Brett my cousin and my friend book
Brett my cousin and my friend bookBrett my cousin and my friend book
Brett my cousin and my friend bookbowenslide
 

Viewers also liked (20)

Joomla CMS framework (1.6 - Old version)
Joomla CMS framework (1.6 - Old version) Joomla CMS framework (1.6 - Old version)
Joomla CMS framework (1.6 - Old version)
 
Digital library opensource
Digital library opensourceDigital library opensource
Digital library opensource
 
Secure coding guide lines (Web Sercurity)
Secure coding guide lines (Web Sercurity)Secure coding guide lines (Web Sercurity)
Secure coding guide lines (Web Sercurity)
 
Digital library standard and technology
Digital library standard and technologyDigital library standard and technology
Digital library standard and technology
 
KHẢO SÁT NHU CẦU QUẢN LÝ SỬ DỤNG VÀ CHIA SẺ TÀI NGUYÊN SỐ
KHẢO SÁT NHU CẦU QUẢN LÝ SỬ DỤNG VÀ CHIA SẺ TÀI NGUYÊN SỐKHẢO SÁT NHU CẦU QUẢN LÝ SỬ DỤNG VÀ CHIA SẺ TÀI NGUYÊN SỐ
KHẢO SÁT NHU CẦU QUẢN LÝ SỬ DỤNG VÀ CHIA SẺ TÀI NGUYÊN SỐ
 
ADO .NET Entity framework
ADO .NET Entity frameworkADO .NET Entity framework
ADO .NET Entity framework
 
Jenkins (Continuous Integration System with Jenkins)
Jenkins (Continuous Integration System with Jenkins)Jenkins (Continuous Integration System with Jenkins)
Jenkins (Continuous Integration System with Jenkins)
 
Vai trò của Jenkins trong mô hình phát triển phần mềm Agile
Vai trò của Jenkins trong mô hình phát triển phần mềm AgileVai trò của Jenkins trong mô hình phát triển phần mềm Agile
Vai trò của Jenkins trong mô hình phát triển phần mềm Agile
 
MSSQL SERVER 2008 REPLICATION (PEER TO PEER)
MSSQL SERVER 2008 REPLICATION (PEER TO PEER)MSSQL SERVER 2008 REPLICATION (PEER TO PEER)
MSSQL SERVER 2008 REPLICATION (PEER TO PEER)
 
SINGLE SIGN ON (SSO) WITH SECURITY ASSERTION MAKUP LANGUAGE (SAML)
SINGLE SIGN ON (SSO)  WITH SECURITY ASSERTION  MAKUP LANGUAGE (SAML)SINGLE SIGN ON (SSO)  WITH SECURITY ASSERTION  MAKUP LANGUAGE (SAML)
SINGLE SIGN ON (SSO) WITH SECURITY ASSERTION MAKUP LANGUAGE (SAML)
 
Dad 3
Dad 3Dad 3
Dad 3
 
EBS_Digest_Issue4
EBS_Digest_Issue4EBS_Digest_Issue4
EBS_Digest_Issue4
 
Evaluasi
EvaluasiEvaluasi
Evaluasi
 
My Resume
My ResumeMy Resume
My Resume
 
TPL Dataflow - VTD12
TPL Dataflow - VTD12TPL Dataflow - VTD12
TPL Dataflow - VTD12
 
Ila presentation final
Ila presentation finalIla presentation final
Ila presentation final
 
Pantallazos
PantallazosPantallazos
Pantallazos
 
MẪU BÁO CÁO KIỂM TOÁN HỆ THỐNG CƠ ĐIỆN TÒA NHÀ CHUNG CƯ.PDF
MẪU BÁO CÁO KIỂM TOÁN HỆ THỐNG CƠ ĐIỆN TÒA NHÀ CHUNG CƯ.PDFMẪU BÁO CÁO KIỂM TOÁN HỆ THỐNG CƠ ĐIỆN TÒA NHÀ CHUNG CƯ.PDF
MẪU BÁO CÁO KIỂM TOÁN HỆ THỐNG CƠ ĐIỆN TÒA NHÀ CHUNG CƯ.PDF
 
Market 3.0
Market 3.0Market 3.0
Market 3.0
 
Brett my cousin and my friend book
Brett my cousin and my friend bookBrett my cousin and my friend book
Brett my cousin and my friend book
 

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

Asp.net mvc 3 (c#) (9 tutorials) egroups vn
Asp.net mvc 3 (c#) (9 tutorials)   egroups vnAsp.net mvc 3 (c#) (9 tutorials)   egroups vn
Asp.net mvc 3 (c#) (9 tutorials) egroups vnNguyen Van Hung
 
Tai lieu huong_dan_tu_hoc_visual_studio2010
Tai lieu huong_dan_tu_hoc_visual_studio2010Tai lieu huong_dan_tu_hoc_visual_studio2010
Tai lieu huong_dan_tu_hoc_visual_studio2010Nhat Linh Luong
 
MVC
MVCMVC
MVCtkot
 
Jdeveloper12c
Jdeveloper12cJdeveloper12c
Jdeveloper12cle larry
 
Devexpress cho asp.net
Devexpress cho asp.netDevexpress cho asp.net
Devexpress cho asp.netthichxoidau
 
Lập trình hướng đối tượng Chương 6 Design Pattern.pptx
Lập trình hướng đối tượng Chương 6 Design Pattern.pptxLập trình hướng đối tượng Chương 6 Design Pattern.pptx
Lập trình hướng đối tượng Chương 6 Design Pattern.pptxLmTrn286060
 
Lập trình hướng đối tượng Chương 6 Design Pattern.pptx
Lập trình hướng đối tượng Chương 6 Design Pattern.pptxLập trình hướng đối tượng Chương 6 Design Pattern.pptx
Lập trình hướng đối tượng Chương 6 Design Pattern.pptxLmTrn286060
 
Giao trinh asp.ne_tvoi_csharp
Giao trinh asp.ne_tvoi_csharpGiao trinh asp.ne_tvoi_csharp
Giao trinh asp.ne_tvoi_csharpngohanty13
 

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

Asp.net mvc 3 (c#) (9 tutorials) egroups vn
Asp.net mvc 3 (c#) (9 tutorials)   egroups vnAsp.net mvc 3 (c#) (9 tutorials)   egroups vn
Asp.net mvc 3 (c#) (9 tutorials) egroups vn
 
Aspnet 3.5_03
Aspnet 3.5_03Aspnet 3.5_03
Aspnet 3.5_03
 
Aspnet 3.5 -06
Aspnet 3.5 -06Aspnet 3.5 -06
Aspnet 3.5 -06
 
Mvc 3
Mvc 3Mvc 3
Mvc 3
 
Aspnet 3.5 _04
Aspnet 3.5 _04Aspnet 3.5 _04
Aspnet 3.5 _04
 
Tai lieu huong_dan_tu_hoc_visual_studio2010
Tai lieu huong_dan_tu_hoc_visual_studio2010Tai lieu huong_dan_tu_hoc_visual_studio2010
Tai lieu huong_dan_tu_hoc_visual_studio2010
 
MVC
MVCMVC
MVC
 
Jdeveloper12c
Jdeveloper12cJdeveloper12c
Jdeveloper12c
 
access
accessaccess
access
 
Devexpress cho asp.net
Devexpress cho asp.netDevexpress cho asp.net
Devexpress cho asp.net
 
Asp.net 3.5 _7
Asp.net 3.5 _7Asp.net 3.5 _7
Asp.net 3.5 _7
 
Yii
YiiYii
Yii
 
Asp.net 3.5 _8
Asp.net 3.5 _8Asp.net 3.5 _8
Asp.net 3.5 _8
 
Lập trình hướng đối tượng Chương 6 Design Pattern.pptx
Lập trình hướng đối tượng Chương 6 Design Pattern.pptxLập trình hướng đối tượng Chương 6 Design Pattern.pptx
Lập trình hướng đối tượng Chương 6 Design Pattern.pptx
 
Lập trình hướng đối tượng Chương 6 Design Pattern.pptx
Lập trình hướng đối tượng Chương 6 Design Pattern.pptxLập trình hướng đối tượng Chương 6 Design Pattern.pptx
Lập trình hướng đối tượng Chương 6 Design Pattern.pptx
 
Asp control
Asp controlAsp control
Asp control
 
C5. Model, DataSharing.pdf
C5. Model, DataSharing.pdfC5. Model, DataSharing.pdf
C5. Model, DataSharing.pdf
 
Giao trinh asp.ne_tvoi_csharp
Giao trinh asp.ne_tvoi_csharpGiao trinh asp.ne_tvoi_csharp
Giao trinh asp.ne_tvoi_csharp
 
Giới thiệu Yii Framework 1
Giới thiệu Yii Framework 1Giới thiệu Yii Framework 1
Giới thiệu Yii Framework 1
 
Bai08 10 java_fx
Bai08 10 java_fxBai08 10 java_fx
Bai08 10 java_fx
 

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

  • 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. 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. 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. 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.  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.  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. 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. 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. 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. { 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. 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. 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. 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. 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. { #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. { 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.