Yoni Goldberg

SharePoint Expert, Human Workflow specialist. WWW.GOLDBERGYONI.COM

מעל 40 טיפים לפיתרון מוצלח, חלק 4 מתוך 4-SharePoint Workflow

with 3 comments

 
 
בחלק זה טיפים לפיתוח באמצעות קוד
לחץ כאן לחלק 1 –טיפים ליישום ללא קוד
לחץ כאן לחלק 2 –עוד טיפים ליישום ללא קוד
לחץ כאן לחלק 3 – אפילו עוד טיפים ליישום ללא קוד
לחץ כאן לחלק 4 – טיפים לפיתוח באמצעות קוד
 
27. clip_image002 טיפ מספר 27: הזהר מזרימה של מכונת מצבים (State Machine)

אמנם נכון ש-VS מאפשר לך לפתח מכונת מצבים ל-SHAREPOINT אבל שים לב למגבלה חמורה לפני שאתה יוצא אל הדרך: אין באפשרותך ליצור סבב אישורים של כמה אנשים בתוך זרימת מצבים, כלומר לא תוכל למשל להגדיר 2 מצבים: מצב אחד בו קבוצת מנהלים א’ מאשרת ולאחר שהם אישרו הבקשה עוברת למנהל על.

28.  clip_image002 טיפ מספר 28: תהליך שיודע לחזור לאחור
חזרה לאחור בתהליך היא בקשה מבוקשת למדי אולם זרימת עבודה סידרתית (SEQUENTIAL WORKFLOW) אינה תומכת בה באופן טבעי, אפשר אמנם לממש דרישה כזו באמצעות STATE MACHINE אך לשיטה זו מגבלות חמורות יותר. אז מה בכל זאת עושים? תוכל להשתמש בלולאה ולשים בה את כל הפעילויות, בכל פעם שמישהו רוצה להחזיר לאחור נתחיל שוב את הלולאה. הכי קל להסביר עם דוגמא: נניח ויש 4 מנהלים המאשרים אחד אחרי השני. כל מנהל יכול לבקש להחזיר את התהליך לאחור. נשים את כל המנהלים בתוך לולאה (כל מנהל מאשר הוא למעשה פעילות של יצירת משימה שלאחריה פעילות של הקשבה לשינוי במשימה) שתנאי הסיום של הלולאה יהיה שכל המנהלים אישרו או שאחד דחה, כלומר הלולאה תרוץ כל עוד יש מנהלים שצריכים לאשר. עכשיו נניח שמנהל מספר 3 מבקש להחזיר את התהליך למנהל מספר 2, התהליך ממשיך קדימה למנהל מספר 4 אך לא נכנס לשלב זה (על ידי השמת תנאי) היות ואנו צריכים לחזור למנהל מספר 2, כעת הלולאה תתחיל שוב, נדלג על מנהל 1(על ידי השמת תנאי) ונגיע למנהל מספר 2 – בדיוק מה שרצינו.

clip_image006

לולאה בתהליך מאפשרת לדמות מצב של חזרה לאחור, בתמונה כל הפעילויות של האישור נמצאות בתוך לולאה

29. clip_image002 טיפ מספר 29: טפל במצבים של ביטול

המשתמש המורשה יכול להכנס בממשק המשתמש ולבטל תהליך שרץ. לעתים רבות פעולה כזו עשויה להיות חשובה מבחינה טכנית או עיסקית, אם למשל יש לנו תהליך של הזמנת כיתה ושריינו כיתה לקורס – ביטול התהליך מצריך שיחרור המשאב החשוב. ב-Workflow Designer של Visual Studio יש משטח מיוחד לתיאור הפעילויות שיקרו במצב של ביטול.

clip_image009

משטח עבודה בתהליך לתיאור התנהגות של ביטול

30. clip_image002 טיפ מספר 30: טפל בשגיאות בחוכמה

כשמתרחשת שגיאה בתהליך יש לכך משמעות עיסקית וטכנולוגית חשובה, חשוב שאנשי הביזנס יראו את זה מהר ושהאנשים הטכנולוגיים יוכלו בקלות להבין את השגיאה. יש לך משטח מיוחד להרצת ACTIVITIES שיתרחשו כאשר מתרחשת שג יאה, לעולם אל תתעלם ותשאיר אותו ריק. הנה כמה טיפים שיעזרו לטפל בשגיאה בחוכמה (תמונה של קוד דומה מופיעה בהמשך): (1) התחל מקטן ועבור לגדול, בצע בהתחלה את הפעולות הפשוטות ביותר ורק לאחר מכן נסה את המסובכות יותר. לדוגמא, אם בזמן טיפול בשגיאה תנסה לשלוח הודעה למערכת חיצונית ב-WS וקריאה זו תיפול – יפסיק הקוד המטפל בשגיאה ולא יהיה לך שום תיעוד של הבקשה. לכן התחל בפעולות שסיכוי ההצלחה שלהם גבוה (כתיבה ללוג למשל) ולאט לאט עבור לפעולות מורכבות יותר. (2) כתוב ללוג את השגיאה בהתחלה, בתמונה למטה דוגמא לאיך משיגים את ה-EXCEPTION שהתרחש בתהליך וכותבים ללוג

(2) נסה לשלוח מייל למנהל המערכת, (3) באפשרותך לסמן את הפריט ברשימה שעליו רצה זרימת העבודה כשגוי (למשל אם תוסיף עמודה מיוחדת ללנושא), באופן זה תוכל ליצור תצוגה (VIEW) של שגיאות למנהל המערכת

clip_image013

דוגמא למשטח טיפול בשגיאות, במקרה זה קיים רק ACTIVITY מסוג קוד לטיפול בשגיאה, את הקוד לדוגמא ניתן לראות בתמונה הבאה

clip_image015

קוד לדוגמא המטפל בשגיאה בתהליך

31. clip_image002 טיפ מספר 31: שים לב היטב לנושא גירסאות של תהליך

פיתחת תהליך שרץ בסביבת זמן אמת, עכשיו אתה נדרש לבצע שינויים, איך תשדרג את הגירסה של התהליך? אם מעולם לא ביצעת זאת שים לב היטב למורכבות של הנושא. להלן כמה טיפים בנושא שידרוג תהליך:

· אין ב-SHAREPOINT מנגנון לניהול גירסאות של תהליכים הכתובים בקוד. כאשר יש לך גירסה חדשה של תהליך עליך לדאוג להפיץ אותו בחבילת התקנה חדשה ולהגדיר אותו כתהליך חדש לגמרי במערכת. פירוש הדבר שעליך להשתמש ב-DLL שונים (שם שונה או גירסה שונה), ב-FEATURE שונה, בטפסי משימה שונים (בהנחה שהשתמשת ב-INFOPATH) מממש מדובר בפיתרון חדש שחולט מעט משאבים עם הפיתרון הקיים.

· כאשר תפיץ גירסה חדשה של תהליך (שוב, למעשה מדובר מבחינת המערכת בתהליך אחר לגמרי) תצטרך להגדיר ברשימה (או בסוג תוכן) הגדרה של זרימת עבודה חדשה עם שם שונה ולהגדיר גם שזרימות העבודה מהעבר (הגירסאות הקודמות) יכולות להמשיך לרוץ אך תהליכים חדשים יתחילו עם הגירסה החדשה.

32. clip_image002 טיפ מספר 32: איך לבטל משימות בסבב אישורים

דרישה מאוד נפוצה בסבב אישורים היא שכאשר גורם כלשהו דוחה בקשה – המשימות של שאר חברי הצוות מתבטלות. מפתחים רבים מתקשים לפתח דרישה זו בעיקר כי לא ברור איזה Correlation Token לשים והיכן למקם את ה-Update All Tasks Activity, הנה כמה טיפים בנושא:

· כדי לשנות מאפיין של משימות קיימות, כולל שינוי הסטטוס ל-CANCEL, משתמשים ב-ACTIVITY הקיים מסוג UpdateAllTasks.

· פעולה זו תשפיע על כל המשימות במערכת שטרם הושלמו.

· Activity זה דורש CorrelationToken שה-OWNER שלו הוא התהליך עצמו (הרמה העליונה ביותר) היות ופעילות שו משפיעה על כל המשימות בתהליך.

· בסבב אישורים (אוסף של Tasks Activity בתוך REPLICATOR), אם נרצה לבטל את המשימות של כל המאשרים שטרם הזינו החלטה (משימות שטרם הושלמו), נבדוק לאחר כל משימה האם ההחלטה היא לדחות, במקרה שכן נשים UpdateAllTasks Activity ובתוכו נשנה את הסטטוס של המשימות, לאחר מכן נשים CompleteTask Activity כדי להשלים את המשימה של הגורם שביצע את ההחלטה. תמונה של מקרה זו מופיעה באיור להלן:

clip_image019

דוגמא ל-Task activities with cancellation

33. clip_image002 טיפ מספר 33: ארכיטקטורה חכמה: בנה לך Activity שמנהל סבב משימות

בכל פעם שאתה מקצה לגורם כלשהו משימה (או לכמה גורמים) – אתה נדרש לשים שורה של ACTIVIES (Create Task, On Task Change וכו’), לעתים כל סבב משימות עשוי לכלול Activites רבים. אם בתהליך שלך כמה סבבי אישורים – משטח העבודה עשוי להראות ענק. מעבר לזה, יש כאן חזרה שוב ושוב על אותה תבנית ואותה לוגיקה משוכפלת – לא עדיף ליצור רכיב אחד שנבצע בו שימוש חוזר? בנה לך או הורד Activity שיודע לבצע סבב אישורים, הרכיב יקבל כפרמטרים את שמות האנשים/קבוצה שצריכים לאשר, את הטקסט למיילים ולמשימות (ופרמטרים נוספים) ויבצע לבדו סבב אישורים. בתוך ACTIVITY זה יהיו כמובן Create Task, On Task Change ושאר הרכיבים לפעולות של סבב משימה. באופן זה, כל סבב אישורים בזרימת העבודה שלך יהיה מורכב מ-Activity אחד (כלפי חוץ, כמובן שבתוכו הוא כולל Activites נוספים) כך תוכל להתמצא בקלות, ולבצע שימוש חוזר בקוד מרכזי. למעשה זה למעשה מה שפותח במיקרוסופט כדי לאפשר למיישמים ליצור סבב אישורים ב-SPD, ה-CUSTOM TASK PROCESS ACTION הוא ACTIVITY בודד שיודע לנהל סבב משימות.

34. clip_image002 טיפ מספר 34: השתמש ב-Workflow Pluggable Services לתיקשור עם מערכות חיצוניות

תסריט די נפוץ הוא שאנו צריכים לעצור את זרימת העבודה עד לקבלת הודעה ממערכת חיצונית. לדוגמא, אם אנו מנהלים תהליך של ביצוע הזמנת סחורה ללקוח, לאחר שנפנה למערכת/ספק שמבצע שילוח, נרצה לעצור את זרימת העבודה עד לקבלת הודעה ממערכת השילוח על הצלחה/כישלון. SharePoint 2010 מאפשר לראשונה להוסיף למנוע זרימת העבודה (Workflow runtime) שירות (רכיב קוד שיורש מ-) שיודע להאזין לאירועים. העברת הודעות וקבלת הודעות ממערכות חיצוניות תהיה מובנית במנוע זרימות העבודה שידע לגרום לכל תהליך "לישון" עד שתגיע ההודעה המתאימה לה הוא מצפה. מידע נוסף אפשר למצוא כאן.

35. clip_image002 טיפ מספר 35: אפשר לתקן תהליך שנפל

מטבע הדברים תהליכים נופלים בגלל שגיאות, מאותו הרגע תהליכים אילו הסתיימו ואין דרך להחיות אותם. עובדה זו מצערת את משתמשי התהליך אך אין מה לעשות בנידון. למעט דבר אחד: רוב השגיאות מתרחשות בד"כ בתחילת תהליך (שם לראשונה מנסים לקרוא מידע מטפסים, לשלוח מייל וכו’) לכן נוכל לתפוס שגיאות רק בתחילת התהליך, בתוך ה-ACTIVITIES הראשונים ובמקום לזרוק את השגיאה ולהפיל את התהליך ניצור משימה ליוזם/למנהל המערכת לתקן את הבעיה (לדוגמא: אין קשר עם שרת המיילים או שחסר שדה בטופס) ואז כשהנ"ל ישלימו את המשימה התהליך ינסה להתחיל שוב. בתמונה למטה תוכל לראות דוגמא ל-Activities Branch של התחלת תהליך, כל הפעולות נמצאות בתוך לולאת While, תנאי היציאה של הלולאה הוא שלא היו שגיאות, בכל פעם שתהיה שגיאה תיווצר משימה לתיקון התקלה ולאחר אישור המשימה הלולאה תתחיל לרוץ שוב ולבדוק שהכל תקין הפעם.

מניסיוני, גישה זו מונעת מהרבה תהליכים ליפול ומונעת מהמשתמש להתחיל שוב למלא בקשה או להתחיל תהליך חדש.

clip_image023

 

36. clip_image002 טיפ מספר 36: בקרוב, בקרוב…

 

37. clip_image002 טיפ מספר 37: בקרוב, בקרוב…

 

38. clip_image002 טיפ מספר 38: בקרוב, בקרוב…

39. clip_image002 טיפ מספר 39: בקרוב, בקרוב…

 

40. clip_image002 טיפ מספר 40: בקרוב, בקרוב…

Advertisements

Written by Yoni Goldberg

November 27, 2011 at 8:43 am

Posted in Uncategorized

3 Responses

Subscribe to comments with RSS.

  1. […] לחץ כאן לחלק 1 –טיפים ליישום ללא קוד לחץ כאן לחלק 2 –עוד טיפים ליישום ללא קוד לחץ כאן לחלק 3 – אפילו עוד טיפים ליישום ללא קוד לחץ כאן לחלק 4 – טיפים לפיתוח באמצעות קוד […]

  2. […] לחץ כאן לחלק 1 –טיפים ליישום ללא קוד לחץ כאן לחלק 2 –עוד טיפים ליישום ללא קוד לחץ כאן לחלק 3 – אפילו עוד טיפים ליישום ללא קוד לחץ כאן לחלק 4 – טיפים לפיתוח באמצעות קוד […]

  3. […] לחץ כאן לחלק 1 –טיפים ליישום ללא קוד לחץ כאן לחלק 2 –עוד טיפים ליישום ללא קוד לחץ כאן לחלק 3 – אפילו עוד טיפים ליישום ללא קוד לחץ כאן לחלק 4 – טיפים לפיתוח באמצעות קוד […]


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: