I feel the same ..... but he can try it, test it and see what happens I guess.

If it was me, I would have just written a script to migrate the database and be 
done with it.


On Apr 17, 2012, at 12:45 PM, Chuck Hill wrote:

> Doing all this in awakeFromFetch makes me feel kind of nervous.
> 
> Chuck
> 
> 
> On 2012-04-17, at 9:41 AM, Kieran Kelleher wrote:
> 
>> Try refaulting the Show after you create the Contract to see if that helps. 
>> ec.refaultObject(...)
>> 
>> On Apr 17, 2012, at 5:40 AM, Johan Henselmans wrote:
>> 
>>> 
>>> On Apr 16, 2012, at 6:16 PM, Ramsey Gurley wrote:
>>> 
>>>> 
>>>> On Apr 16, 2012, at 9:13 AM, Johann Werner wrote:
>>>> 
>>>>> 
>>>>> Am 16.04.2012 um 16:43 schrieb Johan Henselmans:
>>>>> 
>>>>>> 
>>>>>> On Apr 14, 2012, at 10:20 PM, Johan Henselmans wrote:
>>>>>> 
>>>>>>> 
>>>>>>> On Apr 14, 2012, at 4:17 PM, George Domurot wrote:
>>>>>>> 
>>>>>>>> In your code snip, you aren't adding the newContract object into the 
>>>>>>>> editing context.  To reduce errors like these, always use:
>>>>>>>> 
>>>>>>> 
>>>>>>> Thanks, after I posted the code I noticed that error and added 
>>>>>>> eo,insert(newContract) 
>>>>>>> 
>>>>>>> It still does not want to run. 
>>>>>>> 
>>>>>>> I suppose there is some faulting going on: I noticed that the 
>>>>>>> 
>>>>>>> if (contract()==null)
>>>>>>> 
>>>>>>> clause did not get triggered while fetching shows that did not have a 
>>>>>>> contract. 
>>>>>>> 
>>>>>> 
>>>>>> OK, some reading on Faulting in the Enterprise Objects Framework 
>>>>>> Developers Guide indeed told me that the relationship contract() would 
>>>>>> not be null, because of the faulting behaviour (page 205). 
>>>>>> 
>>>>>> However, asking for an attribute of a relationship would trigger a round 
>>>>>> trip to the database and would give me the required error.
>>>>>> 
>>>>>> After a lot of tinkering (I am a big fan, out of necessity of Wonder 
>>>>>> Tinkering) I cam up with the following solution:
>>>>>> 
>>>>>>  public void awakeFromFetch(EOEditingContext eo){
>>>>>>          super.awakeFromFetch(eo);
>>>>>>          try{
>>>>>>                  contract().contractDescription();
>>>>>>          } catch (Exception e){
>>>>>>                  Contract newContract = new Contract();
>>>>>>                  newContract._setValueForPrimaryKey(new 
>>>>>> Integer(ShowInfo.this.primaryKey()), "contractId");
>>>>>>                  eo.insertObject(newContract);
>>>>>>                  newContract.setContractAmount(new BigDecimal(0.0));
>>>>>>                  newContract.setContractDescription("empty: fake 
>>>>>> Contract");
>>>>>>                  newContract.setContractRemarks("empty: fake 
>>>>>> contract"+this._primaryKey);
>>>>>>                  newContract.setContractType(ContractTypeEnum.RENT);
>>>>>>                  eo.saveChanges();
>>>>> 
>>>>> I think here you should be careful saving an editing context you don't 
>>>>> know what else has been changed in. It would be safer to create a new 
>>>>> editing context, make a localInstanceIn() and save it there.
>>>> 
>>>> I was about to say the same thing. Think about what happens if you're half 
>>>> way through a wizard page when those things get fetched. It's going to try 
>>>> to save the changes to the ec and throw a validation exception.
>>>> 
>>> 
>>> Thanks for the comments. For me here the confusion sets in.
>>> 
>>> We havei ECShow, which contains the Show. It might contain other stuff that 
>>> is not saved, so if we add Contract to ECSnow and tell save, then the other 
>>> stuff gets saved too (or not, throwing an exception), which you both 
>>> corretly pointed out. 
>>> 
>>> So we create a new EC, ECContract, in which we create a local instance of 
>>> Show, then add the contract, and be done with it. 
>>> 
>>> Now, however, the fetch in ECShow goes on, knows nothing about Show having 
>>> a Contract, and throws up, because every Show should have a Contract, 
>>> 
>>> Am I correct in my reasoning?
>>> 
>>> So my question is: how do I get the Show in ECShow to acknowledge there is 
>>> a contract available? 
>>> 
>>> Or am I completely missing the point?
>>> 
>>> 
>>>>> 
>>>>>>          }
>>>>>>  }
>>>>>> 
>>>>>> I tried just creating a new contract, and add that to the show,  but 
>>>>>> that did not create the proper primary keys (show owns the contract and 
>>>>>> Propagates the Primary Key), so some very strange things happened then.
>>>>>> 
>>>>>> Does anybody see any caveats in creating records that are not there like 
>>>>>> this? (apart from the fact that you should not create records in such a 
>>>>>> way but via ERMigrations or a perl script or whatever)?
>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>>> ERXEOControlUtilities.createAndInsertObject
>>>>>>>> 
>>>>>>>> I'd recommend not doing this in awakeFromFetch, but making this a step 
>>>>>>>> in your migration to clean-up your DB/object graph.  1,500 new objects 
>>>>>>>> is a light amount of processing and will keep your model object's code 
>>>>>>>> clean.
>>>>>>>> 
>>>>>>>> -G
>>>>>>> 
>>>>>>> I know that would be a simpler solution,  (and propably will do it) but 
>>>>>>> I am still curious why the code does not work. 
>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> On Apr 14, 2012, at 1:52 AM, Johan Henselmans wrote:
>>>>>>>> 
>>>>>>>>> I am working with shows, that should have contracts. 
>>>>>>>>> 
>>>>>>>>> That was only discovered after some shows (let's say 1500) had 
>>>>>>>>> already been in the database. 
>>>>>>>>> 
>>>>>>>>> So I created a new entity Contract, that has a not null relation to 
>>>>>>>>> show, get's it's primarykey propagated from the show which owns the 
>>>>>>>>> destination. If the shows is deleted, the contract is deleted 
>>>>>>>>> (Cascade), like so:
>>>>>>>>> 
>>>>>>>>> <PastedGraphic-9.png>
>>>>>>>>> 
>>>>>>>>> <PastedGraphic-8.png>
>>>>>>>>> 
>>>>>>>>> I thought that with the code:
>>>>>>>>> 
>>>>>>>>>       public void awakeFromFetch(EOEditingContext eo){
>>>>>>>>>             if (contract()==null){ 
>>>>>>>>>                 Contract newContract = new Contract();
>>>>>>>>>                 newContract.setContractAmount(new BigDecimal(0.0));
>>>>>>>>>                 newContract.setContractDescription("tempDescription");
>>>>>>>>>                 newContract.setContractRemarks("tempRemarks");
>>>>>>>>>                 newContract.setContractType(ContractTypeEnum.RENT);
>>>>>>>>>                 setContractRelationship(newContract);
>>>>>>>>>                 eo.saveChanges();
>>>>>>>>>             }
>>>>>>>>>               
>>>>>>>>>       }
>>>>>>>>> 
>>>>>>>>> In the extended class of the _Show this would make sure that 
>>>>>>>>> everything gets filled, in the case a contract has not been created 
>>>>>>>>> as it does with new shows because it is an old show. 
>>>>>>>>> 
>>>>>>>>> Alas, that does not seem to be the case. What should I do to create a 
>>>>>>>>> contract the moment an old show does not have a contract?
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> Vriendelijke Groeten,
>>>>>>>>> 
>>>>>>>>> Johan Henselmans
>>>>>>>>> jo...@netsense.nl
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> _______________________________________________
>>>>>>>>> Do not post admin requests to the list. They will be ignored.
>>>>>>>>> Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com)
>>>>>>>>> Help/Unsubscribe/Update your Subscription:
>>>>>>>>> https://lists.apple.com/mailman/options/webobjects-dev/mastermind%40knuckleheads.net
>>>>>>>>> 
>>>>>>>>> This email sent to masterm...@knuckleheads.net
>>>>>>>> 
>>>>>>> 
>>>>>>> Vriendelijke Groeten,
>>>>>>> 
>>>>>>> Johan Henselmans
>>>>>>> jo...@netsense.nl
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> _______________________________________________
>>>>>>> Do not post admin requests to the list. They will be ignored.
>>>>>>> Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com)
>>>>>>> Help/Unsubscribe/Update your Subscription:
>>>>>>> https://lists.apple.com/mailman/options/webobjects-dev/johan%40netsense.nl
>>>>>>> 
>>>>>>> This email sent to jo...@netsense.nl
>>>>>> 
>>>>>> Vriendelijke Groeten,
>>>>>> 
>>>>>> Johan Henselmans
>>>>>> jo...@netsense.nl
>>>>> 
>>>>> 
>>>>> _______________________________________________
>>>>> Do not post admin requests to the list. They will be ignored.
>>>>> Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com)
>>>>> Help/Unsubscribe/Update your Subscription:
>>>>> https://lists.apple.com/mailman/options/webobjects-dev/rgurley%40smarthealth.com
>>>>> 
>>>>> This email sent to rgur...@smarthealth.com
>>>> 
>>> 
>>> Vriendelijke Groeten,
>>> 
>>> Johan Henselmans
>>> jo...@netsense.nl
>>> 
>>> 
>>> 
>>> _______________________________________________
>>> Do not post admin requests to the list. They will be ignored.
>>> Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com)
>>> Help/Unsubscribe/Update your Subscription:
>>> https://lists.apple.com/mailman/options/webobjects-dev/kelleherk%40gmail.com
>>> 
>>> This email sent to kelleh...@gmail.com
>> 
>> _______________________________________________
>> Do not post admin requests to the list. They will be ignored.
>> Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com)
>> Help/Unsubscribe/Update your Subscription:
>> https://lists.apple.com/mailman/options/webobjects-dev/chill%40global-village.net
>> 
>> This email sent to ch...@global-village.net
> 
> -- 
> Chuck Hill             Senior Consultant / VP Development
> 
> Practical WebObjects - for developers who want to increase their overall 
> knowledge of WebObjects or who are trying to solve specific problems.    
> http://www.global-village.net/gvc/practical_webobjects
> 
> 
> 
> 
> 
> 
> 
> 


 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com)
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to