Hi,
I want to add a record in a related table but the parent record is not
persisted. I get the error

Error Messages:  The Parent OneToMany TransferObject is not persisted.
In TransferObject 'CMS.graphicText' onetomany parent 'CMS.graphic' has
not been persisted in the database.

I have 2 tables: graphic, containing properties of graphics, and
graphictexts, containing texts of graphics. Each record in table
graphicTexts points back to a record in table graphic.

This is my transfer.xml:

<object name="graphic" table="graphics">
        <id name="id" type="numeric"/>
        <property name="menuid" type="numeric" column="FK_Menuid"
nullable="false" />
        <property name="title" type="string" column="title" nullable="false" /
>
        <property name="clientFileName" type="string" column="clientFileName"
nullable="false" />
        <property name="serverFileName" type="string" column="serverFileName"
nullable="false" />
        <property name="fileSize" type="numeric" column="fileSize"
nullable="false" />
        <property name="contentInfo" type="string" column="contentInfo"
nullable="true" />
        <property name="width" type="numeric" column="width"
nullable="false" />
        <property name="height" type="numeric" column="height"
nullable="false" />
        <property name="maxWidth" type="numeric" column="maxWidth"
nullable="false" />
        <property name="showDateFrom" type="boolean" column="showdateFrom" />
        <property name="dateFrom" type="date" column="dateFrom"
nullable="true" />
        <property name="showDateTo" type="boolean" column="showDateTo" />
        <property name="dateTo" type="date" column="dateTo" nullable="true" /
>
        <!-- Link between a graphic and it's texts-->
        <onetomany name="graphicTexts">
                <link to="CMS.graphicText" column="FK_graphic"/>
                <collection type="array">
                        <order property="id" order="asc"/>
                </collection>
        </onetomany>
<object name="graphic" table="graphics">

and this linked object

<object name="graphicText" table="graphicTexts">
        <id name="id" type="numeric"/>
        <property name="tooltip" type="string" column="tooltip"
nullable="true" />
        <property name="alttext" type="string" column="alttext"
nullable="true" />
        <property name="subscript" type="string" column="subscript"
nullable="true" />
        <manytoone name="language">
                <link to="Language.language" column="FK_language"/>
        </manytoone>
</object>

If I submit a form and make a new object using the form's data I have
this code

<cfset local.oGraphic=transfer.new("CMS.graphic")>

[... code ..]

<!---remove existing texts--->
<cfset local.graphictexts=local.oGraphic.getGraphicTextsArray()>
<cfloop array="#local.graphictexts#" index="local.graphictext">
        <cfset transfer.delete(local.graphictext)>
</cfloop>
<cfset local.qLanguages=transfer.list("Language.language")>
        <cfloop query="local.qLanguages">
                <!---create a graphicText object for each alttext,subscript or
tooltip that is entered--->
                <cfif StructKeyExists(arguments.formdata,"altext_#title#") OR
StructKeyExists(arguments.formdata,"tooltip_#title#") OR
StructKeyExists(arguments.formdata,"subscriptGraphic_#title#")>
                        <cfset 
local.oGraphicText=transfer.new("CMS.graphicText")>
                        <cfset 
local.oGraphicText.setlanguage(transfer.readByProperty
("Language.language","title",title))>
                        <cfset local.oGraphicText.setAltText(Iif(StructKeyExists
(arguments.formdata,"ALText_#title#"),"arguments.formdata
['ALText_#title#']","''"))>
                        <cfset local.oGraphicText.setTooltip(Iif(StructKeyExists
(arguments.formdata,"tooltip_#title#"),"arguments.formdata
['tooltip_#title#']","''"))>
                        <cfset 
local.oGraphicText.setSubscript(Iif(StructKeyExists
(arguments.formdata,"subscriptGraphic_#title#"),"arguments.formdata
['subscriptGraphic_#title#']","''"))>
                        <cfset 
local.oGraphicText.setParentGraphic(local.oGraphic)>
                        <cfset transfer.save(local.oGraphicText)>
                </cfif>
        </cfloop>

<!---set extra info in textobject and return it--->
<cfset local.oGraphic=setExtraInfo
(CMSObject=local.oGraphic,formData=arguments.formData)>
<cfset transfer.save(local.oGraphic)>
[... code..]

I get the error on this line

        <cfset transfer.save(local.oGraphicText)>

After a while I figured out why: when I create a new object. It's Id
is 0 since it's not persisted yet. That's ok when only setting
properties of the object but is a problem when I want to store a
record in a related table. That related record (local.oGraphicTexts)
needs the ID value of the parent record (local.oGraphic) since it's a
onetomany relationship. The parent record (in table local.oGraphic) is
not yet persisted so has no Id.

Should I just save the new record before setting any property or is
there a better solution for this?

Thanks,

Marc
--~--~---------~--~----~------------~-------~--~----~
Before posting questions to the group please read:
http://groups.google.com/group/transfer-dev/web/how-to-ask-support-questions-on-transfer

You received this message because you are subscribed to the Google Groups 
"transfer-dev" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/transfer-dev?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to