همانطور که می دانید متد SearchWork برای جستجو در کارها بکار می رود. فرمت این متد به شکل زیر است:
مقدار مشخصه Status در data نشان دهنده وضعیت کارهایی است که جستجو می شود. برای روشن تر شدن مطلب بهتر است با انواع وضعیتهای کارها آشنا شویم:
انواع وضعیتهای کارها
کارها اساسا شش وضعیت دارند:
- کارهای فعال
- کارهای متوقف شده با خطا
- کارهای لغو شده
- کارهای پایان یافته
- کارهای تعلیق نشده
- کارهای تعلیق شده
پس بنابراین با استفاده از این مشخصه، می توانیم نتایج جستجو را محدود به یک یا چند وضعیت خاص نماییم. برای مثال فقط کارهای خاتمه یافته را بازیابی کنیم.
مقدار دهی مشخصه Status
بطور کلی اگر یک مفهوم چندحالتی باشد این مفهوم بهتر است به شکل Bitwise تعریف شود. به این معنی که برای هر حالت یک Bit در نظر گرفته می شود که دو حالت (0، و 1) را می تواند داشته باشد. سپس ترکیب حالتها با یک عدد باینری (مبنای دو) نشان داده می شود که معادل این عدد در مبنای 10 مقداری است که ترکیب حالتهای این مفهوم را مشخص می کند. حال از آنجایی که مفهوم وضعیت کار هم چند حالتی است (فعلا 6 حالت دارد) لذا برای محاسبه Status در اینجا از روش BitWise استفاده شده است. به این ترتیب برای هر یک از وضعیت ها یک Bit به شرح زیر تعیین شده است.
Bit0 = Active Works (فعال)
Bit1 = Failed With Error Works (متوقف شده با خطا)
Bit2 = Aborted Works (لغو شده)
Bit3 = Ended Works ( پایان یافته)
Bit4 = Not Suspended Works (تعلیق نشده)
Bit5 = Suspended Works (تعلیق شده)
مقدار هرکدام از این Bitها برابر با 0 یا 1 است که 0 به معنی عدم انتخاب این وضعیت و 1 به معنی انتخاب این وضعیت است. لذا این شش بیت در کنار هم یک عدد باینری (در مبنای 2) را تشکیل می دهند که ترکیبهای متفاوت و متعددی از وضعیتها را شامل خواهند شد. برای نمونه به مثالهای زیر توجه کنید:
توضیحات
|
Bit0 فعال
|
Bit1
توقف با خطا
|
Bit2 لغو شده
|
Bit3
پایان یافته
|
Bit4
تعلیق نشده
|
Bit5
تعلیق شده
|
عدد وضعیت در مبنای 2
|
عدد وضعیت در مبنای 10
|
تمام کارهای فعال و غیرفعال
|
1
|
1
|
1
|
1
|
0 |
0 |
1111
|
15
|
فقط کارهای پایان یافته
|
0
|
0
|
0
|
1
|
0 |
0 |
1000
|
8
|
فقط کارهای لغو شده
|
0
|
0
|
1
|
0
|
0 |
0 |
100
|
4
|
کارهای غیرفعال (متوقف، لغو شده و پایان یافته)
|
0
|
1
|
1
|
1
|
0 |
0 |
1110
|
14
|
کارهای فعال تعلیق نشده* |
1 |
0 |
0 |
0 |
1 |
0 |
10001 |
17 |
کارهای فعال تعلیق شده |
1 |
0 |
0 |
0 |
0 |
1 |
100001 |
33 |
کل کارهای فعال |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
* : اگر هیچ مقداری برای Status تعیین نشود، این جستجو بصورت پیش فرض، کارهای با وضعیت فعال و تعلیق نشده را بازیابی خواهد کرد. بنابراین بجای 17 می توانید از عدد صفر استفاده کنید یا اینکه بطور کلی مقداری را برای status تعیین نکنید.
روش تبدیل عدد باینری به عدد دهدهی (مبنای 10)
برای این کار کافی است عدد باینتری را از سمت راست و بسته به موقعیت در توانهای عدد 2 ضرب کنید:
برای مثال، عدد دهدهی ردیف دوم یعنی کارهای پایان یافته را محاسبه می کنیم:
وضعیت کارهای پایان یافته در مبنای 2=1000
این وضعیت در مبنای 10 = 1*23 + 0*22 + 0*21 + 0*20 =8+0+0+0=8
مثال 2: کارهای غیرفعال (متوقف، لغو شده و پایان یافته)
1110=وضعیت در مبنای 2
این وضعیت در مبنای 10 = 1*23 + 1*22 + 1*21 + 0*20 =8+4+2+0=14
مثال 3: کارهای تعلیق شده
100001=وضعیت در مبنای 2
این وضعیت در مبنای 10 = 1*25 + 0*24 + 0*23 + 0*22 + 0*21 + 1*20 =32+0+0+0+0+ 1=33
پیدا کردن وضعیتها از مقدار دهدهی Status
حال ممکن است این سوال پیش بیاید که چگونه از مقدار Status متوجه شویم که شامل چه وضعیتهایی است. برای این کار کافی است عدد دهدهی را به مبنای دو (باینری) تبدیل کنیم. در این صورت به راحتی و با توجه به ترتیب 0 و 1 ها متوجه می شویم که کدام وضعیت را شامل است.
مثال
فرض کنید مقدار Status=10 است. حال اگر این عدد را به باینری تبدیل کنیم برابر می شود با 1010
حال در این عدد باینری از راست به چپ ، وضعیتهای به شرح زیر است:
Bit0=0
Bit1=1
Bit2=0
Bit3=1
به این ترتیب مشخص است که فقط Bitهای 1 و 3 انتخاب شده اند. یعنی "متوقف با خطا" و "پایان یافته"
تکمیلی : مزیت استفاده از BitWise
در مفاهیم چند حالتی که ترکیبهای متفاوتی از حالتها را می تواند داشته باشد، اگر نخواهیم از BitWise استفاده کنیم باید برای تمام ترکیبهای یک، دوتایی و سه تایی حالتها یک مقدار اختصاص دهیم. برای مثال برای مفهوم وضعیت کارها چون دارای شش حالت است تعداد !6 یا 720 ترکیب می تواند وجود داشته باشد. بنابراین باید 720 کد را به حالتهای مختلف اختصاص دهیم که کدنویسی را پیچیده و debug کردن کدها را با دشواری روبرو می کند. مزیت دوم این است که این روش قابل توسعه است یعنی با اضافه شدن یک حالت، به راحتی فقط یک رقم به عدد باینری اضافه می شود اما در غیر اینصورت باید !7 یا 5040 کد را پیش بینی و استفاده کنیم. شاهد این قضیه این است که در نسخه های قبلی چهار حالت پشتیبانی می شد و در نسخه 15.26 به راحتی دو حالت دیگر یعنی کارهای تعلیق نشده و کارهای تعلیق شده در قالب دو بیت جدید 4 و 5 به این الگو اضافه شد.