Page 1 of 1

How to use user defined function in XBrowse?

Posted: Thu Aug 29, 2019 3:18 pm
by Max HK
In Listbox, I can call user defined function like Get_name( field->Customer_code ).

How to do similar thing in XBrowse? like COLUMNS "DOC_DATE", "Get_name( Customer_code )", but it does not work

Thanks in advance.

Re: How to use user defined function in XBrowse?

Posted: Thu Aug 29, 2019 8:03 pm
by Marcelo Via Giglio
Hola,

try to use code block COLUMNS "DOC_DATE", {|| Get_name( Customer_code ) }

regards

Marcelo

Re: How to use user defined function in XBrowse?

Posted: Fri Aug 30, 2019 12:37 am
by Max HK
Thanks for your reply. But it does not work.

XBrowse can call build-in function like "DOW(DOC_DATE)", but I do not know how to call my user defined function.
Marcelo Via Giglio wrote:Hola,

try to use code block COLUMNS "DOC_DATE", {|| Get_name( Customer_code ) }

regards

Marcelo

Re: How to use user defined function in XBrowse?

Posted: Fri Aug 30, 2019 1:55 am
by nageswaragunupudi

Code: Select all

COLUMNS "DOC_DATE", "Get_name( Customer_code )" 
 
works if Get_name is a public function, i.e., it is not a "static" function.

Code: Select all

COLUMNS "DOC_DATE", {|| Get_name( Customer_code ) }
 
works whether Get_name is a public function or static function.

Please make sure that the function itself is working correctly and that XBrowse knows the values of parameters used.

This is a test program:

Code: Select all

#include "fivewin.ch"

static aStates

function Main()

   USE STATES SHARED
   aStates  := FW_DbfToArray()
   CLOSE STATES

   USE CUSTOMER NEW SHARED

   XBROWSER "CUSTOMER" COLUMNS "State", "StateName(STATE)", { || StateName(FIELD->STATE) } ;
      SETUP oBrw:cHeaders := { "State", "Name1", "Name2" }

return nil

function StateName( cCode )

   local nAt   := AScan( aStates, { |a| a[ 1 ] == cCode } )

return If( nAt == 0, Space( 20 ), aStates[ nAt, 2 ] )
 
Image

Re: How to use user defined function in XBrowse?

Posted: Fri Aug 30, 2019 12:14 pm
by Max HK
Mr Rao,

Thanks for your suggestion. But it still not work in Code Block.

Please notice that I use XBrowse, not XBrowser.

From wiki.fivetechsoft.com, I find the following explanation:
========================================
Difference between COLUMNS and FIELDS

COLUMNS CLAUSE is a list of column names of the Alias assigned to the browse. FIELDS clause is for any expressions. FIELDS clause is to be used for data from other related Aliases or any complext expressions.

When both COLUMNS and FIELDS clauses are speicified, XBrowse places the columns first and then the fields. We can later rearrange the sequence of xbrowse columns.
========================================

I have used FIELDS but still failed to call my functions.

Thanks & Regards.

Re: How to use user defined function in XBrowse?

Posted: Fri Aug 30, 2019 12:38 pm
by nageswaragunupudi
[quote]
Please notice that I use XBrowse, not XBrowser.
[/code]
I posted the sample using XBrowser, because I know for sure that the behavour is the same whether it is xbrowse or xbrowser.

Please let us know:
1) What is the version of FWH you are using. If your version is not too old, whatever I said above SHOULD work.

2) Did you build and test the sample I posted above? Does the sample as it is work for you or not? Please test and let us know first. Then we can advise you better.
Please copy the sample to \fwh\samples folder and build it with buildh.bat or buildx.bat

Re: How to use user defined function in XBrowse?

Posted: Sat Aug 31, 2019 3:17 am
by Max HK
I found the solution. The Code Block syntax is correct.

But since I use TDatabase to open DBF, the syntax is {|| Get_name( odbf:Customer_code ) }, instead of using "FIELD->".