Re: d2w query question

2013-09-28 Thread David LeBer
The first rule of D2W: There is NO magic.

If you can't figure out why something works a certain way, that's just because 
you haven't found where the logic is yet.

The d2wContext is just a state machine / key-value store. It performs little 
logic on its own.

All the 'smarts' are in one of three places:

1. The page templates (from the 'Look')
2. The property level components
3. The assignment objects

Number 3 is the one most overlooked by novice D2W devs, and provides most of 
the 'hidden' functionality. It is well worth your effort to scan the available 
rule files looking for Assignment objects you've never used before. It's ALWAYS 
and eye opening experience. ;)

Rules are actually pretty simple. The left hand side is a qualifier, when it 
matches, it sets the key specified on the right hand side with the value 
derived through the Assignment object. Documenting 'the rules' does little 
good, because the moment you enhance or change one of the items above, the 
range of possible rules change.

Learn your templates, the available property level components, and the 
assignment objects. Once you understand those, parsing the rules becomes much 
easier, and creating your own rules to leverage the potential becomes clearer.

And as you learn, enhancements to the documentation is always welcome ;)

D

--
David LeBer
Codeferous Software

On 2013-09-28, at 11:52 AM, Theodore Petrosky  wrote:

> what did I learn in my d2w sojourn?
> 
> make sure you use the full package name when adding a queryDataSourceDelegate 
> (that one bit me until I read the email about 16 times).
> 
> you can create a Query page and specify in the rules what the entity is.
> 
> there are so many possible rules with settings that I feel there is no way to 
> learn them all. so there must be a logic to their organization that when you 
> learn it, it is all clear.
> 
> I am reminded of a story told by Gurdjieff.
> 
> He was studying at a Tibetan Monastery. One of the 'rules' was that to be 
> considered 'enlightened' one had to perform a very intricate dance. It took 
> on the average 3 years of study to master all the movements and pass the 
> test. But if you studied hard (ate your wheaties) and listened to your 
> master, you would eventually learn this complete dance.
> 
> One day he was eating his lunch watching two new supplicants begin the 
> process of learning the dance. Whilst eating and in the midst of a reverie, 
> he looked up and noticed that in the room, there was a bas-relief that 
> depicted all the steps of the dance. Unfortunately, when doing the dance, you 
> can not just look up as, depending on your angle you can or can not make out 
> the images. And that's when the images became clear to him.
> 
> In each step of the dance, the dancer is forming a character of the alphabet 
> (picture Village People YMCA), and the supplicant is spelling out the names 
> of the 20 men that founded the Monastery. Once you learned this fact, it was 
> easy.
> 
> Where is the D2W key? It's there somewhere!!!
> 
> 
> 
> On Sep 26, 2013, at 5:52 PM, David Holt  wrote:
> 
>> Your method calling this query page should actually be:
>> 
>>   public WOComponent queryBillboarAction() {
>> return D2W.factory().pageForConfigurationNamed("QueryBillboard", 
>> session());
>>   }
>> 
>> pageConfiguration = "QueryBillboard" => entity = "Grid" 
>> [com.webobjects.directtoweb.EntityAssignment], 
>> 
>> task is in the configurationName
>> 
>> On 2013-09-26, at 2:45 PM, David Holt  wrote:
>> 
>>> Yes! You're coming to the crux of D2W power. Congratulations :-)
>>> 
>>> All you need to do is set some rules for task and entity of the custom 
>>> configuration you need. Typed into Mail:
>>> 
>>> pageConfiguration = "RowsAndRowsOfMyAwesomeBillboards" => task = 'list' 
>>> [com.webobjects.directtoweb.Assignment]
>>> pageConfiguration = "RowsAndRowsOfMyAwesomeBillboards" => entity  "Grid" 
>>> [com.webobjects.directtoweb.EntityAssignment], 
>>> 
>>> 
>>>   public WOComponent queryBillboardAction() {
>>> QueryPageInterface qpi = (QueryPageInterface) 
>>> D2W.factory().queryPageForEntityNamed("Grid", session());
>>> return (WOComponent) qpi; 
>>>   }
>>> 
>>> pageConfiguration = 'QueryBillboard' => navigationState = 'Tab2' 
>>> [com.webobjects.directtoweb.Assignment]
>>> pageConfiguration = "RowsAndRowsOfMyAwesomeBillboards" => navigationState = 
>>> 'Tab2' [com.webobjects.directtoweb.Assignment]
>>> 
>>> rule to return the custom page configuration:
>>> 
>>> pageConfiguration = "QueryBillboard" => listConfigurationName =   
>>> "RowsAndRowsOfMyAwesomeBillboards" [com.webobjects.directtoweb.Assignment], 
>>> 
>>> you can return the list in the same page like so:
>>> 
>>> pageConfiguration = "QueryBillboard" => showListInSamePage = "true" 
>>> [com.webobjects.directtoweb.BooleanAssignment]
>>> 
>>> and don't forget the rule to set your query delegate to the QueryBillboard 
>>> page.
>>> 
>>> Of course you could be more reasonable and call your cu

Re: d2w query question

2013-09-28 Thread Theodore Petrosky
what did I learn in my d2w sojourn?

make sure you use the full package name when adding a queryDataSourceDelegate 
(that one bit me until I read the email about 16 times).

you can create a Query page and specify in the rules what the entity is.

there are so many possible rules with settings that I feel there is no way to 
learn them all. so there must be a logic to their organization that when you 
learn it, it is all clear.

I am reminded of a story told by Gurdjieff.

He was studying at a Tibetan Monastery. One of the 'rules' was that to be 
considered 'enlightened' one had to perform a very intricate dance. It took on 
the average 3 years of study to master all the movements and pass the test. But 
if you studied hard (ate your wheaties) and listened to your master, you would 
eventually learn this complete dance.

One day he was eating his lunch watching two new supplicants begin the process 
of learning the dance. Whilst eating and in the midst of a reverie, he looked 
up and noticed that in the room, there was a bas-relief that depicted all the 
steps of the dance. Unfortunately, when doing the dance, you can not just look 
up as, depending on your angle you can or can not make out the images. And 
that's when the images became clear to him.

In each step of the dance, the dancer is forming a character of the alphabet 
(picture Village People YMCA), and the supplicant is spelling out the names of 
the 20 men that founded the Monastery. Once you learned this fact, it was easy.

Where is the D2W key? It's there somewhere!!!



On Sep 26, 2013, at 5:52 PM, David Holt  wrote:

> Your method calling this query page should actually be:
> 
>   public WOComponent queryBillboarAction() {
> return D2W.factory().pageForConfigurationNamed("QueryBillboard", 
> session());
>   }
> 
> pageConfiguration = "QueryBillboard" => entity = "Grid" 
> [com.webobjects.directtoweb.EntityAssignment], 
> 
> task is in the configurationName
> 
> On 2013-09-26, at 2:45 PM, David Holt  wrote:
> 
>> Yes! You're coming to the crux of D2W power. Congratulations :-)
>> 
>> All you need to do is set some rules for task and entity of the custom 
>> configuration you need. Typed into Mail:
>> 
>> pageConfiguration = "RowsAndRowsOfMyAwesomeBillboards" => task = 'list' 
>> [com.webobjects.directtoweb.Assignment]
>> pageConfiguration = "RowsAndRowsOfMyAwesomeBillboards" => entity  "Grid" 
>> [com.webobjects.directtoweb.EntityAssignment], 
>> 
>> 
>>   public WOComponent queryBillboardAction() {
>> QueryPageInterface qpi = (QueryPageInterface) 
>> D2W.factory().queryPageForEntityNamed("Grid", session());
>> return (WOComponent) qpi; 
>>   }
>> 
>> pageConfiguration = 'QueryBillboard' => navigationState = 'Tab2' 
>> [com.webobjects.directtoweb.Assignment]
>> pageConfiguration = "RowsAndRowsOfMyAwesomeBillboards" => navigationState = 
>> 'Tab2' [com.webobjects.directtoweb.Assignment]
>> 
>> rule to return the custom page configuration:
>> 
>> pageConfiguration = "QueryBillboard" => listConfigurationName =   
>> "RowsAndRowsOfMyAwesomeBillboards" [com.webobjects.directtoweb.Assignment], 
>> 
>> you can return the list in the same page like so:
>> 
>> pageConfiguration = "QueryBillboard" => showListInSamePage = "true" 
>> [com.webobjects.directtoweb.BooleanAssignment]
>> 
>> and don't forget the rule to set your query delegate to the QueryBillboard 
>> page.
>> 
>> Of course you could be more reasonable and call your custom page 
>> configuration something like "ListBillboardGrid" and your task and entity 
>> should be picked up by the default assignment rules (since both "list" and 
>> "grid" are contained in the pageConfiguration name) but I exaggerated for 
>> effect.
>> 
>> 
>> On 2013-09-26, at 2:24 PM, Theodore Petrosky  wrote:
>> 
>>> 
>>> On Sep 26, 2013, at 5:07 PM, David Holt  wrote:
>>> 
 Hi Ted,
 
 well Grid is the entity, but you only want to display those grids that are 
 billboards?
 
 "Pages.ListGrid" = "List Billboards"
 "Nav.ListGrid" = "List Billboards"
 
> ((D2WComponent) qpi).d2wContext().takeValueForKey("ListBillboard", 
> "navigationState");
> ((D2WComponent) qpi).d2wContext().takeValueForKey("QueryBillboard", 
> "pageConfiguration");
 
 I'm not sure these two rules make any sense (at least this is not how I do 
 it). You probably should be setting navigation state in the rules. And if 
 you want to use a custom pageConfiguration for your list page then you 
 need to set it in your query page rules (either inline or as your 
 listConfigurationName).
 
 If you actually NEED a ListGrid page as well as Billboard, you'll have to 
 create a custom pageConfiguration for Billboards and assign the usual task 
 and entity to it.
>>> 
>>> and this is my issue. I NEED both the ListGrid and ListBillboard where the 
>>> underlying entity is Grid. (Tab1 is the ListGrid tab, Tab2 is the 
>>> ListBillboard tab) Are you su