עבור לתוכן
Magic DevHub
MaorLinn

או ששכחתי או שאני משתגע...

Recommended Posts

גרסה 9.4

משימת אב קוראת למשימת בן.

ביציאה ממשימת הבן חזרה למשימת האב - שמתי תנאי עצירה (ודא תקינות מסוג שגיאה).

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

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

איפה אני טועה או מה אני עושה לא נכון?

שתף אשכול


קישור ישיר להודעה
שתף באתרים אחרים

מאור שלום

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

The operations stored In the Task Suffix logic unit are executed at the end of the task.

This logic unit is executed only once at the end of each task, after the connection to the data source has been closed.

Task Suffix operations are often used to update parameters for A calling task or to print report totals.


 

שתף אשכול


קישור ישיר להודעה
שתף באתרים אחרים

הבנתי...

אז עכשיו אני בבעיה חדשה -

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

איך אני יכול למנוע מהמשתמש לצאת מהמשימה אם סך הרשומות אינו בדיוק מה שאמור להיות?

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

במילים אחרות -

אם אמורים להגיע לסף של 500, ומזינים רשומה ראשונה של 100 - אין סיבה לעצור כי אני רוצה שהמשתמש יילך לרשומה הבאה.
אחרי השניה, השלישית, והלאה - הסכום הגיע ל-499, והמשתמש מנסה לצאת - איך אני עוצר אותו?

שתף אשכול


קישור ישיר להודעה
שתף באתרים אחרים

OK, הבנתי את ה"תסריט".

אם כך אני חושב שהדרך שהייתי בוחר בה כדי לממש את הצורך שלך היא כזו:

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

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

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

בהצלחה...

שתף אשכול


קישור ישיר להודעה
שתף באתרים אחרים

גדי -

ראשית כל תודה.

שנית - האם אנחנו מדברים על אותה גרסה? אני לא מכיר את הטרמינולוגיה שהשתמשת בה - "יחידה לוגית מסוג משתמש". כיצד זה נקרא בגרסה 9.4 (הישנה והטובה)?

שתף אשכול


קישור ישיר להודעה
שתף באתרים אחרים

סליחה,

תחליף את הביטוי "יחידה לוגית"  במילה "אירוע", 

חוץ מזה כל השאר רלוונטי ל- 9.4 כמו שכתבתי.

בהצלחה

שתף אשכול


קישור ישיר להודעה
שתף באתרים אחרים

טוב, הסתבכתי...

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

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

אבל - מתי אפשר באמת לצאת? האם לא אמורה להיות בסוף ה-HANDLER היציאה הרגיל גם פקודה לצאת?

איפה אני אמור לתת לו פקודת יציאה ואיך אני מוודא שהיא לא תיתקע שוב בתוך אותו הלופ?

שתף אשכול


קישור ישיר להודעה
שתף באתרים אחרים

את התנאי אתה צריך לתת על תכונה "הפץ" שהיא למעשה מעבירה את היציאה לביצוע של מנוע מג'יק

שתף אשכול


קישור ישיר להודעה
שתף באתרים אחרים

מאור שלום

מצ"ב תכנית קטנה ומכוערת, שעושה את העבודה.

דרך אגב התוספת בהערה האחרונה של אריאל בהחלט במקומה. בלעדיה זה לא היה עובד.

שים לב שתנאי הסיום של המשימה משמש גם כתנאי הפצה על האירוע, כלומר אם התנאי הוא TRUE, אנחנו רוצים שהמנוע יעבור לאירוע היציאה הבא, כלומר יצא מהמשימה, ואם לא - אז בעצם "לכדנו" את אירוע היציאה.

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

בהצלחה.

שתף אשכול


קישור ישיר להודעה
שתף באתרים אחרים

אני רואה שיש בעיה לצרף קבצים, אז הנה היצוא בצורה גולמית.


VRSN=940.0803
APPLICATION=N
MODEL=N
TABLE=N
PROGRAM=Y
MAIN_PROGRAM=N
HELP=N
RIGHT=N
MENU=N
COMPONENT=N
APP_PROP=N
ISN=N
WITH_MODELS=N
FOR_V10=N
MAIN_PRG_VARS=0
MAIN_PRG_DSPS=1

PRG={
HDR={DESC="יציאה מותנית",PUBQRY={},PUBMDF={},PUBDEL={},PUBEXE={},RSDNT=N,SQL=N,RET_VAL={PARAM_ATTR={}}},
RSRCE={
FIELD={DESC="לחצן משימת בן",ISN=1,
PROPLIST={MODEL="FIELD",
PROP={ID="MODEL",DATA={MODEL_ID={DEF_OBJ="FIELD_ALPHA"}}},
PROP={ID="PICTURE",DATA={VAL="10H"}},
PROP={ID="MODEL_GUI_INT",DATA={
PROPLIST={MODEL="CTRL_GUI0_PUSH_BUTTON",
PROP={ID="FORMAT",DATA={VAL="משימת בן"}},
PROP={ID="TRIGGER",DATA={
EVENT_TRIGGER={TRIG_TYPE=U,COMP_EVNT_ISN={PUB_OBJ={OBJ=1,COMP_OBJ=-1}}}}}}}},
PROP={ID="STORAGE",DATA={VAL=1}},
PROP={ID="LENGTH",DATA={VAL=10}},
PROP={ID="FLIP"}}}},
DTLS={
KEY={MOD=N},
DB={DB={}},
FLW=O,DEL=N,END=N,EMOD=B,
MOD={MOD=M},
LCT={DIR=A},
RNG={DIR=A},
FLG={SLCT=N,CNFU=N,CNF=N,ERR_STRG=R,LSTRG=M,TSK_CACHE=D,SUFIX=N,TRANS_MODE=D,TRANS_BEGIN=P,KEEP_NEW_CNXT=N},
SIDE_WIN={
RPR={RPR=N}},
WIN={OPN=Y,CLS=Y,FGND=Y,FLIP=N,
DTLS={RTRN=N}},
BOX={DIR=V},
UPD={DATE="26/08/2014",TIME="21:23:46"}},
FLW={
BRK={LEVEL=T,TYP=P,DIT_CTRL=-1,DSP=-1,POS=1,SCOPE=S,PROP=78,ENGINE_DIR=S,SHOW_MSG=89,ENABLED=89,
EVENT_TRIGGER={TRIG_TYPE=S,COMP_EVNT_ISN={PUB_OBJ={COMP_OBJ=-1}}}},
BRK={LEVEL=T,TYP=S,DIT_CTRL=-1,DSP=-1,POS=1,SCOPE=S,PROP=78,ENGINE_DIR=S,SHOW_MSG=89,ENABLED=89,
EVENT_TRIGGER={TRIG_TYPE=S,COMP_EVNT_ISN={PUB_OBJ={COMP_OBJ=-1}}}},
BRK={LEVEL=R,TYP=P,DIT_CTRL=-1,DSP=-1,POS=1,SCOPE=S,PROP=78,ENGINE_DIR=S,SHOW_MSG=89,ENABLED=89,
EVENT_TRIGGER={TRIG_TYPE=S,COMP_EVNT_ISN={PUB_OBJ={COMP_OBJ=-1}}}},
BRK={LEVEL=R,TYP=M,DIT_CTRL=-1,DSP=-1,POS=1,LENGTH=1,SCOPE=S,PROP=78,ENGINE_DIR=S,SHOW_MSG=89,ENABLED=89,VEE_LEN=1,VIR_LEN=1,
EVENT_TRIGGER={TRIG_TYPE=S,COMP_EVNT_ISN={PUB_OBJ={COMP_OBJ=-1}}},
HDLR_FLOW={
SLCT={NAME="A",FLD=1,MOD=V,IS_PRM=N,DIFF_UPDATE=T,FLW={CND=Y,MOD=S,DIR=C}}}},
BRK={LEVEL=R,TYP=S,DIT_CTRL=-1,DSP=-1,POS=1,SCOPE=S,PROP=78,ENGINE_DIR=S,SHOW_MSG=89,ENABLED=89,
EVENT_TRIGGER={TRIG_TYPE=S,COMP_EVNT_ISN={PUB_OBJ={COMP_OBJ=-1}}}},
BRK={LEVEL=H,TYP=U,DIT_CTRL=-1,DSP=-1,POS=2,LENGTH=1,SCOPE=T,PROP=78,ENGINE_DIR=S,SHOW_MSG=89,ENABLED=89,
EVENT_TRIGGER={TRIG_TYPE=U,COMP_EVNT_ISN={PUB_OBJ={OBJ=1,COMP_OBJ=-1}}},
HDLR_FLOW={
CALL_TSK={MOD=T,TSK={OBJ=1},LOCK=N,WAIT=Y,SYNC_UPDATE=N,FLW={CND=Y,MOD=B,DIR=C}}}}},
DSP={LAST_TEST_ID=1,
PROPLIST={MODEL="FORM_GUI0",
PROP={ID="NAME",DATA={VAL="יציאה מותנית"}},
PROP={ID="COMMENT",DATA={}}},
ITM={TEST_ID=1,PDOD=128,
PROPLIST={MODEL="CTRL_GUI0_PUSH_BUTTON",
PROP={ID="MODEL",DATA={MODEL_ID={VAR={FLD=1},ID="MODEL_GUI_INT"}}},
PROP={ID="LEFT",DATA={VAL=128}},
PROP={ID="TOP",DATA={VAL=64}},
PROP={ID="WIDTH",DATA={VAL=53}},
PROP={ID="HEIGHT",DATA={VAL=14}},
PROP={ID="DATA",DATA={FLD="A"}},
PROP={ID="NAME",DATA={VAL="לחצן משימת בן"}}}}},
EVNT={FORCE_EXIT=N,DESC="משימת בן",
EVENT_TRIGGER={TRIG_TYPE=N,COMP_EVNT_ISN={PUB_OBJ={COMP_OBJ=-1}}}},
TSK={
HDR={DESC="משימה עם בקרת יציאה חילופית",PUBQRY={},PUBMDF={},PUBDEL={},PUBEXE={},RSDNT=N,SQL=N,RET_VAL={PARAM_ATTR={}}},
RSRCE={
FIELD={DESC="תנאי יציאה מקומי",ISN=1,
PROPLIST={MODEL="FIELD",
PROP={ID="MODEL",DATA={MODEL_ID={DEF_OBJ="FIELD_LOGICAL"}}},
PROP={ID="RANGE",DATA={VAL="כן,לא"}},
PROP={ID="PICTURE",DATA={VAL="2HA"}},
PROP={ID="MODEL_GUI_INT",DATA={
PROPLIST={MODEL="CTRL_GUI0_COMBOBOX"}}},
PROP={ID="FIELD_STYLE",DATA={VAL=1}}}},
FIELD={DESC="END_TASK",ISN=2,
PROPLIST={MODEL="FIELD",
PROP={ID="MODEL",DATA={MODEL_ID={DEF_OBJ="FIELD_LOGICAL"}}},
PROP={ID="FIELD_STYLE",DATA={VAL=1}}}},
FIELD={DESC="לחצן נסיון יציאה",ISN=3,
PROPLIST={MODEL="FIELD",
PROP={ID="MODEL",DATA={MODEL_ID={DEF_OBJ="FIELD_ALPHA"}}},
PROP={ID="PICTURE",DATA={VAL="10H"}},
PROP={ID="MODEL_GUI_INT",DATA={
PROPLIST={MODEL="CTRL_GUI0_PUSH_BUTTON",
PROP={ID="FORMAT",DATA={VAL="נסה לצאת"}},
PROP={ID="TRIGGER",DATA={
EVENT_TRIGGER={TRIG_TYPE=I,ACTV=14,COMP_EVNT_ISN={PUB_OBJ={COMP_OBJ=-1}}}}}}}},
PROP={ID="STORAGE",DATA={VAL=1}},
PROP={ID="LENGTH",DATA={VAL=10}},
PROP={ID="FLIP"}}}},
DTLS={
KEY={MOD=N},
DB={DB={}},
FLW=O,DEL=N,END=3,EMOD=I,
MOD={MOD=M},
LCT={DIR=A},
RNG={DIR=A},
FLG={SLCT=N,CNFU=N,CNF=N,ERR_STRG=R,LSTRG=M,TSK_CACHE=N,SUFIX=N,TRANS_MODE=W,TRANS_BEGIN=P,KEEP_NEW_CNXT=N},
SIDE_WIN={
RPR={RPR=N}},
WIN={OPN=Y,CLS=Y,FGND=Y,FLIP=N,
DTLS={RTRN=N}},
BOX={DIR=V},
UPD={DATE="26/08/2014",TIME="21:23:46"}},
FLW={
BRK={LEVEL=T,TYP=P,DIT_CTRL=-1,DSP=-1,POS=1,SCOPE=S,PROP=78,ENGINE_DIR=S,SHOW_MSG=89,ENABLED=89,
EVENT_TRIGGER={TRIG_TYPE=S,COMP_EVNT_ISN={PUB_OBJ={COMP_OBJ=-1}}}},
BRK={LEVEL=T,TYP=S,DIT_CTRL=-1,DSP=-1,POS=1,SCOPE=S,PROP=78,ENGINE_DIR=S,SHOW_MSG=89,ENABLED=89,
EVENT_TRIGGER={TRIG_TYPE=S,COMP_EVNT_ISN={PUB_OBJ={COMP_OBJ=-1}}}},
BRK={LEVEL=R,TYP=P,DIT_CTRL=-1,DSP=-1,POS=1,SCOPE=S,PROP=78,ENGINE_DIR=S,SHOW_MSG=89,ENABLED=89,
EVENT_TRIGGER={TRIG_TYPE=S,COMP_EVNT_ISN={PUB_OBJ={COMP_OBJ=-1}}}},
BRK={LEVEL=R,TYP=M,DIT_CTRL=-1,DSP=-1,POS=1,LENGTH=5,SCOPE=S,PROP=78,ENGINE_DIR=S,SHOW_MSG=89,ENABLED=89,VEE_LEN=3,VIR_LEN=3,
EVENT_TRIGGER={TRIG_TYPE=S,COMP_EVNT_ISN={PUB_OBJ={COMP_OBJ=-1}}},
HDLR_FLOW={
SLCT={NAME="B",FLD=1,MOD=V,IS_PRM=N,DIFF_UPDATE=T,FLW={CND=Y,MOD=S,DIR=C}},
RMRK="",
SLCT={NAME="C",FLD=2,MOD=V,IS_PRM=N,DIFF_UPDATE=T,FLW={CND=Y,MOD=S,DIR=C}},
RMRK="",
SLCT={NAME="D",FLD=3,MOD=V,IS_PRM=N,DIFF_UPDATE=T,FLW={CND=Y,MOD=S,DIR=C}}}},
BRK={LEVEL=R,TYP=S,DIT_CTRL=-1,DSP=-1,POS=1,SCOPE=S,PROP=78,ENGINE_DIR=S,SHOW_MSG=89,ENABLED=89,
EVENT_TRIGGER={TRIG_TYPE=S,COMP_EVNT_ISN={PUB_OBJ={COMP_OBJ=-1}}}},
BRK={LEVEL=H,TYP=U,DIT_CTRL=-1,DSP=-1,POS=2,LENGTH=5,SCOPE=T,PROP=-3,ENGINE_DIR=S,SHOW_MSG=89,ENABLED=89,
EVENT_TRIGGER={TRIG_TYPE=U,COMP_EVNT_ISN={PUB_OBJ={OBJ=1,COMP_OBJ=-1}}},
HDLR_FLOW={
BLOCK={END_BLK=8,MOD=I,END=10,FLW={CND=2,MOD=B,DIR=C}},
UPD={FLD="C",EXP=1,MOD=N,ABRT=Y,FLW={CND=Y,MOD=B,DIR=C}},
BLOCK={END_BLK=10,MOD=E,END=10,FLW={CND=Y,MOD=B,DIR=C}},
STP={TXT="חשבת שתצא - אבל לא! GOTCHA!",MOD=W,VR_DISP=B,FLW={CND=Y,MOD=B,DIR=C}},
END_BLK}}},
DSP={LAST_TEST_ID=3,
PROPLIST={MODEL="FORM_GUI0",
PROP={ID="NAME",DATA={VAL="משימה עם בקרת יציאה חילופית"}},
PROP={ID="COMMENT",DATA={}}},
ITM={TEST_ID=2,
PROPLIST={MODEL="CTRL_GUI0_STATIC",
PROP={ID="TEXT",DATA={VAL="תנאי יציאה"}},
PROP={ID="LEFT",DATA={VAL=232}},
PROP={ID="TOP",DATA={VAL=56}},
PROP={ID="WIDTH",DATA={VAL=50}},
PROP={ID="HEIGHT",DATA={VAL=9}}}},
ITM={TEST_ID=1,PDOD=192,
PROPLIST={MODEL="CTRL_GUI0_COMBOBOX",
PROP={ID="MODEL",DATA={MODEL_ID={VAR={FLD=1},ID="MODEL_GUI_INT"}}},
PROP={ID="LEFT",DATA={VAL=128}},
PROP={ID="TOP",DATA={VAL=56}},
PROP={ID="WIDTH",DATA={VAL=92}},
PROP={ID="HEIGHT",DATA={VAL=12}},
PROP={ID="DATA",DATA={FLD="B"}},
PROP={ID="NAME",DATA={VAL="תנאי יציאה"}}}},
ITM={TEST_ID=3,PDOD=128,
PROPLIST={MODEL="CTRL_GUI0_PUSH_BUTTON",
PROP={ID="MODEL",DATA={MODEL_ID={VAR={FLD=3},ID="MODEL_GUI_INT"}}},
PROP={ID="LEFT",DATA={VAL=116}},
PROP={ID="TOP",DATA={VAL=104}},
PROP={ID="WIDTH",DATA={VAL=64}},
PROP={ID="HEIGHT",DATA={VAL=14}},
PROP={ID="DATA",DATA={FLD="D"}},
PROP={ID="NAME",DATA={VAL="לחצן נסיון יציאה"}}}}},
EXP="'TRUE'LOG",
EXP="B",
EXP="C",
EVNT={FORCE_EXIT=N,DESC="יציאה חילופית",
EVENT_TRIGGER={TRIG_TYPE=I,ACTV=14,COMP_EVNT_ISN={PUB_OBJ={COMP_OBJ=-1}}}}}}

שתף אשכול


קישור ישיר להודעה
שתף באתרים אחרים

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

עליך להיות משתמש רשום על מנת להגיב

צור חשבון

צור חשבון חדש בקהילה בקלי קלות.

רישום חשבון חדש

התחבר

משתמש קיים? התחבר.

התחבר עכשיו

×