Mẹo triển khai

Phần này trình bày một số mẹo sẽ giúp bạn viết các phương thức triển khai phức tạp hơn của thư viện:

Sử dụng trình tự dịch vụ của riêng bạn

Cách triển khai nguồn dữ liệu đơn giản nhất kế thừa từ lớp DataSourceServlet của thư viện. Để kế thừa từ một lớp không phải DataSourceServlet, hãy triển khai một nguồn dữ liệu như sau:

  1. Triển khai giao diện DataTableGenerator và ghi đè getCapabilities() cũng như generateDataTable().
  2. Hãy gọi DataSourceHelper.executeDataSourceServletFlow() từ bên trong mã của Ứng dụng của rất nhiều người để chạy luồng nguồn dữ liệu.Phương thức này lấy các thông số sau:
    • Đối tượng HttpServletRequest.
    • Đối tượng HttpServletResponse.
    • Cách triển khai giao diện DataTableGenerator từ bước 1 ở trên.
    • Boolean để chỉ định chế độ truy cập bị hạn chế hoặc không bị hạn chế.

Ví dụ: nếu muốn kế thừa SFDC từ một lớp ứng dụng khác có tên là AuthServlet, cung cấp tính năng xác thực tích hợp, bạn có thể viết lại SimpleServletExample để kế thừa AuthServlet thay vì DataSourceServlet như sau:

  1. Triển khai giao diện DataTableGenerator.
  2. Di chuyển generateDataTable() từ quá trình triển khai DataSourceServlet sang triển khai DataTableGenerator.
  3. Ghi đè getCapabilities() trong quá trình triển khai DataTableGenerator để trả về Capabilities.None.
  4. Hãy gọi DataSourceHelper.executeDataSourceServletFlow() từ trong mã đào tạo của bạn (doGet() hoặc doPost()) và chuyển phương thức triển khai DataTableGenerator của bạn. Phương thức này chạy toàn bộ luồng của nguồn dữ liệu, bao gồm cả việc hiển thị kết quả nguồn dữ liệu vào phản hồi GVP.

Bạn có thể sử dụng cùng một kỹ thuật này nếu đang sử dụng khung GVP, trong đó bạn thường kế thừa một lớp trừu tượng do khung đó cung cấp. Ví dụ: nếu đang sử dụng ưa chuộng, bạn có thể muốn kế thừa lớp ActionSupport.

Xác định chức năng

Nếu kho dữ liệu của bạn chứa một lượng lớn dữ liệu và bạn muốn tăng hiệu quả của nguồn dữ liệu, bạn có thể sử dụng các tính năng truy vấn của kho dữ liệu. Ví dụ: giả sử kho lưu trữ dữ liệu của bạn là cơ sở dữ liệu và cơ sở dữ liệu này có nhiều cột. Nếu một hình ảnh chỉ yêu cầu một vài cột trong số đó, thì việc chạy một thao tác SELECT trong cơ sở dữ liệu sẽ hiệu quả hơn việc truy xuất tất cả các cột và sử dụng khả năng truy vấn của thư viện để thực hiện SELECT. Để triển khai các tính năng của SELECT, bạn hãy viết mã để chạy một thao tác SELECT trong cơ sở dữ liệu và trả về bảng dữ liệu.

Sử dụng enum Capabilities để xác định các khả năng truy vấn mà mã của bạn cung cấp. Hiện có các tuỳ chọn sau:

  • NONE: mặc định, mã của bạn không cung cấp các thao tác truy vấn.
  • SQL: mã của bạn cung cấp các thao tác truy vấn SQL.
  • SORT_AND_PAGINATION: mã của bạn cung cấp cả thao tác sắp xếp và truy vấn phân trang.
  • SELECT: mã của bạn cung cấp một thao tác chọn lọc.
  • ALL: mã của bạn cung cấp các thao tác SQL, SORT_AND_PAGINATIONSELECT.

Lưu ý: Trong mọi trường hợp, thư viện xử lý mọi thao tác truy vấn không được mã của bạn cung cấp.

Để triển khai khả năng không phải là NONE, hãy ghi đè Capabilities.getCapabilities() và triển khai DataTable.generateDataTable() để truy vấn kho dữ liệu và trả về một bảng dữ liệu.

Ba ví dụ minh hoạ cách triển khai các tính năng: AdvancedExampleServlet, AdvancedExampleServlet2SqlDataSourceServlet. Tất cả đều nằm trong gói example. AdvancedExampleServlet2 được thảo luận trong bài viết Xác định chức năng và Luồng sự kiện.

Tuỳ chỉnh luồng sự kiện

Luồng sự kiện mặc định được xác định trong DataSourceHelper.executeDataSourceServletFlow. Quy trình mặc định như sau:

  1. Trích xuất và phân tích cú pháp các tham số truy vấn.
  2. Đối với chế độ truy cập bị hạn chế, hãy xác minh rằng yêu cầu đến từ cùng một miền với SFDC.
  3. Phân tích cú pháp yêu cầu để tạo hai đối tượng truy vấn: truy vấn nguồn dữ liệu và truy vấn hoàn thành. Truyền truy vấn nguồn dữ liệu tới quá trình triển khai generateDataTable().
  4. Việc triển khai generateDataTable() sẽ tạo ra một bảng dữ liệu.
  5. Chạy truy vấn hoàn thành trên bảng dữ liệu được tạo ở bước 5.
  6. Hiển thị bảng dữ liệu ở định dạng được chỉ định bởi hình ảnh trực quan và đặt phản hồi GVP.

Để chỉ định luồng sự kiện của riêng bạn, hãy gọi các hàm trợ giúp trong datasource.DataSourceHelper. Xem nội dung Xác định tính năng và luồng sự kiện để biết ví dụ về cách triển khai.

Chuyển thông số đến DataTableGenerator.generateDataTable

Bạn có thể sử dụng HttpServletRequest.setAttribute để truyền dữ liệu không thuộc truy vấn hoặc đối tượng HttpServletRequest đến DataTableGenerator.generateDataTable. Mã ví dụ được cung cấp bên dưới.

Trong mã Ứng dụng của bạn, hãy đặt đối tượng bạn muốn chuyển vào HttpServletRequest như sau:

request.setAttribute("my_object_name", myObject);
DataSourceHelper.executeDataSourceServletFlow(request, response, dataTableGenerator);

Trong quá trình triển khai giao diện dataTableGenerator, hãy lấy đối tượng từ HttpServletRequest như sau:

public DataTable generateDataTable(Query query, HttpServletRequest request){
  Object myObject = request.getAttribute("my_object_name"); 
  // Add your code to manipulate myObject here 
} 

Triển khai nguồn dữ liệu không phải Ứng dụng khác

Nếu triển khai thư viện mà không dùng ứng dụng thực tế, bạn chỉ có thể sử dụng các lớp và chức năng trợ giúp đó mà không yêu cầu môi trường GVP. Các lớp này bao gồm lớp QueryDataTable cùng một số hàm DataSourceHelper, chẳng hạn như parseQuery, applyQuery, validateQuerysplitQuery. Bạn có thể sử dụng các lớp và hàm này để làm những việc sau:

  • Phân tích cú pháp truy vấn hình ảnh hóa.
  • Tách truy vấn thành truy vấn nguồn dữ liệu và truy vấn hoàn thành.
  • Chạy truy vấn hoàn thành để tạo bảng dữ liệu.
  • Trả bảng dữ liệu về hình ảnh trực quan ở định dạng HTML, CSV hoặc JSON.