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