Home > Design application > Form trong một ứng dụng domino (tiếp)!

Form trong một ứng dụng domino (tiếp)!

Trong bài viết trước mình đã giới thiệu với các bạn về một thành phần rất quan trọng trong một ứng dụng Lotus Notes/Domino đó là Form. Bài này mình sẽ nói kỹ hơn về các thành phần (Control) quan trọng hay được sử dụng trên form.

  1. Button (Hotspot button): khác với các button html bình thường (<button, <input type=’Button’), hotspot button cho phép bạn giao tiếp với server. để tạo một hotspot button, bạn vào menu: create -> hotspot ->button.

    Info tab

    Sau khi bạn create một button, designer sẽ mở thuộc tính của button, bạn đặt label cho button. Khi bạn phát triển một ứng dụng domino chạy trên nền web thì các thuộc tính khác bạn sẽ đặt lại trong tab “<HTML>” ở cuối cùng, tab “Paragraph hide when”cho phép bạn ẩn hiện button trong một điều kiện nào đó.

    Paragraph hide when tab

    HTML tab

    Bạn có thể chỉ định viết code Hotspot button trên Client hoặc trên Web. Tùy thuộc vào ngôn ngữ bạn viết cho button mà phần Object sẽ hiển thị thêm các event (OnClick, OnDblClick….), và bạn không thể viết cho 2 môi trường cùng với 1 button. Điều này theo mình thấy là khá dỡ, ví dụ: bạn có nút xóa văn bản, trước khi bạn xóa bạn cần hiển thị một dialog xác nhận với người dùng xem có chắc chắn muốn xóa văn bản không, sau đó mới chạy đoạn code xóa văn bản (Formula hoặc gọi Agent), thì với 1 button bạn không làm được điều này. Và thường thì để viết code chạy trên browser bạn sẽ chọn là code javascript, còn chạy trên Client bạn sẽ chọn là Formula hoặc Simple action, LotusScript chỉ chạy được trên môi trường LotusNotes.

    Thuộc tính khác

  2. Field: ngoài chức năng làm nhiệm vụ hiển thị thông tin ra, field nó còn xác định kiểu dữ liệu được lưu trữ trong document khi bạn save form chứa field đó. vì thế, field có nhiều kiểu và kiểu của field xác định kiểu dữ liệu được lưu.

    Field Type

    Một số kiểu dữ liệu cần lưu ý:

        Authors: Dữ liệu lưu trong một trường authors là tên của người dùng/nhóm xác định người dùng/nhóm này được phép hiệu chỉnh document.
        Readers:Dữ liệu lưu trong một trường readers là tên của người dùng/nhóm xác định người dùng/nhóm này được phép đọc document.
        Rich Text: Ngoài text ra, bạn có thể lưu cả một file attachment vào trường này, bạn cũng có thể lưu một document kế thừa vào trường richtext, bạn có thể chỉ định content-type cho một trường rich text được. số lương ký tự trong một trường text binh thường khoảng gần 20.000 ký tự, còn trường richtext thì không có giới hạn.

    Trường authors, readers, names các bạn nên tick chọn “allow multiple values” để có thể lưu được nhiều giá trị, và tab thứ 3 (Advances) cho phép bạn chọn ký tự ngăn cách giứa các giá trị khi hiển thị trên browser. Ở cạnh phần Type có một ô combobox cho phép bạn chọn loại field (Editable, Computed, Computed for display và computed when compose). Nếu kiểu của trường không phải là edittable thì giá trị của trường sẽ được xác định bởi 1 hàm formula, hàm này sẽ được thực hiện khi: đối với trường computed, khi document được tạo và khi được lưu; đối với trường kiểu Computed for display, hàm được thực hiện khi document được mở; đối với trường kiểu Computed when when composed, chỉ khi document được tạo, và giá trị này không thể thay đổi. còn lại các thuộc tính khác tương  tự như button.
    @chat: trong thực tế các hàm tính toán, hay các giá trị thường xuyên sử dụng trong một form, và được dùng đi dùng lại như tính toán DBPath mình hay lưu vào một trường computed for display dể hiển thị, và dùng lai, tránh viêc tính toán cho một giá trị nhiều lần, và trong 4 kiểu trường thì kiểu computed for display giá trị sẽ không lưu lại vào DB

  3. Computed value: rất đơn giản, đây là một control hiển thị 1 giá trị được tính toán bởi 1 hàm formula, nếu đặt tên trường trong đó, tất nhiên nó sẽ hiển thị giá trị của trường đó.
  4. Embedded Elements (View): bạn có thể nhúng 1 view vào 1 form
  5. Embedded Elements (File upload control): Upload control
  6. Resources: các tài nguyên dùng chung như: CSS, javascript, images….
  7. Subform: là một control có thể nhúng vào trong form. 1 subform cho phép bạn chia nhỏ form ra để dễ quản lý. Tuy nhiên, mình có đọc một tài liệu khuyến cáo rằng không nên dùng quá nhiều subform, và khi dùng subform các bạn nên cẩn thận khả năng bị trùng (tên) các  control cùng loại.
  8. Các thành phần khác như link, images, table, ….. bạn có thể sử dụng thẻ chuản của HTML
  9. Cascading Style Sheets (CSS): bạn có thể viết trong phần Resource -> Style Sheets, hoặc upload file css lên trên Resource -> Files, hoặc viết vào trong page.
  10. Javascript: bạn có thể viết trong phần Code -> Script library, hoặc upload file js lên trên Resource -> Files, hoặc viết vào trong page.

Trên đây là các thành phần hay dùng nhất để bạn tạo một form của ứng dụng Lotus Notes/Domino.

Ví dụ của bài viết: http://www.mediafire.com/file/ro30ruo7ro49r9a/qlnhansu.rar

Video:

  1. VanMinh
    21/09/2011 at 15:00

    Như vậy là nếu ứng dụng viết bằng ngôn ngữ LotusScript thì chỉ chạy được trên môi trường LotusNotes, khi sử dụng nhập liệu… phải cài notus clinent. Vậy nguời xem thì vẫn duyệt đc trên web browser nhỉ ???.

    @hainam, bạn còn cái tool convert dữ liệu của cái 112 không nhỉ. ko biết bỏ đâu mất kiếm mãi không ra ?

  2. 21/09/2011 at 16:05

    Trong một số chỗ hay một số câu lệnh LotusScript hay formula không chạy được trên web. Một ứng dụng Domino bạn có thể viết bằng các ngôn ngữ mà Domino hỗ trợ, tuy nhiên, tùy từng chỗ, hay tùy từng điều kiện bạn nên sử dụng ngôn ngữ nào là thích hợp… ở trên ý của mình là LotusScript không viết thẳng vào trong 1 action của button để chạy trên web được, còn bạn có thể vẫn viết vào một agent rồi gọi agent từ button đó. một ứng dụng domino có thể được viết để chạy tốt trên cả 3 môi trường: Lotus Notes client, Web, Mobile :D.

    • VanMinh
      22/09/2011 at 15:10

      Mình cũng nghiên cứu và biết chút ít LotusScript. h tính nghiên cứu thêm về java. Bạn là người có kinh nghiệm trong việc design và coding trong moi trường notes, vậy để tiếp cận với java of notes đơn giản và dễ hiểu nhất ?.

  3. 22/09/2011 at 23:01

    LotusScript và java trong phát triển ứng dụng Domino là tương đương nhau. Java có lợi thế hơn do nó có nhiều thư viện được phát triển sẵn và bạn có thể đưa vào dùng. nếu bạn muốn sử dung java trong phát triển ứng dụng Domino thì bạn chỉ việc học java core :D. Chú ý là nếu viết trình trên XPages thì ngôn ngữ bạn dùng sẽ là javascript. Giao diện các lớp khi sử dụng giống như khi bạn viết bằng code Java

  4. VanMinh
    28/09/2011 at 08:41

    Tiếp đi bạn VD dụ như cấu hình domino cho nhóm khách truy cập ứng dụng dạng browser, sử dụng embedded… khi thiết kế; view; form; page khi muốn thể hiện ra ngoài browser … hiiii mới nghiên cứu 8. mà hỏi hơi nhìu. Thông cảm nhe !.

  5. 28/09/2011 at 23:42

    Mình cũng đang định viết bài tiếp theo về quản lý tái nguyên (quyền truy cập, anonymous access chỉ là trường hợp mà thôi), cái này mình thấy nhiều người bị sai lắm, ngay cả những người đã từng làm 4-5 năm vẫn chưa hiểu rõ nó ==!, mấy hôm nay mình đang bận dự án nên chưa có thời gian viết. hẹn bạn cuối tuần nhé.

  6. VanMinh
    29/09/2011 at 16:57

    Cám ơn bạn đã nhiệt tình !, chờ. Nếu đc trong cái ứng dụng về qlnhansu.nsf bạn phát triển thêm bộ tìm kiếm chạy bằng agent bằng 2 ngôn ngữ lotus script và java mà chạy được trên browser nhé. Học mò khổ thế đấy 😀

  7. 30/09/2011 at 00:53

    OK

  8. 24/04/2012 at 12:16

    Dear ah Đặng Hải Nam và các bạn. Em vừa bắt đầu học Lotus Note. Em có một vấn đề chưa giải quyết được. Mọi người giúp em với nhé.
    + Khái quát
    – Chương trình em viết trên Lotus Note và chạy trên Note Client
    – Sử dụng cho việc xác nhận “Phiếu yêu cầu” (ban đầu là sử dụng giấy), bây giờ triển khai dùng mail note
     Nếu muốn mua hàng trị giá trên 10 triệu thì phải viết phiếu yêu cầu, rồi đi xin chữ ký của trưởng phòng, kế toán, giám đốc.
     Khi chuyển sang dùng Mail Note thì : Người yêu cầu sẽ tạo 1 mail (document) sau đó mail tự động gửi 1 link đến từng người xác nhận. Mọi người xác nhận sẽ tích vào link đó và mở document của Người yêu cầu để xem và xác nhận

    Vấn đề em mắc phải ở đây là phân quyền cho các field
    – Nếu là Người yêu cầu thì chỉ được chỉnh sửa các field của Người yêu cầu (các field của Người khác thì Người yêu cầu chỉ được xem, không được chỉnh sửa)
    – Nếu là Trưởng phòng thì chỉ được chỉnh sửa các field của Trưởng phòng (các field của Người khác thì Trưởng Phòng chỉ được xem, không được chỉnh sửa)
    – Đối với kế toán và giám đốc cũng vậy

     Mong muốn:
    – Mọi người giúp em viết 1 ví dụ, hoặc hướng dẫn em các bước làm:
    – Tạo 3 field : Nguoi yeu cau (Requester), Trưởng Phòng (Manager), Kế toán (Accounting) và sẽ có 3 địa chỉ mail cho 3 người này
     Khi người nào vào xem thì chỉ được chỉnh sửa field của mình (editable), còn field của người khác thì chỉ được phép xem (read only)
    Em đang cần gấp, mọi người giúp em với nhé. Em cám ơn mọi người rất nhiều.

    • 24/04/2012 at 14:53

      Chào bạn. trong trường hợp phân quyền cho các “vùng hiển thị dữ liệu” trên form bạn nên dùng subform. sau đó sử dụng computed subform để load form phù hợp với roles của người dùng đó khi mở form. như vậy trên subform, khi bạn hiện giá trị của trường là “chỉ đọc” thì bạn sử dụng computed for display field và điền tên trường muốn hiển thị vào phần giá trị của field để hiển thị.
      Hiện tại mình đang bận nên không giúp bạn viết ví dụ được.
      Chúc bạn thành công!

    • trantiep
      02/05/2012 at 10:47

      Chào bạn. trường hợp này mình nghĩ bạn có thể dùng Section Controlled Access (Create -> Section -> Controlled Access )

  9. trantiep
    02/05/2012 at 11:15

    Dear anh Hải Nam,
    Em có 1 vấn đề về trên lotus notes nhờ anh giúp đỡ. Em đang cần get thời gian hiện tại của server chứa notes database từ máy client. Em đã sử dụng nhiều cách mà không thành công, ví dụ:
    @Now([ServerTime]),
    @Now([ServerTime];@Name([Abbreviate]; @Subset(@DbName; 1))),
    @Now([NoCache]:[ServerTime];@Name([Abbreviate]; @Subset(@DbName; 1)))

    hay là dùng @Created, Nhưng tất cả đều không được. Nó cứ trả về thời gian hiện tại theo cái Time zone của máy client. Em đang rất cần giải quyết vấn đề này. Rất mong anh có thể giúp đỡ. Cảm ơn anh nhiều.
    P/S: Em đang dùng lotus notes 7.0.3

    • 02/05/2012 at 12:48

      Mình thấy @Now trả lại đúng thời gian của server mà (chạy trên web nhé, mình ko quen làm notes).

  10. 05/05/2012 at 09:32

    Thanks anh Đặng Hải Nam và trantiep. Bài toán của em có lẽ dùng Access control list và roles
    – Em đang đọc lại Note help để nắm và hiểu được chức năng, công dụng, cách sử dụng của các thành phần trong Note: Frame, page, form, view, field ….
    – Em xây dựng ứng dụng này chạy trên Note client
    – Khi học và làm về Note em cần có:
    + Tài liệu (em hay đọc Note help). Tìm trên mạng thì rất hiếm (thấy mỗi anh Đặng Hải Nam là viết về Note)
    + Phần mềm để lập trình (Domino Designer)
    + Mô hình để chạy thử ứng dụng (server, client )

    Em cài đặt Server Note trên máy ảo, phần mềm (VMware Server Console), xong rồi cài client trên một máy ảo khác, nhưng khi ping 2 máy thì không thông nhau (em đang gặp rắc rối ở đây – ai biết cài đặt hệ thống Note (Server, client) trên máy ảo thì giúp em với)

    Hình như em đọc bài về cài đặt hệ thống Note trên blog này của anh ĐHN rồi thì phải, nhưng anh chưa viết xong.

    • 05/05/2012 at 09:53

      @vangphanvan: Bạn xem thử xem các máy ảo đã cùng 1 network connection chưa. Nếu để cùng 1 connection rồi mà vẫn ko được thì bạn chuyển hết về dạng NAT rồi đặt ip tĩnh cho các máy ảo xem.

  11. Đỗ Hải Đăng
    08/04/2013 at 16:54

    Chào anh Nam, em là Đăng đang công tác ở Văn phòng UBND tỉnh Quảng Ninh. Hiện tại em đang tìm hiểu về code căn bản của hệ thống phần mềm Quản lý văn bản của công ty Tân Dân. Em thấy anh làm video hướng dẫn code rất dễ hiểu, anh có thể giúp em code demo 1 đoạn chương trình quản lý văn bản đến(gửi 1 văn bản từ user văn thư tới user chuyên viên) hay 1 đoạn chương trình tương tự thực hiện chức năng gửi 1 Document từ 1 user đến 1 user được ko anh? Cảm ơn anh!

    • 08/04/2013 at 17:22

      Chào bạn Đăng.
      Trong chương trình quản lý văn bản thì văn bản là 1 document duy nhất. đầu tiên chỉ có nhón văn thư được gán quyền quản lý văn bản này. khi văn thư chuyển cho 1 user trong hệ thống thì thặt ra là cấp quyền đọc/sửa cho user này. ngoài ra nếu như hệ thống không phân quyền đọc/ghi (tức là document đó mọi user thì đều có quyền đọc/sửa) thì việc chuyển văn bản chỉ là đưa thêm tên user vào trong 1 trường nào đó, sau đó họ dùng các điều kiện để filter văn bản như văn bản chờ xử lý, v.v.v…..
      Hiện bên bạn đang sử dụng chương trình QLVB của Tân Dân thì bạn nên gọi cho bên Tân Dân để họ hỗ trợ việc sửa đổi vì việc chuyển văn bản trên chương trình thực hiện nhiều thao tác thay đổi dữ liệu, thêm các bản ghi phụ (như là lưu log chuyển văn bản).
      Thân.

  12. Thanh Thảo
    28/04/2016 at 09:42

    Chào anh Hải Nam.
    Em mới nhận công việc quản lý văn bản cơ quan nhập vào ứng dụng ql văn bản của Lotus notes, trong quá trình nhập văn bản em hay đánh trùng số đăng ký. A có thể giúp em cách sửa trong designer để ô nhập mã đăng ký văn bản tự động cộng thêm một số khi mình thêm mới 01 văn bản (vd như tổng số vb em đã nhập là 19 thì khi thêm mới vb, ô mã đăng ký sẽ tự hiện lên là số 20).
    Cám ơn và mong nhận được sự hỗ trợ của anh

  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: