איך באמת מתחברים ל-Service Layer של SAP Business One - תהליך ה-Login, העוגיות B1SESSION ו-ROUTEID, פקיעת 30 הדקות ושגיאה 5002-, OData v4 מול v3 שהוצא משימוש, ודפוס האצווה ששומר על מסמכים עקביים.
עיקרי הדברים
- האימות הוא session ולא טוקן. שולחים POST ל-/Login עם שם משתמש, סיסמה ו-CompanyDB, ואז נושאים את עוגיית B1SESSION - וגם את ROUTEID, אחרת מופע מאחורי מאזן עומסים ידחה אותך.
- ה-session פג אחרי 30 דקות חוסר פעילות ומחזיר קוד שגיאה 5002-. כל אינטגרציה שרצה יותר מהפסקת קפה חייבת לתפוס את הקוד הזה ולהתחבר מחדש אוטומטית.
- יש ליצור מסמכים בקריאה אחת עם השורות מקוננות בפנים. כותרת שנוצרת ראשונה ושורות שמתווספות אחריה משאירות מסמך חצי-כתוב ב-ERP כשמשהו נכשל באמצע.
- OData v3 הוצא משימוש - v4 הוא הפרוטוקול המרכזי החל מ-Feature Pack 2405. קוד שנכתב לפי דוגמאות v3 שמוצאים ברשת ידרוש עבודה מחדש בכל התקנה עדכנית.
SAP Business One חושפת את ה-Service Layer - שכבת REST מבוססת OData שהיא הדרך הנתמכת לקרוא ולכתוב לתוך המערכת מבחוץ. היא עובדת היטב, אבל מודל ההתחברות שלה שונה מכל API מודרני אחר, וזו הנקודה שבה רוב האינטגרציות הראשונות נשברות.
למי ששוקל בין המערכות, ראה גם Priority מול SAP Business One.
אימות: session, לא טוקן
אין כאן API key ואין Bearer token. מתחברים בקריאה:
POST /b1s/v1/Login
{
"UserName": "...",
"Password": "...",
"CompanyDB": "..."
}בהצלחה חוזרת ישות B1Session עם מזהה session בגוף התשובה, ובמקביל אותו מזהה נשלח גם בכותרת Set-Cookie. את העוגייה הזו נושאים בכל קריאה הבאה.
ROUTEID - העוגייה שמפילה אינטגרציות
מלבד B1SESSION מוחזרת גם עוגיית ROUTEID. כשה-Service Layer רץ מאחורי מאזן עומסים - וזה המצב ברוב ההתקנות הרציניות - היא זו שמנתבת אותך חזרה לאותו מופע שבו נוצר ה-session.
אם לקוח ה-HTTP שלך שומר רק את B1SESSION ומתעלם מ-ROUTEID, התוצאה היא כשלי אימות אקראיים: חלק מהקריאות עוברות וחלק נדחות, בלי דפוס ברור. יש להשתמש ב-cookie jar שנושא את שתיהן, לא להעתיק כותרת אחת ידנית.
פקיעה: 30 דקות ושגיאה 5002-
ברירת המחדל היא פקיעה אחרי 30 דקות של חוסר פעילות. כשה-session פג, הקריאה נכשלת עם קוד -5002.
המשמעות המעשית: כל תהליך שרץ יותר מחצי שעה חייב לטפל בזה. תהליך ייבוא לילי, סנכרון מתוזמן או worker שמאזין לתור - כולם ייפלו באמצע אם אין מנגנון שתופס את 5002-, מתחבר מחדש, וחוזר על הקריאה שנכשלה. זה לא תרחיש קצה אלא ההתנהגות הרגילה.
הדפוס הנכון הוא לעטוף כל קריאה: אם חזרה 5002-, להתחבר מחדש פעם אחת ולנסות שוב. אם גם זה נכשל - להפסיק, לא ללולאה.
נקודה תפעולית שקל לפספס: לכל משתמש יש מגבלה על מספר ה-sessions הפתוחים. קוד שמתחבר מחדש בכל קריאה, במקום להחזיק session אחד, ימצה את המכסה ויתחיל להיכשל - וזה ייראה כמו בעיה אחרת לגמרי.
OData v4, לא v3
החל מ-Feature Pack 2405, OData v3 הוצא משימוש ו-v4 הוא הפרוטוקול המרכזי.
זה חשוב מסיבה מעשית: חלק ניכר מהדוגמאות והבלוגים שמוצאים בחיפוש נכתבו בתקופת v3. הבדלי התחביר בשאילתות, במטא-דאטה ובפורמט התשובה יגרמו לקוד כזה להיכשל בהתקנה עדכנית באופן שנראה מבלבל. כדאי לוודא איזו גרסה ההתקנה מציעה לפני שמאמצים דוגמה מהרשת.
יצירת מסמכים - בקריאה אחת
הכלל החשוב ביותר בכתיבה ל-ERP: מסמך נוצר בבקשה אחת, עם השורות מקוננות בגוף. לא כותרת ואז שורות בקריאות נפרדות.
הסיבה אינה יעילות אלא שלמות. אם יצרת כותרת של הזמנה והקריאה השנייה שמוסיפה שורות נכשלה - נשארה במערכת הזמנה ריקה עם מספר רץ, שמישהו יצטרך לטפל בה ידנית. במסמכי מס זה גרוע עוד יותר.
אותו היגיון חל על ביטול: מסמך שהופק אינו נמחק. הדרך הנכונה היא מסמך נגדי או ביטול מובנה, בהתאם לסוג המסמך - וזו החלטה שצריכה לעבור דרך רואה החשבון של העסק, לא דרך המפתח.
הרשאות ומה שהן מסתירות
ההרשאות של משתמש ה-Service Layer חלות על כל קריאה. אם המשתמש לא רואה אובייקט מסוים בממשק, הוא לא יראה אותו גם דרך ה-API.
המלכודת: זה מתבטא לרוב כרשומות חסרות ולא כשגיאת הרשאה. שאילתה מחזירה 200 עם פחות תוצאות ממה שציפית, והקוד ממשיך כרגיל. לכן כדאי להצליב ספירה מול הממשק בפעם הראשונה, במקום להניח שהתשובה מלאה.
שיקולים לפני שמתחילים
- סביבת בדיקות. כמו בכל ERP, מסמך שהופק בטעות בייצור הוא בעיה חשבונאית. יש לוודא שיש CompanyDB נפרד לפיתוח, ולהחזיק את שם ה-CompanyDB במשתנה סביבה ולא בקוד.
- שדות מותאמים. התקנות SAP B1 צוברות שדות משתמש (UDF) ואובייקטים מותאמים. שני לקוחות על אותה גרסה יכולים לדרוש קוד שונה. יש לקרוא את המטא-דאטה של ההתקנה הספציפית ולא להסתמך על תיעוד גנרי.
- עברית ו-RTL. שדות טקסט בעברית עוברים דרך ה-API כרגיל, אבל ההצגה שלהם ב-PDF, במיילים ובקבצי ייצוא היא סיפור נפרד. ראה עברית ו-RTL במערכות עסקיות.
- מי הבעלים של הלוגיקה. אם המערכת שלך מחליטה איזה סוג מסמך להפיק ומתי, זו החלטה חשבונאית שדורשת אישור, לא בחירה טכנית.
סדר ניפוי שגיאות
- לוודא ש-
/Loginמחזיר 200 ושה-cookie jar קלט גםB1SESSIONוגםROUTEID. - אם כשלי אימות אקראיים - כמעט תמיד
ROUTEIDחסרה. - אם כשל אחרי הפוגה - לבדוק אם הקוד הוא
-5002, כלומר session שפג. - אם רשומות חסרות - לבדוק הרשאות של משתמש ה-API מול הממשק.
- אם דוגמה מהרשת לא עובדת - לבדוק אם היא נכתבה ל-OData v3.
שאלות נפוצות
איך מתאמתים מול ה-Service Layer של SAP Business One?
בשליחת POST עם UserName, Password ו-CompanyDB לנקודת הקצה /Login. ה-Service Layer מחזיר ישות B1Session עם מזהה session ומגדיר עוגיית B1SESSION, שאותה נושאים בכל בקשה הבאה. אין API key ואין Bearer token. OAuth 2.0 עם OpenID Connect זמין מגרסה 10.0 FP 2305 אבל דורש ספק זהות.
למה קריאות ל-Service Layer של SAP B1 נכשלות לסירוגין?
בדרך כלל כי עוגיית ROUTEID נזרקת. תשובת ה-Login מגדירה גם B1SESSION וגם ROUTEID, וכשה-Service Layer רץ מאחורי מאזן עומסים, ROUTEID היא זו שמנתבת אותך חזרה למופע שמחזיק את ה-session. לקוח ששומר רק את B1SESSION יצליח בחלק מהקריאות וייפול באחרות בלי דפוס ברור. יש להשתמש ב-cookie jar שנושא את שתיהן.
מהי שגיאה 5002- ב-SAP Business One?
המשמעות היא שה-session של ה-Service Layer פג. ברירת המחדל היא 30 דקות חוסר פעילות, ולכן כל ייבוא ארוך, סנכרון מתוזמן או worker של תור ייתקל בה. הטיפול הנכון הוא לתפוס את 5002-, להתחבר מחדש פעם אחת ולנסות שוב את הקריאה שנכשלה - תוך החזקת session יחיד ולא התחברות בכל קריאה, כי לכל משתמש יש מגבלה על sessions מקבילים.
האם SAP Business One משתמשת ב-OData v3 או v4?
OData v4 הוא הפרוטוקול המרכזי החל מ-Feature Pack 2405, ו-v3 הוצא משימוש. זה חשוב כי דוגמאות ופוסטים רבים ברשת נכתבו ל-v3, והבדלים בתחביר השאילתות, במטא-דאטה ובמבנה התשובה יגרמו לקוד כזה להיכשל באופן מבלבל בהתקנה עדכנית. כדאי לבדוק מה ההתקנה מציעה לפני שמעתיקים דוגמה.
האם כדאי ליצור כותרת הזמנה ואת שורותיה בקריאות API נפרדות?
לא. יש ליצור את המסמך בבקשה אחת עם השורות מקוננות בגוף. אם הכותרת מצליחה וקריאה נוספת שמוסיפה שורות נכשלת, ה-ERP נשאר עם מסמך ריק ומספר רץ שאדם יצטרך לנקות ידנית - ובמסמכי מס זה הרבה יותר מאי-נוחות.
להמשך קריאה
שירות רלוונטי
אינטגרציות
לגרום למערכות שאתם כבר משלמים עליהן לדבר זו עם זו.
על הכותב
יהונתן סעדיה
מהנדס פרילנסר לאוטומציה, אתרים ו-MVP
אני יהונתן סעדיה, מהנדס בכיר שבונה אוטומציה עסקית, אתרים מותאמים ומוצרי MVP לעסקים קטנים ובינוניים בארה"ב, אירופה וישראל. המדריכים האלה נכתבים מתוך עבודה אמיתית עם לקוחות, לא מתיאוריה.
בוא נעבוד יחדיש לך פרויקט דומה?
ספר לי מה אתה מנסה להפוך לאוטומטי או לבנות, ואומר לך מהי הדרך המהירה והאמינה ביותר ליישם את זה.
