Thursday, March 1, 2012

Article 1: Workflow sharepoint in Visual Studio 2008


Yêu cầu đặt ra:
Khi thêm mới 1 item vào list hóa đơn thì chi tiết hóa đơn cũng được thêm vào list chitiethoadon 1 item tương ứng
Thiết kế list:
HoaDon: TieuDe, ProductName
ChiTietHoaDon: TieuDe, ProductName
Định nghĩa: là 1 tiến trình xử lý các tác vụ, công việc.
Cách tạo workflow:
Tạo mới Project: Chọn Visual C# | Office | 2007 | Sharepoint 2007 Sequential Workflow

Đặt tên workflow và chỉ tới URL chứa những List cần xử lý
Chọn List cần tạo workflow
Chỉ ra các điều kiện để workflow chạy
Sauk hi hoàn tất giao diện workflow như sau:
Trước tiên phải khai báo ID cho workflow bằng cách double click vào onWorkflowActived1
private void onWorkflowActivated1_Invoked(object sender, ExternalDataEventArgs e)
        {
           this.workflowId = workflowProperties.WorkflowId;
        }

Thông thường workflow đơn giản - mô hình logic như sau : khi workflow active thực thi code sau đó ghi log và hoàn tất. Mô hình như sau:
Kéo các control tương ứng của workflow
Sau khi đã thiết kế workflow hoàn tất như trên, ta sẽ khai báo cấu hình và viết code tương ứng
  1. Double click vào codeActived1
  2. Khai báo biến toàn cục
public string historyDes = "";
public string historyOut = "";
b.    Trong code ta khai báo
   this.historyDes = "Workflow Completed";
               this.historyOut = "OK";
  • Click phải vào log
  • HistoryDescription chọn biến toàn cục historyDes
          
  • HistoryOutcome chọn biến toàn cục historyOut
           
  • Sau khi chon xong ta sẽ viết code trong codeActived như sau:
public sealed partial class Workflow1 : SequentialWorkflowActivity
    {
        public Workflow1()
        {
            InitializeComponent();
        }
        public Guid workflowId = default(System.Guid);
        public SPWorkflowActivationProperties workflowProperties = new SPWorkflowActivationProperties();
        public string historyDes = "";
        public string historyOut = "";
        private void onWorkflowActivated1_Invoked(object sender, ExternalDataEventArgs e)
        {
            this.workflowId = workflowProperties.WorkflowId;
        }
        private void codeActivity1_ExecuteCode(object sender, EventArgs e)
        {
            //chỉ ra web ma list HoaDon đang đứng
            SPWeb web = workflowProperties.Web;
            //chỉ ra List ma list HoaDon đang đứng
            SPList list = workflowProperties.List;
            //chỉ ra ListItem ma list HoaDon đang đứng
            SPListItem itemHoaDon = workflowProperties.Item;
            //khai báo và chỉ ra List ChiTietHoaDon
            SPList spListChiTietHoaDon = web.Lists["ChiTietHoaDon"];
            //khai báo phương thức Add cho ChiTietHoaDon
            SPListItem spListItemChiTietHoaDon = spListChiTietHoaDon.Items.Add();
            //thêm Title cho List ChiTietHoaDon trùng với List HoaDon (truongf hợp Text)
            spListItemChiTietHoaDon["Title"] = itemHoaDon["Title"];
            //Khai báo kiểu lookup (chỉ cần lấy ID, tự động lấy được Value để thêm vào)
            SPFieldLookupValue lookup = new SPFieldLookupValue(Convert.ToInt32(itemHoaDon["ID"]), "");
            //thêm vào List ChiTietHoaDon
            spListItemChiTietHoaDon["ProductName"] = lookup;
            //Update lại List ChiTietHoaDon
            spListItemChiTietHoaDon.Update();
            // Thêm vào ChiTietHoaDon1 khi workflow chạy tác vụ thêm ChiTietHoaDon
            //tương tự bên trên
            SPList spListChiTietHoaDon1 = web.Lists["ChiTietHoaDon1"];
            SPListItem spListItemChiTietHoaDon1 = spListChiTietHoaDon1.Items.Add();
            spListItemChiTietHoaDon1["Title"] = spListItemChiTietHoaDon["Title"];
            SPFieldLookupValue lookup1 = new SPFieldLookupValue(Convert.ToInt32(spListItemChiTietHoaDon["ID"]), "");
            spListItemChiTietHoaDon1["ProductName"] = lookup1;
            spListItemChiTietHoaDon1.Update();
            //gán giá trị cho HistoryDescription và HistoryOutcome khi workflow hoàn tất
            this.historyDes = "Workflow abc";
            this.historyOut = "OK";
        }
 }


  • Sau khi hoàn tất ta build workflow và chạy nó
  • Mở Browser

0 comments:

Post a Comment