› פורומים › אפיון ופיתוח פריוריטי › טריגר שמפעיל פרוצדורות
- This topic has 22 תגובות, 3 משתתפים, and was last updated לפני 7 שנים, 8 חודשים by
oron.
- Post
-
- אוגוסט 1, 2017 בשעה 7:41 pm
אני ממש לא מבין בתוכנה אז אם אפשר לקבל הסבר פשוט על איך מבצעים כזה דבר:
יש לי טבלה שקוראים לה:EINVOICESאני מכניס נתונים לטבלה הזאת באמצעות REST API
עכשיו אני רוצה לעשות שאם ה-שדה שקוראים לו STATDES – סטאטוס
הוא עם ערך לדוגמא A
יופעלו שתי פרוצדורות
הפרצדורות נמצאות באותו מסך אם זה עוזר.תודה מראש!
- Replies
-
- אוגוסט 3, 2017 בשעה 5:17 pm
oron כתב:בטוח שונה מ-Y?
כי אני רוצה דווקא את אלה שיש להם Yמאוד בטוח.
התנאי הוא על ה-goto שיגרום לדלג על הכל.[ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]- אוגוסט 3, 2017 בשעה 5:32 pm
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 לא שייך – אין מצב שתוכל ליצור רשומת חשבונית (מסך אב) ולסגור מיד אחרי יצירת הרשומה כי לא היתה הזדמנות לאכלס אותה עם פריטים. ולכן סגירה קוראת לאחר עדכון של רשומה קיימת.[ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]- אוגוסט 3, 2017 בשעה 7:02 pm
לצערי הרב אני עדיין לא רואה שמתבצע משהו כשאני מסמן את השורה… יש לך במקרה עוד רעיון למה?
אני בצעתי מה שאמרת שמתי את ה-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 ;- אוגוסט 3, 2017 בשעה 8:56 pm
קשה לדעת.
אתה בודק את זה קודם כל מול המסך עצמו, ועם העמודה גלויה?
אם לא, הייתי מציע את זה.גם צריכים לקחת בחשבון שאתה לא רואה שום הודעה שהפרוצדורה היתה מציגה אילו היית מריץ אותה בעצמך.
אם אתה כן עושה בדיקות במצב בו אתה רואה את העמודה, ואתה יודע שהעמודה היתה ריקה וכשאתה יוצא מהשורה היא מסומנת ובכל מקרה החשבונית לא נסגרת, הייתי מציע להריץ את הפרוצדורה באופן ידני (ודרך אגב אני שמתי את שם הפרוצדורה שאני חושב שהוא הנכון אבל כדאי לבדוק את זה בעצמך). תראה אם תקבל הודעת שגיאה מהפרוצדורה.
[ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]- אוגוסט 3, 2017 בשעה 8:59 pm
זה עובד, אתה צדקת כנראה שיש לי בעיה שם בהפקה של החשבונית עצמה, תודה רבה!- אוגוסט 3, 2017 בשעה 9:38 pm
עכשיו הבעיה היא כשאני מכניס דרך ה-API (אני מכניס מראש ביחד באותה הכנסה גם את הפריטים וגם את התגמול) ועכשיו זה לא מורץ, יכול להיות שאני כן צריך לעשות post-insert?
- יש להתחבר למערכת על מנת להגיב.