how to prevent a messagebox from displaying when i don't need it in some cases in powerbuilder

29 Views Asked by At

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

i tried chatgpt and it didn't give me a solution

1

There are 1 best solutions below

0
Matt Balent On

Input validations are normally done in the Itemchanged event of the datawindow (or sometimes in a user defined event which is posted from the Itemchanged event). Rowfocuschange happens when you scrolltorow which you are doing multiple times in your 'New' button code.