ל-ScriptCase יש טופס נפלא שנקרא multiple records , היתרון העצום שלו הוא שהוא מזהה לבד באיזה רשומות המשתמש מטפל, ומציע כפתור שישמור את כל הרשומות האלו *יחד*, בפעולה אחת.
עכשיו – נניח ואני רוצה ליצור לולאה על כמה רשומות נבחרות
על פניו – זה נראה בעיה ,
כיוון שיש אומנם שדה (לא בדאטאבייס, רק על המסך) של ScriptCase שמזהה את הטיפול ברשומה, וזה באמת שדה CheckBox.
אבל
אי אפשר לגשת אליו בצורה קלה.
ולכן – עשיתי ככה :
1 הוספתי שדה על המסך בלבד – מסוג CheckBox
2 בשדה הזה – ה-Lookup הוגדר Manual, עם ערך בודד של 1 במקרה של ChecK (כלומר אם סימנו אותו =1 )
3 אחרכך באירוע OnLoad של הטופס – הגדרתי מערך ריק,
4 כאשר ב-Gloabal Variable הגדרתי אותו כ-Out
5 באירוע OnLoadRecord של כל רשומה – איפסתי את הערך הרלוונטי במערך, כאשר שימו לב
ה-Key שלי במערך הוא – המפתח הראשי של הרשומה .
[selected][{id_partner}] = 0;
6 עכשיו עשיתי אירוע Ajax על OnClick של השדה מסוג CheckBox
ובאירוע הזה למעשה אני מציג באיבר הרלוונטי במערך – את הערך של ה-CheckBox
כלומר אם הוא מסומן – אנחנו נקבל 1, אחרת נקבל 0
[selected][{id_partner}] = {select_record};
7 עכשיו הגענו סוף סוף לכפתור , תגדירו כפתור חדש בטופס
וזה הקוד שמציג בסוף את המפתחות הראשיים של הרשומות הנבחרות :
foreach (array_keys([selected], 0, true) as $key)
{
unset([selected][$key]); //get rid of the unselected id's
}
$selection = implode(',',array_keys([selected])); // now you have a comma separated list of id's of your selected records
echo $selection;
הסבר קצר לקוד
הפונקציה Array_keys – יוצרת "מערך" שמכיל רק את המפתחות.
הפרמטר השני שהוא אפס – אומר לפונקציה להחזיר רק מפתחות שמכילים 0.
והפרטמטר השלישי – true אומר לפונקציה שהאפס חייב להיות מאותו סוג משתנה , כמו האופרטור === ב-php
בתוך הריצה של הלולאה – אנחנו למעשה מוחקים את כל האיברים שמכילים 0.
ואז אחרי הלולאה – הפונקציה implode למעשה יוצרת מחרוזת עם כל איברי המערך (שנותרו) , ובינהם היא שמה פסיק.
ולבסוף מציגים את זה.
זהו תרגום בעברית, מסודר יותר, של מה שכתוב בדיון הזה בפורום :
http://www.scriptcase.net/forum/showthread.php?5574-How-select-records-from-a-multiple-record-form-flagging-row-specific-check-box-field&highlight=selected