שליחת חשבונית במייל אחרי הסגירה שולח פעמיים

פורומים אפיון ופיתוח פריוריטי שליחת חשבונית במייל אחרי הסגירה שולח פעמיים

  • Post
    סמי
    משתתף
    הי חברים ,

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

     

    זה הקוד שלי , אני קודם סוגר ואז מדפיס אבל כנראה שהוא לא מחכה עד שסוגר ומדפיס את זה ואז בטיוטא ואחרי שהיא סופית :

     

    SELECT SQL.TMPFILE INTO :REPO_TEMPFILE FROM DUMMY ;
    LINK INVOICES I TO :REPO_TEMPFILE ;
    GOTO 888 WHERE :RETVAL <= 0 ; /* if link fails just skip this
    process */
    DELETE FROM INVOICES I ; /* just in case */
    INSERT INTO INVOICES I
    SELECT * FROM INVOICES WHERE IV = :$.IV ;
    UNLINK INVOICES I ;
    EXECUTE ACTIVATE '-P', 'CLOSEANINVOICE', 'INVOICES',
    :REPO_TEMPFILE ;
    EXECUTE WINHTML '-d', 'WWWSHOWEIV', ", ", '-v', :$.IV, '-g',
    '-signpdf', '-pdf' , '-format',-6 , '-AMAIL', '-s';
    LABEL 888 ;

מוצגות 7 תגובות – 1 עד 7 (מתוך 7 סה״כ)
  • Replies
    yitzchok
    משתתף
    IL
    ראשית כל כמה מחשבות:

    א. אם תחפש בגוגל programming pitfalls in priority תגיע לאתר של נעם ותראה שם תחת הערך NFILE מה שהוא כתב וגם תגובה שלי, המסקנה שמאד לא מומלץ לעשות פקודת DELETE כמו שעשית. ותשים גם UNLINK בסוף; אם תשים UNLINK AND REMOVE (וגם אם תשתמש באליאס יותר ייחודי מ-I) לדעתי תוכל לוותר על ה-DELETE בראש שקט.

    ב. לא ברור לי למה הפעולה שלך לאחר POST-FORM, הקוד שלך סוגר חשבונית אחת יכולה להיות יותר מחשבונית אחת במסך. הייתי חושב שנכון לשים את הפעולה הזאת ב-POST-UPDATE.

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

      [ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]
    סמי
    משתתף
    מה שאני רוצה : אני היום מכניס את החשבונית מ ה api ואוטומטית אחרי זה רוצה לסגור אותה ולשלוח אותה במייל. הכל עובד בסדר חוץ משליחה למייל זה שולח פעמיים כמו שציינתי למעלה
    yitzchok
    משתתף
    IL
    באמת קשה לדעת מכאן. אולי ה-API מפעיל משום מה את ה-postform פעמיים.

    מה קורה אם אתנ עושה את אותה פעולה (לכאורה) ישירות בקליינט? כם ככה נשלח פעמיים? הייתי מתחיל משם. מהקליינט (כולל ממשק וובי) יותר פשוט לבדוק מה קורה. אם תקין שם נסה להבין מה שונה בשימוש ב-API.

    אבל אני עדיין חושש מהשימוש ב-post-form – רגע הכוונה לpost-form של החשבונית או של הפירוט? (הרי אולי post-update של החשבונית לא פועלת)

    יכול להיות שאתה צריך לעשות פניה מייוחדת ל-api לצורך סגירת החשבונית וזה לא מה שאתה עושה עכשיו

      [ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]
    סמי
    משתתף
    בקליינט אותו בעייה גם
    yitzchok
    משתתף
    IL
    אז שווה לעבוד שם לאט מאד ולראות אם הם נשלחים לאחר פעולות שונות

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

    יש לשים לב להפעלת ממשקים מסכיים; יכול להיות שיש לכם פעולה שמבצעת עדכון לחשבונית בעודה בטיוטא והפעלת המסך בעזרת הממשק אחראית לשליחת המייל המיותר.

      [ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]
    סמי
    משתתף
    האם השליחה בקוד שלי מחכה לסגירה או שניהם עובדים במקביל ? או בצורה אחרת אם מפעילים שתי פרוצודרות האם רצים במקביל או בתור ?
    yitzchok
    משתתף
    IL
    נותנים לנו לראות כאילו הפעלת פרוצדורה כנ"ל תסתיים לפני שתרוץ הפקודה הבאה (הרצה בתור), ובגדול המערכת עובדת ככה.

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

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

    עשית בדיקה ידנית. כמו שאני אמרתי, הכי טוב לבצע דיבוג מסודר. אבל יכול לעזור גם לבדוק במסך "משימות בביצוע" ולראות כמה פעמים הופעלה תוכנית הסגירה.

      [ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]
מוצגות 7 תגובות – 1 עד 7 (מתוך 7 סה״כ)

תגיות: ,

  • יש להתחבר למערכת על מנת להגיב.