טריגר שמפעיל פרוצדורות

פורומים אפיון ופיתוח פריוריטי טריגר שמפעיל פרוצדורות

  • Post
    oron
    משתתף
    אני ממש לא מבין בתוכנה אז אם אפשר לקבל הסבר פשוט על איך מבצעים כזה דבר:
    יש לי טבלה שקוראים לה:

    EINVOICES

    אני מכניס נתונים לטבלה הזאת באמצעות REST API
    עכשיו אני רוצה לעשות שאם ה-שדה שקוראים לו STATDES – סטאטוס
    הוא עם ערך לדוגמא A
    יופעלו שתי פרוצדורות
    הפרצדורות נמצאות באותו מסך אם זה עוזר.

    תודה מראש!

מוצגות 7 תגובות – 16 עד 22 (מתוך 22 סה״כ)
  • Replies
    yitzchok
    משתתף
    IL
    oron כתב:

    בטוח שונה מ-Y?
    כי אני רוצה דווקא את אלה שיש להם Y

    מאוד בטוח.
    התנאי הוא על ה-goto שיגרום לדלג על הכל.

      [ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]
    yitzchok
    משתתף
    IL
    1. טוב שציינת שהעמודה שלך במסך קשורה לעמודה בטבלה.
    חבל כי זה בזבוז מקום בטבלה כי אתה לא צריך לשמור את הערך של "לסגור" לאחר שסגרת וניתן לעשות עמודה במסך שלא קשורה לשום עמודת טבלה.
    איך שזה עכשיו (ואם בוצע כמו שצריך, ראה את הנקודה הבאה) אם היית משנה את הסטטוס של החשבונית לאחר הסגירה היית מנסה להפעיל את הסגירה עוד פעם (כי NETN_TOCLOSE כבר מחזיקה Y ותשאר ככה).
    ולכן צריכים לשנות את השורה הראשונה לזה:
    GOTO 888 WHERE NOT (:$1.NETN_TOCLOSE 'Y' AND :$.NETN_TOCLOSE = 'Y') ;
    שאומר לדלג אלא אם כן הערך הקודם לא היה Y והערך הנוכחי Y
    אפשרות אחרת זה לשנות את העמודה במסך לא להיות קשורה לעמודה בטבלה.
    לדעתי זה עדיף כי אם משום מה הסגירה תכשל הדרך היחידה לנסות עוד פעם זה על ידי הורדת הדגל וסימון מחדש. ללא קשר לטבלה (וללא ביטוי) העמודה תמיד תתאפס כי אין מאיפה להביא עוד פעם ערך.

    2. הטריגר הזה ודאי לא ירוץ. אין צורך לחקור.
    טריגר POST-UPDATE (כן, NETN_POST-UPDATE במקרה שלך; אנחנו לא נוהגים להזכיר כל פעם קידומות או סיומות) הוא הפעלה ברמת רשומה (מסך שליד מסך העמודות) ולא הפעלת עמודה. פעולה כזו מפעילים רק לאחר "שמירה" של הרשומה ולא תוך כדי עריכה. (אם יש סיבה לעשות משהו אחרי עדכון של שדה, הטריגר המתאים על העמודה נרקא POST-FIELD).
    ואמרתי POST-UPDATE כי POST-INSERT לא שייך – אין מצב שתוכל ליצור רשומת חשבונית (מסך אב) ולסגור מיד אחרי יצירת הרשומה כי לא היתה הזדמנות לאכלס אותה עם פריטים. ולכן סגירה קוראת לאחר עדכון של רשומה קיימת.

      [ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]
    oron
    משתתף
    לצערי הרב אני עדיין לא רואה שמתבצע משהו כשאני מסמן את השורה… יש לך במקרה עוד רעיון למה?
    אני בצעתי מה שאמרת שמתי את ה-post-update על המסך ולא על העמודה, ושיניתי את הקוד למה שאמרת, עכשיו יצא ככה:
    GOTO 888 WHERE NOT
    (:$1.NETN_TOCLOSE 'Y' AND :$.NETN_TOCLOSE = 'Y');
    SELECT SQL.TMPFILE INTO :REPO_TEMP FROM DUMMY ;
    LINK INVOICES I TO :REPO_TEMP;
    GOTO 888 WHERE :RETVAL <= 0 ;
    DELETE FROM INVOICES I ;
    INSERT INTO INVOICES I
    SELECT * FROM INVOICES WHERE IV = :$.IV ;
    UNLINK INVOICES I ;
    EXECUTE ACTIVATE '-P', 'CLOSEANINVOICE', 'INVOICES', :REPO_TEMP ;
    yitzchok
    משתתף
    IL
    קשה לדעת.
    אתה בודק את זה קודם כל מול המסך עצמו, ועם העמודה גלויה?
    אם לא, הייתי מציע את זה.

    גם צריכים לקחת בחשבון שאתה לא רואה שום הודעה שהפרוצדורה היתה מציגה אילו היית מריץ אותה בעצמך.

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

      [ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]
    oron
    משתתף
    זה עובד, אתה צדקת כנראה שיש לי בעיה שם בהפקה של החשבונית עצמה, תודה רבה!
    oron
    משתתף
    עכשיו הבעיה היא כשאני מכניס דרך ה-API (אני מכניס מראש ביחד באותה הכנסה גם את הפריטים וגם את התגמול) ועכשיו זה לא מורץ, יכול להיות שאני כן צריך לעשות post-insert?
    oron
    משתתף
    הצלחתי, תודה רבה על כל העזרה באמת אין לי מילים לתאר! ממש ממש ממש תודה!
מוצגות 7 תגובות – 16 עד 22 (מתוך 22 סה״כ)
  • יש להתחבר למערכת על מנת להגיב.