User query definition query

Giới thiệu


Tính năng này cho phép người sử dụng tạo ra các tính năng truy vấn dữ liệu và các action thực hiện trên dữ liệu đó.

  1. Đầu tiên, người thiết kế hệ thống sẽ khai báo nguồn dữ liệu truy vấn thông qua biểu thức Phoebus URL. Sau đó khai báo tên các cột dữ liệu cùng các nút chức năng thực hiện trên dữ liệu trích xuất ra. Nếu logic lấy dữ liệu phắc tạp hơn những gì Phoebus URL có thể cung cấp, Chương trình cho phép kết nối nhiều Phoebus URL lại với nhau bằng vòng lặp For Each.

  2. Khi sử dụng, thao tác viên gọi chức năng băng lệnh Run User Query và sử dụng các nút bấm định nghĩa bên trên để thực hiện thao tác cho dữ liệu.

⚠️ Chú ý

Ta cũng có thể sử dụng dashboard để làm được việc này. Nhưng với dashboard, ta sẽ phải dùng chuột phải để định nghĩa các thao tác. Và dashboard sẽ cần nhiều thao tác hơn để đưa tính năng vào hoạt động.

Các truy vấn này một khi được định nghĩa sẽ tự thêm vào Permission Matrix để user admin ban quyền cho những ai có quyền chạy.

Định nghĩa user Query


  1. Ta sẽ lấy ví dụ định nghĩa danh mục các nhật ký lấy từ sổ H (hold file). Cùng các nút lệnh Open/Copy nhật ký.

Lệnh gọi tính năng định nghĩa truy vấn :

pbs.BO.Inquiry.RunUserQuery

a2e69c96-63cc-44a3-9f1f-db709a12cc8b.pbs_bo_inquiry_uqd_md

Trong ví dụ này, nguồn dữ liệu truy vấn sẽ lấy từ 1 Query có mã là EMP. Ngoài QD, ta có thể sử dụng cú pháp trích xuất dữ liệu Phoebus URL ví dụ pbs.BO.LA.NA v.v Các cột dữ liệu của QD sẽ được khai báo ở bảng phía trên. Các cột truy vấn không muốn thể hiện ra giao diện thì set Caption = !.

  1. Các cột dữ liệu cần highlightin đậm có thể được setup bằng cách tick chọn cột HighLight

  2. DrillDown Url : lệnh sẽ được thực hiện khi user doubleclick vào ô dữ liệu thuộc cột đang setup.

Bảng bên dưới liệt kê các nút chức năng của tính năng truy vấn

For-Each Loop


Vòng lặp For Each trong User Query Designer được sử dụng để thực hiện trích xuất dữ liệu từ câu lệnh Phoebus URL cho mỗi phần tử của một bảng dữ liệu lặp (bảng For each).

Sau khi trích xuất dữ liệu xong , toàn bộ dữ liệu sẽ được merge vào 1 bảng kết quả cuối cùng.

User case thực tế:

(ticket 113207) có yêu cầu: Trích xuất các hợp đồng lao động cho từng nhân viên bằng câu lệnh

 pbs.bo.data.ActiveELC?StartDate=[DATE]&EmplCode=[EMPLCODE]&EndDate=T

trong đó các tham số DATE/EMPLCODE được lấy từ 1 bảng quyết định dạng :

EMPLCODE DATE
E001 15/9/2019
E002 20/1/2018

Như vậy cách làm là ta sẽ phải định nghĩa thêm 1 bảng FOR-EACH - chứa tham số để chạy vòng lặp ActiveELC. Trong hình trên thì câu lệnh ActiveELC sẽ được chạy 2 lần - ứng với 2 dòng của bảng For Each.

  1. Lần đầu chạy với tham số EMPLCODE= E001, DATE = 15-09-2019

  2. Lần 2 chạy với tham số EMPLCODE=E002, DATE = 20-1-2018

Sau khi chạy đủ 2 lần kết quả cả 2 lần sẽ được merge vào 1 bảng kết quả cuối cùng cho 2 nhân viên nói trên. Bảng kết quả cuối cùng sẽ có thêm cột IterationNo chứa số thứ tự của dòng for-each tham số

Để sử dụng For-Each Ta sẽ khai báo Phoebus URL ở field For Each URL như sau

image1

Trong đó : - FOR_EACH_URL trả về bảng phải có 2 cột DATE và EMPLCODE, vì 2 tham số này sử dụng ở câu URL Extract Data using URL bên dưới.

- FOR_EACH_URL có thể nhận các tham số người dùng nhập vào hoặc tham số từ Survey.

Nút lệnh và context menu (chuột phải)


Các nút lệnh và menu chuột phải được định nghĩa trong bảng Command bên dưới.

Chạy lệnh cho các dòng đang chọn


Các lệnh của UQD chỉ chạy lệnh cho 1 dòng dữ liệu hiện hành (đang focus).

V 4.7.6.870 cho phép thực hiện lệnh cho nhiều dòng dữ liệu được chọn bởi user.

Khi chạy các lệnh, nếu có tham số $range=Y. Chương trình sẽ hiểu là các dòng được chọn sẽ đưa vào lệnh như tham số dạng bảng. Ta dùng tùy chọn này khi muốn in báo cáo hoặc chạy interface, hoặc generate ra editlist.

Khi không có tham số $range=Y mà user vẫn chọn nhiều dòng trước khi bấm nút lệnh. Chương trình hiểu rằng lệnh cần chạy nhiều lần. Mỗi lần chạy với tham số là 1 dòng được chọn.

Layout


User Query ngầm định được trích xuất và trình bày trên giao diện mobile bằng bảng dữ liệu (data- grid).

Nếu ta định nghĩa layout ở đây, thì mobile app sẽ sử dụng ListView để trình bày.

Thường nội dung layout sẽ được thiết kế trong VS và copy sang tính năng này.

20493c2d-3765-4ce3-bab2-771a3071fab3.pbs_bo_inquiry_uqd_md

 <?xml version="1.0" encoding="UTF-8"?>
<ViewCell xmlns="http://xamarin.com/schemas/2014/forms" 
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml">
  <ViewCell.View>
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="150" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="*" />
                <RowDefinition Height="*" />
            </Grid.RowDefinitions>

            <Label FontSize="Small" Grid.Row="0" Grid.Column="0" Text="{Binding Converter={StaticResource DataRow},ConverterParameter=EMPL_CODE}" />
            <Label FontSize="Small" Grid.Row="0" Grid.Column="1" Text="{Binding Converter={StaticResource DataRow},ConverterParameter=FIRST_NAME}" />
            <Label FontSize="Small" Grid.Row="1" Grid.Column="0" Text="{Binding Converter={StaticResource DataRow},ConverterParameter=GENDER}" />
            <Label FontSize="Small" Grid.Row="1" Grid.Column="1" Text="{Binding Converter={StaticResource DataRow},ConverterParameter=LAST_NAME}" />
            
        </Grid>      
  </ViewCell.View>
</ViewCell>

Chú ý quan trọng khi thiết kế layout cho user defined query: Nội dung query là data table tùy biến, do đó ta phải dùng cú pháp binding dành cho datatable. Xem thêm Binding converter : DataRow

   Text="{Binding Converter={StaticResource DataRow},ConverterParameter=FieldName}"

Có layout - dữ liệu được trình bày bằng SfListView:

daf677a1-c11d-4fbb-843d-d7114bfe1f25.pbs_bo_inquiry_uqd_md

Không định nghĩa layout, chương trình dùng datagrid:

348f282b-f08f-475e-85b1-4190b85e85f1.pbs_bo_inquiry_uqd_md

Sử dụng user query


Sử dụng truy vấn bằng cách gọi :

 pbs.BO.Inquiry.UQD?Code=HELDJRNAL&$action=Run

image2

Xem thêm



Updated on : 2023-01-04 20:08:04. by : . at X1-EXTREME.

Topic : User Query Definition. pbs.bo.inquiry.uqd