1. Tom Pod
  2. PowerBuilder
  3. Thursday, 23 January 2020 08:29 AM UTC

Hi,

 

 

I have window called w_window1 with datawindow dw_1.

I would like to call retrieve event on that dw_1 from function test1, but after w_window1.dw_1.retrieve() i got error.

 

Error Number 2.

Error text = Null object reference at line ... in function test1 of object test1.

What am I doing wrong?

 

 

 

Chris Pollach @Appeon Accepted Answer Pending Moderation
  1. Thursday, 23 January 2020 21:27 PM UTC
  2. PowerBuilder
  3. # 1

Hi Tom;

  If you open "w_window1" from a variable, then it will never exist (aka NULL Object found) as "w_window1". It would exist as "lo_win", in m y example below ...

w_window1  lo_win

String   ls_win = "w_window1"

Open ( lo_win, ls_win)

HTH

Regards ... Chris

Comment
There are no comments made yet.
Michael Kramer Accepted Answer Pending Moderation
  1. Thursday, 23 January 2020 10:22 AM UTC
  2. PowerBuilder
  3. # 2

Hi Tom,

I presume you mean the Retrieve function.
Retrieve function as part of its work triggers a lot of fevents as the retrieve + display process progresses: RetrieveStart, SQLPreview, DBError, RetrieveRow, RetrieveEnd, RowFocusChanged, ItemFocusChanged

Every "window" consists of two components:

  1. The class = the code incl. properties, functions, and event scripts
  2. A global variable named IDENTICAL to the class

Depending on how you open your window you will see behavior you describe. Code samples:

// ---- ---- ---- ---- ---- EXAMPLE 1 ---- ---- ---- ---- ----
// Use global "class" variable
Open(w_window1)
// NOW: w_window1 references new window of class w_window1 

// NEXT: VALID
w_window1.dw_1.Retrieve( )

// ---- ---- ---- ---- ---- EXAMPLE 2 ---- ---- ---- ---- ----
// Use other variable
w_window1 lw_myWindow
Open(lw_myWindow)
// NOW: lw_myWindow references new window of class w_window1 

// NEXT: VALID
lw_myWindow.dw_1.Retrieve( )

// NEXT: FAILS (global variable unassigned)
w_window1.dw_1.Retrieve( )

In any case you will have to open the window to ensure your code references an valid window reference. You can use IsValid(...) and IsNull(...) to check for valid reference.

// Safest way to check valid reference
if IsValid(w_window1) and not IsNull(w_window1) then
   w_window1.dw_1.Retrieve( )
end if

// Alternative: Assert open window prior to retrieve
if IsNull(w_window1) or not IsValid(w_window1) then
   Open(w_window1)
end if
w_window1.dw_1.Retrieve( )

HTH /Michael

Comment
There are no comments made yet.
  • Page :
  • 1


There are no replies made for this question yet.
However, you are not allowed to reply to this question.
We use cookies which are necessary for the proper functioning of our websites. We also use cookies to analyze our traffic, improve your experience and provide social media features. If you continue to use this site, you consent to our use of cookies.