Hey All

I've got a curly one....

My reactor.xml has:

<object name="Agency">
        <hasMany name="Contract">
                <relate from="AgencyUUID" to="AgencyUUID"/>
        </hasMany>
</object>
<object name="Contract">
        <hasOne name="Agency">
                <relate from="AgencyUUID" to="AgencyUUID"/>
        </hasOne>
</object>

I have some code that creates a new contract...

<cfset objContractRecord = variables.objReactor.createRecord('Contract')>

<cfset objContractRecord.setContractUUID(createUUID())>
<cfset objContractRecord.setAgencyUUID(arguments.agencyUUID)>
<cfset objContractRecord.setStartDate(arguments.startDate)>
<cfset objContractRecord.setEndDate(arguments.endDate)>
<cfset objContractRecord.setValue(arguments.value)>
<cfset objContractRecord.setDescription(arguments.description)>

<cfset objContractRecord.validate()>

<cfif NOT objContractRecord.hasErrors()>
        <cfset objContractRecord.save()>
</cfif>

...but hasErrors() is returning true.

...but objContractRecord._getErrorCollection()_getErrorsTranslated()
is returning an empty array.

So where is my error?

I ended up digging into the hasErrors() method of the abstractRecord
object and found that it checks children as well as the current object
(not sure I like that idea, but anyway).

So I create a getChildren() method in my ContractRecord and run the following:

<cfset children = objContractRecord.getChildren()>
<cfloop collection="#children#" item="child">
        <cfdump var="#children[child].validated()#"><br>
        <cfdump var="#children[child].hasErrors()#"><br>
        <cfdump 
var="#children[child]._getErrorCollection().getTranslatedErrors()#"><br>
        <cfdump var="#children[child]._getTO()#"><br>
</cfloop>

From this I can tell:
* I have one child, an AgencyRecord object
* children[child].validated() is true
* children[child].hasErrors() is true
* children[child]._getErrorCollection().getTranslatedErrors() returns
a number of errors
* children[child]._getTO() returns an EMPTY AgencyTO

I scratch my head, go have some lunch and when I get back I add one
line to my code:

<cfset objContractRecord.getAgency()>

..just before the <cfset objContractRecord.validate()>

Now everything works - no validation errors.

All of this has me stumped for a number of reasons:

- Why is an child AgencyRecord getting checked when I validate a ContractRecord?
- When it fails why does it fail silently? Could it not report the
problem to the ContractRecords ErrorCollection?
- Why is my AgencyRecord reporting that it has been validated? I
certainly didn't run validate() on it (I didn't even know it was
there). Maybe _setErrorCollection() is being called on it somewhere
during instantiation?

Anyway sorry for the rant and thanks in advance for any advice.

--
Mark Stanton
Gruden Pty Ltd
http://www.gruden.com


-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
Reactor for ColdFusion Mailing List
[email protected]
Archives at: http://www.mail-archive.com/reactor%40doughughes.net/
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

Reply via email to