אשף Generate Fields List

Generate Fields List Dialog

הפקודה Generate Fields List הנמצאת תחת אובייקט טבלה בעץ האובייקטים, מפעילה אשף המייצר קוד אוטומטי בהקשרים שונים של גישה לשדות ונתוני טבלאות.
מטרת האשף לייצר את שלד הקוד הרלוונטי בזיכרון, ובכך לעזור למתכנת לכתוב קוד נכון ומהר ללא צורך לזכור בעל-פה שמות שדות ותחביר וערכי SELECT בהקשר של שדות עם ערכי בחירה.
כמו כן, שימוש באשף מונע שגיאות הקלדה (Typos), חוסך זמן יקר בחיפוש שמות שדות, ומבטיח שימוש בסינטקס תקין.

האשף קיים באופן אוטומטי תחת כל אובייקט טבלה הקיים בעץ הניווט, כולל בטבלאות דינאמיות שהוגדרו בגוף התסריט על ידי המתכנת בשלב הפיתוח.

שים לב, התוכן בעמוד הנוכחי מתבסס על הכרת דרכי הגישה לשדות המערכת כמודרך כאן!

הסבר מהיר כיצד לעבוד עם האשף

  1. בחר את הטבלה הנכונה בעץ הניווט, והפעל את האשף בלחיצה כפולה.
  2. בשדה Mode בחר בפקודה המתאימה למטרתך (קריאה/כתיבה, חיפוש, מיון, מחיקה, או בלוק שאילתה).
  3. בשדה Select Fields בחר (ב-V) את השדות בהם ברצונך לטפל בקוד הנוכחי (כאשר רלוונטי ל- MODE הנבחר).
  4. הגדר Row לפי ההקשר. לדוגמה: שורה נוכחית= 1-, שורה ראשונה = 0, או הזן שם פרמטר כחלק מלולאה (במידה ורלוונטי ל- MODE הנבחר).
  5. הגדר Space Count רק אם חשוב לך הזחה מסודרת לפני כל שורה.
  6. לחץ OK.
    כעת הקוד הרלוונטי הועתק ללוח הגזירים (Clipboard). הדבק את הקוד במקום הנדרש בעורך והשלם ערכים חסרים לפקודה.

השדה Mode

שדה זה קובע את הפקודה/הקוד שייווצר על ידי האשף.

ערך (Mode) הסבר ושימוש קוד דוגמה
Access fields by Name מייצר קוד גישה לקריאה/כתיבה מול שדות הטבלה על פי שמם הגנרי
(TableName.Field...)
.
זוהי שיטת העבודה המומלצת והבטוחה ביותר.
אם תבחר שדות מסוג Select, יתווספו לקוד כל ערכי הבחירה האפשריים של כל שדה, מה שמקל מאוד על כתיבת הקוד וחוסך לך זמן חיפוש ומאמץ זיכרון.

  ClientTb.IField['Handling Status',]{סטטוס הלקוח}
  00 = חדש
  01 = מעקב
  02 = מעקב + פגישה / הצעת מחיר
  03 = הלקוח אינו מעוניין
  04 = לקוח שרכש
  05 = לקוח שרכש + מועדון / חוזה
  06 = לקוח מוקפא
Access fields by Cell מייצר קוד גישה לקריאה/כתיבה מול שדות הטבלה על פי אינדקס השדות (מספרם) באותה הטבלה
(TableName.Cell...)
.
גישה בשיטה זו אמנם מהירה יותר מחיפוש השם, אך היא מסוכנת!
כי במידה והטבלה תעבור שינוי מבני וסדר השדות ישתנה, תיווצר אי התאמה של הקוד מול הטבלה ועלול להיווצר מצב של "קריסת הקוד" ואף גרוע מכך דריסת נתונים שלא במכוון!
מומלץ להשתמש בשיטה זו אך ורק כאשר מדובר בקוד העוסק בדוחות בהם ניגשים פעמים רבות לשדות שונים, או בקוד זמני.
גם במקרה זה ערכי ה-Select יוצגו לנוחותך.

  ClientTb.ICell[36,]{Handling Status}{סטטוס הלקוח}
  00 = חדש
  01 = מעקב
  02 = מעקב + פגישה / הצעת מחיר
  03 = הלקוח אינו מעוניין
(FieldName = lowcase) מייצר קוד עבור תנאי ובו שם השדה באותיות קטנות.
* השימוש ב־Row אינו רלוונטי בפקודה זו

// דוגמה לשימוש בקוד בתוך אירוע After Edit
Procedure ClientTb_After_Edit(FieldName: String);
Begin
  IF (FieldName = 'first name'){שם פרטי} Then
    PopupMessage('שינית את הערך של השדה ' + FieldName);
End;
Fields Settings Code מייצר קוד קריאה לפונקציה
Set_Duty
העוסקת בהגדרות התנהגות (כגון חובה, תצוגה בלבד, או הסתרה) לשדה/שדות שתבחר.
* השימוש ב־Row אינו רלוונטי בפקודה זו

Procedure ClientTb_Before_Edit(FieldName: String);
Begin
  ClientTb.FldSet.Set_Duty('Handling Status', True, False, 0); {סטטוס הלקוח}
End;
Table Sort Code מייצר קוד קריאה לפרוצדורת מיון של הטבלה, על פי שמות השדות שנבחרו.
כברירת מחדל, המיון הוא עולה (מהקטן לגדול).
הוספת התו "!" לפני שם השדה תבצע מיון יורד.
* השימוש ב־Row אינו רלוונטי בפקודה זו

Procedure Actions_BA_dynamic_1;
Begin
  ContactsTb.Sort(['Client Full Name', '!Handling Status']);
End;
Search [] מייצר את שלד הקוד לפקודת החיפוש המובנית של טבלאות הפלטפורמה.
פקודה המחזירה ערך בוליאני על הצלחה/כישלון ובמקביל מקפיצה את הסמן אל הרשומה שנמצאה בטבלה (הרשומה שנמצאה תהיה 1-).
* השימוש ב־Row אינו רלוונטי בפקודה זו

Procedure Actions_BA_dynamic_1;
Begin
  ContactsTb.Search(['Contact Full Name'],[],[]);
End;
Delete [] מייצר את שלד הקוד לפקודת מחיקת רשומות, המקבלת את השדות לפיהם יתבצע זיהוי הרשומה המיועדת למחיקה.
* השימוש ב־Row אינו רלוונטי בפקודה זו

Procedure Actions_BA_dynamic_1;
Begin
  ContactsTb.Delete([], [], he_AND);
End;
Update_Exist_Records מייצר פקודה המבצעת שמירה ספציפית וממוקדת למקבץ השדות שנבחרו. מצוין לעדכון מהיר ללא שמירה של כל השדות באותה הרשומה.
שים לב, חובה לוודא שצוינו בפקודה שדות המפתח של אותה הרשומה אחרת השמירה לא תתבצע.
* השימוש ב־Row אינו רלוונטי בפקודה זו

Procedure Actions_BA_dynamic_1;
Begin
  Clients.Update_Exist_Records(ClientTb, ['Email'], 'N');
End;
Query Block מייצר בלוק קוד שלם ומוכן המשמש כשאילתה מול אותה הטבלה על בסיס השדות שנבחרו באשף.
מיועד לשימוש בקוד של דוח או כלי שירות ולא בחלון של רשומה יחידה כגון רשומת לקוח / קריאת שירות / הזמנה וכיו"ב.
* השימוש ב־Row אינו רלוונטי בפקודה זו
* האובייקט DBconn ישתנה אוטומטית בהתאם למודול בו מופק הקוד אך שאר הפקודה תישאר זהה.

DBconn.Reset;
DBconn.Query(ClientTb, True{clear}, ''{nickname}, 'N'{storage});
DBconn.Where_SameVal('Last Name', 'Smith', he_AND);  // Client's First Name
DBconn.Where_SameVal('First Name', 'Dan', he_AND);   // Client's Last Name
DBconn.Close_Query;
DBconn.Execute;
Add Fields מייצר פקודות הוספת שדות דינמיים (
Add_DB_Field
) לטבלה הנבחרת, המתבססות על סכימת שדות קיימים בסכימה.
רלוונטי לשימוש עבור מודול דוחות ובפרט לקטעי קוד אתחול (INIT).
האשף יציג רשימת שדות לבחירה בהתקיים התנאים הבאים:
1. הטבלה הינה פרטית (ThPrvTable)
2. הטבלה קושרה מראש לסכימה של טבלת מערכת קיימת

// "PrivateClients" is your ThPrvTable name
// and will be different according to your code
PrivateClients.Add_DB_Field('1st Phone', '');
PrivateClients.Add_DB_Field('2nd Phone', '');


הגדרות נוספות בחלון האשף

Select Fields

שדה מסוג בחירה מרובה (GroupSelect) המאפשר למפתח לסמן מספר רב של שדות בו-זמנית.
האשף יעבור על כל השדות המסומנים וייצר את הקוד המבוקש עבור כולם בבת אחת בהתאם לפקודה (Mode) שנבחרה, דבר החוסך זמן פיתוח רב.
שדה זה יציג רשימת שדות בהתקיים התנאים הבאים:
1. הטבלה הרלוונטית הינה טבלת מערכת או טבלה פרטית המקושרת לסכימה של טבלת מערכת.
2. טבלה פרטית שהוספו לה שדות ובוצע תהליך INIT למודול טרם הפעלת האשף.

Space Count

שדה מספרי המגדיר את כמות הרווחים ש"יוזרקו" לתחילת כל שורת קוד המופקת על ידי האשף.
ברירת המחדל הינה 2 רווחים. מטרת אפשרות זו היא לאפשר למפתח לשמור על הזחה (Indentation) מדויק כך שכאשר ידביק את התוצאה בתוך בלוק קיים (כמו בתוך לולאה או תנאי), הקוד ישתלב באופן אסתטי ללא צורך בסידור ידני.
עליך להציב את הסמן בתו הראשון של השורה ולבצע הדבקה של הקוד (PASTE).

Row

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


לדוגמה, עדכון רשומת הלקוח כאשר מתייחסים לרשומה הנוכחית:
ClientTb.Field['Client Full Name', -1]:= 'Smith Dan'; {שם הלקוח}

לעומת זאת, דוגמה לעדכון השורה הרביעית (אינדקס 3):
ContactsTb.Field['Full Name', 3]:= 'Smith Dan'; {שם איש הקשר במיקום 4 מתחילת הרשימה}

דוגמה ללולאה שרצה על כל רשומות הטבלה ומסמנת דגל חיובי בשדה VIP. כאן הוזן הפרמטר "Y" לשדה ROW
Var Y: Integer;
For Y:=0 to Clients_Tb.RowCount -1 Do
  Clients_Tb.BField['VIP Member', Y]:= True;