Hello.
Ok the background. I made a fetch from of a "Product" on the database like this:
try {
                        
                        //session().defaultEditingContext().saveChanges();
Product p = (Product )EOUtilities .objectMatchingKeyAndValue(session().defaultEditingContext(), "Product", Product.CODE_KEY, code); //If I get thi this line its because the producto already exists so I will inform the user
                        return this.informUser(p);
                } catch (EOObjectNotAvailableException e) {
                        // TODO Auto-generated catch block
//If I came into the catch is because the product does not exist so it's save to saveCahnges(); now, as you can see if the product exists, I will inform the user, but I decided to upgrade the number of itmes at the same time, so I did the following, based on an Apple support page:

        /**
* Method that will update the old quantity with the new one, in case the Procut already exists
         * @param p
         * @return
         */
        private WOActionResults informUser(Product p) {

                EOAdaptor adaptor;
                EOAdaptorContext adContext;
                EOAdaptorChannel adChannel;
EOFetchSpecification fspec =new EOFetchSpecification(Product.ENTITY_NAME, null, null); EOObjectStoreCoordinator rootStore = (EOObjectStoreCoordinator) session().defaultEditingContext().rootObjectStore(); EODatabaseContext dbContext = (EODatabaseContext) rootStore.objectStoreForFetchSpecification(fspec);
                EODatabaseChannel dbChannel = dbContext.availableChannel();
                adaptor = dbContext.database().adaptor();
                adContext = dbContext.adaptorContext();
                adChannel = dbChannel.adaptorChannel();

NSDictionary dic = new NSDictionary((new Integer(Integer.parseInt(itemQty))) +p.numberItemsInStock(),Product.NUMBER_ITEMS_IN_STOCK_KEY);
                EOQualifier qual = Product.CODE.eq(code);
EOEntity myEntity = (EOModelGroup .defaultGroup ().modelNamed("StockManager")).entityNamed(Product.ENTITY_NAME);
                
                System.out.println("Opening Channel");
                adChannel.openChannel();
                adChannel.updateValuesInRowDescribedByQualifier(dic, qual, 
myEntity);
                System.out.println("Closing Channel");
                adChannel.closeChannel();
                        
                // TODO Auto-generated method stub
errorMessage = "The product with Code Number: "+ code + ", already exists in the DataBase, the Quantity has been updated it ";
                AjaxHighlight.highlight("errMess");
                return pageWithName("RegisterProducts");
        }
Then I tested and wow, it worked then I read it, and WOW, got confused, I had to back to the EO PRogramming guide and read again what are those EOAdaptor things, and it was quite confusing. Then what I did, was that once the first time I updated the quantity, I just immediately save the the registration again, to see what would happen, the app told me that eventually the number of Items in stock were updated, I checked the db again, but for my surprise this time was reduced.

Ok questions.: is that the right method to make an update in a a db?. is there another way to get the EOModel, so I can get the Entity, and then use the method from EOAdapterChannel updateValuesinRowDescribedByQualifiers?, and, why it might happened that after the first update, if I click once again the submit button, the numbers of items were reduced?



Well if any better explanation of what I did here that will help me clear my mental map, I will appreciate it also.


Thanks

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

This email sent to [email protected]

Reply via email to