I have created a custom backup job that creates a zip file of data only. After it completes, I want to copy it to a floppy disk. Although I have inserted a "Wait for Idle" command between the backup script line and the copy script line, the copy script still executes before the backup script finishes.
Can anyone tell me how to make A5 finish one script line before it goes to the next?
The following code is the three script lines and the Xbasic generated by the three script lines.
-- Dick James
Script lines --
Run a Custom Backup Job
Wait for Idle
Inline Basic (to Copy a floppy)
XBasic code --
'Backup data only.
code_to_execute = ""%code%
dim temp_text as c
'read the saved 'Zip Database' setting definition from the Dictionary
temp_text = a5_dictionary_read(a5.Get_Name(),"zips","Zip Rentpro Data To Hd")
if temp_text = "" then
ui_msg_box("Error","No files to backup.",UI_STOP_SYMBOL)
end
end if
dim zipsettings as p
zipsettings.files_relative = ""
property_from_string(zipsettings,temp_text)
dim files_to_backup as c
files_to_backup = *for_each(x,filename_absolute(x), zipsettings.files_relative)
DIM zipfilename as C
zipfilename = "C:\RentProA5 Backups\Rentproaf.zip"
comment_text = ""
if files_to_backup "" "" then
a5_zip_files_w_fback(files_to_backup,zipfilename,.t.,.t.,.f.)
dim message_confirmation as c
message_confirmation = "Selected Database files were backed up to: '"+zipfilename+"'"
confirm_result = ui_dlg_box("Note",""%dlg%
{lf};
{text=80,3:message_confirmation};
{line=1,0};
"View Backup Log!view" "Close";
%dlg%)
if confirm_result = "view" then
dim flag_temp as l
flag_temp = file.unzip(zipfilename,"Database",file.temp_path_get())
if flag_temp = .t. then
dim temp_text as c
temp_text = get_from_file(file.temp_path_get()+"Database")
ui_dlg_box("Backup Log - "+zipfilename,"[%M%.120,30temp_text];"10&OK";")
ELSE
ui_msg_box("Error","Could not open the Backup log.",UI_STOP_SYMBOL)
END IF
end if
else
UI_msg_box("Error","No files were specified to backup.")
end if
%code%
dim cmd_initial as c
cmd_initial = code_to_execute
dim msg as c
msg = "In order to Backup files, all open Windows must first be closed. OK to close all open Windows?"
dim cmd_result as c
'get list of all open windows...........................................
dim open_windows as c
open_windows = a5_list_open_windows()
dim current_window as c
if is_object(topparent.this)
if topparent.class() = "form" .or. topparent.class() = "browse" then
current_window = topparent.name()
'remove the current window from the list
open_windows = word_subtract(open_windows,current_window,crlf())
end if
end if
'generate the xbasic to close all of the open windows (excepting the current window)....................
dim cmd_close as c
dim cmd_result as c
cmd_result = ""
flagOpenThenCloseCP = .f.
if open_windows "" "" then
cmd_close = *for_each(x,x+".close()" , open_windows)
''now execute the xbasic
cmd_result = evaluate_template(cmd_close)
end if
if cmd_result "" "" then
ui_msg_box("Error",cmd_result)
else 'was successfull in closing down all open windows.... so proceed
if is_object(topparent.this) then
if topparent.class() = "form" .or. topparent.class() = "browse" then
dim q_msg as n
q_msg = ui_msg_box("Notice",msg,UI_ATTENTION_SYMBOL+UI_OK_CANCEL)
if q_msg = ui_ok_selected then
dim topparent_name as c
dim cmd as c
dim condition as c
dim open_sessions as c
open_sessions = session_enum()
dim open_session_count as n
open_session_count = line_count(open_sessions)
if topparent.class() = "form" then
cmd = "dim tempP as p; tempP = form.view(" + quote(topparent.name(1)+"@" + topparent.Dictionary_Get(1))+")"
else
cmd = "dim tempP as p; tempP = browse.view(" +quote( topparent.name(1)+"@" + topparent.Dictionary_Get(1))+")"
end if
if a5_IsMaximized() = .t. then
cmd = cmd + crlf() +"xbasic_wait_for_idle()" + crlf() + "tempP.maximize()" + crlf()
end if
'when the number of sessions is one less than the number before the layout is closed then
'the session that the form/browse was based on has been closed, and it is safe to run the
'command.
condition = "line_count(session_enum()) = " + (open_session_count - 1 )
cmd = cmd_initial + crlf() + cmd
'is the control panel hidden? if so then you have to temporarily show it, or else the database will close
'after you close this form.
if ControlPanel.IsVisible() = .f. then
ControlPanel.Minimize()
cmd = cmd + crlf() + "controlpanel.hide()"
if a5_IsMaximized() then
topparent.restore()
end if
end if
on_condition(condition,cmd)
topparent.close()
end if
else 'topparent is an object, but it is not a form or browse
cmd_result = evaluate_template(cmd_initial)
if cmd_result "" "" then
ui_msg_box("Error",cmd_result)
end if
end if
else ' topparent is not an object
cmd_result = evaluate_template(cmd_initial)
if cmd_result "" "" then
ui_msg_box("Error",cmd_result)
end if
end if
end if
'Pause the script for a instant until the user interface has finished repainting.
xbasic_wait_for_idle()
'Copy to floppy.
dim full_zip_filename as c
full_zip_filename = "c:\RentProA5 Backups\RentProAF.zip"
file.copy2(full_zip_filename,"a:"+ chr(92) + "RentProA5("+gloPropertyCode+").zip")
'End the current script
END
Can anyone tell me how to make A5 finish one script line before it goes to the next?
The following code is the three script lines and the Xbasic generated by the three script lines.
-- Dick James
Script lines --
Run a Custom Backup Job
Wait for Idle
Inline Basic (to Copy a floppy)
XBasic code --
'Backup data only.
code_to_execute = ""%code%
dim temp_text as c
'read the saved 'Zip Database' setting definition from the Dictionary
temp_text = a5_dictionary_read(a5.Get_Name(),"zips","Zip Rentpro Data To Hd")
if temp_text = "" then
ui_msg_box("Error","No files to backup.",UI_STOP_SYMBOL)
end
end if
dim zipsettings as p
zipsettings.files_relative = ""
property_from_string(zipsettings,temp_text)
dim files_to_backup as c
files_to_backup = *for_each(x,filename_absolute(x), zipsettings.files_relative)
DIM zipfilename as C
zipfilename = "C:\RentProA5 Backups\Rentproaf.zip"
comment_text = ""
if files_to_backup "" "" then
a5_zip_files_w_fback(files_to_backup,zipfilename,.t.,.t.,.f.)
dim message_confirmation as c
message_confirmation = "Selected Database files were backed up to: '"+zipfilename+"'"
confirm_result = ui_dlg_box("Note",""%dlg%
{lf};
{text=80,3:message_confirmation};
{line=1,0};
"View Backup Log!view" "Close";
%dlg%)
if confirm_result = "view" then
dim flag_temp as l
flag_temp = file.unzip(zipfilename,"Database",file.temp_path_get())
if flag_temp = .t. then
dim temp_text as c
temp_text = get_from_file(file.temp_path_get()+"Database")
ui_dlg_box("Backup Log - "+zipfilename,"[%M%.120,30temp_text];"10&OK";")
ELSE
ui_msg_box("Error","Could not open the Backup log.",UI_STOP_SYMBOL)
END IF
end if
else
UI_msg_box("Error","No files were specified to backup.")
end if
%code%
dim cmd_initial as c
cmd_initial = code_to_execute
dim msg as c
msg = "In order to Backup files, all open Windows must first be closed. OK to close all open Windows?"
dim cmd_result as c
'get list of all open windows...........................................
dim open_windows as c
open_windows = a5_list_open_windows()
dim current_window as c
if is_object(topparent.this)
if topparent.class() = "form" .or. topparent.class() = "browse" then
current_window = topparent.name()
'remove the current window from the list
open_windows = word_subtract(open_windows,current_window,crlf())
end if
end if
'generate the xbasic to close all of the open windows (excepting the current window)....................
dim cmd_close as c
dim cmd_result as c
cmd_result = ""
flagOpenThenCloseCP = .f.
if open_windows "" "" then
cmd_close = *for_each(x,x+".close()" , open_windows)
''now execute the xbasic
cmd_result = evaluate_template(cmd_close)
end if
if cmd_result "" "" then
ui_msg_box("Error",cmd_result)
else 'was successfull in closing down all open windows.... so proceed
if is_object(topparent.this) then
if topparent.class() = "form" .or. topparent.class() = "browse" then
dim q_msg as n
q_msg = ui_msg_box("Notice",msg,UI_ATTENTION_SYMBOL+UI_OK_CANCEL)
if q_msg = ui_ok_selected then
dim topparent_name as c
dim cmd as c
dim condition as c
dim open_sessions as c
open_sessions = session_enum()
dim open_session_count as n
open_session_count = line_count(open_sessions)
if topparent.class() = "form" then
cmd = "dim tempP as p; tempP = form.view(" + quote(topparent.name(1)+"@" + topparent.Dictionary_Get(1))+")"
else
cmd = "dim tempP as p; tempP = browse.view(" +quote( topparent.name(1)+"@" + topparent.Dictionary_Get(1))+")"
end if
if a5_IsMaximized() = .t. then
cmd = cmd + crlf() +"xbasic_wait_for_idle()" + crlf() + "tempP.maximize()" + crlf()
end if
'when the number of sessions is one less than the number before the layout is closed then
'the session that the form/browse was based on has been closed, and it is safe to run the
'command.
condition = "line_count(session_enum()) = " + (open_session_count - 1 )
cmd = cmd_initial + crlf() + cmd
'is the control panel hidden? if so then you have to temporarily show it, or else the database will close
'after you close this form.
if ControlPanel.IsVisible() = .f. then
ControlPanel.Minimize()
cmd = cmd + crlf() + "controlpanel.hide()"
if a5_IsMaximized() then
topparent.restore()
end if
end if
on_condition(condition,cmd)
topparent.close()
end if
else 'topparent is an object, but it is not a form or browse
cmd_result = evaluate_template(cmd_initial)
if cmd_result "" "" then
ui_msg_box("Error",cmd_result)
end if
end if
else ' topparent is not an object
cmd_result = evaluate_template(cmd_initial)
if cmd_result "" "" then
ui_msg_box("Error",cmd_result)
end if
end if
end if
'Pause the script for a instant until the user interface has finished repainting.
xbasic_wait_for_idle()
'Copy to floppy.
dim full_zip_filename as c
full_zip_filename = "c:\RentProA5 Backups\RentProAF.zip"
file.copy2(full_zip_filename,"a:"+ chr(92) + "RentProA5("+gloPropertyCode+").zip")
'End the current script
END
Comment