הפעם החלטנו להתמקד בשכבת הביניים המחברת בין אפליקציית UI5 ( ה"Frontend") לבין מערכות SAP (ה"Backend") – בניית שירותי OData בעזרת SAP NetWeaver Gateway.
אז מה הם ש ירותי OData?
פרוטוקול המידע הנגיש OData (קיצור של Open Data Protocol) הוא פרוטוקול שפותח ע"י מיקרוסופט המאפשר העברת מידע באפליקציות HTML5. פרוטוקול זה מספק מענה לשאילתות ועדכונים ונבחר על ידי SAP כטכנולוגיית Middleware עבור יישומי SAPUI5. בעולם שלנו OData מאפשר חיבור טבעי לפונקציות RFC \ Search Helps, סינון ומיון של מידע, וכמובן ניהול שאילתות מרובות נתונים.
מדוע OData?
OData מכתיב חוקים וסטנדרטים אשר מקובלים היום בעולם פיתוח WEB. פרוטוקול זה משתמש בכתובות URL כדרך לציין גישה למשאב כלשהו כמקובל בממשקי REST, ומאפשר ביצוע פעולות שונות כגון קריאה \ עדכון \ יצירה \ מחיקה.
SAP בחרו ב-OData כפרוטוקול ראשי באמצעותו נבצע פעולות באפליקציות ונוכל להיצמד לסטנדרטים. זה ימנע מאנשי פיתוח לבנות שירותים כל אחד לפי ראות עיניו, וגם יאפשר למגוון טכנולוגיות ופלטפורמות אחרות לצרוך את המידע (אינטראופרביליות).
ממה מורכב OData?
הבסיס הוא ישויות עם מימוש פעולות שניתן לעשות על כל ישות (CRUDQ).
Entity – ישות (בדומה לstructure / שורה בטבלה)
Entity Set – סט של ישויות (בדומה לטבלה)
פעולות אפשריות לביצוע על ישות:
Create – יצירת ישות חדשה
Read – קריאה של ישות בודדת לפי מפתח
Update – עדכון ישות
Delete – מחיקה מישות
Query – שליפה של כמה ישויות מאותו סוג
פעולות נפוצות אשר ייחודיות לפרוטוקול OData
Deep Insert – יצירה של מספר ישויות בו-זמנית הקשורות אחת לשנייה בבקשה אחת
Function Import – טיפול פונקציונלי בתרחיש אשר לא ניתן לממש באמצעות CRUDQ
היכן בונים OData?
מידול של שירותי OData מתבצע בטרנזקציית SEGW בדרך כלל במערכת הECC ע"י יבוא של פונקציות RFC ומבנים SAPיים ונחשוף אותם באמצעות Gateway (מקומי או בענן). כמובן ניתן לחבר גם Search Helps.
התוצאה תהיה שירות WEB הנגיש עם כתובות HTTP לפי ארכיטקטורת REST.
למשל, אם נרצה לקבל רשימה של הזמנות נוכל לקבל אותה באמצעות הכתובת –
https://{ODataServerAddress}/Orders
במידה ונרצה לקבל הזמנה ספציפית לפי מפתח –
https://{ODataServerAddress}/Orders('123456789')
במידה ונרצה לצפות בשורה ספציפית של הזמנה ספציפית הכתובת כבר תראה אחרת –
https://{ODataServerAddress}/Orders('123456789')/OrderLines('10')
ניתן ליצור קשרים בין ישויות שגם הם באים לידי ביטוי בכתובות URL כמו בדוגמא של שורת הזמנה.
לסיכום
מכל הנאמר לעיל ניתן להבין שאפיון שירותי הOData הוא חלק בלתי נפרד מאפיון פתרונות מבוססי UI5. באפיון נשאף להגדיר את הישויות עצמן ולרדת לרזולוציות של שדות, מבנים והקשרים ביניהם.
העיקרון המוביל בבניית שירותי OData הוא פירוק של פונקציות מורכבות גדולות לפונקציות יותר "קלות" ששולפות כל פעם ישות אחת. לדוגמא, במקום פונקציה אחת שמביאה את כל פרטי דרישת הרכש בכמה מבנים יחד – כדאי לבנות פונקציה ייעודית לשורות ההזמנה, אחת לשותפים, אחת לשורות של הקצאת חשבון וכו'. לאחר מכן בונים תלויות וקשרים בין ישויות ואז קושרים את המבנים למסכים – ועל ידי כך משפרים את זמני התגובה ומפשטים את המורכבות מבחינת הנתונים.
OData בנוי על ישויות, ולכל ישות ניתן לממש מתודות CRUDQ שונות, כך שהיישום הופך להיות מודולרי וקל יותר לביצוע Reuse לחלקים שלמים במסכים.