# برنامه نویسی با محصولات مایکروسافت > Sharepoint > برنامه نویسی شیرپوینت (Sharepoint Development) >  پیاده سازی یک Workflow با استفاده از VS 2008 و WF

## amin1softco

سلام
در ادامه پُست های مربوط به Workflow ها، در این پُست ابتدا  نحوه طراحی و توسعه یک workflow یا جریان کاری را در محیط Visual Studio  2008 توسط ابزار WF تشریح خواهم کرد و در انتها نحوه استفاده و پیاده سازی  آن را در محیط شیرپوینت توضیح خواهم داد.
برنامه ها و ابزارهایی که برای طراحی این جریان کاری نیاز داریم عبارتند از :
1-  برنامه مایکروسافت آفیس شرپوینت سرور 2007 یا سایتی که توسط شرپوینت ایجاد  شده باشد و به شما امکان نصب و راه اندازی Workflow ها را بدهد. 
2- برنامه ویژوال استودیو 2005 یا 2008 (VS 2005 or VS 2008) 
3- Net Framework 3.0  or 3.5 ( اگر محیط برنامه نویسی شما VS2005 میباشد باید این فریم ورک رو  دانلود و نصب کنید . ولی اگر محیط شما VS2008 باشد نیازی به دانلود  ندارید.)
4- Visual Studio 2005 extensions for .NET 3.0, Windows Workflow Foundation  ( اگر محیط برنامه نویسی شما VS2005 میباشد باید این برنامه رو دانلود و  نصب کنید . ولی اگر محیط شما VS2008 باشد نیازی به دانلود ندارید.)
پس  از نصب و آماده شدن ابزارهای فوق، حال می توانیم جریان کاری مورد نظر را  در VS 2008 طراحی کنیم. ابتدا سناریوی جریان کاری را ترسیم می کنیم :
  همانطور که در شکل فوق مشاهده می کنید، جریان کاری مورد نظر شامل 3 فعالیت یا Activity است : 

فعالیت اول وظیفه راه اندازی و اجرای عملیات فعالسازی جریان کاری را برعهده دارد.فعالیت دوم، کدهای کاربر را دریافت و در زمان Runtime اجرا می کند.فعالیت سوم، با استفاده از کد اجرا شده کاربر ، از وضعیت اجرای جریان کاری Log می گیرد و آنرا ذخیره می کند.
مراحل طراحی این جریان کاری به صورت زیر است :
1-  ابتدا VS 2008 را اجرا کنید و از منوی فایل گزینه New Project را انتخاب  کنید. از پنجره باز شده گزینه Office را از  بخش Projects Type انتخاب و  سپس گزینه SharePoint 2007 Sequential Workflow را از قسمت Templates  انتخاب کنید. در این نمونه نام پروژه را ArashSPWrokflow انتخاب کردم، شما  هم نامی را برای این پروژه در قسمت مشخص شده وارد کنید.سپس پنجره را با OK  ببنیدید. شکل زیر :
 
2-  پس از کلیک بر روی OK پنجره ای برای انجام تنظیمات جریان کاری جدید، مانند  شکل زیر باز می شود. در قسمت اول نام جریان کاری را وارد کنید و در قسمت  دوم نام سایت شرپوینتی که قرار هست این جریان کاری در آن استفاده شود را  وارد کنید.
 
3- پس از تکمیل اطلاعات، دکمه Next را کلیک کنید تا پنجره ای مانند زیر نمایش داده شود :
 
در  این پنجره، گزینه Automatically associate workflow را انتخاب کنید تا این  جریان کاری پس از اجرا به صورت خودکار به لیست یا کتابخانه سند مورد نظر  شما متصل شود. از قسمت Library or List نام لیست یا کنابخانه مورد نظر را  انتخاب کنید (در این مثال نام کتابخانه سند ما Documents می باشد). از قسمت  History List نام لیست Workflow History را انتخاب کنید. از قسمت Task  List هم لیست Tasks را انتخاب نمایید و سپس دکمه Next را کلیک کنید. تا  پنجره زیر نمایش داده شود :
 
از  طریق این پنجره می توانید مشخص کنید که این جریان کاری چگونه اجرا شود. در  این مثال، ما اجازه می دهیم کاربر هم به صورت دستی اینکار را انجام بدهد و  هم با *ایجاد* یک آیتم در لیست، جریان کاری به صورت خودکار اجرا شود.
دکمه Finish را جهت اتمام عملیات تعریف اولیه جریان کاری کلیک کنید.
4-  پس از اینکار، ویژوال استودیو پروژه جریان کاری را به صورت زیر ایجاد  خواهد کرد. در قسمت Solution Explorer موارد زیر را مشاهده خواهید کرد :
 
در  مرکز صفحه هم نمودار دیاگرام جریان کاری ابتدایی تولید شده توسط ویژوال  استودیو را به صورت شکل زیر مشاهده خواهید کرد :( هر جریان کاری ایجاد شده  در WSS باید توسط این فعالیت (onWorkflowActivated) شروع به کار کند.)
 
5-  از منوی Toolbox سمت چپ صفحه VS و در تب Windows Workflow v3.0 یک فعالیت  جدید به نام Code را انتخاب و به زیر فعالیت onWorkflowAcivated1 بکشید و  قرار دهید. همچنین یک فعالیت دیگری به نام Log To History را از تب  SharePoint Workflow در Toolbox انتخاب و به زیر فعالیت CodeActivity1  بکشید. ( شکل زیر ) 
 
6- حال با کلید F7 وارد بخش کد نویسی جریان کاری شوید و در داخل بدنه کلاس workflow1 متغیرهای زیر را تعریف کنید :
private int ItemID; private Guid DocLibID; private Guid WebID; private Guid SiteID;
7-  بر روی فعالیت اول (در مد طراحی) کلیک کنید و از پنجره Properties این  فعالیت، از قسمت CorrelationToken ، مورد workflow Token را انتخاب نمایید.  
_* متغیر workflowToken یک Correlation Token می باشد که Office  SharePoint Server 2007 را قادر می سازد تا داده ها را به یک جریان کاری  تعریف شده صحیح، مسیردهی کند._
بر روی شکل دیاگرام فعالیت اول  دوبار کلیک کنید تا کد مربوط به رویداد Invoked فعالیت ایجاد شود . در صفحه  کد جریان کاری، کد زیر را برای متد onWorkflowActivated1_Invoked بنویسید :
private void onWorkflowActivated1_Invoked(object sender, ExternalDataEventArgs e)         {             SiteID = workflowProperties.SiteId;             WebID = workflowProperties.WebId;             DocLibID = workflowProperties.ListId;             ItemID = workflowProperties.ItemId;         }
سایر خصوصیات این فعالیت باید شبیه شکل زیر تکمیل شده باشد :
 
8- فعالیت دوم (codeActivity1) را انتخاب کنید و بر روی شکل دیاگرام آن دوبار کلیک کنید تا رویداد این فعالیت ایجاد شود.
 
پس از اینکار وارد قسمت کد برنامه شده و برای متد ایجاد شده codeActivity1_ExecuteCode کد زیر را وارد کنید :
private void codeActivity1_ExecuteCode(object sender, EventArgs e) {  try    {       SPSite site = new SPSite(SiteID);       SPWeb web = site.OpenWeb(WebID);       SPDocumentLibrary docLib = web.Lists[DocLibID] as SPDocumentLibrary;       SPListItem item = docLib.GetItemById(ItemID);        this.HistoryOutcome = "موفقیت";       this.HistoryDescription = "جریان کاری بر روی آیتم با شماره  " + item.UniqueId 
      + "با موفقیت اجرا شد.";     }  catch (Exception ex)    {      this.HistoryOutcome = "خطا";      this.HistoryDescription = "جریان کاری در هنگام اجرا با خطای زیر مواجه شد.: " + ex.Message;    }              }

9- مجدداً وارد بخش کد نویسی جریان کاری شوید و کد زیر  را برای تعریف و نگهداری مقادیر History مربوط به فعالیت LogToHistory در  داخل کلاس workflow1 ایجاد کنید :
public String HistoryDescription = default(System.String); public String HistoryOutcome = default(System.String);
10- اکنون فعالیت سوم یا logToHistoryListActivity1 را کلیک کنید تا خصوصیات آنرا در پنجره Properties مشاهده کنید.
بر روی علامت زرد رنگ Bind Property در کنار HistoryDescription دوبار کلیک کنید تا پنجره Binding آن مانند شکل زیر باز شود :
 
از  تب Bind to an existing member گزینه HistoryDescription که در مرحله 9 کد  آنرا نوشتیم انتخاب کنید و Ok کنید.همین کار را برای آیتم HistoryOutcome  از پنجره خصوصیات فعالیت سوم انجام دهید. با این تفاوت که برای Binding آن  HistoryOutcome را از قسمت Bind to an existing member انتخاب کنید. در  انتها با OK پنجره را ببندید.
سایر خصوصیات این فعالیت باید چیزی شبیه شکل زیر باشد :
 
در  اینجا مراحل طراحی و نوشتن کد های جریان کاری مورد نظر کامل شد. حال باید  با زدن کلید F5 از VS2008 این جریان کاری را بر روی سایت و کتابخانه سند  مورد نظر Deploy کنید.
_( سولوشن و کد کامل این workflow در انتهای مقاله ضمیمه شده است)_
11  - پس از Deploy کامل جریان کاری، پنجره کتابخانه سند مورد نظر باز خواهد  شد و شما می توانید برای مشاهده خروجی جریان کاری، یک سند جدید را آپلود  کنید. پس از آپلود سند، مشاهده خواهید کرد که در ستون ArashSPWorkflow  مقدار Completed درج شده است.
 
12- حال بر روی Completed کلیک کنید تا جزئیات Workflow اجرا شده را مشاهده کنید :
 
همانطور  که در شکل فوق مشاهده می کنید، جریان کاری به درستی اجرا شده است و کد  مربوط به فعالیت Code Activity قسمت Try خود را تکمیل کرده و پیغام مورد  نظر را در متغیر History Description قرار داده است که پیام مورد نظر به  همراه UniqueID ایتم را در Workflow History نمایش می دهد.
13- پس از  Deploy شدن Workflow در سایت شرپوینتی به صورت یک Feature، شما می توانید  این workflow را در سایر لیست ها و کتابخانه ها استفاده کنید. اگر وارد بخش  Workflow Setting لیست ها شوید، می توانید این جریان کاری را به آن لیست  اضافه کنید :
 
پس از اینکار نام جریان کاری را در قسمت جریانهای کاری آن لیست مشاهده خواهید کرد :
 
جریان  کاری طراحی شده در این مقاله، یک نمونه ساده از جریان های کاری قابل پیاده  سازی در VS2008 و با استفاده از Window Workflow Foundation یا WF می  باشد. امیدوارم این مقاله برای شروع برنامه نویسی جریانهای کاری برای شما  مفید باشد. در مقالات بعدی به مثالهای متنوع تر با Activity های بیشتر و  پیچیده تر خواهم پرداخت.
موفق باشید. :)
منبع

----------

