Hi Angelo,

>> The question is, why does EO expect a column for a derived attribute for a 
>> custom class and not for a ERXGenericRecord?



It doesn’t. You’ve found a EntityModeler bug I just found last week as well. A 
derived attribute should not have a value for “columnName” in the .plist - 
regardless if it has a specific custom/generic class or not. It should either 
be an empty string (columnName = "";) or just remove the entry all together. 

I don’t think EOF will even look at the definition entry if there is a value 
for columnName.

Your entry of:

>> definition = "case code when 0 then 'Active' when 1 then 'Inactive' end";


Should work correctly if that would be a valid SQL clause in a MySQL select 
statement.

I think if you just get rid of the columnName entry it should work.

Dave



On Mar 23, 2014, at 1:50 PM, Ângelo Andrade Cirino <aacir...@gmail.com> wrote:

> Hi Aaron,
> 
> 1) You are right, I am using Eclipse and WOlips, so, forgive me for the old 
> times lingo, but I am really using Eclipse's (WOlips) Entity Modeler.
> 
> 2) Since I am dedicating some time to deepen my understanding of Wonder I 
> decided to do it with a new Eclipse (Kepler) install. I am using Kepler and 
> the latest WOlips 4.3 stable build. After finishing installation I just 
> forgot to turn off generate bundles...
> 
> 3) Unfortunately we need to live with the Eclipse problems. But Apple's PB 
> and EOModeler weren't free of problems too…
> 
> Angelo
> 
> 
> 2014-03-23 14:32 GMT-03:00 Aaron Rosenzweig <aa...@chatnbike.com>:
> Hi Angelo,
> 
> Glad you got it working in the end. A couple things though:
> 
> 1) You keep saying “EOModeler.” Technically that is an Apple product that 
> requires the Objective-C to Java bridge which has not worked since probably 
> Mac OS X Tiger. Is that what you are using or are you using “EntityModeler” 
> that runs in Eclipse?
> 
> 2) Are you using the “bundle-less build” in Eclipse? If you are not, some of 
> these problems could be related to that. Since it has been possible to run 
> without generating a bundle, I doubt anyone has tested the older way much. 
> 
> 3) Eclipse just sucks… in general. I mean, it’s a tall order, taking all 
> those “dead” files on disk and then puffing them up like the “living dead” in 
> a cool IDE so that you can see “who calls who” and “refactor” etc. But It’s 
> easy to get out of sync or just to have problems. If you are running 
> EntityModeler on its own (Can you do that? I know RuleModeler can… I’m not 
> sure about EntityModeler) then you better “refresh” all your projects and 
> “clean” all your projects after you make an edit and save from EntityModeler. 
> It’s what I have to do when using any external tool. And sometimes, even when 
> I’m totally in the Eclipse universe something invariably will screw the pooch 
> and I need to “refresh” “clean all” and sometimes restart Eclipse. I call it 
> the “Eclipse dance."
> AARON ROSENZWEIG / Chat 'n Bike
> e:  aa...@chatnbike.com  t:  (301) 956-2319
>       
> 
> On Mar 23, 2014, at 11:58 AM, Ângelo Andrade Cirino <aacir...@gmail.com> 
> wrote:
> 
>> Hi Aaron,
>> 
>> Thank you for your prompt answer. Unfortunately none of the suggestions 
>> worked.
>> 
>> 1) I can't find any combination of double or single apostrophe that will 
>> work. A similar MySQL SELECT statement is as simple as this
>> 
>> select Party.id as partyID, (case status
>>      when 0 then 'Active'
>>      when 1 then 'Inactive'
>>     end) as fullStatus from Party;
>> 
>> Even this simple derived attribute that returns a constant won't work (from 
>> the plist entity file):
>> 
>> {
>>      columnName = fullStatus; 
>>      definition = "'Full Status'"; 
>>      name = fullStatus; 
>>      prototypeName = varchar16; 
>> }, 
>> 
>> with the following error:
>> 
>> IllegalStateException: sqlStringForAttribute: attempt to generate SQL for 
>> attribute 'fullStatus' on entity 'Party' with undefined column name. You 
>> must define a column name for this attribute before attempting a database 
>> operation.
>> 
>> 2) The read format option didn't work either since the attribute is an 
>> integer number and the return value is a string. I attempted this format:
>> 
>> if(%P,'Active','Inactive')
>> 
>> and it resulted in this error:
>> 
>> JDBCAdaptorException: Invalid value for getInt() - 'Inactive'
>> 
>> However, this works just fine as a read format:
>> 
>> if(%P,2*%P,5*%P)
>> 
>> But I am stubborn and think that a derived attribute is a desirable 
>> attribute. I would like to use it for more complex operations, for example 
>> involving concatenation of strings in related entities.
>> 
>> Anyway, trying to figure out what is happening, it occurred to me that my 
>> Party entity is a custom class, so I tried a non-custom class with a simple 
>> entity to see if the derived attribute would work. And it worked. My simple 
>> tentative entity is this:
>> 
>> {
>>     attributes = (
>>         {columnName = code; name = code; prototypeName = intNumber; }, 
>>         {
>>             columnName = fullStatus; 
>>             definition = "case code when 0 then 'Active' when 1 then 
>> 'Inactive' end"; 
>>             isReadOnly = Y; 
>>             name = fullStatus; 
>>             prototypeName = varchar16; 
>>             userInfo = {"_EntityModeler" = {generateSource = NO; }; }; 
>>         }, 
>>         {allowsNull = N; name = id; prototypeName = id; }
>>     ); 
>>     attributesUsedForLocking = (code, id); 
>>     className = "er.extensions.eof.ERXGenericRecord"; 
>>     classProperties = (code, fullStatus); 
>>     externalName = Status; 
>>     fetchSpecificationDictionary = {}; 
>>     name = Status; 
>>     primaryKeyAttributes = (id); 
>> }
>> 
>> But this isn't a solution for me, since my entity will have a lot of 
>> business logic that demands a custom class. Perhaps I should set my Party 
>> entity as a ERXGenericRecord and then subclass it to implement the business 
>> logic.
>> 
>> The question is, why does EO expect a column for a derived attribute for a 
>> custom class and not for a ERXGenericRecord?
>> 
>> By the way, the original Apple EOModeler User Guide doesn't state that a 
>> derived attribute will not work for a custom class nor does the 
>> documentation states that a derived attribute should be modeled for a 
>> generic record.
>> 
>> Angelo
>> 
>> 2014-03-23 1:01 GMT-03:00 Aaron Rosenzweig <aa...@chatnbike.com>:
>> Hi Angelo,
>> 
>> Couple things to try:
>> 
>> 1) Remove the single apostrophes surrounding “status” and try again. It is 
>> possible that it isn’t parsing properly… don’t column names need to have 
>> “double apostrophes” ??? Perhaps MySQL is lax about that but still… Either 
>> use no apostrophe or use a “double apostrophe” meaning a single character 
>> the shift-apostrophe key. If it is a single apostrophe that is a String in 
>> SQL. 
>> 
>> 2) Try a different way. Remove all the code you have in the derived part and 
>> make this a normal EOAttribute. Put “STATUS” in there by itself. Now go to 
>> the “advanced” tab and type what you want in the “Read Format” and check the 
>> “read only” box. In the read format you want to use %P for your columnName 
>> so you’ll want something like this:
>> 
>> case %P when 0 then 'Active' when 1 then 'Inactive’ end
>> 
>> Honestly, I almost always use the #2 way and never the “derived” way because 
>> it is more flexible. I like the idea that I define the column in one box and 
>> in another I write something complex but refer to it with %P. 
>> 
>> Try it out and report back.
>> AARON ROSENZWEIG / Chat 'n Bike
>> e:  aa...@chatnbike.com  t:  (301) 956-2319
>> 
>> 
>> 
> 
> 
> 
> 
> -- 
> Ângelo Andrade Cirino
> aacir...@gmail.com
> 31-3494-8642
> 31-9303-0695
> MSN aacir...@hotmail.com
> Skype aacirino
> _______________________________________________
> 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/webobjects%40avendasora.com
> 
> This email sent to webobje...@avendasora.com


—————————————————————————————
WebObjects - so easy that even Dave Avendasora can do it!™
—————————————————————————————
David Avendasora
Senior Software Abuser
Nekesto, Inc.





 _______________________________________________
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