Các kiểu dữ liệu

Một phần của tài liệu Nghiên cứu và thử nghiệm hệ thống workflow (Trang 120)

Các kiểu dữ liệu bao gồm một tập các kiểu chuẩn có thể được sử dụng như là một phần của đặc tả dữ liệu liên quan Workflow, các tham số hình thức, và các tiến trình Workflow. Ta có thể khai báo một kiểu dữ liệu mới trong một TypeDeclaration và sử dụng nó ở bất cứ đâu mà các kiểu dữ liệu chuẩn được sử dụng. Một kiểu dữ liệu có thể được chọn từ một tập hơp các kiểu được chỉ ra ở phía dưới:

<xsd:group name="DataTypes"> <xsd:choice>

<xsd:element ref=“xpdl:DeclaredType"/> <xsd:element ref=“xpdl:SchemaType"/> <xsd:element ref=“xpdl:ExternalReference"/> <xsd:element ref=“xpdl:RecordType"/> <xsd:element ref=“xpdl:UnionType"/> <xsd:element ref=“xpdl:EnumerationType"/> <xsd:element ref=“xpdl:ArrayType"/> <xsd:element ref=“xpdl:ListType"/> </xsd:choice> </xsd:group> Thuộc tính Mô tả

Array Type Một mảng các phần tử có kiểu giống nhau.

Basic Type Có thể là một trong các kiểu: STRING, INTEGER, FLOAT, DATETIME, REFERENCE, BOOLEAN, or PERFORMER. Declared Type Tham chiếu đến một kiểu dữ liệu được khai báo trong một thành

phần TypeDeclaration.

Enumeration Type Một tập hợp các giá trị phù hợp của các biến hoặc các tham số.

ExternalReference Tham chiếu đến một kiểu dữ liệu được định nghĩa ở một tài liệu bên ngoài.

List Type Một danh sách vô hạn các dữ liệu có cùng kiểu giống nhau Record Type Một tập hợp các phần tử có kiểu khác nhau.

SchemaType Một kiểu dữ liệu được định nghĩa bằng cách sử dụng một lược đồ XML.

Union Type Một tập hợp các phần tử trong đó chỉ có một phần tử được sử dụng cho mỗi bản sao của dữ liệu đó

Bảng 3-32 Các kiểu dữ liệu chuẩn

3.1.1.29. Các kiểu dữ liệu cơ bản

<xsd:element name="BasicType"> <xsd:complexType>

<xsd:attribute name="Type" use="required"> <xsd:simpleType> <xsd:restriction base="xsd:NMTOKEN"> <xsd:enumeration value="STRING"/> <xsd:enumeration value="FLOAT"/> <xsd:enumeration value="INTEGER"/> <xsd:enumeration value="REFERENCE"/> <xsd:enumeration value="DATETIME"/> <xsd:enumeration value="BOOLEAN"/> <xsd:enumeration value="PERFORMER"/> </xsd:restriction> </xsd:simpleType> </xsd:attribute> </xsd:complexType> </xsd:element> Thuộc tính Mô tả

Type STRING Kiểu chuỗi

INTEGER Kiểu số nguyên

REFERENCE Tham chiếu tới một kiểu dữ liệu bên ngoài, tuy nhiên bây giờ không sử dụng kiểu này nữa .Thành phần ExternalReference là cách tốt nhất để tham chiếu đến một kiểu dữ liệu bên ngoài.

DATETIME Kiểu thời gian. BOOLEAN Kiểu Boolean.

PERFORMER Là một bản sao dữ liệu của một kiểu người thực hiện có giá trị là một thành phần tham gia Workflow đã được khai báo

Bảng 3-33 Các kiểu dữ liệu – Các thuộc tính

3.1.1.30. Các kiểu dữ liệu phức tạp

XPDL cho phép định nghĩa các kiểu dữ liệu phức tạp như là kiểu mảng, kiểu bản nghi, kiểu hợp, kiểu liệt kê, và kiểu danh sách. Các kiểu dữ liệu được định nghĩa bằng cách sử dụng SchemaType.

Kiểu lược đồ (Schema Type)

SchemaType cho phép định nghĩa một kiểu dữ liệu sử dụng cú pháp của lược đồ XML. Nó cũng có thể được sử dụng để đinh nghĩa một chuỗi XML để thích ứng với lược đồ đó:

<xsd:element name="SchemaType"> <xsd:complexType>

<xsd:sequence>

<xsd:any namespace="##other"

processContents="lax"minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence>

</xsd:complexType> </xsd:element>

Ví dụ dưới đây có thể mô tả môt lớp C++, Java, một cấu trúc C, hoặc một chuỗi XML. <SchemaType> <schema xmlns="http://www.w3.org/2000/10/XMLSchema"> <element name="PO"> <complexType> <sequence> <element name="CustomerName" type="string"/> <element name="Address" type="string"/> <element name="OrderNumber" type="string"/> </sequence> </complexType> </element> </schema> </SchemaType>

Kiểu bản nghi (Record Type)

<xsd:element name="RecordType"> <xsd:complexType> <xsd:sequence> <xsd:element ref=“xpdl:Member" maxOccurs="unbounded"/> </xsd:sequence>

</xsd:complexType> </xsd:element> <xsd:element name="Member"> <xsd:complexType> <xsd:group ref="xpdl:DataTypes"/> </xsd:complexType> </xsd:element> Thuộc tính Mô tả

Member Một trường trong bản nghi. DataTypes Kiểu dữ liệu của một thành phần.

Bảng 3-34 Kiểu bản ghi – Các thuộc tính

Kiểu hợp (Union Type)

<xsd:element name="UnionType"> <xsd:complexType> <xsd:sequence> <xsd:element ref=“xpdl:Member" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="Member"> <xsd:complexType> <xsd:group ref="xpdl:DataTypes"/>

</xsd:complexType> </xsd:element>

Thuộc tính Mô tả

Member Một thành phần trong kiểu hợp. DataTypes Kiểu dữ liệu của một thành phần.

Bảng 3-35 Kiểu hợp- thuộc tính

Kiểu liệt kê (Enumeration Type)

<xsd:element name="EnumerationType"> <xsd:complexType> <xsd:sequence> <xsd:element ref=“xpdl:EnumerationValue" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="EnumerationValue"> <xsd:complexType>

<xsd:attribute name="Name" type="xsd:NMTOKEN" use="required"/>

</xsd:complexType> </xsd:element>

Thuộc tính Mô tả

Value

Bảng 3-36 Kiểu liệt kê – Các thuộc tính

Kiểu mảng (Array Type)

<xsd:element name="ArrayType"> <xsd:complexType>

<xsd:group ref=”xpdl:DataTypes”> </xsd:group>

<xsd:attribute name="LowerIndex" type="xsd:NMTOKEN" use="required"/>

<xsd:attribute name="UpperIndex" type="xsd:NMTOKEN" use="required"/>

</xsd:complexType> </xsd:element>

Thuộc tính Mô tả

DataTypes Kiểu dữ liệu của các khoản mục Lower Index Phạm vi dưới của kiểu mảng Upper Index Phạm vi trên của kiểu mảng

Bảng 3-37 Kiểu mảng – Các thuộc tính

Kiểu danh sách (List Type)

<xsd:element name="ListType"> <xsd:complexType>

<xsd:group ref=”xpdl:DataTypes”> </xsd:group>

</xsd:complexType> </xsd:element>

Thuộc tính Mô tả

DataTypes Dữ liệu của danh sách các thực thể. Bảng 3-38 Kiểu mảng – Các thuộc tính

3.1.1.31. Các kiểu dữ liệu được khai báo

Là những kiểu có khả năng sử dụng lại một định nghĩa dữ liệu phúc tạp tại bất cứ đâu mà ta có thể sử dụng một kiểu xpdl chuẩn. Định nghĩa kiểu dữ liệu dưới một thành phần TypeDeclaration và sau đó tham chiếu tới nó bằng cách sử dụng kiểu dữ liệu DeclaredType

Khai báo kiểu (Type Declaration)

<xsd:element name="TypeDeclaration"> <xsd:complexType> <xsd:sequence> <xsd:group ref=”xpdl:DataTypes”> <xsd:element ref=“xpdl:Description" minOccurs="0"/> <xsd:element ref=“xpdl:ExtendedAttributes" minOccurs="0"/> </xsd:sequence>

<xsd:attribute name="Id" type="xsd:ID" use="required"/>

<xsd:attribute name="Name" type="xsd:string"/> </xsd:complexType>

</xsd:element>

Thuộc tính Mô tả

DataTypes Kiểu dữ liệu.

Description Mô tả cho kiểu dữ liệu khai báo.

ExtendedAttributes Thuộc tính mở rộng do nhà cung cấp thêm vào.

Id Định danh cho TypeDeclaration.

Name Tên của TypeDeclaration.

Bảng 3-39 Khai báo kiểu – Các thuộc tính

Kiểu được khai báo (Declared Type)

<xsd:element name="DeclaredType"> <xsd:complexType>

<xsd:attribute name="Id" type="xsd:IDREF" use="required"/>

</xsd:complexType> </xsd:element>

Thuộc tính Mô tả

Id Tham chiếu tới kiểu dữ liệu được khai báo trong TypeDeclaration.

CHƯƠNG 4. Giao diện lập trình ứng dụng Workflow - WAPI

WAPI có thể được xem như một tập hợp các lời gọi API và các chức năng trao đổi được hỗ trợ bởi dịch vụ Workflow enactment ở ranh giới để tương tác với các nguồn tài nguyên hay ứng dụng khác. Mặc dù kiến trúc này tham chiếu đến 5 giao diện bên trong WAPI nhưng một số các chức năng bên trong mỗi giao diện này là chung (ví dụ lời gọi trạng thái tiến trình có thể xuất phát từ giao diện ứng dụng khách hoặc từ giao diện quản trị). Vì vậy WAPI thực sự được xem như phần cốt lõi chung của các định dạng trao đổi hoặc của các lời gọi API với những mở rộng xác định khi cần thiết bảo đảm tính riêng biệt cho từng miền chức năng trong năm miền kể trên.

Hầu hết các chức năng của WAPI bao gồm các lời gọi API với một tập tham số được xác định trước hoặc các mã kết quả.

Như đã giới thiệu, một hệ thống quản trị Workflow luôn giả sử rằng tối thiểu có một môi trường IT được tích hợp vào hệ thống, hay đúng hơn là một môi trường cho phép Workflow hoạt động, đó là giao diện ứng dụng khách Workflow. Ngoài ý nghĩa đó, giao diện này còn cung cấp một số cấp độ bảo vệ cho các hệ thống phần mềm đã thực sự cài đặt, bởi nó cho phép sự phân cách giữa hệ thống engine và các ứng dụng phía khách.

Ngày nay, có rất nhiều các công cụ quản trị Workflow hỗ trợ cơ chế đặc biệt để tích hợp các ứng dụng và trao đổi thông tin. Hiện tại, hầu hết các cơ chế hỗ trợ này đều cài đặt theo các yêu cầu riêng của khách hàng. Do đó, khi các công ty tích hợp hệ thống hay các nhà cung cấp thứ 3 cần sử dụng các công cụ quản trị Workflow khác nhau cùng lúc, họ lại phải cài đặt lại các cơ chế này. Do đó, các nhà cung cấp rất quan tâm tới việc hỗ trợ một giao diện tổng quan, bởi nó sẽ hỗ trợ hiệu quả công việc hằng ngày của họ. Giao diện này có thể đơn giản là các ứng dụng thông dụng cho phép Workflow. Nhưng thực tế, các môi trường Workflow thông thường bao gồm một loạt các ứng dụng Workflow đặc biệt khác nhau và chúng chạy trên các môi trường không đồng nhất với nhau.

Hệ thống quản trị Workflow chính là một nền tích hợp theo yêu cầu của thị trường và các yêu cầu về một giao diện ứng dụng tổng quan và chuẩn.

Bởi các yêu cầu về việc chuẩn hóa giao diện ứng dụng khách và giao diện lập trình, triệu gọi ứng dụng, các hàm WAPI- Workflow Application Programming Interface đã được xây dựng. Dựa vào các API này, các ứng dụng có thể giao tiếp với dịch vụ Workflow enactment một cách dễ dàng hơn.

Phần này sẽ đưa ra các định nghĩa và các kiểu dữ liệu WAPI theo chuẩn đã thống nhất.

4.1.Các kiểu dữ liệu WAPI

Các kiểu dữ liệu WAPI được sử dụng trong việc gọi các hàm WAPI trong các đối số input và output.

Các kiểu dữ liệu WAPI cơ bản

Các kiểu dữ liệu WAPI cơ bản chứa định nghĩa các kiểu dữ liệu quản lý Workflow cơ bản, đó là các kiểu của hệ điều hành hoặc độc lập với nền.

typedef char WMTInt8; typedef short WMTInt16; typedef long WMTInt32;

typedef unsigned char WMTUInt8; typedef unsigned short WMTUInt16; typedef unsigned long WMTUInt32; typedef WMTInt8 WMTText;

typedef WMTText *WMTPText;

typedef WMTInt8 *WMTPInt8;

typedef WMTInt16 *WMTPInt16;

typedef WMTInt32 *WMTPInt32;

typedef WMTInt8 WMTBoolean; typedef WMTUInt8 *WMTPointer;

typedef WMTText *WMTPPrivate;

#define WMNULL ((WMTPointer)0) #define WMFalse 0

#define WMTrue (!WMFalse)

Đây là định nghĩa các kiểu dữ liệu quản lý Workflow là các cấu trúc hoặc các đối tượng.

Kiểu dữ liệu String : Khi được khởi tạo sẽ được gán là 0. Độ dài xâu tối đa đối với tên, từ khóa và các từ nhận dạng bao gồm 63 ký tự và được chứa trong một mảng text 64 byte. Marco định nghĩa kích thước cho String như sau :

#define NAME_STRING_SIZE 64

Tất cả các xâu đều được định nghĩa dạng mảng text. Ví dụ :

WMTText user_identification [NAME_STRING_SIZE]

Theo trên, thì một xâu có thể chứa tối đa 63 ký tự thực sự.

Tất cả các hàm gọi WAPI có chung một kiểu dữ liệu lỗi trả về cùng dạng nhau là :

typedef struct { WMTInt16 main_code; WMTInt16 sub_code; } WMTErrRetType;

Kiểu dữ liệu này được chia sẻ giữa tất cả các lời gọi API. Tất cả các kiểu dữ liệu khác được biểu diễn cùng với các miêu tả WAPI đối với các lời gọi riêng khác.

Kiểu dữ liệu trả về lỗi là một từ Int32, trong đó gồm 2 thành phần Int16 cho các lỗi trả về. Thành phần main_code chứa mã lỗi trả về chính, còn thành phần sub_code chứa mã để miêu tả thêm cho bản chất của lỗi. Ví dụ thành phần mã lỗi main_code WM_INVALID_PROCESS_INSTANCE (xem ở danh sách các mã lỗi trả về ở sau), sẽ bao gồm trong sub_code của nó các miêu tả nhiều hơn và chi tiết hơn lý do tại sao thực thể tiến trình là không hợp lệ.

Kiểu cấu trúc thông tin kết nối :

typedef struct {

// Nhận dạng của thành phần tham gia Workflow dựa trên bản thân ứng dụng Workflow sẽ được thao tác. Giá trị miêu tả ở đây có thể dưới dạng một người, một thiết bị vv.. Nhận dạng này thường được sử dụng cho việc kiểm tra tính bảo mật, tài khoản, vv..

WMTText password[NAME_STRING_SIZE]; WMTText engine_name[NAME_STRING_SIZE];

// Nhận dạng của Engine WFM để từ đó các lời gọi hàm API thực hiện một cách trực tiếp. Thông tin này không cần bắt buộc yêu cầu với một số sản phẩm WFM thông thường. Tuy nhiên, nó được yêu cầu cho các ứng dụng Workflow cần tương tác với nhiều Engine WFM. Đây có thể là một tên biểu trưng để giải quyết việc uyển chuyển trong lời gọi.

WMTText scope[NAME_STRING_SIZE];

// Nhận dạng phạm vi cho ứng dụng. Nếu phạm vi của nó không thích hợp, vùng này sẽ được để trống và không được chấp nhận. }WMTConnectInfo;

typedef WMTConnectInfo *WMTPConnectInfo;

Kiểu cấu trúc điều khiển phiên làm việc:

typedef struct {

WMTUInt32 session_id; // ID nhận dạng phiên làm việc. Đơn nhất. WMTPPrivate pprivate; // Trỏ tới một cấu trúc riêng chứa các

thông tin miêu tả nhà cung cấp. }WMTSessionHandle;

typedef WMTSessionHandle *WMTPSessionHandle;

Kiểu cấu trúc lọc:

typedef struct {

WMTInt32 filter_type; // Bao gồm các kiểu cơ bản và kiểu String SQL

WMTInt32 filter_length; // Độ dài (bằng byte) của giá trị. WMTText attribute_name [NAME_STRING_SIZE]

WMTUInt32 comparison; // Là một trong: <, >, =, !=, <=, <= WMTPText filter_string;

}WMTFilter;

typedef WMTFilter *WMTPFilter;

// Trong phần miêu tả này sẽ có hai kiểu bộ lọc. Một kiểu được sử dụng cho việc so sánh với (và giữa các thuộc tính giá trị). Trong trường hợp này, thành phần string_filter bao gồm thuộc tính giá trị là giá trị sẽ được đem ra so sánh. Kiểu thứ hai là một cơ chế tổng quan hơn trong đó thành phần filter_string trình bày toàn bộ đối số (thông thường là một đối số SQL). Nếu thành phần filter_type là một xâu SQL, thì thành phần filter_string sẽ trỏ tới một mệnh đề với ngữ cảnh của mệnh đề WHERE trong chuẩn 92 của đặc tả ngôn ngữ SQL.

Kiểu cấu trúc điều khiển hàng đợi:

typedef struct{

WMTUInt32 query_handle; }WMTQueryHandle;

typedef WMTQueryHandle *WMTPQueryHandle;

Kiểu cấu trúc thành phần tham gia Workflow:

typedef struct {

WMTText wf_participant[NAME_STRING_SIZE]; }WMTWflParticipant;

typedef WMTWflParticipant *WMTPWflParticipant;

Kiểu cấu trúc nhận dạng định nghĩa tiến trình:

typedef struct{

WMTText proc_def_id[UNIQUE_ID_SIZE]; }WMTProcDefID;

Kiểu cấu trúc nhận dạng hành vi:

typedef struct{

WMTText activity_id[NAME_STRING_SIZE]; }WMTActivityID;

typedef WMTActivityID *WMTPActivityID;

Kiểu cấu trúc trạng thái của định nghĩa tiến trình:

typedef struct{

WMTText proc_def_state[NAME_STRING_SIZE]; } WMTProcDefState;

typedef WMTProcDefState *WMTPProcDefState; // Trỏ tới một xâu 63 byte

Kiểu cấu trúc định nghĩa tiến trình:

typedef struct{

// Đây là danh sách tối thiểu của các thành phần vào thời điểm hiện tại. Trong các phiên bản WAPI tiếp theo sẽ cung cấp thêm các mở rộng.

WMTText process_name[NAME_STRING_SIZE]; WMTProcDefID proc_def_id;

WMTProcDefState state; } WMTProcDef;

typedef WMTProcDef *WMTPProcDef;

Kiểu nhận dạng thực thể tiến trình:

typedef struct{

}WMTProcInstID;

typedef WMTProcInstID *WMTPProcInstID;

Kiểu cấu trúc trạng thái thực thể tiến trình:

typedef struct{

WMTText proc_inst_state[NAME_STRING_SIZE]; } WMTProcInstState;

typedef WMTProcInstState *WMTPProcInstState; // trỏ tới một xâu 63 byte

typedef struct{

// Đây là danh sách tối thiểu của càng thành phần vào hiện tại. Các phiên bản tương lai sẽ mở rộng thêm cấu trúc này. WMTText process_name[NAME_STRING_SIZE]; WMTProcInstID proc_inst_id; WMTProcDefID proc_def_id; WMTProcInstState state; WMTInt32 priority; WMTWflParticipant proc_participants[20];

//Tăng lên tới 20 63 ký tự cho nhận dạng thành phần tham gia } WMTProcInst;

typedef WMTProcInst *WMTPProcInst;

Kiểu cấu trúc nhận dạng thực thể hành vi:

typedef struct {

WMTText activity_inst_id[UNIQUE_ID_SIZE]; }WMTActivityInstID;

Kiểu cấu trúc trạng thái thực thể hành vi:

typedef struct{

WMTText activity_inst_state[NAME_STRING_SIZE]; } WMTActivityInstState;

typedef WMTActivityInstState *WMTPActivityInstState;

Kiểu cấu trúc thực thể hành vi:

typedef struct{

// Đây là danh sách tối thiểu của càng thành phần vào hiện tại. Các phiên bản tương lai sẽ mở rộng thêm cấu trúc này. WMTText activity_name[NAME_STRING_SIZE]; WMTActivityInstID activity_inst_id; WMTProcInstID proc_inst_id; WMTActivityInstState state; WMTInt32 priority; WMTWflParticipant activity_participants[10];

//Tăng lên tới 20 63 ký tự cho nhận dạng thành phần tham gia } WMTActivityInst;

typedef WMTActivityInst *WMTPActivityInst;

Kiểu cấu trúc nhận dạng nhãn công việc:

typedef struct{

WMTText work_item_id[UNIQUE_ID_SIZE]; }WMTWorkItemID;

typedef WMTWorkItemID *WMTPWorkItemID;

typedef struct{

// Đây là danh sách tối thiểu của càng thành phần vào hiện tại. Các phiên bản tương lai sẽ mở rộng thêm cấu trúc này. WMTText workitem_name[NAME_STRING_SIZE]; WMTWorkItemID workitem_id; WMTActivityInstID activity_inst_id; WMTProcInstID proc_inst_id; WMTInt32 priority; WMTWflParticipant participant; } WMTWorkItem;

typedef WMTWorkItem *WMTPWorkItem;

Kiểu cấu trúc thuộc tính:

typedef struct{

WMTText attribute_name[NAME_STRING_SIZE]; WMTInt32 attribute_type; // Kiểu thuộc tính

WMTInt32 attribute_length; // Độ dài của giá trị thuộc tính WMTPText pattribute_value; // Con trỏ tới giá trị thuộc tính } WMTAttribute;

typedef WMTAttribute *WMTPAttribute;

Kiểu cấu trúc danh sách thuộc tính:

typedef struct{

WMTInt32 attribute_number; WMTPAttribute pattribute; WMTNextAttr *WMTAttributeList } WMTAttributeList;

typedef WMTAttributeList *WMTPAttributeList;

Các thuộc tính

Các thuộc tính quản lý API là một tập gồm 4 thành phần :

WMTText attribute_name[NAME_STRING_SIZE];

WMTInt32 attribute_type; // Kiểu của thuộc tính

WMTInt32 attribute_length; // Độ dài của giá trị thuộc tính WMTPText pattribute_value; // Con trỏ tới giá trị thuộc tính

Tất cả các lời gọi API đều gắn với các thuộc tính, đưa ra các thành phần riêng

Một phần của tài liệu Nghiên cứu và thử nghiệm hệ thống workflow (Trang 120)