Cách tạo workflow trong OpenERP

SOWorkflow

Trên đây là một ví dụ chi tiết về một workflow của một hợp đồng mua hàng do người dùng tự định nghĩa. Từ lúc "Tạo mới"  cho đến "Xác nhận", "Tạo hóa đơn Proforma", "Kho hàng", "giao hàng", "thanh toán", "xuất hóa đơn", "Khách hàng trả lại hàng",...

Chúng ta đã biết, bất kỳ một doanh nghiệp nào đều có quy trình nghiệp vụ khác nhau, không doanh nghiệp nào giống doanh nghiệp nao. Vậy vấn đề đặt ra là để các doanh nghiệp có thể tự tùy biến được quy trình nghiệp vụ sao cho phù hợp với doanh nghiệp của mình. Để giải quyết vấn đề này, OpenERP cung cấp một hệ thống workflow rất linh hoạt, cho phép người dùng tự định nghĩa ra các workflow.

Các Định nghĩa trong Workflow

Workflow bao gồm 3 định nghĩa:

 

  • Workflow: Thông tin workflow.
  • Activity: Là các nodes của một workflow.
  • Transision: Quá trình chuyển đổi giữa các nodes (activity)

 

Ví du: 

<record model="workflow" id="wkf_sale">
    <field name="name">sale.order.basic</field>
    <field name="osv">sale.order</field>
    <field name="on_create">True</field>
</record>

Activity

Bao gồm các actions, split_mode, join_mode, kind, signal_send, flow_start, flow_stop

split_mode

Bao bồm các điều kiện chia nhánh

  • XOR: Lấy điều kiện đầu tiên được thỏa mãn.
  • OR: Thỏa mãn một trong các điều kiện.
  • AND: Thỏa mãn tất cả các điều kiện.

join_mode

Bao gồm các điều kiện kết hợp nhánh

  • XOR: Một tiến trình thỏa mãn sẽ chạy đến một notes tiếp theo.
  • AND: Tất cả các tiến trình thỏa mãn mới chạy đến nodes tiếp theo.

Kind

Kiểu của một activity bao gồm:

  • Dummy: không làm gì cả.
  • Function: Thực thi một hàm mà bạn đã chọn sẵn.
  • Sub_flow: Thực hiện một workflow khác, workflow này nếu trả về False thì flow này sẽ biến mất.
  • StopAll: Một workflow sẽ kết thúc khi tất cả các sub-work cùng kết thúc. Nếu một trong các sub_flow đang chạy thì flow này sẽ được đóng băng lại.

Action

Các action sẽ chỉ ra phương thức của một flow được thực thi. Phương thức này phải được định nghĩa ở trong đối tượng mà workflow tham chiếu đến.

flow_start

Một workflow bắt buộc phải có một flow_start. Khi đối tượng mà workflow tham chiếu đến được tạo thì flow này sẽ được khởi động.

flow_stop

Khi flow này kết thúc, toàn bộ workflow sẽ kết thúc

Ví dụ cơ bản của một Activity

<record model="workflow.activity" id="''activity_id''">
      <field name="wkf_id" ref="''workflow_id''"/>
      <field name="name">''activity.name''</field>::
      <field name="split_mode">XOR | OR | AND</field>
      <field name="join_mode">XOR | AND</field>
      <field name="kind">dummy | function | subflow | stopall</field>
      <field name="action">''(...)''</field>
      <field name="signal_send">''(...)''</field>
      <field name="flow_start">True | False</field>
      <field name="flow_stop">True | False</field>
</record>

Transition

Là các điều kiện được thỏa mãn để đi đến một  activity tiếp theo

Ví dụ

<record model="workflow.transition" id="transition_id">
    <field name="act_from" ref="activity_id'_1_'"/>
    <field name="act_to" ref="activity_id'_2_'"/>
    <field name="signal">(...)</field>
    <field name="role_id" ref="role_id'_1_'"/>
    <field name="condition">(...)</field>
    <field name="trigger_model">(...)</field>
    <field name="trigger_expr_id">(...)</field>
</record>