Translate

Tuesday, August 18, 2015

Truy xuất dữ liệu trong ứng dụng Domino!


Trong các bài viết trước mình đã giới thiệu về các thành phần (component) cơ bản và thường xuyên để tạo ra một ứng dụng domino. Bài này mình sẽ đưa ra các phương pháp để truy xuất dữ liệu trong một ứng dụng Domino.
Như các bạn đã biết, Một ứng dụng domino khi được tạo ra thì cả phần design và database được lưu trong cùng 1 file .nsf. Các đơn vị dữ liệu được lưu ở đây là các document, nó tương ứng với các record trong MS SQL. Ứng dụng Domino quản lý tài nguyên của nó thông qua các ID. với 1 document sẽ có tương ứng 2 loại ID là Notes ID và Universal ID (UNID).

  1. Truy xuất Document
    • Thông qua URL: bạn có thể sử dụng URL command để truy xuất và một document, cấu trúc của URL Command là
      Mở document: http(s)://host:port/[folder…]/[database.nsf]/[view]/[UNID]?OpenDocument
      Hiệu chỉnh: http(s)://host:port/[folder…]/[database.nsf]/[view]/[UNID]?EditDocument
      Xóa: http(s)://host:port/[folder…]/[database.nsf]/[view]/[UNID]?DeleteDocument
      @chat: Delete document thông qua 1 url, nếu vậy bạn ở 1 document ra, chỉ cần thay command opendocument bằng command deletedocument là xóa được rồi, thật là nguy hiểm. Cài này trong thực tế là mình đã gặp, nhiều người làm nhiều rồi, làn ứng dụng lớn rồi vẫn bị, cho người khác truy cập vào document, người ta thay command trên URL nó xóa béng mất :D. thực ra Domino quản lý tài nguyên rất chặt chẽ thông qua quyền truy cập và tài nguyên của người dùng, bạn chỉ được xóa document khi bạn được cấp quyền xóa trong Access Control List (ACL), và bạn có quyền hiệu chỉnh document. bạn chỉ được đọc , hiệu chỉnh các document khi bạn được cấp quyền truy cập. Cấp độ (Access level của bạn đến đâu, là author, là reader, là designer hay chỉ là depositor, bạn là người dùng trong ACL hay chỉ là default user v.v….). Khi đã bắt tay và viết 1 ứng dụng thương mại thật sự trên nền Domino, hãy chắc rằng bạn biết phải phân phát tài nguyên cho người dùng thế nào.????
    • Thông qua database: Từ database hiện tại, bạn có thể truy xuất Document khi có UNID hoặc Notes ID của document
      Ví dụ: Bạn có document có UNID là 858859600f579bd2472579140065033dSession session = getSession();
      AgentContext agentContext = session.getAgentContext();
      Database db = agentContext.getCurrentDatabase();
      Document doc = db.getDocumentByUNID(“858859600f579bd2472579140065033d”);
    • Thông qua view: Bạn có thể sử dụng cột đầu tiên của 1 view (cột này được sắp xếp) như 1 tập các key, sau đó truy xuất document thông qua các key này. ví dụ, mình có 1 view chứa danh sách người dùng tên là “dsnguoidung” và cột dầu tiên là tên đầy đủ (được sắp xếp tăng dần). mình muốn lấy tập các document những người có tên đây đủ là “Nguyễn Văn A”.Session session = getSession();
      AgentContext agentContext = session.getAgentContext();
      Database db = agentContext.getCurrentDatabase();
      View nguoiDung = db.getView(“dsnguoidung”);
      DocumentCollection dc = nguoiDung.getAllDocumentsByKey(“Nguyễn Văn A”);Và từ DocumentCollection này, ban có thể truy xuất và các document của người dùng có tên là “Nguyễn Văn A”, Nếu bạn chắc chắn rằng giá trị Nguyễn Văn A là duy nhất bạn có thể truy xuất và thẳng document đầu tiên đó bằng hàm Document ns = nguoiDung.getDocumentByKey(“Nguyễn Văn A”);. Mình có xem qua các tài liệu tối ưu thì thấy rằng đây là cách tốt để tìm kiếm document (tốt hơn nữa là sử dụng UNID hoặc Notes ID)
    • Thông qua hàm formula: Formula cung cấp một số hàm để lấy truy xuất vào Document, thương dùng nhất là DBColumn, hàm này sẽ lấy giá trị một cột của 1 view.
  2. Tìm kiếm dữ liệu:
    • Thông qua view: như trên
    • FTSearch command từ view: cấu trúc http(s)://host:port/[folder…]/[database.nsf]/[view]?SearchView&query=[giatri]. cấu trúc này sẽ tìm kiếm full-text một giá trị có trong view hiện tại. các bạn đọc kỹ hơn trong tài liệu help của Domino Designer nhé (Lotus Domino Designer Basic User Guide and Reference > Application Design > URL commands for Web applications)
    • FTSearch từ database/view/DocumentCollection trong code: Trong code bạn có thể Full-Text search từ một collection các document thông qua câu query (gần như SQL)- [Database/View/DocumentCollection].FTSearch(String query, int max, int sortopt, int otheropt). Bạn tham khảo thêm trong tài liệu Help của Domino Designer (Lotus Domino Designer Basic User Guide and Reference > Java/CORBA Classes > Java Classes A-Z > Database classLotus Notes > Search > Doing searches). Ở đây các bạn có thể thấy rằng FTSearch từ view thông qua URL command chỉ có thể search 1 giá trị, còn FTSearch từ 1 collection document có thể mở rộng ra tìm ở trường nào, kiểu dữ liệu là gì v.v…
    • Simple search: Cách search này chỉ áp dụng được với database. cầu query giống câu query được sử dụng khi bạn tạo view, query của nó là giá trị của một hàm formula, ví dụ:String query = “Select Form = \”NhanSu\” & Name=\”Dung\” & QueQuan=\”HaNoi\””;
      DocumentCollection dc = db.search(query);
      Chú ý: khi tìm kiếm dữ liệu trong ứng dụng Domino thì ta không thể sặp xếp theo một trường nào đó, hay group dữ liệu theo một trường nào đó như trong các DBMS như MS SQL được, tìm kiếm của Domino chỉ đưa ra được 1 tập các document, có thể được sắp xếp theo 1 điều kiện có trước nào đó là theo thời gian tạo, hoặc theo “điểm số truy cập” mà thôi. để sắp sếp lại dữ liệu ta phải viết các hàm sắp sếp, hoặc một cách đơn giản hơn là tạo 1 view, có các trường được sắp xếp, sau đó lấy dữ liệu theo từng entry của view.
    Trên đây là các cách thường dùng để truy xuất 1 hoặc 1 collection các document trong 1 ứng dụng domino. Các bạn nên đọc kỹ các bài viết trong help của Domino Designer mình đã đưa ra ở trên để biết chi tiết hơn.
Ví dụ cho bài viết: http://1drv.ms/1NBVZZK
Hoặc Ví dụ cho bài viết 2 : http://www.mediafire.com/file/d86oau3mcg13gkm/CollectDocument.rar
Video:

0 nhận xét:

Post a Comment

 
Design by IT Manager | Bloggerized by Themes For IT Managers | MIS-DUONG