Hi Ted, ERXThreadStorage solves this problem. See my email from March 29 th in the D2W: Pattern for complex object creation thread. The code you need to create EOs is included.
BugTracker uses this pattern, as does SimpleBlog. Sent from my iPad On 2012-04-06, at 7:22 AM, Theodore Petrosky <[email protected]> wrote: > I tried that and I get an error that it doesn't know what session() is. > > The method session() is undefined for the type Brief > > I am thinking, my EOs are in a framework. > > How can I refer to the session if the EO doesn't know anything about the > session? > > Ted > > > > --- On Fri, 4/6/12, David Holt <[email protected]> wrote: > >> From: David Holt <[email protected]> >> Subject: Re: D2W creating a new object? >> To: "Theodore Petrosky" <[email protected]> >> Cc: "[email protected]" <[email protected]> >> Date: Friday, April 6, 2012, 9:41 AM >> Check the code for adding a person to >> a Brief further down in my previous email. If you do it in >> the EO class, you shouldn't have the problem. >> >> Sent from my iPad >> >> On 2012-04-06, at 4:31 AM, Theodore Petrosky <[email protected]> >> wrote: >> >>> David, >>> >>> I tried this method and still the same issue. >>> >>> There is a relationship with a person (user). Without a >> user added, I get the normal error that I need a user: >>> >>> Could not save your changes: A Brief must have a >> Person. >>> >>> I added: >>> >>> Person thePerson = session().user().localInstanceIn( >> ((D2WPage) nextPage).object().editingContext()); >>> ((D2WComponent) nextPage).object().takeValueForKey( >> thePerson, "person"); >>> >>> Thats when I get the infamous: >>> >>> Error: >> java.lang.IllegalStateException: Adaptor >> com.webobjects.jdbcadaptor.JDBCAdaptor@3cb088f8 failed to >> provide new primary keys for entity 'Brief' >>> Reason: Adaptor >> com.webobjects.jdbcadaptor.JDBCAdaptor@3cb088f8 failed to >> provide new primary keys for entity 'Brief' >>> >>> If it didn't like the person entity or the >> editingContext, I assume I would get an error complaining >> about that. >>> >>> This is D2W land and with all the magic going on, I >> think I am out of Fairy dust. >>> >>> Ted >>> >>> >>> >>> >>> --- On Thu, 4/5/12, David Holt <[email protected]> >> wrote: >>> >>> | I use this method: >>> | >>> | | public WOComponent createPersonAction() { >>> | | return >> newObjectForEntityName(PERSON); >>> | | } >>> | >>> | | public WOComponent >> newObjectForEntityName(String entityName) { >>> | | WOComponent nextPage = null; >>> | | try { >>> | | EditPageInterface epi = >> D2W.factory().editPageForNewObjectWithEntityNamed(entityName, >> session()); >>> | | >> epi.setNextPage(session().context().page()); >>> | | nextPage = (WOComponent) epi; >>> | | } >>> | | catch (IllegalArgumentException e) { >>> | | ErrorPageInterface epf = >> D2W.factory().errorPage(session()); >>> | | epf.setMessage(e.toString()); >>> | | >> epf.setNextPage(session().context().page()); >>> | | nextPage = (WOComponent) epf; >>> | | } >>> | | return nextPage; >>> | | } >>> | >>> | >>> | On 2012-04-05, at 10:53 AM, Theodore Petrosky wrote: >>> | >>> | I am creating a new 'Brief' object in my D2W app like >> this: >>> | >>> | public EditPageInterface createBriefAction() { >>> | >>> | EditPageInterface component = >> D2W.factory().editPageForNewObjectWithConfigurationNamed("CreateBrief", >> session()); >>> | >> component.setNextPage(session().context().page()); >>> | >>> | if(component instanceof >> D2WPage) { >>> | D2WPage page = >> (D2WPage)component; >>> | >> page.d2wContext().takeValueForKey("Brief.CreateBrief", >> "navigationState"); >>> | >>> | This could be a rule: >>> | 50 : pageConfiguration = 'CreateBrief' => >> navigationState = "Brief.CreateBrief" >> [com.webobjects.directtoweb.Assignment] >>> | >>> | >> NSLog.out.appendln( ((D2WPage) >> component).object().allPropertyKeys()); >>> | >>> | Person >> thePerson = session().user().localInstanceIn(((D2WPage) >> component).object().editingContext()); >>> | >>> | ((D2WComponent) >> component).object().takeValueForKey( thePerson, "person"); >>> | ((D2WComponent) >> component).object().takeValueForKey( (new NSTimestamp()), >> "creationDate");// (new NSTimestamp()); >>> | >>> | This code should be in your Brief eo init() method. >> Something like: >>> | >>> | | public void init(EOEditingContext ec) { >>> | | super.init(ec); >>> | | Person thePerson = >> session().user().localInstanceIn(ec); >>> | | setPersonRelationship(thePerson); >>> | | setCreationDate(new NSTimestamp()); >>> | | } >>> | >>> | >>> | | } >>> | | return component; >>> | } >>> | >>> | When I click the save button I am getting: >>> | >>> | >>> | IllegalStateException: Adaptor >> com.webobjects.jdbcadaptor.JDBCAdaptor@43c8308 failed to >> provide new primary keys for entity 'Brief' >>> | >>> | >>> | Am I supposed to do something more here? >>> | >>> | Ted public WOComponent createPersonAction() { >>> | | return >> newObjectForEntityName(PERSON); >>> | | } >>> | >>> | | public WOComponent >> newObjectForEntityName(String entityName) { >>> | | WOComponent nextPage = null; >>> | | try { >>> | | EditPageInterface epi = >> D2W.factory().editPageForNewObjectWithEntityNamed(entityName, >> session()); >>> | | >> epi.setNextPage(session().context().page()); >>> | | nextPage = (WOComponent) epi; >>> | | } >>> | | catch (IllegalArgumentException e) { >>> | | ErrorPageInterface epf = >> D2W.factory().errorPage(session()); >>> | | epf.setMessage(e.toString()); >>> | | >> epf.setNextPage(session().context().page()); >>> | | nextPage = (WOComponent) epf; >>> | | } >>> | | return nextPage; >>> | | } >>> | >>> | >>> | On 2012-04-05, at 10:53 AM, Theodore Petrosky wrote: >>> | >>> | I am creating a new 'Brief' object in my D2W app like >> this: >>> | >>> | public EditPageInterface createBriefAction() { >>> | >>> | EditPageInterface component = >> D2W.factory().editPageForNewObjectWithConfigurationNamed("CreateBrief", >> session()); >>> | >> component.setNextPage(session().context().page()); >>> | >>> | if(component instanceof >> D2WPage) { >>> | D2WPage page = >> (D2WPage)component; >>> | >> page.d2wContext().takeValueForKey("Brief.CreateBrief", >> "navigationState"); >>> | >>> | This could be a rule: >>> | 50 : pageConfiguration = 'CreateBrief' => >> navigationState = "Brief.CreateBrief" >> [com.webobjects.directtoweb.Assignment] >>> | >>> | >> NSLog.out.appendln( ((D2WPage) >> component).object().allPropertyKeys()); >>> | >>> | Person >> thePerson = session().user().localInstanceIn(((D2WPage) >> component).object().editingContext()); >>> | >>> | ((D2WComponent) >> component).object().takeValueForKey( thePerson, "person"); >>> | ((D2WComponent) >> component).object().takeValueForKey( (new NSTimestamp()), >> "creationDate");// (new NSTimestamp()); >>> | >>> | This code should be in your Brief eo init() method. >> Something like: >>> | >>> | | public void init(EOEditingContext ec) { >>> | | super.init(ec); >>> | | Person thePerson = >> session().user().localInstanceIn(ec); >>> | | setPersonRelationship(thePerson); >>> | | setCreationDate(new NSTimestamp()); >>> | | } >>> | >>> | >>> | | } >>> | | return component; >>> | } >>> | >>> | When I click the save button I am getting: >>> | >>> | >>> | IllegalStateException: Adaptor >> com.webobjects.jdbcadaptor.JDBCAdaptor@43c8308 failed to >> provide new primary keys for entity 'Brief' >>> | >>> | >>> | Am I supposed to do something more here? >>> | >>> | Ted >>> >>
_______________________________________________ Do not post admin requests to the list. They will be ignored. Webobjects-dev mailing list ([email protected]) Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com This email sent to [email protected]
