שמירת קוד משותף לכמה פרוצדורות

פורומים אפיון ופיתוח פריוריטי שמירת קוד משותף לכמה פרוצדורות

  • Post
    namnami
    משתתף
    שלום,

    היכן ניתן לשמור קוד שיפנו אליו ממספר פרוצדורות שונות (ושהוא כולל שימוש ב CURSOR)?

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

מוצגות 12 תגובות – 1 עד 12 (מתוך 12 סה״כ)
  • Replies
    NoamN
    משתתף
    none
    אני לא מסכים אתך: יש קוד מסוים ששמרתי כהפעלה מתוך מסך func אשר משתמש בקורסור עם הפקודה DECLARE @NCRC1 CURSOR  ואין בעיה בפרוצדורה שקוראת להפעלה הזו באמצעות #INCLUDE func/TEST_NEWCALCRELCOST.

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

    LINK ORDERS TO :$.ORD;
    ERRMSG 1 WHERE :RETVAL <= 0;
    INSERT INTO ORDERS (ORD, ORDNAME)
    SELECT ORIG.ORD, ORIG.ORDNAME
    FROM ORDERS ORIG, STACK
    WHERE ORIG.ORD = STACK.ELEMENT
    AND ORIG.ORD > 0;
    EXECUTE WINACTIV '-P', 'TEST_MUTUALCODE', 'ORDERS',
    :$.ORD;
    UNLINK ORDERS;

    namnami
    משתתף
    כשאותו קוד מועבר ל func/my_Test הוא מחייב להוסיף @ לשם ה CURSOR. כשהפרוצדורה מפנה לקוד זה ב INCLUDE  אין שגיאה והקוד רץ אבל נראה שהCURSOR לא עובד כראוי כי לא נותן את התוצאה הרצויה (אין שינוי) כפי שהיה נותן אם אותו הקוד נשאר בתוך הפרוצדורה.

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

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

    yitzchok
    משתתף
    IL
    זה צריך לעבוד

    אני רוצה לבדוק שלא העברתם ביטויים כמו ZZZ.$: מהפרוצדורות לבאפר ללא שינוי. צריכים להעביר משתנים רגילים. ה-$ לא מוכר כבר בתוך הבאפר (הנ"ל יחזיר את הערך שתשימו בפרוצדורה במשתנה ZZZ.: – כאילו הדולר הוחלף בכלום ולכן יותר ברור להשתמש במשתנים ייעודים בתור קלט).

      [ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]
    namnami
    משתתף
    הקוד שבבאפר כולל שימוש במשתנים שהם קלט של כל הפרוצדורות המפנות לקוד זה.

    לדג' LINK SUPPLIERS TO :$.SUP

    חשבתי שהוא פשוט מכניס את הקוד ישירות כאילו היה כתוב בפרוצדורה.

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

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

    תודה

     

    NoamN
    משתתף
    none
    היה עוזר לו היינו רואים את הקוד כי אחרת אנחנו מגששים באפלה. אתה כותב שיש לינק לטבלת SUPPLIERS. אפשר לכתוב משהו שנראה מוזר אבל יכול לעבוד – במקום לכתוב

    LINK SUPPLIERS TO :$.SUP

    תכתוב :MYSUP = :$.SUP בפרוצדורה שלך, ובקוד המשותף תכתוב LINK SUPPLIERS TO :MYSUP

    הרי בפנים :$.SUP מכיל שם של קובץ במערכת הקבצים וניתן להעתיק אותו.

    yitzchok
    משתתף
    IL

    חשבתי שהוא פשוט מכניס את הקוד ישירות כאילו היה כתוב בפרוצדורה.

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

    אני מסכים עם נעם – בלי לראות את הקוד אנחנו חייבים לנחש ולחשוב על דברים שאצלנו מובנים מאליהם, כאשר אם הקוד היה מולנו יש סיכוי טוב שנראה את הבעיה די מיידית.

      [ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]
    NoamN
    משתתף
    none
    דרך אגב, $ פירושו "שם התכנית הנוכחית". לפעמים אפשר לנצל את העובדה הזו ולפעמים זה יוצר בעיות. פעם נדרשתי להכין ברקוד שהכיל את כתובת החברה, אבל אין בגופן הברקוד אפשרות להדפיס את @, לכן זה הוחלף ב-$. בהתחלה כמובן תוכן הברקוד הכיל את שם התכנית באמצע הכתובת.

    לקח לי קצת זמן למצוא שיטה להתגבר על זה – בסוף הגדרתי הודעה לפרוצדורה שהמלל שלו $ והטענתי אותו באמצעות SELECT ENTMESSAGE שבעצמו משתמש ב-$.

    namnami
    משתתף
    ניסיתי להעביר את המשתנה הקובץ של הפרוצדורה למשתנה מקומי

    MYSUP = :$.SUP:  וזה אכן רץ טוב, אבל יוצר שגיאת סינטקס בפרוצדורה unresolved identifier myprocname.SUP.

    במקום זה, הוצאתי את ה LINK וגם את הUNLINK כך שירוצו מחוץ לבאפר וכעת גם עובד מצוין!

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

    תודה רבה לכם!

    yitzchok
    משתתף
    IL
    אפשר לשים את הלינק בפנים

    רק במקום = יש לעשות

    select … into … from dummy

      [ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]
    shimshon
    משתתף
    שלום נעם.

    ניסיתי את הקוד שלך של קריאה מתוך פרוצדורה לפרוצדורה אחרת, ע"י:

    EXECUTE WINACTIV '-P', 'TEST_MUTUALCODE', 'ORDERS', :$.ORD;

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

    תודה רבה.

    PRIORITY-DEVELOPER
    משתתף
    This reply has been reported for inappropriate content.

    WINACTIV לא עובד בממשק הוובי,תנסה להחליף ל ACTIVATE
    shimshon
    משתתף
    ACTIVATE אכן עובד, תודה רבה רבה
מוצגות 12 תגובות – 1 עד 12 (מתוך 12 סה״כ)
  • יש להתחבר למערכת על מנת להגיב.