با سلام و عرض ادب. در خدمت دوستان عزیز هستیم با آموزش Workflow – آموزش ساخت اکتیویتی با Bookmark از وب سایت آموزش برنامه نویسی سورس باران. در این دوره، آموزش Workflow در ۴۶ جلسه بصورت متنی به شما آموزش داده خواهد شد. لطفا تا انتها با ما همراه باشید…
این دوره جهت حفظ حقوق نویسنده از سایت حذف شده، مطالب جدیدتری بزودی در سایت قرار میگیرد
گردش کار (Workflow)
گردش کار، مجموعه ای از فعالیت ها است که برای تکمیل یک وظیفه لازم است. به بیانی دیگر، گردش کار به افراد درمستند سازی و مدیریت وظایف در پروژه ها کمک می کند و این امر با پیاده سازی فرایند های کاری روی مستندات محقق می گردد. گردش کار به سازگاری فرآیندهای کاری در سازمان ها کمک می کند و همچنین میزان تاثیر گذاری سازمان ها و تولیدات را با مدیریت وظایف و مراحلی که در فرایند های کاری وجود دارند، بهبود می دهد.
سازمان ها از گردش کار برای مشارکت کارکنان در انجام وظیفه و همگام سازی داده ها در بین سیستم ها استفاده می کنند و از آن در رسیدن به اهدافی چون بهره وری بیشتر، مسئولیت پذیری بیشتر و سود بیشتر بهره می جویند. برای این موضوع تعاریف بسیاری آورده شده است، می توان گفت گردش کار گاهی به عنوان مجموعه ای از وظایف که یک خروجی را تولید می کنند، تعریف می شود. به علاوه گردش کار به جابه جایی خودکار مستندات یا داده ها در یک توالی از فعالیت ها و وظایف ها که به یک فرایند مربوط می شوند، نیز گفته می شود.
گردش کار می تواند با امکان اضافه کردن منطق کسب وکار به مستندات و آیتم ها در فرایند کاری، برای کنترل فرآیند های کسب وکاری در یک سازمان مورد استفاده قرار گیرد. منطق کاری مجموعه ای از دستورالعمل هاست و گردش کار، این مجموعه از دستور العمل ها که باید در طی فرایند بر روی یک مستند یا آیتم اتفاق افتد را مشخص و کنترل می کند.
گردش کار هزینه و زمان را در اجرای فرایند های کاری با نظارت بر آن ها کم می کند. به طور مثال با مشاهده مستندات، مدیریت و رهگیری وظایف افراد که در فرایند درگیر هستند این امر را محقق می نماید.علاوه بر آن در گردش کار می توان یک مستند را بین گروهی از افراد برای تایید ارسال کنید و زمانی که گردش کار در حال انجام گرفتن بود افراد می توانند با رهگیری فرایند متوجه شوند که کار راچه کسانی تایید کرده و وضعیت نهایی کار چیست؛ در نهایت زمانی که فرایند به پایان برسد یک اعلان برای مالک گردش کار ارسال می شود. یک مثال از روال گردش کار در شکل زیر نشان داده شده است :
نمونه هایی از گردش کار:
گردش های کار با توجه به اهدافی که دارند شناخته می شوند. در زیر به چند نمونه از گردش های کار آورده شده است:
۱- گردش کار مدیریت مستندات:
سازمان های بسیاری هستند که این گردش کار را در دل سازمان خود دارند. به عبارتی، یک مستند نیاز به تایید، تغییر و اضافه کردن متن در طی یک گردش کاری از این نوع را دارد.
۲- خدمات مشتریان (پیگیری سفارش)
این گردش کار به مشتری اجازه می دهد در صورتی که در سازمان درخواستی را ثبت کرده است، بتواند آن را رهگیری کرده و در آن تغییراتی را اعمال کند.
۳- مدیریت تعطیلات
گردش کاری که شامل مدیریت تعطیلات کاربر، رزرو هتل، رزرو پرواز و سایر اقدامات مربوط به آژانس های مسافرتی است.
اجزای گردش کار:
یک گردش کار می تواند به صورت نمودار های فنی فرمال یا غیر فرمال نمایش داده شود که به صورت مجموعه ای از جریان ها بین مراحل پردازش است. گردش کار اصولا توسط سه پارامتر زیر تعریف می شود:
۱- مقدار ورودی: شامل اطلاعات و مقادیری است که برای کامل شدن یک مرحله از گردش کار، مورد نیاز است.
۲- قوانین تغییر: الگوریتم هایی که توسط نقش های انسانی یا سیستمی یا ترکیبی از هر دو انجام می شود را قوانین تغییر گویند.
۳- مقدار خروجی: اطلاعات و مقادیری که توسط هر مرحله تولید شده و به عنوان ورودی به مرحله بعد داده می شود را گویند.
گردش ها کار به سه دسته تقسیم می شوند:
۱- ترتیبی: دراین گردش کار برگشت به مرحله قبل وجود ندارد.
۲- سیستمی: این گردش کارها پیچیده تر هستند و امکان بازگشت به مرحله قبل را نیز دارند.
۳- مبتنی بر قوانین: این دسته همانند گردش کارهای ترتیبی هستند اما با این تفاوت که قوانین هستند که پیشرفت در فرایند را تعیین می کنند.
گردش کاری به سه حالت ممکن است شروع شود:
۱- زمانبندی شده: با توجه به زمانی که برای شروع و تکرار آن در نظر گرفته شده است، شروع می شود.
۲- فرم: در واقع رایج ترین نوع شروع در گردش کار است که کاربر با پر کردن فرم و ارسال آن، گردش کار را به جریان می اندازد.
۳- API: سیستم های دیگر می توانند یک گردش کار را در قالب پیامک اعلان یا وب سرویس و به کمک API شروع کنند.
مزایای استفاده از سیستم ها با قابلیت گردش کار:
۱- افزایش تولید: گردش های کاری مکانیزه شده، زمان انجام کارها را کاهش داده و درنتیجه تولید و بهره وری را افزایش می دهند.
۲- شفافیت: به مدیران این امکان را می دهد که متوجه شوند که در فرایند های کاری آن ها در لحظه چه اتفاقاتی رخ می دهد.
۳- انعطاف پذیری بالا در تغییرات: گردش ها کار این اجازه را به سازمان ها می دهد که به راحتی و به سرعت در فرایند های خود تغییرات لازم را ایجاد کنند.
۴- مسئولیت پذیری بهتر: نظارت و پایش اجرای فرایند های کسب و کار امکان ایجاد معیار هایی را برای بهبود مستمر فرایند ها ایجاد می نماید.
منابع : Introduction-to-workflows
bpm-tutorial/workflow-tutorial
Workflow_Fundamentals
ساخت اکتیویتی با Bookmark
با استفاده از InArgument و OutArgument و InOutArgument می توانیم داده های دلخواهمان را زمانی که Workflow شروع یا Start می شود به آن پاس دهیم و یا زمانی که پایان یافت از آن دریافت کنیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 |
Build an activity with Bookmark Using InArgument and OutArgument and InOutArgument, we can pass on our custom data when the Workflow starts or starts, or when it is finished, we get it. But how can the data be passed to the workflow that is being implemented? Bookmark will help us to do this. In this part of the Workflow tutorial, we plan to create an activity called MyReadLine using Bookmark. Steps to do the job The usebookbook workflow project includes the following 6 steps: Add a Project Workflow Console Application Build an activity using Bookmark Workflow design Write #C Codes to Run Workflow Run Workflow How does the usebookbook workflow work? Add a new project from Workflow Console Application In the Solution Explorer panel, right-click on the Solution Chapter01 and choose ADD under the New Project menu from the ADD: In the Add New Project window, select the workflow option, and then select Workflow Console Application from the right side of the window. Now set the Name field to the UseBookmark and finally click on the OK button. In the Solution Explorer panel, right-click on the UseBookmark project as shown below and choose ADD under the New Item menu under the ADD option: In the window that opens, select Add New Item, and select Code File and set the Name field to MyReadLineActivity: Build an activity using Bookmark But then open the MyReadLineActivity.cs file and add the following code: MyReadLineActivity.cs file using System.Activities; namespace usebookmark { public class MyReadLine: NativeActivity { [RequiredArgument] public InArgument BookmarkName {get; set; } protected override void Execute (NativeActivityContext context) { context.CreateBookmark (BookmarkName.Get (context), new BookmarkCallback (OnResumeBookmark)); } protected override bool CanInduceIdle { get { {return true; } } } public void OnResumeBookmark (NativeActivityContext context, bookmark bookmark, object obj) { Result.Set (context, (string) obj); } } } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19th 20 21 22 23 24 using System.Activities; namespace usebookmark { public class MyReadLine: NativeActivity { [RequiredArgument] public InArgument BookmarkName {get; set; } protected override void Execute (NativeActivityContext context) { context.CreateBookmark (BookmarkName.Get (context), new BookmarkCallback (OnResumeBookmark)); } protected override bool CanInduceIdle { get { {return true; } } } public void OnResumeBookmark (NativeActivityContext context, bookmark bookmark, object obj) { Result.Set (context, (string) obj); } } } Save the file and build the project using the F6 button. Now if you open the Workflow1.xaml file and pay attention to the Toolbox, you will see that MyReadLine has been added to it. Workflow design Open the Workflow1.xaml file from the Solution Explorerr panel and design the Workflow as follows: From the ToolBox panel, select the Sequence activity and drag the workflow into the workflow. Click on the Sequence activity and then select the Variables tab from the bottom of the page. Now create an Int32 variable named GreetingMessage. Now, from the bottom of the page, select the Arguments tab and define the BookmarkNameInarg argument as shown below. From the Active Directory Toolbox, drag WriteLine into the Sequence and set the Text field to it. Now it's time to use our own customizations. In the following figure, put MyReadLine in the Sequence and right-click on it and select Properties. Next, set the displayed fields as shown. Once again, drag the WriteLine ActiveX Toolbox into the Sequence and set the Text field to it. <span id="result_box" class="" lang="en"><span title="نوشتن کدهای #C برای اجرای Workflow ">Write #C Codes to Run Workflow </span><span title="اما در ادامه فایل Program.cs را باز کنید و مطابق زیر کدها را تغییر دهید (قسمت قرمز رنگ): ">But then open the Program.cs file and change the following with the following code (red part): </span><span title="فایل Program.cs ">Program.cs file </span><span title="using System; ">using system; </span><span title="using System.Linq; ">using system.Linq; </span><span title="using System.Activities; ">using System.Activities; </span><span title="using System.Activities.Statements; ">using System.Activities.Statements; </span><span title="using System.Threading; ">using System.Threading; </span><span title="namespace UseBookmark ">namespace usebookmark </span><span title="{ ">{ </span><span title="class Program ">class program </span><span title="{ ">{ </span><span title="static void Main(string[] args) ">static void Main (string [] args) </span><span title="{ ">{ </span><span title="AutoResetEvent syncEvent =new AutoResetEvent(false); ">AutoResetEvent syncEvent = new AutoResetEvent (false); </span><span title="string bookmarkName = "GreetingBookmark"; ">string bookmarkName = "GreetingBookmark"; </span><span title="WorkflowApplication wfApp = new WorkflowApplication(new Workflow1() ">WorkflowApplication wfApp = new WorkflowApplication (new Workflow1 () </span><span title="{ ">{ </span><span title="BookmarkNameInarg = bookmarkName ">BookmarkNameInarg = bookmarkName </span><span title="}); ">}); </span><span title="wfApp.Completed = delegate(WorkflowApplicationCompletedEventArgs e) ">wfApp.Completed = delegate (WorkflowApplicationCompletedEventArgs e) </span><span title="{ ">{ </span><span title="syncEvent.Set(); ">syncEvent.Set (); </span><span title="}; ">}; </span><span title="wfApp.Run(); ">wfApp.Run (); </span><span title="wfApp.ResumeBookmark(bookmarkName,Console.ReadLine()); ">wfApp.ResumeBookmark (bookmarkName, Console.ReadLine ()); </span><span title="syncEvent.WaitOne(); ">syncEvent.WaitOne (); </span><span title="Console.WriteLine("-------------\nProvided to you by : https://www.sourcebaran.com \npress any key ..."); ">Console.WriteLine ("------------- \ nProvided to you by: https://www.sourcebaran.com \ npress any key ..."); </span><span title="Console.ReadLine(); ">Console.ReadLine (); </span><span title="} ">} </span><span title="} ">} </span><span title="} ">} </span><span title="1 ">1 </span><span title="2 ">2 </span><span title="3 ">3 </span><span title="4 ">4 </span><span title="5 ">5 </span><span title="6 ">6 </span><span title="7 ">7 </span><span title="8 ">8 </span><span title="9 ">9 </span><span title="10 ">10 </span><span title="11 ">11 </span><span title="12 ">12 </span><span title="13 ">13 </span><span title="14 ">14 </span><span title="15 ">15 </span><span title="16 ">16 </span><span title="17 ">17 </span><span title="18 ">18 </span><span title="19 ">19th </span><span title="20 ">20 </span><span title="21 ">21 </span><span title="22 ">22 </span><span title="23 ">23 </span><span title="24 ">24 </span><span title="25 ">25 </span><span title="26 ">26 </span><span title="27 ">27 </span><span title="28 ">28 </span><span title="29 ">29 </span><span title="30 ">30 </span><span title="31 ">31 </span><span title="32 ">32 </span><span title="using System; ">using system; </span><span title="using System.Linq; ">using system.Linq; </span><span title="using System.Activities; ">using System.Activities; </span><span title="using System.Activities.Statements; ">using System.Activities.Statements; </span><span title="using System.Threading; ">using System.Threading; </span><span title="namespace UseBookmark ">namespace usebookmark </span><span title="{ ">{ </span><span title="class Program ">class program </span><span title="{ ">{ </span><span title="static void Main(string[] args) ">static void Main (string [] args) </span><span title="{ ">{ </span><span title="AutoResetEvent syncEvent =new AutoResetEvent(false); ">AutoResetEvent syncEvent = new AutoResetEvent (false); </span><span title="string bookmarkName = "GreetingBookmark"; ">string bookmarkName = "GreetingBookmark"; </span><span title="WorkflowApplication wfApp = new WorkflowApplication(new Workflow1() ">WorkflowApplication wfApp = new WorkflowApplication (new Workflow1 () </span><span title="{ ">{ </span><span title="BookmarkNameInarg = bookmarkName ">BookmarkNameInarg = bookmarkName </span><span title="}); ">}); </span><span title="wfApp.Completed = delegate(WorkflowApplicationCompletedEventArgs e) ">wfApp.Completed = delegate (WorkflowApplicationCompletedEventArgs e) </span><span title="{ ">{ </span><span title="syncEvent.Set(); ">syncEvent.Set (); </span><span title="}; ">}; </span><span title="wfApp.Run(); ">wfApp.Run (); </span><span title="wfApp.ResumeBookmark(bookmarkName,Console.ReadLine()); ">wfApp.ResumeBookmark (bookmarkName, Console.ReadLine ()); </span><span title="syncEvent.WaitOne(); ">syncEvent.WaitOne (); </span><span title="Console.WriteLine("-------------\nProvided to you by : https://www.sourcebaran.com \npress any key ..."); ">Console.WriteLine ("------------- \ nProvided to you by: https://www.sourcebaran.com \ npress any key ..."); </span><span title="Console.ReadLine(); ">Console.ReadLine (); </span><span title="} ">} </span><span title="} ">} </span><span title="} ">} </span><span title="اجرای Workflow ">Run Workflow </span><span title="پروژه UseBookmark را بعنوان پروژه StartUp تنظیم نمایید و در ادامه برای اجرای Workflow دکمه های میانبر Ctrl+F5 را فشار دهید.">Set the UseBookmark project as a StartUp project, and press Ctrl + F5 shortcut to run Workflow. </span><span title="با این کار Workflow ذخیره شده و بدون عملیات debugging نتیجه نشان داده خواهد شد.">This will save the Workflow and will display the result without debugging. </span><span title="همان طور که می بینید، نتیجه در Console ویندوز اجرا می شود و اعدادی که انتظارش را داشتیم چاپ می شود: ">As you can see, the result is executed in the Windows console and the numbers that we expect are printed: </span><span title="پروژه گردش کار UseBookmark چگونه کار می کند؟ ">How does the usebookbook workflow work? </span><span title="در مرحله ۲ (ساخت اکتیویتی با استفاده از Bookmark)، کلاسی را ایجاد کردیم که از NativeActivity ارثبری دارد.">In step 2 (building activity using Bookmark), we created a class that has inherited NativeActivity. </span><span title="NativeActivity یک اکتیویتی abstract ویژه است که با استفاده از آن می توانید اکتیویتی های پیچیده بسازید. ">NativeActivity is a special abstract feature that you can use to create complex assets. </span><span title="درباره نحوه ی ساخت اکتیویتی های پیجیده در فصل ۵ بیشتر صحبت خواهد شد. ">Chapter 5 will be discussed further on how to build activated activites. </span><span title="اما در کد زیر، با استفاده از متد ()context.CreateBookmark یک Bookmark با دو آرگومان BookMarkName و BookMarkCallback ایجاد کرده ایم: ">But in the code below, using the context.CreateBookmark () method, we created a bookmark with two arguments BookMarkName and BookMarkCallback: </span><span title="context.CreateBookmark(BookmarkName.Get(context),new BookmarkCallback(OnResumeBookmark)); ">context.CreateBookmark (BookmarkName.Get (context), new BookmarkCallback (OnResumeBookmark)); </span><span title="1 ">1 </span><span title="context.CreateBookmark(BookmarkName.Get(context),new BookmarkCallback(OnResumeBookmark)); ">context.CreateBookmark (BookmarkName.Get (context), new BookmarkCallback (OnResumeBookmark)); </span><span title="زمانی که در فایل Program.cs تابع ()wfApp.ResumeBookmark را فراخوانی می کنیم، متد OnResumeBookmark ای که در فایل MyReadLineActivity.cs تعریف کردیم، اجرا خواهد شد.">When we call the function () wfApp.ResumeBookmark in the program.cs file, the OnResumeBookmark method that we defined in the MyReadLineActivity.cs file will run. </span><span title="اما در کد زیر، با تنظیم خصوصیت CanInduceIdle نشان می دهیم که آیا اکتیویتی سفارشی ما می تواند باعث شود که Workflow متوقف (Idle) شود یا خیر؟">But in the code below, by setting the CanInduceIdle property, we can show if our custom activity can cause the Workflow to be idle or not. </span><span title="مقدار پیشفرض false است: ">The default value is false: </span><span title="فایل MyReadLineActivity.cs ">MyReadLineActivity.cs file </span><span title="protected override bool CanInduceIdle ">protected override bool CanInduceIdle </span><span title="{ ">{ </span><span title="get ">get </span><span title="{ ">{ </span><span title="{ return true;">{return true; </span><span title="} ">} </span><span title="} ">} </span><span title="} ">} </span><span title="1 ">1 </span><span title="2 ">2 </span><span title="3 ">3 </span><span title="4 ">4 </span><span title="5 ">5 </span><span title="6 ">6 </span><span title="7 ">7 </span><span title="protected override bool CanInduceIdle ">protected override bool CanInduceIdle </span><span title="{ ">{ </span><span title="get ">get </span><span title="{ ">{ </span><span title="{ return true;">{return true; </span><span title="} ">} </span><span title="} ">} </span><span title="} ">} </span><span title="اما قطعه کد زیر را در نظر بگیرید: ">But consider the piece of code below: </span><span title="wfApp.ResumeBookmark(bookmarkName,Console.ReadLine()); ">wfApp.ResumeBookmark (bookmarkName, Console.ReadLine ()); </span><span title="1 ">1 </span><span title="wfApp.ResumeBookmark(bookmarkName,Console.ReadLine()); ">wfApp.ResumeBookmark (bookmarkName, Console.ReadLine ()); </span><span title="زمانی که دستور بالا اجرا می شود، متد ()OnResumeBookmark در اکتیویتی MyReadLine فراخوانی خواهد شد و مقدار که در کنسول توسط کاربر وارد شده است توسط متد ()Console.ReadLine دریافت شده و به ()OnResumeBookmark پاس داده می شود.">When the above command is executed, the OnResumeBookmark method () will be called in the MyReadLine activity, and the value entered into the console by the user is received by the () Console.ReadLine and passed to () OnResumeBookmark.</span></span> |
راستی! برای دریافت مطالب جدید در کانال تلگرام یا پیج اینستاگرام سورس باران عضو شوید.
- منبع : سورس باران
- رمز فايل : www.sourcebaran.com
- انتشار: ۱۷ دی ۱۳۹۳
دسته بندی موضوعات
- آموزش ارز دیجیتال
- آموزش برنامه نویسی
- آموزش متنی برنامه نویسی
- اطلاعیه و سایر مطالب
- پروژه برنامه نویسی
- رپورتاژ
- فروشگاه
- فیلم های آموزشی
- ++C
- ADO.NET
- Adobe Flash
- Ajax
- AngularJS
- apache
- ARM
- Asp.Net
- ASP.NET MVC
- AVR
- Bootstrap
- CCNA
- CCNP
- CMD
- CSS
- Dreameaver
- EntityFramework
- Go
- HTML
- IOS
- jquery
- Linq
- Mysql
- Oracle
- PHP
- PHPMyAdmin
- Rational Rose
- silver light
- SQL Server
- Stimulsoft Reports
- Telerik
- UML
- VB.NET&VB6
- WPF
- Xml
- آموزش های پروژه محور
- اتوکد
- الگوریتم تقریبی
- امنیت
- اندروید
- اندروید استودیو
- بک ترک
- بیسیک فور اندروید
- پایتون
- جاوا
- جاوا اسکریپت
- جوملا
- دلفی
- دوره های رایگان پیشنهادی
- زامارین
- سئو
- ساخت CMS
- سی شارپ
- شبکه و مجازی سازی
- طراحی الگوریتم
- طراحی بازی
- طراحی وب
- فتوشاپ
- فریم ورک codeigniter
- فلاتر
- کانستراکت
- کریستال ریپورت
- لاراول
- معماری کامپیوتر
- مهندسی اینترنت
- هوش مصنوعی
- یونیتی
- کتاب های آموزشی
- Android
- ASP.NET
- AVR
- LINQ
- php
- Workflow
- اچ تی ام ال
- بانک اطلاعاتی
- برنامه نویسی سوکت
- برنامه نویسی موبایل
- پاسکال
- پایان نامه
- پایتون
- جاوا
- جاوا اسکریپت
- جی کوئری
- داده کاوی
- دلفی
- رباتیک
- سئو
- سایر کتاب ها
- سخت افزار
- سی اس اس
- سی پلاس پلاس
- سی شارپ
- طراحی الگوریتم
- فتوشاپ
- مقاله
- مهندسی نرم افزار
- هک و امنیت
- هوش مصنوعی
- ویژوال بیسیک
- نرم افزار و ابزار برنامه نویسی
- وردپرس