top of page

מבוא לפעולות דינאמיות ב-SAP:
מנגנון הפעולות הדינאמיות ב-SAP מאפשר לנו להתניע פעולות מסוימות כאשר מבצעים תחזוקה על גבי סוג מידע מסוים.
להלן מגוון הפעולות שניתן להתניע:
- תחזוקה של סוג מידע/תת-סוג אחר.
- שליחת אי-מייל.
- קריאה לרוטינה.
במאמר זה נתמקד בפעולה הראשונה (תחזוקה של סוג מידע/תת-סוג אחר). הרציונאל בזה הוא שאת הפעולה הראשונה ניתן לקנפג עצמאית ע"י יועץ פונקציונאלי, כאשר על מנת לממש את 2 הפעולות האחרות נצטרך להיעזר בתוכניתן ABAP.
פעולות דינאמיות סטנדרטיות ב-SAP:
מערכת ה-SAP מאפשרת מגוון פעולות דינאמיות שבוצעו עליהן קונפיגורציה מראש, להלן נסתכל על דוגמא:
אם למשל ביצענו תחזוקה על סוג מידע 'נתונים אישיים' (סוג מידע 0002) עבור עובד במערכת ה-SAP, ניתן להבחין שכאשר המצב המשפחתי נשמר על "נשוי", המערכת אוטומטית מציעה את היצירה של רשומה חדשה בסוג מידע "קרובי משפחה/צאצאים" (סוג מידע 0021), תת-סוג 'בן-זוג'.
ניתן לראות את הפעולות שתוארו לעיל במסכים הבאים:
המסך הראשון - ניתן לראות שכאשר מעדכנים את המצב המשפחתי להיות "נשוי" תוך שימוש בקוד טרנזקציה PA30 (תחזוקת נתוני אב HR):

SAP_DYN_ACT_1.PNG

כאשר שומרים את הרשומה ב-IT0002, מסך יצירת קרוב משפחה/צאצאים אוטומטית מוצג לנו, כמו שניתן לראות בתצלום מסך הבא: (תת-הסוג שמוצע לנו הוא בן-זוג)

SAP_DYN_ACT_2.PNG

כעת, המכאניזם מאחורי ההתנהגות של המערכת שראינו לעיל היא פעולה דינאמית פשוטה של SAP שהוגדרה מראש במערכת. במקטע הבא, נראה כיצד ניתן להגדיר פעולות דינאמיות ב-SAP כמו זו שהוצגה לעיל.
קונפיגורציה של פעולות דינאמיות ב-SAP:
הקונפיגורציה של פעולות דינאמיות במערכת ה-SAP נעשית בחלק של ה-Customizing תוך שימוש בקוד טרנזקציה SPRO.
להלן הנתיב המדויק בטרנזקציה SPRO:
Personnel Management-Personnel Administration-Customizing Procedures-Dynamic Actions
להלן תצלום מסך של הנתיב המדויק בטרנזקציה SPRO:

SAP_DYN_ACT_3.PNG

כאשר נלחץ על הפעילות בעץ שנקראת "Dynamic Actions", המערכת תיקח אותנו למסך הבא:

SAP_DYN_ACT_4.PNG

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

SAP_DYN_ACT_5.PNG

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

SAP_DYN_ACT_6.PNG

כעת, נראה שיש לנו כמה וכמה פעולות דינאמיות עבור סוג מידע 0002 כמו שנראה בתצלום הבא:

SAP_DYN_ACT_7.PNG

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

SAP_DYN_ACT_8.PNG

שלושת העמודות שצוינו לעיל (סוג מידע, תת-סוג, שדה), השדה משמעותו אותו שדה שבעקבותיו הותנעה הפעולה הדינאמית. העמודה "סוג מידע" היא עמודת חובה, זאת משום שפעולה דינאמית מותנעת רק כאשר אנחנו שומרים סוג מידע. העמודה "תת-סוג מידע" היא אופציונאלית וחייבים למלא אותה רק אם הפעולה הדינאמית צריכה להיות מותנעת כאשר אנחנו שומרים תת-סוג מסוים של סוג מידע מסוים. העמודה "שדה" היא גם אופציונאלית, וצריך למלא אותה רק אם הפעולה הדינאמית צריכה להיות מותנעת כאשר שומרים שדה מסוים בסוג מידע מסוים. כעת, בדוגמא שלנו, הפעולה הדינאמית מותנעת כאשר אנחנו שומרים את הערך בשדה "מצב משפחתי" בסוג המידע. לכן נעדכן את  החיפוש שלנו בהתבסס על השדה "מצב משפחתי" גם. לפני שנבצע זאת, אנחנו צריכים למצוא את השם הטכני של השדה, על מנת  למצוא אותו, נריץ את קוד טרנזקציה SE11 ונזין PA0002 בשדה שמכיל את שם הטבלה בבסיס הנתונים. טבלה PA0002 זוהי הטבלה שמתאימה לסוג מידע 0002 (נתונים אישיים). נלחץ על כפתור ה-DISPLAY שמוצג בתצלום הבא:

SAP_DYN_ACT_9.PNG

לחיצה על DISPLAY תוביל אותנו למסך הבא שיוצג. נחפש אחר העמודה שמכילה תיאור מקוצר עם הערך "שדה משפחתי", בתצלום המסך נראה את הקטע המדובר מודגש. ניתן לראות ששם השדה הוא: FAMST.

SAP_DYN_ACT_10.PNG

להלן החיפוש המעודכן שלנו עבור הפעולה הדינאמית הרלוונטית שכעת כולל את שם השדה FAMST:

SAP_DYN_ACT_11.PNG

אם נבצע חיפוש שמשתמש ב-2 הקריטריונים, זאת אומרת, סוג מידע 0002 (נתונים אישיים) וכן שם שדה FAMST (מצב משפחתי), זה יוביל אותנו למסך הבא:

SAP_DYN_ACT_12.PNG

כעת, נראה שעדיין יש לנו כמה וכמה רשומות עבור הקומבינציה הזו של <סוג מידע, שדה>. כעת ננסה להבין את המשמעות של ארבעת העמודות שנותרו בטבלה הזו.
Function Character - העמודה הזאת מודגשת בתצלום הבא. זה מציין את סוג העיבוד שמתבצע על סוג מידע שבעקבותיו מותנעת הפעולה הדינאמית.

SAP_DYN_ACT_13.PNG

לעמודה זו יכולים להיות הערכים הבאים:
00 - סוג עיבוד עצמאי
02 - שינוי
04 - יצירה
06 - שינוי או יצירה
08 - מחיקה
10 - שינוי ומחיקה
12 - יצירה ומחיקה
לדוגמא, אם נזין את ה-Function Character עם מזהה 02, הפעולה הדינאמית תותנע כאשר סוג המידע שצויין עובר שינוי. אם נזין את ה-Function Character עם מזהה 06, הפעולה הדינאמית תותנע כאשר סוג המידע שצויין נוצר מחדש או כאשר הוא עבר שינוי. שלושת העמודות הנותרת מציינות: Sequence Number, Step, Variable Function Part.

Sequence Number מציין את המספר הסידורי סה"כ, 2 העמודות הנותרות: Step, Variable Function Part דורשות הסבר נפרד, בהמשך.
Step & Variable Function Part
ניתן לבצע השמה של כל אחד מהערכים הבאים לעמודה Step:
P - תנאי בדיקה
I - תחזוקה של רשומה בסוג מידע
W - השמת ערכי ברירת מחדל כאשר יוצרים רשומה חדשה
V - יצירת Reference ל-Step אחר
F - הפעלת שגרה
M - שליחת מייל
כל ערך אחר בעמודה זו מציין שורת הערה.
מכל הערכים לעיל, רק הערכים: 'P','I' ו-'W' רלוונטיים לדוגמא שלנו ונסביר אותם בפירוט. ה-Variable Function Part תלוי בעמודת ה-Step ובהתאם יש לו את המשמעויות הבאות:

Plausibility Checks - STEP = P

אם ה-Step כולל את הערך 'P' (תנאי בדיקה), העמודה Variable Function Part חייבים לציין את התנאי שאנחנו חייבים לבדוק. רק אם התנאי הזה יתקיים אז העיבוד של הפעולה הדינאמית ימשיך להתבצע. זה בעצם בדיוק כמו תנאי IF, כאשר התנאי עצמו מוגדר בעמודת Variable Function Part. בנוסף, ניתן להגדיר שאנחנו רוצים שכמה וכמה תנאים יצטרכו להתקיים על מנת שהעיבוד של הפעולה הדינאמית ימשיך להתבצע. במצב כזה, כל תנאי צריך להיות מצויין בשורה נפרדת, עם Sequence Number אחר. לעומת זאת, ניתן גם להגדיר שלפחות אחד מתוך רשימת תנאים צריך להתקיים כך שהעיבוד של הפעולה הדינאמית ימשיך להתבצע. במצב זה, כל תנאי ירשם בשורה נפרדת, עם Sequence Number אחר, תוך שימוש בקישור לוגי מסוג OR. את הקישור לוגי של OR אנחנו מציינים בעזרת הסמן X/ אחרי התנאי.

Maintain Infotype Record - STEP = I

אם ה-Step כולל את הערך 'I' (תחזוקה של רשומת סוג מידע), ה-Variable Function Part יציין את פרטי סוג המידע שאנחנו רוצים לתחזק בפורמט הבא:
Action, Infotype, Subtype, Object id, Start Date, End Date, Indicator

הפעולות האפשריות הן:
INS - תיווצר רשומה חדשה מסוג המידע שצויין.
COP - תועתק רשומה חדשה מסוג המידע שצויין
MOD - יבוצע שינוי על הרשומה של סוג המידע שצויין.
DEL - תבוצע מחיקה של הרשומה של סוג המידע שצויין.

ה-Indicator משמש על מנת לציין האם פעולות דינאמיות של SAP צריכות להיות מורצות ברקע. במידה וכן - משתמשים בסמן D/ אחרת נשאיר אותו ריק.
 

Default Values For New Record - STEP = W

נשתמש בערך הזה על מנת להגדיר ערך ברירת מחדל עבור כל שדה חדש ברשומה של סוג המידע החדשה שאנחנו מתחזקים. זה לא כולל כמובן את ערכי ברירת המחדל של Infotype, Subtype, Object id, Start Date, End Date משום שכל אלו נוצרים להם ערכי ברירת מחדל כאשר משתמשים ב-STEP = I שהוסבר למעלה ולא ב-STEP = W.
כעת נחזור בחזרה על מנת לראות את הקונפיגורציה של הפעולה הדינאמית שיצרנו במערכת ה-SAP:
אם נסתכל על סט השורות בתצלום הבא, כל השורות האלו נקראות כאשר השדה FAMST (מצב משפחתי) בסוג מידע 0002 (נתונים אישיים) נוצר או משתנה. כעת ננסה להבין כל אחת מהשורות בנפרד:
1. השורות עם המספרים 100, 104, 105 הן שורות Plausibillity Check עם סמן לוגי OR שאותו ניתן לראות ע"י ה-X/ בסוף כל שורה של ה-Variable Function Part.
זה אומר שהמערכת תבדוק אם:
- ה-Country Grouping שמזוהה ע"י: T001P-MOLGA הוא '99' או:
- הערך הקודם (שמזוהה ע"י -PSAVE) של שדה מצב משפחתי (FAMST) הוא לא ריק או:
- הערך הקודם (שמזוהה ע"י -PSAVE) של השדה מצב משפחתי (FAMST) הוא לא '1' (כאן, '1' מציין את הקוד לנשוי).

אם אף אחת מהתנאים הבאים לא מתקיים, העיבוד של הפעולה הדינאמית לא ימשיך הלאה.
אחרת, אם לפחות אחד מהתנאים לעיל מתקיים, המערכת תמשיך לבצע עיבוד של השורה מספר 106.
2. השורה 106 בודקת האם הערך של שדה מצב משפחתית שנשמר בזה הרגע (P0002-FAMST) הוא '1', זאת אומרת 'נשוי'. אם לא, העיבוד של הפעולה הדינאמית לא ימשיך, אחרת, המערכת תבצע עיבוד של שורה מספר 107.
3. השורה 107 יוצרת רשומה חדשה בסוג מידע 0021 (קרובי משפחה/צאצאים), בתת-סוג 1 (בן-זוג) עם תאריך התחלה זהה לתאריך ההתחלה של סוג מידע 0000 ותאריך סיום זהה לתאריך סיום של סוג מידע 0000. מאחר שאין אינדיקטור של עיבוד ברקע D/ בסוף השורה הזאת, המערכת תציע יצירה של הרשומה לא ברקע כמו שראינו בתחילת המאמר.

 

SAP_DYN_ACT_14.PNG

איך לערוך את הפעולות הדינאמיות במערכת ה-SAP?
ישנן כמה אופציות, ניתן לגשת ל-IMG ולחפש את הטקסט: Dynamic actions.
בנוסף, ניתן לערוך את הטבלה T588Z ע"י שימוש בקוד הטרנזקציה SM30 עבור תחזוקה של טבלאות.
טיפים וטריקים כלליים לעבודה עם טבלת הפעולות הדינאמיות:
1. תמיד לשים הערה: בתחילת הפעולה הדינאמית על מנת שנוכל לזהות אותה אח"כ. להערה לא צריך להיות שום ערך בעמודת Indicator וכן היא צריכה להתחיל עם * בחלק ה-Variable Function. זה עוזר הרבה יותר בקלות למצוא פעולה דינאמית בטבלה הענקית הזאת. נראה שהטיפ הזה עוזר ממש כאשר נגדיר הרבה פעולות דינאמיות  עבור אותו סוג מידע. יהיה לנו במצב הזה קשה מאוד להבחין בפעולה דינאמית ספציפית בין הרבה פעולות דינאמיות שעל פניו נראות אותו דבר. בנוסף, זה יתן לנו אבחנה טובה מה אנחנו אמורים לעשות עם הפעולה הנידונה כאשר אנחנו באים לערוך אותה, נניח, אחרי שישה חודשים מהפעם הראשונה שיצרנו אותה. אם ברצוננו לערוך את כל טבלת הפעולות הדינאמיות - נשתמש בתחזוקה של טבלה T588Z. נשתמש בטבלה זו כאשר אנחנו מתחילים לבצע קונפיגורציה עבור פעולה דינאמית ואנחנו צריכים להציג דוגמאות אחרות לפעולות דינאמיות על סוגי מידע אחרים.
2. אם אנחנו רוצים לערוך פעולה דינאמית עבור סוג מידע מסוים, ניתן להשתמש ב-View של הטבלה שצייננו שנקרא: V_T588Z. כאשר לוחצים על כפתור ה-"maintain", אנחנו נתבקש להזין את סוג המידע שאנחנו מעוניינים להשתמש בו. במצב זה המערכת מבצעת הגבלה למספר הרשומות שיהיו של סוג המידע שנבחר בלבד. יתכן ונצטרך למצוא דוגמא של פעולה דינאמית דומה ולכן נחפש בכל הטבלה דוגמא מתאימה. בגרסאות מסוימות של מערכת ה-SAP, לחצני ה-"find" ו-"find next" מואפרים. פתרון אפשרי לבעיה זו ניתן ע"י לחיצה על כפתור "הדפסה" של הטבלה, זה יקח אותנו למסך סקירה של טבלת הפעולות הדינאמיות. כעת נוכל להשתמש בלחצני ה-"find" ו-"find next". לאחר שמצאנו את החלק הרלוונטי שאנחנו מעוניינים להעתיק, נרשום אותו בצד, או שנעתיק אותו לתוך ה-clipboard ונלחץ על הכפתור שיש עליו חץ ירוק (כפתור חזרה), שיקח אותנו חזרה למסך תחזוקת הטבלה.
3. אם אנחנו מעוניינים לבחור באיזור טקסט מסוים ב-SAP, לעיתים זה לא יהיה אפשרי אם אנחנו בשדה ספציפי או בתצוגה מסוימת של טבלה. נשתמש במקרה זה בצירוף לחצני המקלדת הבא: Ctrl + Y על מנת להדגיש פיסת טקסט מסוימת שלאחר מכן נוכל להעתיק אותה ל-clipboard.
4. כאשר אנחנו מתחילים לקנפג את הפעולה הדינאמית בפעם הראשונה - נראה לפעמים שהיא לא עובדת 100% - זה דבר נפוץ יחסית. אם הפעולה הדינאמית לא נקראת בכלל, מה שנבצע הוא סימון של כל ה-plausibility checks בתור הערות. לאחר שאנחנו רואים שהפעולה הדינאמית מעלה בצורה מוצלחת את המסך של סוג המידע, אנחנו יכולים להוריד את ההערות ובעצם לגרום לכך שה-plausibility checks יהיו פעילות בחזרה - אחת בכל פעם. ככה נקבל מושג יותר טוב איפה זה נופל.
5. חשוב מאוד לקבוע רווחים בין פעולה דינאמית אחת לשניה, רווחים אלו יקבעו ע"י מספור שונה בעמודת ה-Sequence Number של לפחות 10 שורות. חשוב לזכור שטבלה זו לא עובדת כמו MS Excel ששמה אנחנו יכולים בקלות להכניס שורה חדשה. כל השורות בטבלת אירועים דינאמיים ממוספרות ולכן זו יכולה להיות בעיה גדולה מאוד להכניס שורה. מומלץ להשתמש במספור זוגי/אי זוגי בכל שורה של קונפיגורציה, אפילו יותר טוב לרשום כל שורה במיקום השלישי אחרי השורה הקודמת, זה יחסוך מאיתנו הזזה של כל הפעולה הדינאמית, פעולה שיכולה להיות לא נעימה בכלל.
6. אם אנחנו רוצים שהפעולה הדינאמית תבדוק כמה וכמה ערכים עבור אותו שדה בבדיקת ה-plausibility check, נשתמש ב-'X/' בסוף כל שורה, עבור כל הערכים. לעיתים נרצה שהפעולה הדינאמית תתבצע ברקע ולא תיהיה נראית למשתמש. במצב זה נשתמש ב-"D/" בסוף של הפעולה הדינאמית (אחרי שבדקנו את הפעולה הדינאמית ואנחנו סגורים עליה ב-100%).
7. חשוב לזכור שאם הפעולה הדינאמית לא עונה על הדרישות שלנו, תמיד ניתן להשתמש בפעולה הדינאמית על מנת שתקרא לתוכנית משתמש שתיהיה הרבה יותר גמישה מאשר הפונקציונליות שמציעות הפעולות הדינאמיות הסטנדרטיות.
8. אם אנחנו מעוניינים לבדוק סוג פעולה מסוימת או סיבה לפעולה, נשתמש בשדות: PSPAR-MASSN (סוג פעולה) ובשדה: PSPAR-MASSG
(סיבה לפעולה).

חשוב לשים לב:
ישנם מגוון של שדות שידועים בצורה אוטומטית כאשר מותנעת פעולה דינאמית כלשהי. השדות הידועים: השדות של סוג המידע שהתניע את הפעולה דינאמית ידועים. בנוסף, תוכן הטבלה של טבלאות: T001P (איזור עובדים/תת אזור עובדים) וכן טבלה: T503 (קבוצת עובדים/תת-קבוצת עובדים) וכן המבנים: PSPAR וכן: PSAVE ידועים כל אלה. T001P, T503 וכן: PSPAR מכילים את הערכים התקפים בתאריך ההתחלה של הרשומה הנוכחית. PSAVE מכיל את הערכים הישנים של רשומת סוג המידע. לאחר גרסה 4.5, ניתן להשתמש בערכים של מבנה RP50D, למשל, ע"י חישוב או מילוי שלהם תוך ביצוע קריאה ל-FORM - 'F' (שגרה) ולאחר מכן שימוש בהם לבדיקות כאלו ואחרות או בשביל הגדרות של ערכים כאשר אנחנו מתחזקים רשומה בסוג מידע.

bottom of page