Many to Many in LightSwitch
לפני כחודש יצא ה- LightSwitch בגרסת ביתא ומאז אני לא מפסיק "לשחק" עם הכלי החדש. אחת הבעיות הראשונות שנתקלים בה היא, שהמוצר לא תומך בקשר של רבים לרבים L . בפוסט זה אני מדגים איך אפשר לעקוף בעיה זו.
לשם הדוגמא נניח שיש לנו ישות עובד וישות הזמנה. עובד יכול לעבוד על מספר הזמנות, ועל הזמנה אחת יכולים לעבוד עליה מספר עובדים. כדאי לפתור את הבעיה ב- LightSwitch צריך ליצור ישות מקשרת ע"פ התמונה
.
זה קל וכך עושים גם במסדי נתונים. שימו לב שאני לא צריך להחזיק בטבלה ( אובייקט ) שדות של EmployeeId ו- OrderId.
עכשיו נבנה מסך שרואים בחלק העליון את הפרטים של העובד ובחלק התחתון רשימה של ההזמנות שלו.

החלק הבעייתי הוא ,שהגריד של הרשימה של טבלת הקישור ( ManyEmployeeOrderCollection ) מכיל שדה אחד מסוג Order ולא את השדות של Order. בתמונה למטה הורדתי את השדה Employee ובניתי שדה Summary לישות הזמנה שמראה את כל השדות.

אם לוחצים על Add… ,ה- LightSwitch מספיק חכם לתת לי לבחור רק את שדה הזמנה מתוך רשימת ההזמנות הקימות ולא צריך למלא את העובד.

הבעיה שאני רוצה ליצור הזמנה חדשה !!! ואני רוצה לראות את השדות של הזמנה כמו בתמונה הבאה:

ושביל כך נדרש לכתוב קוד בכפתור של ה-Add….

זה יצור לנו מתודה שבה צריך לקרוא למסך CreateNewOrder ולעביר לו כפרמטר את Id של העובד.
עכשיו נבנה את המסך CreateNewOrder.
1. חייבים לבחור בתבנית Details Screen כי אחרת לא נצליח לקבל במתודה ShowCreateNewOrder את היכולת לעביר את ה- Id.
2. צריך ליצור במסך Property מסוג Int שיחזיק את ה-Id של העובד.

וצריך לסמן את Property כ- Is Parameter.

3. צריך להוסיף משתנה מסוג עובד עם חיתוך ע"פ ה- EmployeeId שקיבלנו.

ולחבר את Id ל- EmployeeIdProperty.

שלב אחרון – כאשר שומרים את הנתונים צריך להוסיף רשומה בטבלת קישור.
סיכום:
1. קצת ארוך מדי לטעמי לתרחיש שכיח מאוד.
2. חבל שלא ניתן ליצור במסך מסוג Create New משתנה שאפשר לסמן אותו Is Parameter וצריך ליצור מסך מסוג Details Screen.