Chương 3 Tìm hiểu Crystal Reports Object Model Trong chương này, chúng tôi sẽ tìm hiểu sâu về mô hình đối tượng Crystal Reports với cách sử dụng lớp ReportDocument để qui chiếu hầu như
Trang 2LẬP TRÌNH BÁO CÁO dùng CRYSTAL REPOTTS.NET và C#
Lập trình Visual C# thế nào?
Trang 4DƯƠNG QUANG THIỆN
Trang 75 Lập trình Web sử dụng ASP.NET và Visual C# Dương Quang Thiện
Tập 6: Lập trình báo cáo sử dụng
Crystal Reports NET
Mục Lục Mục lục 5
Chương 1 Tổng quan về Crystal Reports NET
1.1 Crystal Reports là gì? 29
1.2 Bạn có thể làm được gì với Crystal Reports? 30
1.3 Crystal Reports NET khác biệt so với các phiên bản Crystal
Reports trước thế nào? 35
1.3.1 Integrated Design Environment (IDE) 35
1.3.2 Bất cứ ngôn ngữ nào, bất cứ lúc nào 35
1.3.3 Các phương pháp hội nhập 36
1.3.4 Dễ sử dụng 36
1.3.5 Xây dựng các ứng dụng công ty xí nghiệp 36
1.3.6 Kiến trúc báo cáo 38
1.3.6.1 Kiến trúc kiểu đơn tầng (single-tier) 39
1.3.6.2 Kiến trúc kiểu lưỡng tầng (two-tier) 39
1.3.6.3 Kiến trúc kiểu tam tầng (three-tier) 40
1.3.6.4 Các ứng dụng đa tầng (multi-tier application) 40
1.3.7 Report Designer 41
1.3.8 Những điểm không tương thích 42
1.4 Các lợi điểm của Crystal Reports.NET 43
1.5 Học từ các ứng dụng mẫu 44
1.5.1 Cài đặt các ứng dụng mẫu 44
1.5.2 Các báo cáo mẫu 46
1.5.3 Dữ liệu mẫu 47
Chương 2 Hãy thử bắt đầu với Crystal Reports NET
2.1 Thử tạo báo cáo đầu tiên rất đơn giản 48
Trang 8Mục lục 6
2.2 Báo cáo thứ hai tinh vi hơn một chút 56
2.3 Thí dụ thứ 3 phức tạp hơn: Báo cáo International Sales.rpt 65
2.4 Làm việc với Report Design Environment 85
2.4.1 Trình đơn và Thanh công cụ 85
2.4.2 Cho đặt để các thuộc tính mặc nhiên 86
2.5 Các điều cơ bản về thiết kế báo cáo 87
2.5.1 Các phân đoạn của báo cáo (report section) 87
2.5.2 Định dạng báo cáo 89
2.5.3 Các đối tượng vùng mục tin (field object) 90
2.5.3.1 Database Fields 90
2.5.3.2 Text Objects 91
2.5.3.3 Special Fields 91
2.5.3.4 Summary Fields 92
2.5.3.5 Formula Fields 93
2.5.3.6 Parameter Fields 94
2.5.3.7 SQL Expression Fields 96
2.5.3.8 Unbound Fields 97
Chương 3 Tìm hiểu Crystal Reports Object Model
3.1 Cơ bản về uốn nắn các báo cáo 99
3.1.1 ASP.NET Template 102
3.2 Tìm hiểu về đối tượng ReportDocument 103
3.2.1 Tìm đọc các thông tin tóm lược – Lớp Summary Information 106
3.2.2 Cho đặt để các thuộc tính báo cáo - Lớp ReportOptions 107
3.2.3 Kết nối về dữ liệu nguồn – Lớp Database 107
3.2.4 Thay đổi các mục chọn máy in – Lớp PrintOptions 108
3.2.5 Xuất khẩu các báo cáo – Lóp ExportOptions 110
3.2.6 Qui chiếu và định dạng các đối tượng báo cáo – Lớp ReportDefinition 111
3.2.7 Thay đổi các đối tượng báo cáo – Lớp DataDefinition 111
3.3 Tìm hiểu đối tượng CrystalReportViewer 111
3.3.1 Phản ứng trước các tình huống 113
3.3.2 Thụ lý các biệt lệ 117
Trang 97 Lập trình Web sử dụng ASP.NET và Visual C# Dương Quang Thiện
Chương 4 Sắp xếp & Gộp nhóm
4.1 Sắp xếp các mẫu tin 120
4.2 Gộp theo nhóm các mẫu tin 122
4.2.1 Thêm các nhóm và uốn nắn nhóm 123
4.2.2 Sắp xếp dữ liệu nhóm 127
4.3 Thay đổi vùng mục tin dùng gộp nhóm 127
4.4 Cho hiển thị các bản báo cáo Top N 128
4.5 Cho hiển thị báo cáo đẳng cấp 129
4.6 Xoáy sâu vào chi tiết dữ liệu 130
4.7 Tổng kết dữ liệu 132
4.8 Lập trình mô hình đối tượng liên quan đến sắp xếp và gộp nhóm 135
4.8.1 Tìm hiểu các lớp Sorting và Grouping 135
4.8.2 Ánh xạ các đối tượng sắp xếp và gộp nhóm 138
4.8.3 Lập trình các đối tượng sắp xếp và gộp nhóm 142
4.8.4 Tìm hiểu các lớp Summary Field 146
Chương 5 Sử dụng các thông số
5.1 Nhập thông số 149
5.1.1 Thêm các thông số 149
5.1.2 Cho đặt để các trị mặc nhiên 152
5.1.3 Nhập vào thông số khi chạy báo cáo 154
5.2 Lập trình mô hình đối tượng liên quan đến các thông số 155
5.2.1 Thay thế các thông số bởi những công thức 156
5.2.2 Tìm hiểu các lớp Parameter 157
5.2.2.1 Ánh xạ các lớp Parameter 161
5.2.2.2 Lập trình các lớp Parameter 163
5.2.2.3 Lập trình với lớp ReportDocument 164
5.2.2.4 Lập trình với lớp CrystalReportViewer 167
5.2.3 Thay đổi các thông số của Subreport 169
5.2.4 Đơn giản hoá việc lập trình các thông số 169
Trang 10Mục lục 8
Chương 6 Uốn nắn các báo cáo
6.1 Chọn ra các mẫu tin 174
6.1.1 Sử dụng Select Expert 174
6.1.2 Chọn các mẫu tin để gộp nhóm 178
6.2 Các phân đoạn (section) 178
6.2.1 Định dạng các phân đoạn 179
6.2.1.1 Che dấu và gỡ bỏ phân đoạn 181
6.2.1.2 In ra các phân đoạn vào cuối trang 181
6.2.1.3 Ép sang trang 182
6.2.1.4 Cho số trang trở về 1 182
6.2.1.5 Giữ các phân đoạn nằm với nhau 182
6.2.1.6 Gỡ bỏ những phân đoạn trắng 183
6.2.1.7 Cho nằm dưới các phân đoạn sau đây 183
6.2.1.8 Định dạng với nhiều cột 185
6.2.2 Thêm vào nhiều phân đoạn 187
6.3 Running Totals 192
6.4 Lập trình mô hình đối tượng Crystal Reports Engine 195
6.4.1 Thay đổi Record Selection 196
6.4.2 Ánh xạ các lớp ReportDefinition 197
6.4.3 Lập trình lớp ReportDefinition thế nào? 202
6.4.3.1 Qui chiếu các đối tượng báo cáo thế nào? 204
6.4.3.2 Thay đổi các thuộc tính của Report Object 205
Chương 7 Tìm hiểu về Công thức và Lôgic chương trình
7.1 Cho hội nhập Công thức và Lôgic vào các bản báo cáo 207
7.1.1 Cấu trúc căn cứ dữ liệu 208
7.1.2 Dữ liệu ứng dụng 209
7.1.3 Các lệnh Crystal SQL 210
7.1.4 Các biểu thức Crystal SQL 211
7.1.5 Các công thức 212
7.2 Làm việc với Formula Editor 213
7.2.1 Điều khiển dáng dấp của Formula Editor 213
7.2.2 Điều khiển loại cú pháp 217
7.2.3 Kiểm tra lỗi cú pháp 218
7.2.4 Sử dụng các công thức để tính toán 219
7.2.5 Định dạng động sử dụng công thức 220
Trang 119 Lập trình Web sử dụng ASP.NET và Visual C# Dương Quang Thiện
7.2.5.1 Thêm các công thức 220
7.2.5.2 Sử dụng Default Attribute và Current Field Value 223
7.3 Tạo các công thức với Basic Syntax 224
7.3.1 Basic Syntax là gì? 224
7.3.2 Qui ước lập trình Basic Syntax 225
7.3.3 Các kiểu dữ liệu 229
7.3.3.1 Các kiểu dữ liệu đơn giản 229
7.3.3.2 Kiểu dữ liệu bản dãy 230
7.3.3.3 Kiểu dữ liệu Range 232
7.3.4 Các tác tử đơn giản & Hàm 235
7.3.4.1 Tác tử toán số học 236
7.3.4.2 Tác tử Boolean 237
7.3.4.3 Tác tử so sánh 238
7.3.4.4 Tác tử chuyển đổi kiểu dữ liệu 238
7.3.4.5 Các hàm tổng kết (summary functions) 241
7.3.4.6 Các hàm thao tác chuỗi 241
7.3.4.7 Các hàm Date & Time 246
7.3.4.8 Các thuộc tính Print State và Document 252
7.3.4.9 Định dạng các trị kết xuất 253
7.3.4.10 Các hàm toán học 255
7.3.4.11 Kết sinh số bất kỳ (random number) 256
7.3.4.12 Định trị Time Default 256
7.3.5 Các cấu trúc điều khiển 260
7.3.5.1 Các cấu trúc điều kiện 261
7.3.5.2 Các hàm điều kiện 263
7.3.5.3 Các cấu trúc vòng lặp 266
7.3.5.4 Các biểu thức điều kiện 267
7.4 Tạo các công thức sử dụng Crystal Syntax 267
7.4.1 Khác biệt so với Basic Syntax 268
7.5 Tạo các công thức chọn mẫu tin 270
7.6 Làm việc với định dạng theo điều kiện 271
7.6.1 Tìm hiểu định dạng theo điều kiện 272
7.6.2 Định dạng theo điều kiện đối với thuộc tính boolean 273
7.6.3 Định dạng theo điều kiện đối với các thuộc tính có nhiều trị 273
Chương 8 Vẽ biểu đồ thế nào?
8.1 Thêm một biểu đồ vào bản báo cáo 279
8.1.1 Chọn ra một loại biểu đồ sử dụng Tab Type 280
Trang 12Mục lục 10
8.1.1.1 Side-by-side bar chart 282
8.1.1.2 Stacked bar chart 282
8.1.1.3 Line chart 283
8.1.1.4 Area chart 283
8.1.1.5 Pie chart 284
8.1.1.6 Doughnut chart 285
8.1.1.7 3-D Riser chart 285
8.1.1.8 3-D Surface chart 286
8.1.1.9 XY Scatter chart 287
8.1.1.10 Radar chart 287
8.1.1.11 Bubble chart 288
8.1.1.12 Stock chart 289
8.1.2 Cách bố trí biểu đồ khác nhau đối với những kiểu dữ liệu khác nhau 290
8.1.3 Chỗ đặt biểu đồ ảnh hưởng lên dữ liệu nó tượng trưng 291
8.1.4 Cho đặt để các data points sử dụng Tab Data 291
8.1.4.1 Đặt để mục chọn Evaluate 293
8.1.4.2 Đặt để các vùng mục tin trên Show Value(s) 295
8.1.4.3 Thỏa mãn đòi hỏi vùng mục tin tối thiểu 295
8.1.5 Thêm vào các group chart 296
8.1.6 Thêm các biểu đồ Cross-Tab 298
8.1.7 Cho đặt để các tiêu đề thông qua tab Text 299
8.2 Sử dụng Tab Options của Chart Expert 300
8.3 Sử dụng trình đơn Format Chart 302
8.4 Từ một biểu đồ bạn cho xoáy sâu vào chi tiết 304
8.5 Thay đổi một biểu đồ 304
8.6 Một thí dụ để kết thúc 305
Chương 9 Tạo báo cáo Cross-Tab
9.1 Thử tạo một thí dụ cross-tab tổng kết tất cả dữ liệu bản báo cáo 308
9.2 Thí dụ một cross-tab tổng kết nội dung một group 314
9.3 Tìm hiểu về bản báo cáo cross-tab 316
9.3.1 Tạo một đối tượng cross-tab 319
9.3.2 Đặt vào chỗ đối tượng cross-tab 321
Trang 1311 Lập trình Web sử dụng ASP.NET và Visual C# Dương Quang Thiện
9.3.3 Định dạng khung lưới cross-tab 323
9.3.4 Định dạng các thuộc tính Style 324
9.3.5 Quản lý các cột 326
Chương 10 Thêm Subreport vào báo cáo chính
10.1 Các mục chọn cho phép kết nối subreport với báo cáo chính 330
10.1.1 Kết nối với vùng mục tin căn cứ dữ liệu 331
10.1.2 Kết nối với một vùng mục tin công thức 332
10.1.3 Sử dụng các subreport bất kết nối 334
10.1.4 Dùng các vùng mục tin công thức không kết nối 334
10.1.5 Trao qua dữ liệu thông qua các biến shared 335
10.2 Thêm một subreport vào báo cáo chính 336
10.2.1 Kết nối với một vùng mục tin căn cứ dữ liệu 337
10.2.2 Kết nối với một formula field 338
10.2.3 Các Subreport bất kết nối 339
10.2.4 Bất kết nối với một công thức 339
10.2.5 Bất kết nối với biến shared 340
10.3 Hiệu đính Subreport 342
10.4 Sử dụng On-Demand Subreports 347
10.5 Lập trình mô hình đối tượng Crystal Reports Engine đối với Subreport 350
10.5.1 Thay đổi các Subreport 350
Chương 11 Hội nhập báo cáo vào ứng dụng Windows
11.1 Đặt kế hoạch cho ứng dụng của bạn 354
11.1.1 Khảo sát môi trường triển khai 356
11.1.2 Bắt đầu một ứng dụng Windows mới sử dụng Visual C# 356
11.2 Xác định đúng mô hình đối tượng 357
11.3 Tìm hiểu namespace CrystalDecisions.Windows.Forms 359
11.4 Sử dụng Crystal Report Viewer cho Windows Forms 360
11.4.1 Thêm một báo cáo vào ứng dụng 362
11.4.2 Thêm một Report Viewer vào Windows Form 362
11.4.3 Gắn kết một báo cáo vào Report Viewer 363
Trang 14Mục lục 12
11.4.3.1 Gắn kết theo tên báo cáo 363
11.4.3.2 Gắn kết theo đối tượng báo cáo 363
11.4.3.3 Gắn kết với một Untyped Report 365
11.4.3.4 Gắn kết với một strongly-typed Report 366
11.4.4 Chuyển giao thông tin đăng nhập căn cứ dữ liệu 367
11.4.5 Cho đặt để Report Record Selection 369
11.5 Cho uốn nắn dáng dấp và cách bố trí của Report Viewer 371
11.5.1 Các hàm hành sự của ô control CrystalReportViewer 374
11.5.1.1 In ra một bản báo cáo 375
11.5.1.2 Refresh dữ liệu trên một bản báo cáo 378
11.5.1.3 Exporting một bản báo cáo 378
11.5.1.4 Page Navigation và Zoom 381
11.5.1.5 Truy tìm trong lòng một bản báo cáo 384
11.5.2 Sử dụng các tình huống viewer 385
11.5.2.1 Các tình huống Page Navigation 386
11.5.2.2 Các tình huống Refresh 386
11.5.2.3 Các tình huống Search 387
11.5.2.4 Các tình huống Viewer 387
11.5.2.5 Các tình huống Zoom 388
11.5.3 Xoáy sâu vào chi tiết bản báo cáo 388
11.5.4 Xoáy sâu lên các subreport 391
11.5.5 Làm với những biệt lệ trên các bản báo cáo 391
Chương 12 Hội nhập báo cáo vào ứng dụng Web
12.1 Đặt kế hoạch cho ứng dụng của bạn 393
12.2 Thử khảo sát môi trường triển khai 395
12.2.1 Trước khi ta bắt đầu vào cuộc 396
12.2.2 Bắt đầu một ứng dụng web mới với Visual C# 396
12.3 Xác định đúng mô hình đối tượng 397
12.4 Tìm hiểu namespace CrystalDecisions.Web.Forms 398
12.5 Sử dụng ô control Crystal Report Viewer đối với Web Forms 400
12.5.1 Thêm một báo cáo vào ứng dụng 402
12.5.2 Thêm Report Viewer vào một Web Form 405
12.5.3 Gắn kết một báo cáo vào Report Viewer 405
12.5.3.1 Gắn kết theo tên báo cáo 405
12.5.3.2 Gắn kết theo Report Object 406
12.5.3.3 Gắn kết với một báo cáo untyped 407
12.5.3.4 Gắn kết với một Strongly-Typed Report 409
Trang 1513 Lập trình Web sử dụng ASP.NET và Visual C# Dương Quang Thiện
12.5.3.5 Gắn kết với một Strongly-Typed Cached Report 410
12.6 Uốn nắn dáng dấp và cách bố trí của Report Viewer 411
12.6.1 Các hàm hành sự của ô control CrystalReportViewer 415
12.6.1.1 Cho đặt để việc tô vẽ browser 417
12.6.1.2 Làm tươi dữ liệu trên một báo cáo 417
12.6.1.3 Page Navigation và Zoom 418
12.6.1.4 Truy tìm bên trong một bản báo cáo 420
12.6.2 In ra bản báo cáo 421
12.6.2.1 In từ Browser 423
12.6.2.2 In từ Adobe Acrobat Plug-In 424
12.6.2.3 In ra từ các Export Formats khác 426
12.6.3 Sử dụng các tình huống của Viewer 428
12.6.3.1 Page Navigation Events 428
12.6.3.2 Refresh Events 429
12.6.3.3 Search Events 429
12.6.3.4 Zoom Events 430
Chương 13 Tạo XML Report Web Services
13.1 Tổng quan về XML Report Web Services 431
13.1.1 XML Report Web Service là gì? 433
13.1.2 Làm thế nào sử dụng một XML Report Web Service? 434
13.2 Tạo XML Report Web Services 435
13.2.1 Tạo một Report Web Services cơ bản 435
13.2.2 Tạo Report Web Services với nhiều bản báo cáo 438
13.2.3 Sử dụng Report Web Service chung chung (generic) 438
13.3 Tiêu thụ XML Report Web Services 440
13.4 External Report Web Service 441
13.5 Internal Report Web Service 443
13.5.1 Generic Report Web Service 444
13.6 Vài suy nghĩ về việc triển khai Report Web Services 445
13.7 Lập trình mô hình đối tượng Crystal Reports Engine 448
13.7.1 Thay đổi báo cáo vào lúc chạy phía Client 448
13.7.2 Thay đổi báo cáo vào lúc chạy từ phía Server 449
Chương 14 Làm việc với các dữ liệu nguồn
Trang 16Mục lục 14
14.1 Truy cập dữ liệu với Crystal Reports.NET 452
14.1.1 Các tập tin căn cứ dữ liệu 453
14.1.2 Các căn cứ dữ liệu quan hệ 454
14.1.3 OLAP Data 455
14.1.4 Crystal Dictionaries, Queries và Info Views 455
14.1.5 Các dữ liệu nguồn khác 455
14.2 Làm việc với các dữ liệu nguồn 456
14.2.1 Cho đặt để các mục chọn căn cứ dữ liệu 456
14.2.2 Thêm một căn cứ dữ liệu hoặc một bảng dữ liệu vào một báo cáo 459
14.2.3 Sử dụng khung đối thoại Database Expert | Tab Links 462
14.2.4 Kiểm tra cấu trúc căn cứ dữ liệu dùng trong bản báo cáo 466
14.2.5 Thay đổi nơi định cư của một căn cứ dữ liệu 467
14.2.6 Cho đặt để một Database Alias 470
14.3 Làm việc với SQL Commands 472
14.3.1 Định nghĩa các bảng dữ liệu ảo 473
13.3.2 Chọn ra các bảng dữ liệu và vùng mục tin 477
14.3.3 Cho sàng lọc các mẫu tin 478
14.3.4 Sắp xếp và gộp nhóm các mẫu tin 481
14.3.4.1 Những hạn chế đối với Sorting và Grouping 481
14.4 Làm việc với SQL Expression 482
14.4.1 Tạo biểu thức SQL 483
14.5 Làm việc với ADO.NET 486
14.5.1 Một ADO.NET Dataset 486
14.5.2 Nhìn xem nội dung của một Dataset 490
14.5.3 Tạo một báo cáo từ một ADO.NET Dataset 494
14.5.4 Nhìn xem các báo cáo có chứa một ADO.NET Dataset 496
14.6 Lập trình mô hình đối tượng Crystal Reports Engine 499
14.6.1 Thi công Push Model 500
14.6.1.1 Định nghĩa tập tin lược đồ Dataset 501
14.5.1.2 Xây dựng báo cáo dùng đến tập tin DataSet 506
14.5.1.3 Cho điền đầy dữ liệu lên đối tượng DataSet 508
14.6.1.4 Cho gắn kết DataSet với bản báo cáo 513
14.6.2 Lớp Database 514
14.6.3 Đăng nhập vào dữ liệu nguồn an toàn 516
14.6.3.1 Đăng nhập sử dụng ReportDocument 517
14.5.3.2 Đăng nhập sử dụng Viewer Control 518
14.6.4 Các thông số và stored procedure 519
Trang 1715 Lập trình Web sử dụng ASP.NET và Visual C# Dương Quang Thiện
14.6.4.1 SET NOCOUNT ON 521
14.6.4.2 Thay đổi dữ liệu nguồn bằng lập trình 522
14.6.5 Làm việc với các Subreport 527
14.6.6 In ra các hình ảnh động 528
Chương 15 Xuất khẩu và triển khai hoạt động các báo cáo
15.1 Xuất khẩu các báo cáo 532
15.1.1 Xuất khẩu thông qua Viewer 533
15.1.2 Xuất khẩu thông qua lập trình 534
15.1.3 Xuất khẩu dễ dàng lên tập tin đĩa 535
15.1.4 Xuất khẩu cấp cao hơn 537
15.1.5 Xuất khẩu về ghi lên một đĩa từ 539
15.1.6 Xuất khẩu về Email 540
15.1.7 Xuất khẩu về Exchange Folder 541
15.1.8 Định dạng đối với các tài liệu PDF, RTF và Word 542
15.1.9 Định dạng xuất khẩu đối với Excel 543
15.1.10 Định dạng xuất khẩu đối với HTML 544
15.2 Triển khai và phân phối ứng dụng báo cáo 546
15.2.1 Tổng quan về phân phối ứng dụng 547
15.2.2 Bắt đầu thử nghiệm 548
15.2.2.1 Template Setup Projects 548
15.2.2.2 Template Web Setup Projects 549
15.2.2.3 Template Merge Module Project 549
15.2.2.4 Template Setup Wizard 551
15.2.3 Các đòi hỏi triển khai cơ bản 551
15.2.3.1 Hệ điều hành 552
15.2.3.2 Phần cứng 553
15.2.4 Triển khai các ứng dụng Windows 553
15.2.4.1 Tạo một Setup project mới 553
15.2.4.2 Thêm Merge Modules 555
15.2.4.3 Thêm mục khoá bản quyền 556
15.2.5 Triển khai các ứng dụng Web 559
15.2.5.1 Chuẩn bị Web Server 559
15.2.5.2 Tạo Setup Project 559
15.2.5.3 Chọn các kết xuất dự án 560
15.2.5.4 Thêm các Merge Module 560
15.2.5.5 Giải quyết LicenseKey 561
15.2.6 Trắc nghiệm và triển khai setup của bạn 561
Trang 18Mục lục 16
Lời mở đầu
Vào tháng 7/1998 người viết cho phát hành tập I bộ sách “Lập trình Windows sử dụng Visual C++ 6.0 và MFC” Toàn bộ gồm 8 tập, 6 nói về lý thuyết và 2 về thực hành Các tập đi sau được phát hành lai rai mãi đến 10/2000 mới xong Bộ sách được bạn đọc đón chào nồng nhiệt (mặc dầu chất lượng giấy và kiểu quay ronéo không được mỹ thuật cho lắm, nhưng giá rẻ vừa túi tiền bạn đọc) và được phát hành đi phát hành lại trên 10 ngàn bộ và không biết bao nhiêu đã bị photocopy và “bị luộc” Và vào thời điểm hoàn thành bộ sách lập trình Windows kể trên (tháng 10/2000) người viết cũng đã qua 67 tuổi, quá mệt mỏi và cũng vào lúc vừa giải thể văn phòng SAMIS không kèn không trống, thế
là người viết quyết định “rửa tay gác kiếm” luôn, mặc dầu trước đó vài ba tháng đã biết Microsoft manh nha cho ra đời một ngôn ngữ lập trình mới là C# trên một sàn diễn mang tên NET ám chỉ ngôn ngữ thời đại mạng Internet Tuy nhiên, như đã định soạn giả vẫn ngưng viết, xem như nghĩ hưu luôn, quay về chăm sóc vườn phong lan bị bỏ bê từ lúc bắt đầu viết bộ sách lập trình Windows kể trên
Nghỉ hưu thiếu vài tháng thì đúng 3 năm vào tháng 5/2003, anh Nguyễn Hữu Thiện,
người sáng lập ra tờ báo eChip, mời tham gia viết sách thành lập tủ sách tin học cho tờ
báo Thế là “a lê hấp” người viết đồng ý ngay, cho đặt mua một lô sách về C#, VB.NET
và NET Framework để nghiên cứu Càng đọc tài liệu càng thấy cái ngôn ngữ mới này nó khác với C++ trước khá nhiều, rõ ràng mạch lạc không rối rắm như trước và rất dễ học một cách rất ư tự nhiên Thế là một mạch từ tháng 5/2003 đến nay, người viết đã hoàn chỉnh xong 8 tập Mỗi tập dài vào khoảng từ 600 đến 750 trang
Bạn cứ thử hình dung là trong ngành điện toán, cứ vào khoảng một thập niên thì có một cuộc cách mạng nho nhỏ trong cách tiếp cận về lập trình Vào thập niên 1960 là sự xuất hiện ngôn ngữ Cobol và Fortran (cũng như ngôn ngữ RPG của IBM) thay thế cho ngôn ngữ hợp ngữ, giữa thập niên 70 là sự xuất hiện máy vi tính với ngôn ngữ Basic vào đầu thập niên 80 những công nghệ mới là Unix có thể chạy trên máy để bàn với ngôn ngữ cực mạnh mới là C, phát triển bởi ATT Qua đầu thập niên 90 là sự xuất hiện của Windows và C++ (được gọi là C với lớp), đi theo sau là khái niệm về lập trình thiên đối tượng trong bước khai mào Mỗi bước tiến triển như thế tượng trưng cho một đợt sóng thay đổi cách lập trình của bạn: từ lập trình vô tổ chức qua lập trình theo cấu trúc (structure programming hoặc procedure programming), bây giờ qua lập trình thiên đối tượng Lập trình thiên đối tượng trên C++ vẫn còn “khó nuốt” đối với những ai đã quen cái nếp nghĩ theo kiểu lập trình thiên cấu trúc Vả lại, lập trình thiên đối tượng vào cuối thập niên qua vẫn còn nhiều bất cập, không tự nhiên nên viết không thoải mái
Bây giờ, với sự xuất hiện của NET với các ngôn ngữ C#, VB.NET, J# xem ra cách suy nghĩ về việc viết chương trình của bạn sẽ thay đổi theo chiều hướng tích cực Nói một cách ngắn gọn, sàn diễn NET sẽ làm cho bạn triển khai phần mềm dễ dàng hơn trên Internet cũng như trên Windows mang tính chuyên nghiệp và thật sự thiên đối tượng Nói
Trang 1917 Lập trình Web sử dụng ASP.NET và Visual C# Dương Quang Thiện
một cách ngắn gọn, sàn diễn NET được thiết kế giúp bạn triển khai dễ dàng những ứng dụng thiên đối tượng chạy trên Internet trong một môi trường phát tán (distributed) Ngôn ngữ lập trình thiên Internet được ưa thích nhất sẽ là C#, được xây dựng từ những bài học kinh nghiệm rút ra từ C (năng suất cao), C++ (cấu trúc thiên đối tượng), Java (an toàn) và Visual Basic (triển khai nhanh, gọi là RAD - Rapid Application Development) Đây là một ngôn ngữ lý tưởng cho phép bạn triển khai những ứng dụng web phát tán được kết cấu theo kiểu ráp nối các cấu kiện (component) theo nhiều tầng nấc (n-tier)
Tập VI được tổ chức thế nào
Tập VI này là tập cuối nói về lý thuyết của bộ sách NET toàn tập Theo mô hình lập
trình các ứng dụng ngày nay, người ta chia ứng dụng ra làm 3 lớp (layer): presentation
layer, business layer và data access layer Presentation layer là phần chương trình liên
quan đến nhập liệu và kết xuất lên màn hình hoặc lên các báo cáo in ra giấy, nghĩa là có tương tác với người sử dụng Phần data access layer là những gì liên quan đến căn cứ dữ liệu, đến các tập tin trữ trên đĩa bất cứ dưới dạng thức nào (Word, Access, Excel chẳng hạn) Còn phần Business layer là những thủ tục (procedures), những qui tắc xử lý (rules)
mà ta thường thấy trong kinh doanh (do đó có từ business) Qua hai tập I, “C# Căn bản”
và tập II, “C# và NET Framework” của bộ sách NET toàn tập này thì business layer đã được đề cập trọn vẹn Tập III, “Giao diện người sử dụng” đã đề cập đến Presentation layer về phần nhập liệu phía người sử dụng, còn tập IV, “Lập trình căn cứ dữ liệu với ADO.NET” trình bày trọn vẹn phần Data Access layer Còn tập VI này, “Lập trình các báo cáo sử dụng Crystal Reports” thì lại trình bày phần Presentaion layer phía kết xuất các báo cáo, đối nghịch với giao diện người sử dụng phía nhập liệu Cuối cùng tập V,
“Lập trình Web và ASP.NET” là những gì được trình bày trong 3 lớp nhưng được sử dụng trong các ứng dụng mạng Web
Nếu bạn kinh qua 6 tập sách vừa kể trên thì bạn có khả năng lập trình trên Windows
và trên Web và có thể bắt đầu đi vào các ứng dụng quản lý xí nghiệp như ERP (Enterprise Resources Planning – Hoạch định Nguồn lực Doanh nghiệp) chẳng hạn
Chương 1 Tổng quan về Crystal Reports NET
Trong chương này, chúng tôi trình bày cái nhìn đầu tiên về Crystal Reports for Visual Studio NET (Crystal Reports NET), bao gồm việc cho biết sản phẩm phần mềm này khác biệt so với những phiên bản Crystal Reports khác trước như thế nào, làm thế nào tìm
và chạy những ứng dụng mẩu kèm theo Chúng tôi cũng lướt qua kiến trức mới của Crystal Reports NET và học cách thích nghi với NET Framework Cho dù bạn là một lập trình viên chuyên nghiệp chuyên triển khai những ứng dụng đang muốn chuyển qua
sử dụng Visual Studio NET hoặc bạn đang triển khai ứng dụng đầu tiên và chưa hề nghe nói đến Crystal Reports, thì tất cả bắt đầu từ đây với Report Designer
Trang 20Mục lục 18
Chương 2 Hãy thử bắt đầu với Crystal Reports NET
Trong chương này ta sẽ lần lượt sử dụng Crystal Reports Report Designer trong lòng Visual Studio NET để thiết kế 3 thí dụ báo cáo từ đơn giản đến phức tạp, học cách tạo và
du nhập các báo cáo dùng trong các ứng dụng Windows và Web Vào cuối chương bạn sẽ
có khả năng triển khai những báo cáo cơ bản và có thể hội nhập các báo cáo này vào ứng
dụng Windows hoặc Web Nếu bạn đã có kinh nghiệm sử dụng Crystal Reports trước đây, thì những điều mô tả trong chương sẽ rất quen thuộc đối với bạn Những điều được trình bày trong chương này sẽ đeo đuổi bạn suốt cuộc đời làm báo cáo của bạn
Chương 3 Tìm hiểu Crystal Reports Object Model
Trong chương này, chúng tôi sẽ tìm hiểu sâu về mô hình đối tượng Crystal Reports
với cách sử dụng lớp ReportDocument để qui chiếu hầu như tất cả các lớp và thuộc tính của báo cáo, của ô control CrystalReportViewer, thường được gọi là viewer và với mô
hình đối tượng Crystal Reports bằng cách tham gia vào những tình huống (event) được kích hoạt trong khi bản báo cáo được nhìn xem trước hoặc đang được in ra Các tình huống này rất hữu ích khi biết được là phần nào trên báo cáo đang trong vòng quan sát và người sử dụng đang làm gì
Chương 4 Sắp xếp & Gộp nhóm
Phần lớn các bản báo cáo không chỉ đơn thuần gồm một vài trang, mà vài trăm trang
là chuyện bình thường Và khi tham khảo một tập tài liệu dày như thế mà dữ liệu lại được trình bày lộn xộn không được sắp xếp theo một trật tự nào đó hoặc gộp theo nhóm (thường được gọi là ngắt cấp bậc) thì sẽ mất thời giờ và công sức đối với người đọc Crystal Reports cho bạn khả năng sắp xếp dữ liệu và gộp dữ liệu theo nhóm Các báo cáo gộp nhóm (grouping report) cũng sẽ cho phép bạn khả năng tạo những báo cáo xoáy sâu (drill-down report) và tổng kết dữ liệu Chương này sẽ đề cập đến sắp xếp và gộp nhóm cũng như chỉ cho bạn khả năng thay đổi các tính năng này vào lúc chạy
Ngoài ra vào cuối chương chúng tôi cũng sẽ đề cập đến việc lập trình trên mô hình đối tượng Crystal Reports Engine liên quan đến sắp xếp và gộp nhóm
Chương 5 Sử dụng các thông số
Theo thời gian, khi Crystal Reports ngày càng tiến bộ, thì số cách uốn nắn (customize) báo cáo cũng tăng theo Tuy nhiên, cách sử dụng các thông số để nhập liệu là cách cơ bản và độc đáo nhất Chương này khảo sát cách tạo các thông số, yêu cầu nhập
Trang 2119 Lập trình Web sử dụng ASP.NET và Visual C# Dương Quang Thiện
liệu và sử dụng thông số để uốn nắn báo cáo, cũng như cách lập trình mô hình đối tượng
thông số
Chương 6 Uốn nắn các báo cáo
Trong các chương trước, bạn có cơ hội tạo những dạng thức báo cáo cơ bản, bao gồm
sắp xếp và gộp nhóm và học cách thực hiện vài uốn nắn (customization) cơ bản đối với
báo cáo vào lúc chạy Trong chương này, chúng tôi sẽ đi xa hơn chỉ cho bạn thấy thêm
việc uốn nắn tinh vi hơn đối với bản báo cáo của bạn Việc này bao gồm việc sàng lọc
(filtering) các mẫu tin dùng trong báo cáo, dùng các section đối với những kỹ thuật định
dạng cao cấp và tạo những tổng cộng vào lúc chạy Một khi bạn nắm vững chương này,
bạn có đủ khả năng kết sinh phần lớn những báo cáo dùng trong thường nhật
Chương 7 Tìm hiểu về Công thức và Lôgic chương trình
Chương này sẽ tập trung vào việc xem phần lớn thời gian phải mất công ở đâu trong
việc triển khai các dự án về Crystal Reports: viết các công thức và đoạn mã lôgic Chúng
ta sẽ thấy cách tốt nhất để thêm tính toán và lôgic vào các bản báo cáo và học qua đủ cú
pháp và đoạn mã để thụ lý hầu hết mọi tình huống Chúng ta sẽ biết làm cách nào phân
biệt giữa hai “hương vị” của Crystal Formula Language và cách làm thế nào viết ra những
công thức tuyển chọn các mẫu tin cũng như định dạng có điều kiện
Chương 8 Vẽ biểu đồ thế nào?
Mục đích thiết yếu của một bản báo cáo là chuyển tải ý nghỉa nào đó cho người đọc
Các dòng văn bản cũng như những cột số mang một ý nghỉa chuyển tải thông tin không
thể chối cãi, nhưng đôi khi khó hình dung nếu nó không được trình bày dưới dạng đồ thị
(biểu đồ hoặc lược đồ)
Do đó, khả năng vẽ biểu đồ của Crystal Reports NET làm cho những con số cũng
như thống kê đem lại một chiều kích bổ sung vào việc chuyển tải ý nghĩa đối với thông
tin Các dữ liệu kiểu số nếu được biểu diễn dưới dạng biểu đồ nhìn thấy được có thể cho
người ta thấy một xu hướng (trend) hoặc cho thấy kích thước tương đối để so sánh
Các kiểu dữ liệu khác nhau thường được biểu diễn tốt nhất theo nhiều kiểu biểu đồ
khác nhau và Crystal Reports NET cung cấp cho bạn vô số kiểu biểu đồ thích ứng với bất
cứ tập hợp dữ liệu nào mà bạn có thể có
Chương 9 Tạo báo cáo Cross-Tab
Đối với vài người, trên các bản báo cáo việc tổng kết dữ liệu (data summary) bằng
cách này hay cách khác không quan trọng bằng dữ liệu chi tiết Tuy nhiên, đối với một số
Trang 22Mục lục 20
người khác, nhất là trong giới lãnh đạo, các bản báo cáo với những hàng tổng kết nằm ở
cuối báo cáo (report footer) hoặc ở cuối mỗi nhóm (group footer) là một điều rất tốt cho
sự hiểu biết nhất là đối với người thường phải lấy quyết định quan trọng trong kinh
doanh Trong vài trường hợp như thế, đối tượng cross-tab có thể trình bày dữ liệu dưới
dạng dễ hiểu và có khả năng truyền đạt ý nghĩa của dữ liệu Các bản báo cáo cross-tab là
một thể thức cực mạnh tạo những tổng kết dữ liệu dưới dạng một bảng tính (spreadsheet)
quá quen thuộc đối với giới tài chính Lợi điểm chính của một cross-tab là nó gộp nhiều
tổng kết lại với nhau dưới dạng cô đọng
Chương 10 Thêm Subreport vào báo cáo chính Trong các chương trước, người ta biết làm thế nào tạo những bản báo cáo dựa trên dữ
liệu nằm rải rác trên nhiều bảng dữ liệu có liên hệ với nhau cùng thuộc một căn cứ dữ
liệu Điều này xem ra cũng rất tốt Tuy nhiên, thỉnh thoảng ta cũng muốn tạo một bản báo
cáo cho hiển thị dữ liệu từ nhiều hai hoặc nhiều nguồn dữ liệu khác nhau không liên hệ
hoặc có liên hệ một cách gián tiếp Crystal Reports có thể thỏa mãn yêu cầu chính đáng
này bằng cách cho phép bạn đặt lọt thỏm một bản báo cáo này trong một bản báo cáo kia
Bản báo cáo được đặt lọt thỏm được gọi là Subreport.1
Subreport thường dùng để tạo ra nhiều view dữ liệu khác nhau trên một báo cáo đơn
lẻ Các báo cáo chuẩn thường có một hạn chế, đó là chỉ có thể hiển thị một view đơn lẻ
mà thôi Thay vì tạo một hoặc nhiều báo cáo để trình bày những view bổ sung, ta có thể
dùng Subreport để trình bày dữ liệu độc lập đối với báo cáo chính hoặc trình bày nhiều
mối liên hệ cha-con
Nhìn theo góc độ chức năng và thiết kế, một Subreport hầu như chẳng khác nào một
báo cáo chuẩn, vì nó có cùng cách bố trí như một báo cáo chuẩn và nó có thể dùng cùng
tất cả các đối tượng báo cáo Như vậy, Subreport được xem như là thành phần của một
báo cáo khác
Chương 11 Hội nhập báo cáo vào ứng dụng Windows
Trong chương này, chúng ta sẽ học cách hội nhập (hoặc tích hợp - integrate) và nhìn
xem những báo cáo này từ các ứng dụng Windows và học cách uốn nắn các bản báo cáo
vào lúc chạy sử dụng mô hình đối tượng của Crystal Reports NET Chúng tôi sẽ đề cập
đến: xác định đúng mô hình đối tượng phải sử dụng, namespace
CrystalDecisions.Windows.Forms, sử dụng Crystal Windows Forms Viewer,
cắt xén uốn nắn Windows Forms Viewer và chuyển thông tin cho Windows Forms
Viewer
1 Subreport có thể dịch là “báo cáo con” nghe nó vô duyên thế nào ấy, nên chúng tôi đành để yên
không dịch
Trang 2321 Lập trình Web sử dụng ASP.NET và Visual C# Dương Quang Thiện
Chương 12 Hội nhập báo cáo vào ứng dụng Web
Chúng tôi sẽ cho xây dựng những biểu mẫu được dùng trong các ứng dụng Web lo việc báo cáo, minh họa cho thấy Crystal Reports.NET có thể được dùng trong các ứng dụng Web của bạn
Chương 13 Tạo XML Report Web Services
Trong các chương trước, chúng ta đã xem qua việc hội nhập các bản báo cáo vào các ứng dụng Windows và Web Bây giờ ta tiến thêm một bước là làm thế nào hoạt động với XML Report Web Services Tạo những bản báo cáo được chạy như là Report Web
Services (RWS) cho bạn khả năng phân phối những báo cáo sử dụng SOAP thông qua
nghi thức HTTP Sẽ không có vấn đề các báo cáo bị tắc nghẽn do an ninh hoặc hạn chế mạng
Có hai phần để nhìn xem các báo cáo như là một dịch vụ Web Phần thứ nhất là xây dựng ứng dụng Web và phát hành (publish) bản báo cáo Phần thứ hai là tạo một ứng dụng tiêu thụ báo cáo
Vào cuối chương này, bạn sẽ có khả năng nhận diện một XML Report Web Services
là gì và hiểu cách sử dụng nó trong ứng dụng của bạn, bạn cũng có khả năng tạo ra một
XML Report Web Services từ một Crystal Reports và dùng dịch vụ với Crystal Windows Viewer hoặc Crystal Web Viewer để nhìn xem một bản báo cáo
Chương 14 Làm việc với các dữ liệu nguồn
Trong chương này ta sẽ xem Crystal Reports NET làm việc thế nào với các dữ liệu nguồn khác nhau và xem nó tương tác với ADO.NET thế nào Tất cả việc kết nối với căn
cứ dữ liệu sẽ được xây dựng xung quanh một trong hai mô hình: Pull Model và Push
Model Mô hình Pull Model là đơn giản nhất trong việc thi công và dễ học vì nó chẳng
đòi hỏi bất cứ việc lập trình nào từ phía bạn Các báo cáo nào được thiết kế sử dụng Pull
Model sẽ làm cho mọi việc đều tự động Crystal Reports sẽ làm mọi việc “bẩn tay”: tạo
mối kết nối với dữ liệu nguồn, đọc dữ liệu, cho điền đầy dữ liệu lên bản báo cáo, rồi đóng
lại kết nối Còn với Push Model, thì bạn phải tự lo lấy mọi thứ thông qua lập trình bạn
phải lo mở kết nối với dữ liệu nguồn, đi lấy dữ liệu ghi vào ký ức, chuyển giao dữ liệu
Trang 24Mục lục 22
cho bản báo cáo và đóng lại kết nối Với Pull Model bạn chỉ có thể thực hiện những việc
đơn giản, cứng nhắc, còn với Push Model bạn có thể thực hiện nhiều chức năng phức tạp
và uyển chuyển hơn Trong các chương trước, từ Chương 3 trở đi, chúng tôi thường trình
bày Pull Model ở phần thiết kế đi đầu và Push Model ở phần lập trình mô hình đối tượng
Crystal Reports Engine
Khi đọc hết chương này, bạn sẽ có cái nhìn về cách Crystal Reports.NET tương tác
thế nào với các dữ liệu nguồn khác nhau, những mục chọn để làm việc với những dữ liệu
nguồn này và việc sử dụng ADO.NET như là một dữ liệu nguồn đối với việc triển khai
các bản báo cáo của bạn
Chương 15 Xuất khẩu và triển khai hoạt động các báo cáo Cuối cùng thì việc lập trình và trắc nghiệm ứng dụng của bạn cũng đến hồi kết thúc
Và bước cuối cùng trong chu kỳ phát triển phần mềm là triển khai ứng dụng và đưa vào
hoạt động thực sự, nghĩa là làm thế nào phân phối ứng dụng đưa đến tay người sử dụng
cuối cùng (end user) Crystal Reports cho phép bạn hai cách để phân phối các bản báo
cáo:
Cách thứ nhất là cho xuất khẩu báo cáo (report exporting) dưới những dạng thức
khác nhau Đây cũng tương tự như một web service, theo đấy bản báo cáo có thể
được nhìn xem trên nhiều sàn diễn với những ứng dụng khác nhau Đây có thể là
một tập tin, một e-mail đính kèm, một Exchange folder hoặc một tập tin nhị phân
(binary stream)
Cách thứ hai là cho triển khai các bản báo cáo đi kèm theo ứng dụng Việc này
đòi hỏi thay đổi các tập tin setup làm thế nào các bản báo cáo kèm theo các thư
viện được gắn liền được cài đặt trên máy đích
Chương này sẽ đề cập đến hai lĩnh vực vừa kể trên: xuất khẩu và triển khai đưa vào
hoạt động các báo cáo
Bộ sách NET toàn tập gồm những tập nào?
Như đã nói, bộ sách NET toàn tập này gồm 8 tập, 6 nói về lý thuyết và 2 về thí dụ
thực hành
Tập I: Lập trình Visual C# thế nào?
Chương 1 Visual C# và NET Framework
Chương 2 Bắt đầu từ đây ta tiến lên!
Chương 3 Sử dụng Debugger thế nào?
Trang 2523 Lập trình Web sử dụng ASP.NET và Visual C# Dương Quang Thiện
Chương 4 Căn bản Ngôn ngữ C#
Chương 5 Lớp và Đối tượng
Chương 6 Kế thừa và Đa hình
Chương 7 Nạp chồng tác tử
Chương 8 Cấu trúc Struct
Chương 9 Giao diện
Chương 10 Bản dãy, Indexers và Collections
Chương 11 Chuỗi chữ và biểu thức regular
Chương 12 Thụ lý các biệt lệ
Chương 13 Ủy thác và tình huống
Chương 14 Lập trình trên môi trường NET
Tập II: Visual C# và Sàn diễn NET
Chương 1 Input/Output và Object serialization
Chương 2 Xây dựng một ứng dụng Windows
Chương 3 Tìm hiểu về Assembly và cơ chế Version
Chương 4 Tìm hiểu về Attribute và Reflection
Chương 5 Marshalling và Remoting
Tập III: Giao diện người sử dụng viết theo Visual C#
Chương 1 Tạo giao diện người sử dụng dùng lại được
Chương 2 Thiết kế giao diện theo Lớp và theo Tầng nấc
Chương 3 Tìm hiểu đồ họa và GDI+
Chương 4 Tìm hiểu về biểu mẫu và lớp Form
Chương 5 Cơ bản về lớp Control
Chương 6 Tìm hiểu về Windows Forms Controls
Chương 7 Các ô control tiên tiến
Chương 8 Các ô custom control
Chương 9 Hỗ trợ Custom Control vào lúc thiết kế
Chương 10 MDI Interfaces và Workspace
Chương 11 Dynamic User Interfaces
Chương 12 Tìm hiểu về Data Controls
Chương 13 GDI+ Controls
Chương 14 Help và Hỗ trợ được đặt lọt thỏm trên ứng dụng
Trang 26Mục lục 24
Tập IV: Lập trình Căn cứ dữ liệu với Visual C# & ADO.NET
Chương 1 Sử dụng Căn cứ dữ liệu
Chương 2 Tổng quan về ADO NET
Chương 3 Data Component trong Visual Studio NET
Chương 4 Các lớp ADO.NET tách rời
Chương 5 ADO.NET Data Providers
Chương 6 Tạo Căn cứ dữ liệu sử dụng các công cụ IDE
Chương 7 Làm việc với XML
Chương 8 Triển khai ứng dụng Web sử dụng ADO.NET
Chương 9 Sử dụng các dịch vụ Web với ADO.NET
Chương 10 Thụ lý các tình huống trên ADO.NET
Chương 11 Stored procedure, View, Trigger và COM Interop
Chương 12 Làm việc với Active Directory
Chương 13 Tìm hiểu về Message Queues
Chương 14 Tìm hiểu về Data Wrapper
Chương 15 Làm việc với ODBC.NET data provider
Tập V: Lập trình ASP.NET & Web
Chương 1 ASP.NET và NET Framework
Chương 2 Tìm hiểu các tình huống
Chương 3 Tìm hiểu các ô Web Control
Chương 4 Chi tiết về các ASP Control
Chương 5 Lập trình Web Form
Chương 6 Kiểm tra hợp lệ
Chương 7 Gắn kết dữ liệu
Chương 8 List-Bound Control - Phần 1
Chương 9 Truy cập căn cứ dữ liệu với ADO.NET
Chương 10 ADO.NET Data Update
Chương 11 List-Bound Control - Phần II
Chương 12 User Control và Custom Control
Chương 13 Web Services
Chương 14 Caching và Năng suất
Chương 15 An toàn
Chương 16 Triển khai ứng dụng
Tập VI: Lập trình các báo cáo dùng Crystal Reports NET
Chương 01 Tổng quan về Crystal Reports Net
Chương 02 Hãy thử bắt đầu với Crystal Reports NET
Chương 03 Tìm hiểu Crystal Reports Object Model
Trang 2725 Lập trình Web sử dụng ASP.NET và Visual C# Dương Quang Thiện
Chương 04 Sắp xếp & Gộp nhóm
Chương 05 Sử dụng các thông số
Chương 06 Uốn nắn các báo cáo
Chương 07 Tìm hiểu về Công thức & Lôgic chương trình
Chương 08 Vẽ biểu đồ thế nào?
Chương 09 Tạo báo cáo Cross-Tab
Chương 10 Thêm Subreports vào báo cáo chính
Chương 11 Hội nhập báo cáo vào ứng dụng Windows
Chương 12 Hội nhập báo cáo vào ứng dụng Web
Chương 13 Tạo XML Report Web Services
Chương 14 Làm việc với các dữ liệu nguồn
Chương 15 Xuất khẩu và triển khai hoạt động các báo cáo
Tập VII: Sổ tay kỹ thuật C# - phần A
Chương 01 Làm việc với Microsoft Visual Studio NET 2003 và
Microsoft NET Framework 1.1 Chương 02 Làm việc với ngôn ngữ Visual C# và NET Framework
Chương 03 Truy cập dữ liệu
Chương 04 Xây dưng giao diện GUI Windows Forms
Tập VIII: Sổ tay kỹ thuật C# - phần B
Chương 05 Làm việc với Console Application
Chương 06 Tương tác với hệ điều hành
Chương 07 Làm việc với NET Framework
Chương 08 NET Framework cấp cao
Chương 09 GDI+
Chương 10 Xây dựng ứng dụng dịch vụ xí nghiệp
Chương 11 COM Interop/Invoke
Chương 12 Visual Studio NET
Chương 13 Bảo đảm an toàn các ứng dụng
Bộ sách này dành cho ai?
Bộ sách này được viết dành cho những ai muốn triển khai những ứng dụng chạy trên Windows hoặc trên Web dựa trên nền NET Chắc chắn là có nhiều bạn đã quen viết C++, Java hoặc Visual Basic, hoặc Pascal Cũng có thể bạn đọc khác lại quen với một ngôn ngữ khác hoặc chưa có kinh nghiệm gì về lập trình ngoài lập trình cơ bản Bộ sách này dành cho tất cả mọi người Vì đây là một bộ sách tự học không cần thầy, chỉ cần có một
Trang 28Mục lục 26
cái máy tính được cài đặt NET Đối với ai chưa hề có kinh nghiệm lập trình, thì hơi khó một chút nhưng “cày đi cày lại” thì cũng vượt qua nhanh những khó khăn này Còn đối với những ai đã có kinh nghiệm lập trình, thì sẽ mê ngay ngôn ngữ này và chỉ trong một thời gian rất ngắn, cùng lắm 6 tháng là có thể nắm vững những ngóc ngách của ngôn ngữ mới này và có thể biết đâu chừng trong một thời gian rất ngắn bạn sẽ trở thành một
“guru” ngôn ngữ C# Người viết cũng xin lưu ý bạn đọc là bộ sách này là sách tự học (tutorial) chứ không phải một bộ sách tham chiếu (reference) về ngôn ngữ, nên chỉ mở đường phát quang hướng dẫn bạn đi khỏi bị lạc và đem lại 60% kiến thức về ngôn ngữ
Và khi học tới đâu, tới một chặng đường nào đó bạn có thể lên MSDN phăng lần đào sâu từng đề mục con mà bạn đang còn mơ hồ để có thể phăng lần 40% còn lại kiến thức để nắm vững vấn đề Lấy một thí dụ Trong bộ sách này, chúng tôi thường đề cập đến các lớp Chúng tôi giải thích tổng quát cho biết lớp sẽ được dùng vào việc gì và sử dụng một
số hàm hành sự (method) hoặc thuộc tính (property) tiêu biểu của lớp này trong những thí
dụ cụ thể Thế nhưng mỗi lớp có vô số hàm hành sự và thuộc tính cũng như tình huống Thì lúc này bạn nên vào MSDN tham khảo từng hàm hành sự hoặc thuộc tính một của lớp này để bạn có một ý niệm sơ sơ về những công năng và đặc tính của lớp Có một số chức năng/đặc tính bạn sẽ không bao giờ sử dụng đến, còn một số thi thoảng bạn mới cần đến Cho nên về sau, khi bạn muốn thực hiện một chức năng gì đó, thì bạn có thể vào lại MSDN xem lớp có một hàm hoặc thuộc tính đáp ứng đúng (hoặc gần đúng) nhu cầu của bạn hay không và nếu có thì lúc này bạn mới xem kỹ cách sử dụng Kinh nghiệm cho thấy là trong suốt cuộc đời hành nghề lập trình viên, bạn sẽ “xào đi xào lại” cũng chừng nấy lệnh, hoặc một số hàm nào đó theo một mẫu dáng (pattern) nào đó, nên một khi bạn
đã khám phá ra những lệnh hoặc hàm này và áp dụng thành công thì bạn sẽ thường xuyên dùng đến một cách máy móc không cần suy nghĩ gì thêm
Theo tập quán phát hành sách hiện thời trên thế giới, thì sách sẽ kèm theo một đĩa mềm hoặc đĩa CD chứa các bài tập thí dụ Ở đây rất tiếc, chúng tôi không làm thế vì nhiều
lý do Thứ nhất giá thành sẽ đội lên, mà chúng tôi thì lại muốn có những tập sách giá bán đến tay bạn đọc rẻ bằng 50% giá hiện hành của các sách khác cùng dung lượng (nhưng khác chất lượng nội dung) Thứ hai, các bạn chịu khó nhập lệnh vào máy, nhập tới đâu bạn đọc hiểu tới đấy Đôi khi nhập lệnh sai, máy bắt lỗi bạn sẽ biết những thông điệp cảnh báo lỗi nói gì để về sau mà cảnh giác Còn nếu tải chương trình xuống từ đĩa vào máy, cho thử chạy tốt rồi bạn bằng lòng rốt cuộc bạn chả hiểu và học gì thêm Khi nhập một câu lệnh như thế bạn phải biết mình đang làm gì, thực hiện một tác vụ gì, còn như nhắm mắt tải lệnh xuống thì cũng chẳng qua là học vẹt mà thôi, không động não gì cả
Chúng tôi hy vọng bộ sách sẽ giúp bạn có một nền tảng vững chắc trong việc lập trình trên NET
Ngoài ra, trong tương lai, nếu sức khoẻ cho phép (vì dù gì thì tuổi soạn giả cũng gần 72) chúng tôi dự kiến ra bộ sách về phân tích thiết kế các ứng dụng điện toán sử dụng UML và Pattern áp dụng trong quản lý kinh doanh Trong những buổi gặp gỡ giữa bạn bè
và một đôi lần trên báo chí khi họ than phiền là kỹ sư tin học bây giờ ra trường không sử
Trang 2927 Lập trình Web sử dụng ASP.NET và Visual C# Dương Quang Thiện
dụng được, chúng tôi thường hay phát biểu là không ngạc nhiên cho lắm khi ta chỉ cho ra toàn là “thợ lập trình” giống như bên xây dựng là thợ hồ, thợ nề, thợ điện, thợ mộc v v chứ đâu có đào tạo những kiến trúc sư (architect) biết thiết kế những bản vẽ hệ thống Do
đó, chúng tôi dự kiến (hy vọng là như vậy) là sẽ hoàn thành một bộ sách đề cập đến vấn
đề phân tích thiết kế những hệ thống sử dụng những thành tựu mới nhất trên thế giới là UML và Pattern với những phần mềm thích ứng là IBM Rational Rose XDE và Microsoft Visio for Enterprise Architect (VEA), kết hợp với những khái niệm về ERP (Enterprise Resources Planning) khá phổ biến trong quản lý doanh nghiệp tại các nước Âu Mỹ từ hơn thập niên qua Ngoài ra, những gì học ở trường là thuần túy về kỹ thuật lập trình, về mô phỏng, trí tuệ nhân tạo, lý thuyết rời rạc v.v (mà những mớ lý thuyết này không có đất dụng võ) nhưng khi ra trường vào các xí nghiệp thì mù tịt về quản lý nhân sự, về kế toán
về tồn kho vật tư, về tiêu thụ v v mà 80% ứng dụng tin học lại là vào các lãnh vực này
Do đó, trong bộ sách mà chúng tôi dự kiến sẽ soạn những tập đi sâu vào xây dựng những
hệ thống quản lý trong các cơ quan xí nghiệp hành chánh cũng như thương mại
Đôi lời cuối cùng
Kể từ năm 1989, năm thành lập văn phòng dịch vụ điện toán SAMIS, cho đền nay trên 15 năm chúng tôi cùng anh chị em trong nhóm SAMIS đã biên soạn trên 55 đầu sách
và cũng đã phát hành gần 400.000 bản, trong ấy 60% là phần của soạn giả Từ những tiền lời kiếm được do tự phát hành lấy cộng thêm tiền hưu tiết kiệm của bà vợ người Thụy Sĩ, hằng năm chúng tôi đã dành toàn bộ số tiền này để xây các trường ở những vùng sâu vùng xa trên 15 tỉnh thành đất nước (Sơn La, Nghệ An, Quảng Ngãi, Quảng Nam, Quảng Trị, Bình Định, Ban Mê Thuột, Pleiku, Darlak, Bà Rịa Vũng Tàu, Đồng Nai, Bình Dương, TP Hồ Chí Minh, Cần Thơ và Cà Mau), cấp học bổng cho các sinh viên nghèo tại các đại học Huế, Đà Nẵng, An Giang và TP Hồ Chí Minh, hỗ trợ vốn cho giáo viên ở An Lão (Bình Định), xây nhà cho giáo viên ở vùng sâu vùng xa (Bình Định, Quảng Trị) và tài trợ mổ mắt cho người nghèo ở An Giang (4 năm liền) Các hoạt động xã hội này đều thông qua sự hỗ trợ của hai tờ báo Tuổi Trẻ và Sài Gòn Giải Phóng Không ngờ những việc làm rất cá nhân này lại được Nhà nước “theo dõi” đến nỗi không biết vị nào đã “xúi” Chủ tịch nước Trần Đức Lương ký quyết định tặng người viết Huân chương Lao động Hạng 3, ngày 29/8/2000 Nói ra điều này, chúng tôi muốn bạn đọc hiểu cho là tự nội lực của ta, ta cũng có thể giúp đỡ giáo dục mà khỏi nhờ viện trợ của các nước khác Nếu các bạn ý thức rằng mỗi tập sách bạn mua của chúng tôi thay vì mua sách “luộc” hoặc photocopy là bạn đã gián tiếp tham gia vào chương trình xây trường lớp cho vùng sâu vùng xa cũng như hỗ trợ học bổng cho sinh viên nghèo của chúng tôi
Cuối cùng, chúng tôi xin cảm ơn sự hỗ trợ của các anh chị Hoàng Ngọc Giao, Võ Văn Thành và Trần Thị Thanh Loan trong việc hoàn thành bộ sách này
TP Hồ Chí Minh ngày 30/10/2005
Dương Quang Thiện
Trang 30Chương 3: Tìm hiểu Crystal Report NET Object Model 3-28
Chương 1
Tổng quan về Crystal Reports NET
Visual Studio NET là môi trường triển khai Windows đầu tiên đem lại cho lập trình
viên triển khai phần mềm một giải pháp tạo ra những báo cáo hoàn toàn tích hợp và chặt
chẽ Crystal Reports giờ đây là một cấu kiện (component) chuẩn được cài đặt cùng với
Visual Studio NET, cho phép bạn viết ra những ứng dụng có khả năng làm những báo
cáo một cách trơn tru dính liền với ứng dụng
Trước khi Visual Studio NET xuất hiện thì sự đời không phải là thế Bắt đầu với
Visual Basic 3.0, vào năm 1993, Crystal Reports được đưa vào ngôn ngữ Visual Basic,
cho phép kết sinh ra những báo cáo, nhưng lại không phải là thành phần của cài đặt mặc
nhiên Lúc ấy Crystal Reports thuần túy là một phần mềm chạy một mình một cõi
(stand-alone) hoàn toàn độc lập đối với ngôn ngữ Visual Basic Còn bây giờ, Crystal
Reports.NET được hội nhập một cách trơn tru vào môi trường Visual Studio NET IDE
Khi Microsoft lần đầu tiên cho ra đời Microsoft Access, một chương trình quản lý
căn cứ dữ liệu, Microsoft đã cung cấp kèm theo một bộ phận tạo báo cáo (report writer)
khá ngon lành, nên Access đã gặp nhiều thành công, trở thành một chương trình chuẩn xử
lý căn cứ dữ liệu trên máy để bàn Nhưng điều kỳ lạ là với Windows, Microsoft lại không
đếm xỉa gì đến việc tạo báo cáo Kết quả là lập trình viên nào muốn tạo những báo cáo
đành phải vật lộn với C để viết những chương trình báo cáo sử dụng Windows GDI
(Graphical Device Interface)
Vì bản chất visual của lập trình Windows, viết theo GDI không phải là một phương
pháp trực quan để viết ra các báo cáo GDI đòi hỏi công sức khá nhiều khi muốn canh
hàng văn bản cùng với các hình đồ họa trên báo cáo Các tính năng khác như định dạng
và subreport2 là cả những thách thức đối với lập trình viên Ngoài ra, lập trình viên phải
đánh đố với máy in dùng để in ra báo cáo Nói tóm lại lập trình viên Windows khi muốn
viết những báo cáo đành phải nhờ đến những phần mềm không do Microsoft viết ra Do
đó, đối với phần lớn các nhà triển khai phần mềm, Crystal Reports trở thành phần mềm
kết sinh báo cáo (report generator) được ưa chuộng nhất Crystal Reports được viết vào
cuối thập niên 1980 như là một công cụ visual để thiết kế các báo cáo không gắn với bất
cứ ứng dụng nào Nó trưng ra một API cho phép lập trình viên triệu gọi từ nhiều ngôn
2 Subreport là một báo cáo phụ nằm trong lòng báo cáo chính Chúng tôi để yên từ này không dịch
Trang 311-29 Lập trình báo cáo sử dụng Crystal Reports NET Dương Quang Thiện
ngữ lập trình khác nhau Điều này làm cho lập trình viên không rành GDI cũng có thể viết những báo cáo ngon lành Những công việc chẳng hạn như sắp xếp (sorting), gộp theo nhóm (grouping, từ ngữ thông dụng vào thập niên 1960 là “ngắt cấp bậc – break level) cũng như áp dụng định dạng đặc biệt nay trở thành đơn giản với Crystal Reports Tính uyển chuyển có thể in ra từ nhiều dữ liệu nguồn khác nhau, và làm việc với nhiều ứng dụng nhanh chóng làm cho Crystal Reports trở thành một giải pháp chuẩn cho việc kết sinh báo cáo
Tuy nhiên, Crystal Reports cũng có những vấn đề Trước tiên, Crystal Reports là một chương trình riêng biệt, đứng một mình, nghĩa là không được xây dựng ngay trong ngôn ngữ Bất cứ lúc nào bạn muốn thay đổi hoặc nhìn xem trước (preview) một báo cáo, bạn phải rời IDE rồi mở một chương trình báo cáo khác Đây không phải là một cung cách lập trình tốt Vấn đề thứ hai là nếu thêm những đoạn mã lôgic vào trong lòng báo cáo bạn phải học cú pháp Crystal, nghĩa là học thêm một ngôn ngữ Mặc dầu, cú pháp Crystal cũng tương tự như Visual Basic và C, nhưng cũng đủ khác biệt để bạn mất thời giờ học nếu muốn sử dụng Crystal Reports Vấn đề cuối cùng là bạn phải triệu gọi hàm API để in các báo cáo Mặc dầu, không khó gì mấy đối với phần lớn báo cáo thông dụng, nhưng nó đòi hỏi công sức và óc sáng tạo khi báo cáo hơi phức tạp một chút sử dụng nhiều nguồn
dữ liệu khác nhau
Với sự xuất hiện của Visual Studio 5, Crystal Reports được thiết kế lại trở thành một add-in vào IDE nên Crystal Reports không đứng một mình mà giờ đây “tận hiến” cho Windows, và lập trình viên có thể tạo và hiệu đính một bản báo cáo dễ dàng như là tạo và hiệu đính một biểu mẫu Tới đây, sử dụng Windows để tạo bản báo cáo trở thành đơn giản
Bây giờ, với sự ra đời của Visual Studio NET, Crystal Reports trở thành một giải pháp mặc nhiên trong việc kết sinh các báo cáo chất lượng cao và mang tính tương tác Trong chương này, chúng tôi sẽ cùng bạn xem xét Crystal Reports.NET một cách tổng quan trước khi đi sâu vào ứng dụng
1.1 Crystal Reports là gì?
Nói một cách đơn giản, Crystal Reports là công cụ thiết kế báo cáo cho phép bạn tạo
ra những báo cáo có thể tìm thấy và định dạng dữ liệu (dưới dạng một resultset3) từ một căn cứ dữ liệu hoặc từ những dữ liệu nguồn (data source) khác nhau Ngoài việc đọc dữ liệu từ một dữ liệu nguồn, Crystal Reports có riêng cho mình một ngôn ngữ công thức (formula language) để tính toán và một số tính năng khác có thể được dùng để biến những
3 Từ “resultset” hoặc “recordset” là giống nhau Đây là tập hợp dữ liệu do kết quả của một truy vấn trên một dữ liệu nguồn, thường là căn cứ dữ liệu
Trang 32Chương 3: Tìm hiểu Crystal Report NET Object Model 3-30
dữ liệu thô thành những báo cáo đầy tính chuyên nghiệp, kèm theo biểu đồ (graph, chart)
hoặc bảng cross-tab4, v.v
Bạn có thể tạo những bản báo cáo đi từ những danh sách đơn giản chỉ gồm vài cột
cho đến những báo cáo quản lý phức tạp cho thấy biểu đồ, bảng và chỉ số Key
Performance Indicator (KPI) Tính uyển chuyển của bản thân Report Designer (bộ phận
thiết kế báo cáo) có nghĩa là bạn có thể tạo ra nhiều loại báo cáo khác nhau và kết xuất
tùy thuộc vào nhu cầu của bạn Xem hình 1-01
Ngoài một bộ công cụ cực mạnh để tạo các báo cáo, Crystal Reports còn có một số
hàm API cũng như công cụ đặc biệt được thiết kế dành cho các nhà phát triển phần mềm
cho phép hội nhập các báo cáo này vào trong ứng dụng riêng của họ
1.2 Bạn có thể làm được gì với Crystal Reports?
Để bắt đầu, Crystal Reports.NET cho bao gồm một Report Designer (bộ thiết kế báo
cáo) có sẵn trong lòng Visual Studio NET IDE cho phép bạn thiết kế tạo những tập tin
báo cáo (mang phần đuôi rpt) để có thể cho hòa nhập vào ứng dụng Windows hoặc
4 Chữ ‘tab” trong cross-tab là tắt chữ “tabulation” hoặc “tabular” nghĩa là xếp thành hàng cột
Cross-tab là bảng báo cáo xếp thành hàng cột giao nhau
Trang 331-31 Lập trình báo cáo sử dụng Crystal Reports NET Dương Quang Thiện
Web của bạn Phối hợp với Report Designer, bạn có những cửa sổ Field Explorer,
Solution Explorer và Properties trong việc thiết kế bản báo cáo (xem hình 1-02) Nếu
bạn đã làm quen với Visual Studio NET IDE thì bạn không xa lạ gì đối với hai cửa sổ
Solution Explorer và Properties Với Crystal Reports, thì đặc biệt có cửa sổ Field Explorer cho phép bạn khảo sát cũng như đặt để các vùng mục tin khác nhau trên bản
báo cáo trong lúc thiết kế
Report Designer này (sẽ được đề cập đến ở Chương 2) có một số “expert” (thường được biết đến là “wizard”) giúp bạn khởi công xây dựng một báo cáo và hướng dẫn bạn suốt quá trình triển khai báo cáo, từ việc chọn ra dữ liệu nguồn cung cấp dữ liệu cho báo cáo, đến việc chọn ra các vùng mục tin khác nhau sẽ xuất hiện trên báo cáo cũng như sàng lọc ra mẫu tin nào từ nguồn dữ liệu để có thể xử lý in ra trên báo cáo
Một khi bạn đã thiết kế một báo cáo cơ bản, bạn có thể bổ sung các tính năng khác
như các vùng mục tin công thức (formula field, vùng mục tin do một công thức tính ra), các mục tin tổng cộng khi báo cáo đang chạy (được gọi là running total), các biểu đồ
(graph hoặc chart), và có thể đáp ứng sự phức tạp của báo cáo Các báo cáo có thể được thiết kế theo bất cứ mọi hình dáng, kích thước và biểu mẫu nào Có thể bạn muốn tạo một
Trang 34Chương 3: Tìm hiểu Crystal Report NET Object Model 3-32
báo cáo mà người ta có thể đem dùng in ra một hóa đơn từ ứng dụng hoặc bạn muốn tính
toán thống kê cho một báo cáo quản lý hoặc tạo một bản báo cáo tồn kho vật tư chẳng
hạn Ngoài ra, bạn cũng có thể tạo những nhãn thư tín (mailing label) hoặc gởi hàng và có
thể cho bao gồm mã vạch (bar code), hình ảnh, đồ họa v.v
Bạn để ý: Muốn có một ý niệm về những loại báo cáo mà Crystal Reports có thể cho ra,
bạn có thể tra cứu Sample Reports có sẵn trên địa chỉ mạng:
http://community.crystaldecisions com/fix/samplescr.asp hoặc trên máy của
bạn tại thư mục: C:\Program Files\Microsoft Visual Studio.NET
\Crystal Reports\Samples\Code
Sau khi bạn đã tạo ra một báo cáo (tập tin rpt), bạn cần một cách nào đó để cho
hiển thị báo cáo này từ ứng dụng của bạn, nghĩa là cần đến một viewer (bộ đồ cho nhìn
xem) Crystal Reports.NET có hai viewer khác nhau: Windows Forms Viewer và Web
Forms Viewer
Windows Forms Viewer (mà chúng ta sẽ xem ở Chương 11, “Hội nhập báo cáo vào
ứng dụng Windows”) có thể dùng với các ứng dụng Windows để xem trước (preview) bất
cứ báo cáo nào mà bạn cho hội nhập vào ứng dụng của bạn, và cung cấp một mô hình đối
tượng (object model) rất phong phú cho phép bạn điều khiển bằng lập trình dáng dấp của
viewer và vài khía cạnh của báo cáo vào lúc chạy Bạn có thể đưa viewer này vào bất cứ
Trang 351-33 Lập trình báo cáo sử dụng Crystal Reports NET Dương Quang Thiện
biểu mẫu nào trên ứng dụng của bạn hoặc chiếm trọn mặt bằng của biểu mẫu hoặc nằm kế cận với các ô control khác của biểu mẫu Bạn có thể làm chủ dáng dấp xuất hiện của viewer, thay đổi các thanh công cụ và những khía cạnh nhìn xem, kể cả tạo riêng cho mình icon và nút để điều khiển viewer (Hình 1-03, trang trước) Bạn thấy trên hình 1-03 bản báo cáo nằm kế cận các ô control Windows
Đối với những ứng dụng web, thì có Web Forms Viewer (mà chúng tôi sẽ đề
cập đến ở Chương 12, “Hội nhập báo cáo vào ứng dụng Web”), cũng mang chức năng tương tự và cho phép bạn nhìn xem các báo cáo mà bạn đã cho hội nhập vào ứng dụng web của bạn Bạn có thể thêm viewer này lên các trang web trong lòng ứng dụng và cho thấy báo cáo chiếm trọn trang web (Hình 1-04, trang trước) hoặc xuất hiện trong một frameset5 hoặc kế cận những ô control khác của ứng dụng, tất cả tùy ý đồ của bạn
Muốn hoàn toàn làm chủ đối với báo cáo của bạn, bất luận bạn đang ở Windows
Forms Viewer hoặc Web Forms Viewer, bạn có thể truy cập vào Report Engine (sẽ được
5 HTML frameset là một tài liệu cho hiển thị trên browser nhiều vùng độc lập, khả dĩ diễu hành được gọi là ‘frame’ (khung cửa)
Trang 36Chương 3: Tìm hiểu Crystal Report NET Object Model 3-34
đề cập rải rác trong các chương từ Chương 3 trở đi), theo đấy bạn được phép điều khiển
việc định dạng báo cáo, cho đặt để thông tin đăng nhập vào căn cứ dữ liệu (database
credentials) cũng như triệu gọi trực tiếp các hàm hành sự để in, xuất khẩu, v.v
Đối với việc tạo những ứng dụng để phân phối cho người sử dụng khác nhau trên
mạng, Crystal Reports.NET có một số tính năng đặc biệt được thiết kế để tạo và tiêu thụ
những XML Report Web Services hoặc thông qua một generic Web Service mang tính
chung chung được gởi kèm theo Crystal Reports.NET (cho phép bạn sử dụng một báo cáo
mà khỏi đăng ký nó như là một Web Service) hoặc bằng cách tạo ra riêng cho bạn những
Web Services từ các tập tin rpt (Chương 13, “Tạo XML Report Web Services”, sẽ
hướng dẫn bạn trong quá trình tạo và tiêu thụ XML Report Web Services) Xem hình 1-05
Cuối cùng, Crystal Reports.NET cũng gắn chặt với Crystal Enterprise, một hệ thống
phân phối và bố trí lịch trình báo cáo (report scheduling) cung cấp một sàn diễn xử lý
kiểu đa cấp hoạt động ở hậu phuơng (multi-tier back-end) đối với các báo cáo, cho phép
bạn sử dụng một guồng máy bố trí (scheduling engine) và khung phân phối báo cáo
(distribution framework) để phân phối các báo cáo cho hàng ngàn người sử dụng trên
mạng
Trang 371-35 Lập trình báo cáo sử dụng Crystal Reports NET Dương Quang Thiện
1.3 Crystal Reports NET khác biệt so với các
phiên bản Crystal Reports trước thế nào?
Crystal Reports.NET là một sản phẩm mới chỉ có sẵn trong Visual Studio NET Nó chia sẻ vài tính năng phổ biến với phiên bản bán lẻ của Crystal Reports và dựa trên công nghệ của Crystal Reports 8.x, nhưng tất cả các cấu kiện của Crystal Reports.NET đều được viết lại theo C# và được thiết kế tận dụng những lợi điểm của NET Framework
1.3.1 Integrated Design Environment (IDE)
Khác với phiên bản “tự túc” (stand alone) bán lẻ của Crystal Reports, Crystal
Reports.NET là thành phần của Visual Studio NET IDE Bằng cách sử dụng Report
Designer tích hợp bạn có thể tạo các bản báo cáo cũng như hiệu đính chúng ngay trong
lòng Visual Studio NET IDE
1.3.2 Bất cứ ngôn ngữ nào, bất cứ lúc nào
Crystal Reports.NET theo chủ trương của Visual Studio NET là “any language, any time” (bất cứ ngôn ngữ nào, bất cứ lúc nào) nghĩa là không quá “khắt khe” trong việc chọn lựa một ngôn ngữ lập trình khi viết các ứng dụng báo cáo Đối với tất cả các ngôn ngữ NET (C#, VB.NET hoặc J#), Report Designer hoạt động giống như nhau không
“phân biệt đối xử”, và chỉ đoạn mã dùng điều khiển việc nhìn xem các báo cáo và triệu gọi report engine là có hơi khác một chút do cú pháp và qui ước giữa các ngôn ngữ Thí
dụ, nếu bạn gắn kết một báo cáo với Web Forms Wiewer theo Visual Basic.NET, thì cú pháp có thể giống như sau:
crystalReportViewer1.ReportSource = myReport
thì cũng dòng lệnh trên viết theo C# sẽ như sau với một chút khác biệt (thêm dấu chấm phẩy cuối câu lệnh):
crystalReportViewer1.ReportSource = myReport;
Rõ ràng, là việc chuyển bật qua lại giữa các ngôn ngữ khi cần thiết quá dễ dàng – đây
có nghĩa là những ai đã dùng Visual Basic với các phiên bản Crystal Reports trước có thể dùng dễ dàng tất cả các ngôn ngữ NET (Visual Basic.NET, C#, J#, v.v ) phối hợp với Crystal Reports.NET
Trang 38Chương 3: Tìm hiểu Crystal Report NET Object Model 3-36
1.3.3 Các phương pháp hội nhập
Một khác biệt khác là cách thức chúng ta cho hội nhập (integration) các báo cáo vào
các ứng dụng Windows và Web cũng đã thay đổi Trong quá khứ, các nhà triển khai phần
mềm Crystal Reports có nhiều phương pháp hội nhập khác nhau mà họ có thể chọn lựa,
chẳng hạn một ActiveX control, Automation Server hoặc triệu gọi trực tiếp
Crystal Reports Print Engine Đối với những ứng dụng Web, thì Crystal Reports phát đi
những cấu kiện web server và report viewer riêng của mình, cho phép các nhà triển khai
phần mềm có thể hội nhập báo cáo vào ứng dụng của họ
Với việc ra đời của Visual Studio NET, bây giờ ta có khả năng đưa việc triển khai
Windows và Web vào cùng một framework Crystal Reports Engine giờ đây là một đối
tượng COM+ bao một vỏ bọc quanh một phiên bản nhật tu của Crystal Reports Print
Engine, mà có thể bạn đã làm quen trong quá khứ Report Engine có thể được dùng để
uốn nắn “lấy ni” (customize) các tính năng vào lúc chạy và còn lo việc xử lý báo cáo
Khi làm việc với Crystal Reports.NET trên Visual Studio NET, bạn có thể chọn hoặc
để yên bản báo cáo (tập tin rpt) trên máy cục bộ (và sử dụng các nguồn lực của máy để
xử lý và hiển thị kết quả báo cáo sử dụng Windows Forms Viewer) hoặc phát hành nó
trên một web server (và sử dụng Web Form Viewer) hoặc phát hành nó như là một
Report Web Service - có thể được tiêu thụ và được nhìn xem bởi hoặc Windows Forms
Viewer hoặc Web Forms Viewer
1.3.4 Dễ sử dụng
Cho hội nhập một báo cáo vào một ứng dụng Windows là rất đơn giản như lôi ô
control Crystal Report Viewer từ Toolbox thả vào Windows Forms Viewer rồi cho gắn
kết viewer vào một tập tin báo cáo rpt Crystal Report Viewer (như theo hình 1-06)
cung cấp cho bạn nhiều tính năng để nhìn thấy các báo cáo vào lúc thiết kế cũng như vào
lúc chạy mà bạn có thể uốn nắn dáng dấp và các mục chọn của viewer, trao qua các thông
số, đặt để các thuộc tính , v.v
Đối với việc triển khai trên Web, cũng có một Web Forms Viewer liên lạc với
Report Engine (hoặc trên máy cục bộ hoặc trên server nằm xa) để cho hiển thị một trang
báo cáo theo dạng thức DHTML Việc này cho phép bạn nhanh hội nhập báo cáo trong
các ứng dụng web của bạn - không đòi hỏi có các tập tin runtime và việc xử lý báo cáo có
thể được diễn ra trên server
1.3.5 Xây dựng các ứng dụng công ty xí nghiệp
Ngoài ra, công ty Crystal Decisions còn cho ra Crystal Enterprise - một Engine lo
xử lý báo cáo, phân phối báo cáo theo lịch trình có khả năng tăng qui mô và hoàn toàn
Trang 391-37 Lập trình báo cáo sử dụng Crystal Reports NET Dương Quang Thiện
độc lập đối với sàn diễn, có thể dùng phối hợp với Crystal Reports và Crystal Reports.NET cho phép tạo những ứng dụng “hậu phương” có thể hỗ trợ hằng trăm người
sử dụng cho cả theo thời gian thực lẫn các báo cáo được bố trí theo lịch trình với một kiến trúc gồm nhiều server tổ chức theo cụm (clustered multi-server) bao trùm các sàn diễn Windows, Linux và Unix
Các báo cáo được phát hành trên Crystal Enterprise framework có thể được truy cập
từ trong lòng Visual Studio NET, như theo hình 1-07, và được hội nhập vào ứng dụng của bạn
Crystal Enterprise có riêng của mình một tầng lớp an toàn (có thể dùng kiểm chứng thực Windows NT, LDAP, v.v ), cấu trúc nội bộ (folder, objects, rights) và một guồng máy bố trí lịch trình (scheduling engine) và khả năng phân phối có thể được dùng để xây dựng những ứng dụng báo cáo phức tạp khỏi phải phát minh lại một cấu trúc giải pháp chỉ để làm báo cáo
Thí dụ, nếu bạn cần tạo một ứng dụng cho kết sinh theo định kỳ tuần một bản báo cáo theo dạng PDF và cho chuyển đi như là một đính kèm e-mail cho 10 người sử dụng khác nhau, bạn có thể tạo chức năng này trong lòng ứng dụng của bạn hoặc bạn có thể sử dụng
Trang 40Chương 3: Tìm hiểu Crystal Report NET Object Model 3-38
khả năng phân phối theo lịch trình tiềm ẩn của Crystal Enterprise để tạo những triệu gọi
hàm API tiện lợi làm việc này cho bạn
Một lãnh vực chủ chốt theo đấy Crystal Enterprise “đáng đồng tiền bát gạo” là với công nghệ cụm (clustering)
và kiến trúc multi-server - bạn hình dung thí dụ kể trên bây giờ lại có 10 báo cáo phải gởi cho 100 người sử dụng khác nhau mỗi ngày với một bản sao bản báo cáo và một link nối lui về nơi từ đấy đi
họ có thể view và truy tìm báo cáo sống động
Công nghệ tổ chức theo cụm server (clustering) trong lòng Crystal Enterprise bảo đảm là những công việc này sẽ chạy trơn tru không cần biết server nào chạy hoặc tắt, và kiến trúc phân phối nào, có nghĩa là bạn có thể thêm nhiều server chia sẻ gánh nặng xử
lý bao gồm các server đặc biệt có nhiệm
vụ chạy các báo cáo theo lịch trình và xử
lý theo yêu cầu
1.3.6 Kiến trúc báo cáo
Khi nhìn vào Crystal Reports.NET, ta thấy phần mềm này có khả năng tạo những ứng
dụng kiểu đa tầng (multi-tier) Trong quá khứ, phần lớn các ứng dụng Windows đều theo
cách tiếp cận lưỡng tầng (two-tier) với Crystal Reports, theo đấy các báo cáo sẽ được
chạy trên máy cục bộ mà ứng dụng đã được cài đặt
Với việc xuất hiện của Crystal Reports.NET, các nhà triển khai phần mềm đã tìm
thấy vô số công cụ mà sản phẩm cung cấp bao gồm Web Services, Enterprise integration,
v.v Các ứng dụng báo cáo sử dụng Crystal Reports.NET thường thuộc một trong hai
loại sau đây: đơn tầng (single-tier) hoặc lưỡng tầng (two-tier)