Rick -
The wwBusinessObject class contains a Find function, which always overrides the oData object. It would be good to have a parameter for Find which will cause it to not override oData, but still return the True or False result.
For example, when a new user is signing up, I want to validate that the email address they entered is not already in the system (which is easily determined using Find(), whether you have FoxPro or SQL data). However, during the validation process, this.oData
could already contain information about the proposed new signup, so I don't want to override that data when looking for an existing email address.
- Mike McDonald
I don't think there's a big use case for this but I suppose it's easy enough to add without introducing more features.
So here's this:
************************************************************************
* Find
****************************************
*** Function: Tries to find a record based on a filter string
*** and sets the oData member. Only the first item found is
*** returned so you probably want to reserve this for known
*** lookups of unique items.
*** Assume:
*** Pass: lcFilter - SQL Filter string (WHERE)
*** llNoDataMember - if .T. doesn't set the .oData member
*** Return: .T. or .F. with oData set
************************************************************************
FUNCTION Find(lcFilter, llNoDataMember)
LOCAL lcCmd, lnResult
IF !THIS.OPEN()
RETURN .F.
ENDIF
DO CASE
CASE THIS.ndatamode = 0
lcCmd = "LOCATE FOR " + lcFilter
&lcCmd
IF FOUND()
IF !llNoDataMember
SCATTER NAME THIS.odata MEMO
IF THIS.lcompareupdates
SCATTER NAME THIS.oorigdata MEMO
ENDIF
ENDIF
RETURN .T.
ELSE
IF !llNoDataMember
SCATTER NAME THIS.odata BLANK MEMO
ENDIF
ENDIF
CASE THIS.ndatamode = 2
THIS.osql.csqlcursor = "TSQLQuery"
THIS.osql.csql = "select * from " + THIS.cfilename + " WHERE " + lcFilter
*_cliptext = THIS.oSQL.cSQL
lnResult = THIS.osql.execute()
IF lnResult # 1
THIS.SetError(THIS.osql.cerrormsg)
RETURN .F.
ENDIF
IF RECCOUNT() > 0
IF !llNoDataMember
SCATTER NAME THIS.odata MEMO
IF THIS.lcompareupdates
SCATTER NAME THIS.oorigdata MEMO
ENDIF
ENDIF
RETURN .T.
ELSE
IF !llNoDataMember
SCATTER NAME THIS.odata BLANK MEMO
ENDIF
ENDIF
ENDCASE
RETURN .F.
ENDFUNC
* Find
+++ Rick ---