1 Lấy dữ liệu file XML
1.1 Xử lý nhiều DataTable trong 1 DataSet
1.2 Xử lý truy cập file xml trong thư mục chỉ định
Cú pháp:
<Query>
<ID>Tên</ID>
<Type></Type>
<Src></Src>
<Para01></Para01>
<Where></Where>
<ColumnAdd></ColumnAdd>
<Column></Column>
<ColumnDel></ColumnDel>
<Sort></Sort>
<Distinct></Distinct>
<Compute_Exp></Compute_Exp>
<FieldAdd></FieldAdd>
<Path></Path>
</Query>
1.1 Lấy dữ liệu file XML
* file xml sẽ truy cập mặc định trong thư mục /App_Data/xml_data
Ví dụ: Lấy dữ liệu file NhanVien.xml
<Query>
<ID>NhanVien</ID>
<Type>Xml</Type>
<Src>NhanVien.xml</Src>
</Query>
* Sẽ tham chiếu /App_Data/xml_Data/NhanVien.xml
* Trường hợp có thư mục con <Src>ThuMucCon/NhanVien.xml</Src>
* Trường hộp file nằm ngoài thư mục mặc định, cần truy cập ta gõ thêm dấu ~
Ví dụ có file /UserFiles/hoso.xml ta dùng lệnh <Src>~/UserFiles/hoso.xml</Src>
* ColumnAdd: có 2 dạng tạo
* Chỉ tạo thêm cột dựa trên bảng có sẵn, nếu muốn tạo cột tính toán dùng Compute_Exp
- Tạo add trường có tính toán
Tạo 1 cột có giá trị là 1 chữ
Chú ý /-/ và </>
Ví dụ 1:
<ColumnAdd>
TenCot/-/String/-/'Giá trị'
</ColumnAdd>
Ví dụ 2: tạo 1 cột giá trị tham chiếu một cột khác
<ColumnAdd>
TenCot/-/String/-/[TenCot]
</ColumnAdd>
Ví dụ 3: nối thêm chuỗi tự tạo với giá trị cột
<ColumnAdd>
TenCot/-/String/-/[HoTen]+' xin chao'
</ColumnAdd>
Ví dụ 4: tạo 1 cột tính toán bởi các cột với nhau
<ColumnAdd>
TenCot/-/String/-/[Cot1] * [Cot2] - 1000
</ColumnAdd>
** sử dụng các phép toán + , - , * , /
Ví dụ 5: áp dụng hàm iif trong khi thêm cột
<ColumnAdd>
TenCot/-/String/-/iif([Cot1]=1,'Nam','Nu')
</ColumnAdd>
TenCot/-/String/-/iif([HSL] is null,'la rong','khac rong')
-> Có sử dụng xác nhận hàm rỗng
- Tạo trường lấy tên cấp cha khi có cột SYS_KEY_Parent
<ColumnAdd>
$p:Name
</ColumnAdd>
Tự động thêm cột SYS_Name_Parent chứa tên cấp cha
File XML có cột ngày muốn tách thành Month / Year
<ColumnAdd>
Ngay_Thang/-/Int32</>$date:Ngay-Month
Ngay_Nam/-/Int32</>$date:Ngay-Year
</ColumnAdd>
- Tạo add trường theo biểu thức
Tạo cột tính toán các hàm SUM,MIN,MAX..
<ColumnAdd>
Tên_Cột_Tạo_1</>Hàm(TenCot)</>Điều_kiện_1
Tên_Cột_Tạo_2</>Hàm(TenCot)</>Điều_kiện_2
</ColumnAdd>
Tạo cột theo biểu thức
<ColumnAdd>
Luong/-/Double/-/HSL*LuongCB
</ColumnAdd>
* Chú ý: áp dụng hàm IsNull để nếu rỗng thì quy ra 0, nếu rỗng sẽ gặp lỗi khi tính toán
<ColumnAdd>
SL_M_Ton/-/Double/-/[SL_M]-IsNull( [SL_M_DB],0)
</ColumnAdd>
- Tham chiếu query khác gõ TenQuery#
Tên_Cột_Tạo_1</>Q1#Hàm(TenCot)</>Điều_kiện_1
Khi tham chiếu Query khác ta có thể dùng điều kiện
TongLuong</>Q1#SUM(Luong)</>PhongBan='[PhongBan]'
* [PhongBan] là giá trị của bảng ghi hiện tại đang lặp
* Tham chiếu ID query
<ColumnAdd>
Tên_Cột_Tạo_1</>Q1#Hàm(TenCot)</>Điều_kiện_1
</ColumnAdd>
* Kiểu dữ liệu và tính toán
<ColumnAdd>
Tên_Cột_Tạo_1/-/Double/-/Cong Thuc</>Q1#Hàm(TenCot)</>Điều_kiện_1
</ColumnAdd>
Ví dụ:
<Query>
<ID>Q1</ID>
<Type>Xml</Type>
<Src>ChungKhoan_GiaoDich.xml</Src>
</Query>
<Query>
<ID>Q2</ID>
<Type>Xml</Type>
<Src>#Q1</Src>
<Where>Ma<>'[NapTien]' AND Ma<>'[RutTien]' </Where>
<Distinct>Ma</Distinct>
</Query>
<Query>
<ID>Q3</ID>
<Type>Xml</Type>
<Src>#Q2</Src>
<ColumnAdd>
TongMua/-/Double</>Q1# Sum(SL_M) </>Ma='[Ma]'
TongBan/-/Double</>Q1#Sum(SL_B)</>Ma='[Ma]'
Ton/-/Double/-/TongMua-TongBan
</ColumnAdd>
</Query>
'[Ma]' là lệnh để lấy giá trị cột Ma của dòng hiện hành
** Hàm WhereR sẽ có tác dụng với các cột sau khi đã Add, dùng hàm Where sẽ lỗi
** Chú ý để cập nhật được giá trị thì tại Column_Add không gán giá trị hay công thức
-- Không gán
<ColumnAdd>
TongMua/-/Double
</ColumnAdd>
-- Có gán
<ColumnAdd>
TongMua/-/Double/-/0
</ColumnAdd>
--> Nếu có gán sẽ báo lỗi ReadOnly
** Cần tại mỗi bảng ghi hiện tại lấy giá trị cột (tên file xml) để tính toán ta cần làm
<ColumnUpdate>
DangLam</>DoiTuongXML#HàmTínhToán</>Where</>Nếu_Rỗng_trả_về
</ColumnUpdate>
Nếu_Rỗng_trả_về: Num_0 là nếu rỗng trả về số 0
Nếu_Rỗng_trả_về: Str_X là nếu rỗng trả về X
Ví dụ:
<Query>
<ID>PlanWork</ID>
<Type>Xml</Type>
<Src>PlanMe_DoWork/2022.xml</Src>
<ColumnAdd>
Rate/-/Double/-/JobNumberCurent*100/JobNumberDesired
DangLam/-/Int16
</ColumnAdd>
<ColumnUpdate>
DangLam</>%filexmlwf-PlanData-addParent__Name#COUNT(_SYS_KEY)</>SYS_Name_Parent='Đang làm'</>Num_0
</ColumnUpdate>
</Query>
**** Các chữ màu đỏ là để thay thế giá trị
* PlanData là tên cột cần lấy giá trị tên file
* Name: tên cột Name trong xml
*FieldLoopkup: , đự định làm như relaceship
<FieldLoopkup>
Tên_Cột_Tạo_1</>File_XML_Tham_chiếu</>Cột_Tạo_Value</>Cột_Loopkup_Value</>Cột_Loopkup_Display
</FieldLoopkup>
Ví dụ:
<FieldLoopkup>
TenLop</>lop.xml</>MaLop</>ID_Lop</>TenLop
</FieldLoopkup>
FieldLoopkup: Tạo ra cột mới và tham chiếu giá trị từ DataTable chỉ định
ts01</>ts02</>ts03</>ts04</>ts05
ts01:tên cột thêm mới
ts02:vị trí lấy DataTable để tìm
dùng ký tự # đầu để lấy giá trị
ts03:tên cột để lấy giá trị đi tìm
ts04:tên cột cần tìm ở Datatable đã tạo
ts05:tên cột cần lấy giá trị ở Datatable
Ví dụ:
<FieldLoopkup>
MoTa_P</>#0</>SYS_KEY_Parent</>_SYS_KEY</>Name
</FieldLoopkup>
* Giải thích: tạo thêm 1 cột tên MoTa_P
#0 là lấy DataTable vị trí 0 (chính nó)
Dữ liệu sẽ lặp từ dòng đầu đến dòng cuối
Trong quá trình lặp sẽ xử lý
Lấy giá trị cột SYS_KEY_Parent đưa ra biến sau đó tìm xem có giá trị nào bằng với cột _SYS_KEY
Nếu = thì lấy giá trị cột Name đưa vào cột MoTa_P
*Compute_Exp: tính toán và tự động thêm 1 DataTable cấu trúc mới theo Tên_Cột ...
-- Khác với Column_Add là chỉ thêm cột vào cấu trúc hiện tại
<Compute_Exp>
Tên_Cột_Tạo_1</>Hàm(TenCot)</>Điều_kiện_1
Tên_Cột_Tạo_2</>Hàm(TenCot)</>Điều_kiện_2
</Compute_Exp>
Hàm:
Ví dụ:Sum, Min, Max, Count, Avg...
Ví dụ:
<Compute_Exp>
TongDiemLop10</>Sum(Toan)</>Lop='10'
TongDiemLop11</>Sum(Toan)</>Lop='11'
</Compute_Exp>
Kết quả: Tạo 2 cột TongDiemLop10,TongDiemLop11
* Áp có có xử lý kiểu cột tạo ra:
<Compute_Exp>
Tên_Cột_Tạo_1/-/Kiểu_Cột</>Hàm(TenCot)</>Điều_kiện_1
Tên_Cột_Tạo_2</>Hàm(TenCot)</>Điều_kiện_2
</Compute_Exp>
Ví dụ: Thu_01/-/Int64</>Sum(Thu)</>Ngay_Thang=1</>0
1.2 Xử lý nhiều DataTable trong 1 DataSet
* Một Query có thể có nạp nhiều dữ liệu file xml đưa vào DataSet, mỗi ID Query tương úng 1 DataTable
<Query>
<ID>Q1</ID>
<Type>Xml</Type>
<Src>nhanvien.xml</Src>
</Query>
<Query>
<ID>Q2</ID>
<Type>Xml</Type>
<Src>#Q1</Src> -> #Q1 là truy vấn lại Q1
<Compute_Exp>Count(HoTen)</Compute_Exp>
</Query>
* Kết quả sẽ trả về 1 DataSet gồm 2 DataTable
* -> <Cmd>#Q1</Cmd> sử dụng # để truy cập tên DataTable trong DataSet
1.3 Xử lý truy cập file xml trong thư mục chỉ định
Ví dụ có thư mục:
/App_Data/xml_data/hoso | |
hoso1.xml | |
hoso2.xml |
* Truy cập 1 file:
<Query>
<ID>Q1</ID>
<Type>Xml</Type>
<Src>dulieu/hoso1.xml</Src>
</Query>
* Kết quả: Hệ thống sẽ truy cập dữ liệu trong file hoso1.xml
* Truy cập tất cả các file trong thư mục:
<Query>
<ID>Q1</ID>
<Type>Xml</Type>
<Src>dulieu</Src>
</Query>
* Kết quả: Hệ thống sẽ truy cập dữ liệu trong thư muc hoso gồm 2 file hoso1.xml và hoso2.xml
Kết quả trả về có thêm 2 cột: _SYS_File_Name, _SYS_Path
Dữ liệu dạng:
_SYS_File_Name _SYS_Path
hoso1.xml hoso/hoso1.xml
hoso2.xml hoso/hoso2.xml
Query lấy dữ liệu file XML