Re: ERXGenericRecord call didUpdate on insert object
Daniele Corti <[email protected]> Tue, 10 Mar 2015 10:48:44 +0100
| Newsgroups | gmane.comp.web.webobjects.wonder-disc |
|---|---|
| Message-ID | <CAJh8f29FySUa6Tsx-v4uHzrH_XVJhWzBukcH7LPE792cJDtkVQ@mail.gmail.com> |
--===============6227403264086165814==
Content-Type: multipart/alternative; boundary=f46d04138ccdad8de80510ec0fbf
--f46d04138ccdad8de80510ec0fbf
Content-Type: text/plain; charset=UTF-8
Hi list,
after some test, I've decided to use these methods:
@Override
*public* *void* didInsert() {
// TODO Auto-generated method stub
*super*.didInsert();
LogAttivita.createLogAttivita(editingContext(), LogAttivita.AZIONE_INSERT,
*new* NSTimestamp(), *this*.export().toString(), entityName(), *this*
.primaryKey(), ((Session)Session.session()).logged().nomeutente());
editingContext().saveChanges();
}
@Override
*public* *void* willUpdate() {
// TODO Auto-generated method stub
*super*.willUpdate();
*try*{
validateForUpdate();
LogAttivita.createLogAttivita(editingContext(),
LogAttivita.AZIONE_UPDATE,
*new* NSTimestamp(), *this*.export().toString(), entityName(), *this*
.primaryKey(), ((Session)Session.session()).logged().nomeutente());
}*catch*(ValidationException e){}
}
@Override
*public* *void* didDelete(EOEditingContext ec) {
// TODO Auto-generated method stub
*super*.didDelete(ec);
LogAttivita.createLogAttivita(ec, LogAttivita.AZIONE_DELETE, *new*
NSTimestamp(), *this*.export().toString(), entityName(), *this*
.primaryKey(), ((Session)Session.session()).logged().nomeutente());
ec.saveChanges();
}
The LogAttivita entity is simply a table that save the datas of the object,
the event and the timestamp.
Thanks to Paul for the advice!
Daniele
2015-03-10 9:50 GMT+01:00 Daniele Corti <[email protected]>:
> Hi Paul,
> thank you for the answer,
>
> 2015-03-09 23:34 GMT+01:00 Paul Hoadley <[email protected]>:
>
>> Hi Daniele,
>>
>> On 10 Mar 2015, at 2:52 am, Daniele Corti <[email protected]> wrote:
>>
>> No problem in implementation, but, when I create a new object, I've
>> noticed that the method didUpdate() is called before didInsert(), so
>> creating an entry in DB, perform an Update log and a Insert log. However,
>> deleting the Record does not call the didUpdate method, just the didDelete.
>>
>> It is supposed to do this?
>>
>>
>> That's certainly what it _does_, yes. So you're not going crazy, and
>> nothing is broken.
>>
>
> at least this....
>
>
>>
>> The didUpdate documentation say:
>>
>> Called on the object after is has successfully been updated in the
>> database. But the Object is Inserted not Updated, so I don't understand
>> very well the working of this...
>>
>>
>> I agree that the documentation is poor. You might argue that the
>> database itself has been "updated" after the insertion, but I think that
>> would be confusingly loose language given that there exists an UPDATE SQL
>> statement, and it hasn't been used in the case of inserting a new object.
>>
>>
> Ok, so the transaction lifecycle call:
>
> INSERT:
>
> - willInsert
> - Insert Statement
> - didUpdate
> - didInsert
>
>
> UPDATE:
>
> - willUpdate
> - Update Statement
> - didUpdate
>
>
> DELETE:
>
> - willDelete
> - Delete Statement
> - didDelete
>
> But, why didUpdate is not called after deletion? The delete is a change in
> DB, so is some sort of update....
>
>
>> Anyway, if this is the normal behavior in EOGenericRecord lifecycle, is
>> there a way to notice that the didUpdate method is called on a inserted
>> object, or another method must be used in order to do this?
>>
>>
>> willUpdate() is called prior to an actual UPDATE (and not prior to an
>> INSERT). Would this help?
>>
>>
> This could be useful, but, I would like to do the Log when I'm sure the
> changes in DB are performed, and willUpdate is called prior of
> validateForSave. Is there any problem, if I call the validate method in
> willUpdate()?
>
>
>>
>> --
>> Paul Hoadley
>> http://logicsquad.net/
>>
>>
>>
>
>
> --
> Daniele Corti
> --
> I DON'T DoubleClick
>
--f46d04138ccdad8de80510ec0fbf
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">Hi list,<div><br></div><div>after some test, I've deci=
ded to use these methods:</div><div><br></div><div><br></div><div><font col=
or=3D"#646464" style=3D"font-family:'Courier New',Courier;font-size=
:13.3333330154419px">@Override</font><span style=3D"color:rgb(0,0,0);font-f=
amily:'Courier New',Courier;font-size:13.3333330154419px">=C2=A0</s=
pan><br style=3D"color:rgb(0,0,0);font-family:'Courier New',Courier=
;font-size:13.3333330154419px"><strong style=3D"color:rgb(0,0,0);font-famil=
y:'Courier New',Courier;font-size:13.3333330154419px"><font color=
=3D"#7f0055">public</font></strong><span style=3D"color:rgb(0,0,0);font-fam=
ily:'Courier New',Courier;font-size:13.3333330154419px">=C2=A0</spa=
n><strong style=3D"color:rgb(0,0,0);font-family:'Courier New',Couri=
er;font-size:13.3333330154419px"><font color=3D"#7f0055">void</font></stron=
g><span style=3D"color:rgb(0,0,0);font-family:'Courier New',Courier=
;font-size:13.3333330154419px">=C2=A0didInsert()=C2=A0{=C2=A0</span><br sty=
le=3D"color:rgb(0,0,0);font-family:'Courier New',Courier;font-size:=
13.3333330154419px"><span style=3D"color:rgb(0,0,0);font-family:'Courie=
r New',Courier;font-size:13.3333330154419px">=C2=A0=C2=A0=C2=A0=C2=A0</=
span><font color=3D"#3f7f5f" style=3D"font-family:'Courier New',Cou=
rier;font-size:13.3333330154419px">//=C2=A0TODO=C2=A0Auto-generated=C2=A0me=
thod=C2=A0stub=C2=A0</font><br style=3D"color:rgb(0,0,0);font-family:'C=
ourier New',Courier;font-size:13.3333330154419px"><span style=3D"color:=
rgb(0,0,0);font-family:'Courier New',Courier;font-size:13.333333015=
4419px">=C2=A0=C2=A0=C2=A0=C2=A0</span><strong style=3D"color:rgb(0,0,0);fo=
nt-family:'Courier New',Courier;font-size:13.3333330154419px"><font=
color=3D"#7f0055">super</font></strong><span style=3D"color:rgb(0,0,0);fon=
t-family:'Courier New',Courier;font-size:13.3333330154419px">.didIn=
sert();=C2=A0</span><br style=3D"color:rgb(0,0,0);font-family:'Courier =
New',Courier;font-size:13.3333330154419px"><span style=3D"color:rgb(0,0=
,0);font-family:'Courier New',Courier;font-size:13.3333330154419px"=
>=C2=A0=C2=A0=C2=A0=C2=A0LogAttivita.createLogAttivita(editingContext(),=C2=
=A0LogAttivita.AZIONE_INSERT,=C2=A0</span><strong style=3D"color:rgb(0,0,0)=
;font-family:'Courier New',Courier;font-size:13.3333330154419px"><f=
ont color=3D"#7f0055">new</font></strong><span style=3D"color:rgb(0,0,0);fo=
nt-family:'Courier New',Courier;font-size:13.3333330154419px">=C2=
=A0NSTimestamp(),=C2=A0</span><strong style=3D"color:rgb(0,0,0);font-family=
:'Courier New',Courier;font-size:13.3333330154419px"><font color=3D=
"#7f0055">this</font></strong><span style=3D"color:rgb(0,0,0);font-family:&=
#39;Courier New',Courier;font-size:13.3333330154419px">.export().toStri=
ng(),=C2=A0entityName(),=C2=A0</span><strong style=3D"color:rgb(0,0,0);font=
-family:'Courier New',Courier;font-size:13.3333330154419px"><font c=
olor=3D"#7f0055">this</font></strong><span style=3D"color:rgb(0,0,0);font-f=
amily:'Courier New',Courier;font-size:13.3333330154419px">.primaryK=
ey(),=C2=A0((Session)Session.session()).logged().nomeutente());=C2=A0</span=
><br style=3D"color:rgb(0,0,0);font-family:'Courier New',Courier;fo=
nt-size:13.3333330154419px"><span style=3D"color:rgb(0,0,0);font-family:=
9;Courier New',Courier;font-size:13.3333330154419px">=C2=A0=C2=A0=C2=A0=
=C2=A0editingContext().saveChanges();=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0</span><br style=3D"color:rgb(0,0,0);font-family:'Cou=
rier New',Courier;font-size:13.3333330154419px"><span style=3D"color:rg=
b(0,0,0);font-family:'Courier New',Courier;font-size:13.33333301544=
19px">}=C2=A0</span><br style=3D"color:rgb(0,0,0);font-family:'Courier =
New',Courier;font-size:13.3333330154419px"><br style=3D"color:rgb(0,0,0=
);font-family:'Courier New',Courier;font-size:13.3333330154419px"><=
font color=3D"#646464" style=3D"font-family:'Courier New',Courier;f=
ont-size:13.3333330154419px">@Override</font><span style=3D"color:rgb(0,0,0=
);font-family:'Courier New',Courier;font-size:13.3333330154419px">=
=C2=A0</span><br style=3D"color:rgb(0,0,0);font-family:'Courier New'=
;,Courier;font-size:13.3333330154419px"><strong style=3D"color:rgb(0,0,0);f=
ont-family:'Courier New',Courier;font-size:13.3333330154419px"><fon=
t color=3D"#7f0055">public</font></strong><span style=3D"color:rgb(0,0,0);f=
ont-family:'Courier New',Courier;font-size:13.3333330154419px">=C2=
=A0</span><strong style=3D"color:rgb(0,0,0);font-family:'Courier New=
9;,Courier;font-size:13.3333330154419px"><font color=3D"#7f0055">void</font=
></strong><span style=3D"color:rgb(0,0,0);font-family:'Courier New'=
,Courier;font-size:13.3333330154419px">=C2=A0willUpdate()=C2=A0{=C2=A0</spa=
n><br style=3D"color:rgb(0,0,0);font-family:'Courier New',Courier;f=
ont-size:13.3333330154419px"><span style=3D"color:rgb(0,0,0);font-family:&#=
39;Courier New',Courier;font-size:13.3333330154419px">=C2=A0=C2=A0=C2=
=A0=C2=A0</span><font color=3D"#3f7f5f" style=3D"font-family:'Courier N=
ew',Courier;font-size:13.3333330154419px">//=C2=A0TODO=C2=A0Auto-genera=
ted=C2=A0method=C2=A0stub=C2=A0</font><br style=3D"color:rgb(0,0,0);font-fa=
mily:'Courier New',Courier;font-size:13.3333330154419px"><span styl=
e=3D"color:rgb(0,0,0);font-family:'Courier New',Courier;font-size:1=
3.3333330154419px">=C2=A0=C2=A0=C2=A0=C2=A0</span><strong style=3D"color:rg=
b(0,0,0);font-family:'Courier New',Courier;font-size:13.33333301544=
19px"><font color=3D"#7f0055">super</font></strong><span style=3D"color:rgb=
(0,0,0);font-family:'Courier New',Courier;font-size:13.333333015441=
9px">.willUpdate();=C2=A0</span><br style=3D"color:rgb(0,0,0);font-family:&=
#39;Courier New',Courier;font-size:13.3333330154419px"><span style=3D"c=
olor:rgb(0,0,0);font-family:'Courier New',Courier;font-size:13.3333=
330154419px">=C2=A0=C2=A0=C2=A0=C2=A0</span><strong style=3D"color:rgb(0,0,=
0);font-family:'Courier New',Courier;font-size:13.3333330154419px">=
<font color=3D"#7f0055">try</font></strong><span style=3D"color:rgb(0,0,0);=
font-family:'Courier New',Courier;font-size:13.3333330154419px">{=
=C2=A0</span><br style=3D"color:rgb(0,0,0);font-family:'Courier New'=
;,Courier;font-size:13.3333330154419px"><span style=3D"color:rgb(0,0,0);fon=
t-family:'Courier New',Courier;font-size:13.3333330154419px">=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0validateForUpdate();=C2=A0</span>=
<br style=3D"color:rgb(0,0,0);font-family:'Courier New',Courier;fon=
t-size:13.3333330154419px"><span style=3D"color:rgb(0,0,0);font-family:'=
;Courier New',Courier;font-size:13.3333330154419px">=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0LogAttivita.createLogAttivita(editingContext(=
),=C2=A0LogAttivita.AZIONE_UPDATE,=C2=A0</span><strong style=3D"color:rgb(0=
,0,0);font-family:'Courier New',Courier;font-size:13.3333330154419p=
x"><font color=3D"#7f0055">new</font></strong><span style=3D"color:rgb(0,0,=
0);font-family:'Courier New',Courier;font-size:13.3333330154419px">=
=C2=A0NSTimestamp(),=C2=A0</span><strong style=3D"color:rgb(0,0,0);font-fam=
ily:'Courier New',Courier;font-size:13.3333330154419px"><font color=
=3D"#7f0055">this</font></strong><span style=3D"color:rgb(0,0,0);font-famil=
y:'Courier New',Courier;font-size:13.3333330154419px">.export().toS=
tring(),=C2=A0entityName(),=C2=A0</span><strong style=3D"color:rgb(0,0,0);f=
ont-family:'Courier New',Courier;font-size:13.3333330154419px"><fon=
t color=3D"#7f0055">this</font></strong><span style=3D"color:rgb(0,0,0);fon=
t-family:'Courier New',Courier;font-size:13.3333330154419px">.prima=
ryKey(),=C2=A0((Session)Session.session()).logged().nomeutente());</span><b=
r style=3D"color:rgb(0,0,0);font-family:'Courier New',Courier;font-=
size:13.3333330154419px"><span style=3D"color:rgb(0,0,0);font-family:'C=
ourier New',Courier;font-size:13.3333330154419px">=C2=A0=C2=A0=C2=A0=C2=
=A0}</span><strong style=3D"color:rgb(0,0,0);font-family:'Courier New&#=
39;,Courier;font-size:13.3333330154419px"><font color=3D"#7f0055">catch</fo=
nt></strong><span style=3D"color:rgb(0,0,0);font-family:'Courier New=
9;,Courier;font-size:13.3333330154419px">(ValidationException=C2=A0e){}=C2=
=A0</span><br style=3D"color:rgb(0,0,0);font-family:'Courier New',C=
ourier;font-size:13.3333330154419px"><span style=3D"color:rgb(0,0,0);font-f=
amily:'Courier New',Courier;font-size:13.3333330154419px">}=C2=A0</=
span><br style=3D"color:rgb(0,0,0);font-family:'Courier New',Courie=
r;font-size:13.3333330154419px"><span style=3D"color:rgb(0,0,0);font-family=
:'Courier New',Courier;font-size:13.3333330154419px">=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0</span><br style=3D"color:rgb(0,0,0);font-family:'Cou=
rier New',Courier;font-size:13.3333330154419px"><font color=3D"#646464"=
style=3D"font-family:'Courier New',Courier;font-size:13.3333330154=
419px">@Override</font><span style=3D"color:rgb(0,0,0);font-family:'Cou=
rier New',Courier;font-size:13.3333330154419px">=C2=A0</span><br style=
=3D"color:rgb(0,0,0);font-family:'Courier New',Courier;font-size:13=
.3333330154419px"><strong style=3D"color:rgb(0,0,0);font-family:'Courie=
r New',Courier;font-size:13.3333330154419px"><font color=3D"#7f0055">pu=
blic</font></strong><span style=3D"color:rgb(0,0,0);font-family:'Courie=
r New',Courier;font-size:13.3333330154419px">=C2=A0</span><strong style=
=3D"color:rgb(0,0,0);font-family:'Courier New',Courier;font-size:13=
.3333330154419px"><font color=3D"#7f0055">void</font></strong><span style=
=3D"color:rgb(0,0,0);font-family:'Courier New',Courier;font-size:13=
.3333330154419px">=C2=A0didDelete(EOEditingContext=C2=A0ec)=C2=A0{=C2=A0</s=
pan><br style=3D"color:rgb(0,0,0);font-family:'Courier New',Courier=
;font-size:13.3333330154419px"><span style=3D"color:rgb(0,0,0);font-family:=
'Courier New',Courier;font-size:13.3333330154419px">=C2=A0=C2=A0=C2=
=A0=C2=A0</span><font color=3D"#3f7f5f" style=3D"font-family:'Courier N=
ew',Courier;font-size:13.3333330154419px">//=C2=A0TODO=C2=A0Auto-genera=
ted=C2=A0method=C2=A0stub=C2=A0</font><br style=3D"color:rgb(0,0,0);font-fa=
mily:'Courier New',Courier;font-size:13.3333330154419px"><span styl=
e=3D"color:rgb(0,0,0);font-family:'Courier New',Courier;font-size:1=
3.3333330154419px">=C2=A0=C2=A0=C2=A0=C2=A0</span><strong style=3D"color:rg=
b(0,0,0);font-family:'Courier New',Courier;font-size:13.33333301544=
19px"><font color=3D"#7f0055">super</font></strong><span style=3D"color:rgb=
(0,0,0);font-family:'Courier New',Courier;font-size:13.333333015441=
9px">.didDelete(ec);=C2=A0</span><br style=3D"color:rgb(0,0,0);font-family:=
'Courier New',Courier;font-size:13.3333330154419px"><span style=3D"=
color:rgb(0,0,0);font-family:'Courier New',Courier;font-size:13.333=
3330154419px">=C2=A0=C2=A0=C2=A0=C2=A0LogAttivita.createLogAttivita(ec,=C2=
=A0LogAttivita.AZIONE_DELETE,=C2=A0</span><strong style=3D"color:rgb(0,0,0)=
;font-family:'Courier New',Courier;font-size:13.3333330154419px"><f=
ont color=3D"#7f0055">new</font></strong><span style=3D"color:rgb(0,0,0);fo=
nt-family:'Courier New',Courier;font-size:13.3333330154419px">=C2=
=A0NSTimestamp(),=C2=A0</span><strong style=3D"color:rgb(0,0,0);font-family=
:'Courier New',Courier;font-size:13.3333330154419px"><font color=3D=
"#7f0055">this</font></strong><span style=3D"color:rgb(0,0,0);font-family:&=
#39;Courier New',Courier;font-size:13.3333330154419px">.export().toStri=
ng(),=C2=A0entityName(),=C2=A0</span><strong style=3D"color:rgb(0,0,0);font=
-family:'Courier New',Courier;font-size:13.3333330154419px"><font c=
olor=3D"#7f0055">this</font></strong><span style=3D"color:rgb(0,0,0);font-f=
amily:'Courier New',Courier;font-size:13.3333330154419px">.primaryK=
ey(),=C2=A0((Session)Session.session()).logged().nomeutente());=C2=A0</span=
><br style=3D"color:rgb(0,0,0);font-family:'Courier New',Courier;fo=
nt-size:13.3333330154419px"><span style=3D"color:rgb(0,0,0);font-family:=
9;Courier New',Courier;font-size:13.3333330154419px">=C2=A0=C2=A0=C2=A0=
=C2=A0ec.saveChanges();=C2=A0</span><br style=3D"color:rgb(0,0,0);font-fami=
ly:'Courier New',Courier;font-size:13.3333330154419px"><span style=
=3D"color:rgb(0,0,0);font-family:'Courier New',Courier;font-size:13=
.3333330154419px">}</span><br></div><div><br></div><div><br></div><div>The =
LogAttivita entity is simply a table that save the datas of the object, the=
event and the timestamp.</div><div><br></div><div>Thanks to Paul for the a=
dvice!</div><div><br></div><div>Daniele</div><div><br></div><div class=3D"g=
mail_extra"><br><div class=3D"gmail_quote">2015-03-10 9:50 GMT+01:00 Daniel=
e Corti <span dir=3D"ltr"><<a href=3D"mailto:[email protected]" target=
=3D"_blank">[email protected]</a>></span>:<br><blockquote class=3D"gmail=
_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:=
1ex"><div dir=3D"ltr">Hi Paul,<div>thank you for the answer,=C2=A0</div><di=
v class=3D"gmail_extra"><br><div class=3D"gmail_quote"><span class=3D"">201=
5-03-09 23:34 GMT+01:00 Paul Hoadley <span dir=3D"ltr"><<a href=3D"mailt=
o:[email protected]" target=3D"_blank">[email protected]</a>></spa=
n>:<br><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;=
border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:=
solid;padding-left:1ex"><div style=3D"word-wrap:break-word">Hi Daniele,<div=
><br><div><span><div>On 10 Mar 2015, at 2:52 am, Daniele Corti <<a href=
=3D"mailto:[email protected]" target=3D"_blank">[email protected]</a>> w=
rote:</div><br><blockquote type=3D"cite"><div dir=3D"ltr"><div>No problem i=
n implementation, but, when I create a new object, I've noticed that th=
e method didUpdate() is called before didInsert(), so creating an entry in =
DB, perform an Update log and a Insert log. However, deleting the Record do=
es not call the didUpdate method, just the didDelete.</div><div><br></div><=
div>It is supposed to do this?</div></div></blockquote><div><br></div></spa=
n><div>That's certainly what it _does_, yes.=C2=A0 So you're not go=
ing crazy, and nothing is broken.</div></div></div></div></blockquote><div>=
<br></div></span><div>at least this....</div><span class=3D""><div>=C2=A0<b=
r></div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex=
;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style=
:solid;padding-left:1ex"><div style=3D"word-wrap:break-word"><div><div><spa=
n><div><br></div><blockquote type=3D"cite"><div dir=3D"ltr"><div> The didUp=
date documentation say:</div><div><p><span>Called on the object after is ha=
s successfully been updated in the database. But the Object is Inserted not=
Updated, so I don't understand very well the working of this...</span>=
</p></div></div></blockquote><div><br></div></span><div>I agree that the do=
cumentation is poor.=C2=A0 You might argue that the database itself has bee=
n "updated" after the insertion, but I think that would be confus=
ingly loose language given that there exists an UPDATE SQL statement, and i=
t hasn't been used in the case of inserting a new object.</div><span><d=
iv><br></div></span></div></div></div></blockquote><div><br></div></span><d=
iv>Ok, so the transaction lifecycle call:</div><div><br></div><div>INSERT:<=
/div><div><ul><li>willInsert<br></li><li>Insert Statement<br></li><li>didUp=
date<br></li><li>didInsert<br></li></ul></div><div><br></div><div>UPDATE:=
=C2=A0</div><div><ul><li>willUpdate<br></li><li>Update Statement<br></li><l=
i>didUpdate<br></li></ul></div><div><br></div><div>DELETE:</div><div><ul><l=
i>willDelete<br></li><li>Delete Statement<br></li><li>didDelete<br></li></u=
l></div><div>But, why didUpdate is not called after deletion? The delete is=
a change in DB, so is some sort of update....</div><span class=3D""><div>=
=C2=A0</div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0=
.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-s=
tyle:solid;padding-left:1ex"><div style=3D"word-wrap:break-word"><div><div>=
<span><div></div><blockquote type=3D"cite"><div dir=3D"ltr"><div><p>Anyway,=
if this is the normal behavior in EOGenericRecord lifecycle, is there a wa=
y to notice that the didUpdate method is called on a inserted object, or an=
other method must be used in order to do this?</p></div></div></blockquote>=
<div><br></div></span><div>willUpdate() is called prior to an actual UPDATE=
(and not prior to an INSERT).=C2=A0 Would this help?</div><span><font colo=
r=3D"#888888"><div><br></div></font></span></div></div></div></blockquote><=
div><br></div></span><div>This could be useful, but, I would like to do the=
Log when I'm sure the changes in DB are performed, and willUpdate is c=
alled prior of validateForSave. Is there any problem, if I call the validat=
e method in willUpdate()?</div><span class=3D""><div>=C2=A0</div><blockquot=
e class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left-width=
:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-lef=
t:1ex"><div style=3D"word-wrap:break-word"><div><div><span><font color=3D"#=
888888"><div></div><div><br></div></font></span></div><span><font color=3D"=
#888888"><div>
<span style=3D"border-collapse:separate;border-spacing:0px"><span style=3D"=
border-collapse:separate;color:rgb(0,0,0);font-family:'Lucida Grande=
9;;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:=
normal;line-height:normal;text-indent:0px;text-transform:none;white-space:n=
ormal;word-spacing:0px"><div style=3D"word-wrap:break-word"><span style=3D"=
border-collapse:separate;color:rgb(0,0,0);font-family:'Lucida Grande=
9;;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:=
normal;line-height:normal;text-indent:0px;text-transform:none;white-space:n=
ormal;word-spacing:0px"><div style=3D"word-wrap:break-word">--=C2=A0<br>Pau=
l Hoadley<br><a href=3D"http://logicsquad.net/" target=3D"_blank">http://lo=
gicsquad.net/</a><br><br></div></span></div></span></span>
</div>
<br></font></span></div></div></blockquote></span></div><br><br clear=3D"al=
l"><span class=3D""><div><br></div>-- <br><div>Daniele Corti<br>--<br>I DON=
'T DoubleClick<br></div>
</span></div></div>
</blockquote></div><br><div class=3D"gmail_signature"><br></div>
</div></div>
--f46d04138ccdad8de80510ec0fbf--
--===============6227403264086165814==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
------------------------------------------------------------------------------
Dive into the World of Parallel Programming The Go Parallel Website, sponsored
by Intel and developed in partnership with Slashdot Media, is your hub for all
things parallel software development, from weekly thought leadership blogs to
news, videos, case studies, tutorials and more. Take a look and join the
conversation now. http://goparallel.sourceforge.net/
--===============6227403264086165814==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
_______________________________________________
Wonder-disc mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/wonder-disc
--===============6227403264086165814==--