Work order structure window: In follow example we create a button on right side with "Close"
If you click on the button, the program will close current and all marked work orders and work order rows.
 
You see 
- Create Button
- work with SQL
- work with BSL GET and POST
- read selected lines

  
see BeasServiceLayer  DataWindow  setvar functions 
  
global function form_loaded 
// create button on right side with text "Close" 
create=button=name=CloseOrder,text=Close order,position=1 
end global 
  
global function dw_master_item_closeorder_click 
for ll_row=1 to <dw_1.rowcount> 
  if <dw_1.isselect:[ll_row]> = true then 
      if <dw_1.item.zeilentyp.value> n= 0 then 
           closeworkorder() 
      end if 
      if <dw_1.item.zeilentyp.value> n= 10 then 
           closeworkorderpos() 
      end if 
      if <return> n= -1 then 
         return -1 
      end if 
  end if 
next 
retrieve 
  
  
function closeworkorder 
// read work order number from defined row 
setvar=ll_DocEntry=<dw_1.item.belnr_id:[ll_row].value> 
  
// Work with SQL: with into you can define the target Variable 
// in bracket you can define the number. #0 => no decimal places 
//select coalesce("ABGKZ",'N') into :ls_closed from "BEAS_FTHAUPT" where "BELNR_ID"=<ll_DocEntry,#0> 
//if <ls_closed> = J then 
//  return 1 
//end if 
  
// Better way: BSL- check close flag. is 1 or 0 
instance bsl b 
b.get=Workorder(<ll_DocEntry,#0>)/Closed/$value 
if <b.ret_value> = 1 then 
  return 1 
end if 
  
// Close work order 
b.get=Workorder/Close(<ll_DocEntry,#0>) 
if <b.ret_code> = -1 then 
  messagebox=error$<b.ret_text> 
  return -1 
end if 
// Close return separate status. If -1, then error.  
if <b.ret_status> n= -1 then 
  messagebox=error$<b.error> 
  return -1 
end if 
dw_1.item.abgkz:[ll_row].value=J 
end function 
  
function closeworkorderpos 
instance bsl b 
// read work order pos number from defined row 
setvar=ll_DocEntry=<dw_1.item.belnr_id:[ll_row].value> 
setvar=ll_LineNumber=<dw_1.item.belpos_id:[ll_row].value> 
  
// if position closed, then ignore 
b.get=Workorder(<ll_DocEntry,#0>)/Closed/$value 
if <b.ret_value> = 1 then 
  return 1 
end if 
  
// Close work order Position 
b.get=WorkorderPos/Close(<ll_DocEntry,#0>,<ll_LineNumber,#0>) 
if <b.ret_code> = -1 then 
  messagebox=error$<b.ret_text> 
  return -1 
end if 
// Close return separate status. If -1, then error.  
if <b.ret_status> n= -1 then 
  messagebox=error$<b.error> 
  return -1 
end if 
dw_1.item.abgkz:[ll_row].value=J 
end function 
  
end global 
 | 
 
 
 Example Notes