in my powerbuilder 19 project, it's all about article management. when i click on "new" button, it displays a dwc_article(freeform) empty and i have to insert all the article details(reference, name ...) and in itemfocuschanged event of dwc_article. i made sure to get a messagebox "valdiation error" when i insert a reference or name empty. the problem is, when i select a row in dwc_report (tabular) and click "update" it display the article details in dwc_aritcle (freeform) but then when i click on "new" button it display the validation error message box 3 times and i don't wanna it to display in this case.
*here is the script for itemfocuschanged event of dwc_article:
integer li_row
string ls_reference
string ls_name
li_row = This.GetRow()
cb_3.Enabled = false
cb_7.Enabled = false
// Check if the focus is on the reference field
if This.GetColumnName() <> "reference" then
// Get the value of the reference field
ls_reference = This.GetItemString(li_row, "reference")
// Check if the reference field is empty or has more than 50 characters
if IsNull(ls_reference) or Trim(ls_reference) = "" or Len(ls_reference) > 50 then
MessageBox("Validation Error", "Reference field must not be empty and should have 50 characters or less.")
// Set focus back to the reference field
cb_3.Enabled = false
cb_7.Enabled = false
This.SetColumn("reference")
return 1 // Prevent focus change
else
end if
end if
li_row = This.GetRow()
// Check if the focus is on the name field
if This.GetColumnName() <> "name" and This.GetColumnName() <> "reference" then
// Get the value of the name field
ls_name = This.GetItemString(li_row, "name")
cb_3.Enabled = false
cb_7.Enabled = false
// Check if the name field is empty or has more than 50 characters
if IsNull(ls_name) or Trim(ls_name) = "" or Len(ls_name) > 50 then
MessageBox("Validation Error", "Name field must not be empty and should have 50 characters or less.")
// Set focus back to the name field
This.SetColumn("name")
cb_3.Enabled = false
cb_7.Enabled = false
return 1 // Prevent focus change
else
cb_3.Enabled = true
cb_7.Enabled = true
end if
end if
return 0
*here is the script of "new" button :
dwc_article.reset()
dwc_article.insertrow(0)
char reference
dwc_article.scrolltorow(dwc_article.insertrow(0))
// Scroll to the newly inserted row
long ll_new_row
ll_new_row = dwc_article.InsertRow(0)
dwc_article.ScrollToRow(ll_new_row)
// Get the current date
date ld_date_creation
ld_date_creation = today()
string ls_formatted_date
ls_formatted_date = String(ld_date_creation, "yyyy-mm-dd")
// Set the current date to the "date_de_creation" column
dwc_article.SetItem(ll_new_row, "date_de_creation", ls_formatted_date)
bl_btn_new_clicked = true
dwc_article.modify("reference.Protect='0'") // This removes input capability from all columns
dwc_article.modify("name.Protect='0'")
dwc_article.modify("prix.Protect='0'")
dwc_article.modify("date_de_creation.Protect='1'")
and here is the script for "update" button :
long ll_row
ll_row = dwc_report.GetSelectedRow(0) // Get the selected row index in dwc_report
if ll_row >= 0 then // If a row is selected
// Clear existing data in dwc_article
dwc_article.Reset()
long ll_nextRow
ll_nextRow = dwc_article.RowCount() + 1
// Copy data from dwc_report to dwc_article
dwc_report.RowsCopy(ll_row, ll_row, Primary!, dwc_article, ll_nextRow, Primary!)
// Disable all inputs in dwc_article
dwc_article.modify("reference.Protect='1'")
dwc_article.modify("name.Protect='0'")
dwc_article.modify("prix.Protect='0'")
dwc_article.modify("date_de_creation.Protect='1'")
// Retrieve data in dwc_article to reflect changes
//dwc_report.retrieve()
//dwc_article.retrieve()
else
MessageBox("No row selected", "Please select a row in the report")
end if