PDA

View Full Version : پیاده سازی یک Workflow با استفاده از VS 2008 و WF



amin1softco
یک شنبه 07 خرداد 1391, 18:14 عصر
سلام
در ادامه پُست های مربوط به Workflow ها، در این پُست ابتدا نحوه طراحی و توسعه یک workflow یا جریان کاری را در محیط Visual Studio 2008 توسط ابزار WF تشریح خواهم کرد و در انتها نحوه استفاده و پیاده سازی آن را در محیط شیرپوینت توضیح خواهم داد.
برنامه ها و ابزارهایی که برای طراحی این جریان کاری نیاز داریم عبارتند از :
1- برنامه مایکروسافت آفیس شرپوینت سرور 2007 یا سایتی که توسط شرپوینت ایجاد شده باشد و به شما امکان نصب و راه اندازی Workflow ها را بدهد.
2- برنامه ویژوال استودیو 2005 یا 2008 (VS 2005 or VS 2008)
3- Net Framework 3.0 (http://blogs.msdn.com/msdn.microsoft.com/netframework) or 3.5 ( اگر محیط برنامه نویسی شما VS2005 میباشد باید این فریم ورک رو دانلود و نصب کنید . ولی اگر محیط شما VS2008 باشد نیازی به دانلود ندارید.)
4- Visual Studio 2005 extensions for .NET 3.0, Windows Workflow Foundation (http://www.microsoft.com/downloads/details.aspx?FamilyId=5D61409E-1FA3-48CF-8023-E8F38E709BA6&displaylang=en) ( اگر محیط برنامه نویسی شما VS2005 میباشد باید این برنامه رو دانلود و نصب کنید . ولی اگر محیط شما VS2008 باشد نیازی به دانلود ندارید.)
پس از نصب و آماده شدن ابزارهای فوق، حال می توانیم جریان کاری مورد نظر را در VS 2008 طراحی کنیم. ابتدا سناریوی جریان کاری را ترسیم می کنیم :

http://pspcommunity.org/photos/blogs/workflowVS2008WWF_F4CF/WFPlan.gif
همانطور که در شکل فوق مشاهده می کنید، جریان کاری مورد نظر شامل 3 فعالیت یا Activity است :


فعالیت اول وظیفه راه اندازی و اجرای عملیات فعالسازی جریان کاری را برعهده دارد.
فعالیت دوم، کدهای کاربر را دریافت و در زمان Runtime اجرا می کند.
فعالیت سوم، با استفاده از کد اجرا شده کاربر ، از وضعیت اجرای جریان کاری Log می گیرد و آنرا ذخیره می کند.

مراحل طراحی این جریان کاری به صورت زیر است :
1- ابتدا VS 2008 را اجرا کنید و از منوی فایل گزینه New Project را انتخاب کنید. از پنجره باز شده گزینه Office را از بخش Projects Type انتخاب و سپس گزینه SharePoint 2007 Sequential Workflow را از قسمت Templates انتخاب کنید. در این نمونه نام پروژه را ArashSPWrokflow انتخاب کردم، شما هم نامی را برای این پروژه در قسمت مشخص شده وارد کنید.سپس پنجره را با OK ببنیدید. شکل زیر :
http://pspcommunity.org/photos/blogs/workflowVS2008WWF_F4CF/1_3.gif
2- پس از کلیک بر روی OK پنجره ای برای انجام تنظیمات جریان کاری جدید، مانند شکل زیر باز می شود. در قسمت اول نام جریان کاری را وارد کنید و در قسمت دوم نام سایت شرپوینتی که قرار هست این جریان کاری در آن استفاده شود را وارد کنید.
http://pspcommunity.org/photos/blogs/workflowVS2008WWF_F4CF/2.gif
3- پس از تکمیل اطلاعات، دکمه Next را کلیک کنید تا پنجره ای مانند زیر نمایش داده شود :
http://pspcommunity.org/photos/blogs/workflowVS2008WWF_F4CF/3.gif
در این پنجره، گزینه Automatically associate workflow را انتخاب کنید تا این جریان کاری پس از اجرا به صورت خودکار به لیست یا کتابخانه سند مورد نظر شما متصل شود. از قسمت Library or List نام لیست یا کنابخانه مورد نظر را انتخاب کنید (در این مثال نام کتابخانه سند ما Documents می باشد). از قسمت History List نام لیست Workflow History را انتخاب کنید. از قسمت Task List هم لیست Tasks را انتخاب نمایید و سپس دکمه Next را کلیک کنید. تا پنجره زیر نمایش داده شود :
http://pspcommunity.org/photos/blogs/workflowVS2008WWF_F4CF/4.gif
از طریق این پنجره می توانید مشخص کنید که این جریان کاری چگونه اجرا شود. در این مثال، ما اجازه می دهیم کاربر هم به صورت دستی اینکار را انجام بدهد و هم با ایجاد یک آیتم در لیست، جریان کاری به صورت خودکار اجرا شود.
دکمه Finish را جهت اتمام عملیات تعریف اولیه جریان کاری کلیک کنید.
4- پس از اینکار، ویژوال استودیو پروژه جریان کاری را به صورت زیر ایجاد خواهد کرد. در قسمت Solution Explorer موارد زیر را مشاهده خواهید کرد :
http://pspcommunity.org/photos/blogs/workflowVS2008WWF_F4CF/6.gif
در مرکز صفحه هم نمودار دیاگرام جریان کاری ابتدایی تولید شده توسط ویژوال استودیو را به صورت شکل زیر مشاهده خواهید کرد :( هر جریان کاری ایجاد شده در WSS باید توسط این فعالیت (onWorkflowActivated) شروع به کار کند.)
http://pspcommunity.org/photos/blogs/workflowVS2008WWF_F4CF/5.gif
5- از منوی Toolbox سمت چپ صفحه VS و در تب Windows Workflow v3.0 یک فعالیت جدید به نام Code را انتخاب و به زیر فعالیت onWorkflowAcivated1 بکشید و قرار دهید. همچنین یک فعالیت دیگری به نام Log To History را از تب SharePoint Workflow در Toolbox انتخاب و به زیر فعالیت CodeActivity1 بکشید. ( شکل زیر )
http://pspcommunity.org/photos/blogs/workflowVS2008WWF_F4CF/10.gif
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; }
سایر خصوصیات این فعالیت باید شبیه شکل زیر تکمیل شده باشد :
http://pspcommunity.org/photos/blogs/workflowVS2008WWF_F4CF/15.gif
8- فعالیت دوم (codeActivity1) را انتخاب کنید و بر روی شکل دیاگرام آن دوبار کلیک کنید تا رویداد این فعالیت ایجاد شود.
http://pspcommunity.org/photos/blogs/workflowVS2008WWF_F4CF/16.gif
پس از اینکار وارد قسمت کد برنامه شده و برای متد ایجاد شده 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 آن مانند شکل زیر باز شود :
http://pspcommunity.org/photos/blogs/workflowVS2008WWF_F4CF/14.gif
از تب Bind to an existing member گزینه HistoryDescription که در مرحله 9 کد آنرا نوشتیم انتخاب کنید و Ok کنید.همین کار را برای آیتم HistoryOutcome از پنجره خصوصیات فعالیت سوم انجام دهید. با این تفاوت که برای Binding آن HistoryOutcome را از قسمت Bind to an existing member انتخاب کنید. در انتها با OK پنجره را ببندید.
سایر خصوصیات این فعالیت باید چیزی شبیه شکل زیر باشد :
http://pspcommunity.org/photos/blogs/workflowVS2008WWF_F4CF/17.gif
در اینجا مراحل طراحی و نوشتن کد های جریان کاری مورد نظر کامل شد. حال باید با زدن کلید F5 از VS2008 این جریان کاری را بر روی سایت و کتابخانه سند مورد نظر Deploy کنید.
( سولوشن و کد کامل این workflow در انتهای مقاله ضمیمه شده است)
11 - پس از Deploy کامل جریان کاری، پنجره کتابخانه سند مورد نظر باز خواهد شد و شما می توانید برای مشاهده خروجی جریان کاری، یک سند جدید را آپلود کنید. پس از آپلود سند، مشاهده خواهید کرد که در ستون ArashSPWorkflow مقدار Completed درج شده است.
http://pspcommunity.org/photos/blogs/workflowVS2008WWF_F4CF/18.gif
12- حال بر روی Completed کلیک کنید تا جزئیات Workflow اجرا شده را مشاهده کنید :
http://pspcommunity.org/photos/blogs/workflowVS2008WWF_F4CF/19.gif
همانطور که در شکل فوق مشاهده می کنید، جریان کاری به درستی اجرا شده است و کد مربوط به فعالیت Code Activity قسمت Try خود را تکمیل کرده و پیغام مورد نظر را در متغیر History Description قرار داده است که پیام مورد نظر به همراه UniqueID ایتم را در Workflow History نمایش می دهد.
13- پس از Deploy شدن Workflow در سایت شرپوینتی به صورت یک Feature، شما می توانید این workflow را در سایر لیست ها و کتابخانه ها استفاده کنید. اگر وارد بخش Workflow Setting لیست ها شوید، می توانید این جریان کاری را به آن لیست اضافه کنید :
http://pspcommunity.org/photos/blogs/workflowVS2008WWF_F4CF/20.gif
پس از اینکار نام جریان کاری را در قسمت جریانهای کاری آن لیست مشاهده خواهید کرد :
http://pspcommunity.org/photos/blogs/workflowVS2008WWF_F4CF/21.gif
جریان کاری طراحی شده در این مقاله، یک نمونه ساده از جریان های کاری قابل پیاده سازی در VS2008 و با استفاده از Window Workflow Foundation یا WF می باشد. امیدوارم این مقاله برای شروع برنامه نویسی جریانهای کاری برای شما مفید باشد. در مقالات بعدی به مثالهای متنوع تر با Activity های بیشتر و پیچیده تر خواهم پرداخت.
موفق باشید. :)
منبع (http://pspcommunity.org/blogs/arash/archive/2009/10/16/workflow-vs-2008-wf.aspx)