On Thu, Mar 9, 2017 at 2:18 PM, D R <rir....@gmail.com> wrote:

> Hi,
>
> After being sick and busy with other things I checked again and found out
> that the xredirect does not work so the NameManager is not executed.
>
> Even the following in the application sheet does not do any redirect when
> pressing Save and View button of an application document:
>
> ```
> <div class="hidden">
>   <input type="hidden" name="xredirect" value="$doc.space" />
> </div>
>
> ```
>

The value of the xredirect field must be an URL, see my first reply. And
you need XWiki 8.4+

Hope this helps,
Marius


>
> Could you please help me how proceed further?
>
> Thanks, Dennis
>
> 2017-03-01 15:51 GMT+01:00 D R <rir....@gmail.com>:
>
> > Hi Marius,
> >
> > thanks, I'm one step further now, at least the NameManager now does
> > renaming in general (it renamed itself until I added an #if clause to not
> > do so).
> >
> > I wanted to implement it step by step so I didn't add the redirect yet.
> >
> > But the sheet is not executed when editing application entries.
> >
> > Meanwhile I have the following.
> >
> > Test App.Code.Test AppSheet:
> >
> > ```
> > [...]
> > #set( $nameManRef = $services.model.createDocumentReference('', ['Test
> > App', 'Code'], 'Test App NameManager') )
> > #set( $nameMan = $xwiki.getDocument($nameManRef) )
> >
> > <div class="hidden">
> >   <input type="hidden" name="xredirect" value="$doc.getURL('view',
> > "sheet=${escapetool.url($nameMan)}")" />
> > </div>
> >
> > {{/html}}
> > {{/velocity}}
> >
> > ```
> >
> > Test App.Code.Test App NameManager:
> >
> > ```
> > {{velocity}}
> > #if ( $doc.name != 'Test App NameManager' )
> >   #set ($renameRequest = $services.refactoring.createRenameRequest($doc.
> documentReference,
> > 'Now RENAMED'))
> >   #set ($discard = $renameRequest.setAutoRedirect(false))
> >   $services.refactoring.rename($renameRequest)).join()
> > #end
> > {{/velocity}}
> >
> > ```
> >
> > Thanks again,
> > Dennis
> >
> > 2017-03-01 10:30 GMT+01:00 Marius Dumitru Florea <
> > mariusdumitru.flo...@xwiki.com>:
> >
> >> On Tue, Feb 28, 2017 at 3:03 PM, D R <rir....@gmail.com> wrote:
> >>
> >> > Hi Marius,
> >> >
> >> > the refactoring approach sounds great but there seems to be something
> I
> >> do
> >> > wrong because the renaming doesn't work. Maybe I misunderstood the
> term
> >> > "current document" but I'm not sure.
> >> >
> >> > I created "Test App.Code.Test App NameManager" with the following
> >> content:
> >> >
> >> > ```
> >> > {{velocity}}
> >> > #set ($renameRequest =
> >> >
> >>
> >>
> >> > $services.refactoring.createRenameRequest($doc.fullName, 'Now
> >> RENAMED'))
> >> >
> >>
> >> As per
> >> http://extensions.xwiki.org/xwiki/bin/view/Extension/Refacto
> >> ring+Module#HScriptService
> >> the first parameter passed to createRenameRequest must be an
> >> EntityReference. In your case you can pass:
> >>
> >> * either the reference of the current document, i.e.
> >> $doc.documentReference
> >> , if the document is terminal (its name != 'WebHome')
> >> * or the reference of the current space, i.e.
> >> $doc.documentReference.parent
> >> , if the document is not terminal (its name is 'WebHome')
> >>
> >>
> >> > #set ($discard = $renameRequest.setAutoRedirect(false))
> >> > $services.refactoring.rename($renameRequest)).join()
> >> > {{/velocity}}
> >> >
> >> > ```
> >> >
> >> > Then I put your DIV at the end of my app sheet:
> >> >
> >> > ```
> >> > {{velocity}}
> >> > {{html wiki="true"}}
> >> > #set ($discard = $doc.use('Test App.Code.Test AppClass'))
> >> > (% class="xform" %)
> >> > (((
> >> >    [FORM CONTENT]
> >> > )))
> >> >
> >> > <div class="hidden">
> >> >   <input type="hidden" name="xredirect" value="$doc.getURL('view',
> >> > "sheet=${escapetool.url('Test App.Code.Test App NameManager')}")" />
> >> > </div>
> >> >
> >> > {{/html}}
> >> > {{/velocity}}
> >> >
> >> > ```
> >> >
> >> > Then I opened up one of the application entries, edited it and hit
> "Save
> >> > and view" but the name didn't change.
> >> >
> >>
> >> I don't see any redirect in "Test App NameManager" so it's normal you
> stay
> >> on the same page, but do you have the sheet parameter in the query
> string?
> >> i.e. is the "Test App NameManager" sheet executed?
> >>
> >>
> >> >
> >> > Could you please tell me what I did wrong.
> >> >
> >> > Thanks in advance,
> >> > Dennis
> >> >
> >> > 2017-02-28 11:38 GMT+01:00 Marius Dumitru Florea <
> >> > mariusdumitru.flo...@xwiki.com>:
> >> >
> >> > > Hi Dennis,
> >> > >
> >> > > A relatively simple solution is the following:
> >> > >
> >> > > (1) modify the application sheet to include the following HTML at
> the
> >> > end:
> >> > >
> >> > > <div class="hidden">
> >> > >   <input type="hidden" name="xredirect" value="$doc.getURL('view',
> >> > > 'sheet=Path.To.NameManager')" />
> >> > > </div>
> >> > >
> >> > > The result is that whenever you create a new application entry or
> when
> >> > you
> >> > > edit an existing application entry, after you click "Save and view"
> >> you
> >> > > will be taken to the view mode with ?sheet=Path.To.NameManager in
> the
> >> URL
> >> > > query string, which means the Path.To.NameManager sheet will be
> >> applied
> >> > to
> >> > > the saved document.
> >> > >
> >> > > (2) Create the Path.To.NameManager page that determines the right
> name
> >> > for
> >> > > the current document (based on its fields) and renames the current
> >> > document
> >> > > if needed ( using the refactoring API
> >> > > http://extensions.xwiki.org/xwiki/bin/view/Extension/Refacto
> >> ring+Module
> >> > ),
> >> > > finally redirecting to the view mode of the renamed document.
> >> > >
> >> > > The problem with this solution is that it doesn't work if you use
> >> Save &
> >> > > Continue and then Cancel (I think, to be checked).
> >> > >
> >> > > Another option, more complex, is to write an event listener that
> >> catches
> >> > > the document save event and renames the document if needed based on
> >> its
> >> > > fields. The bad part with this is that the user is still not
> >> redirected
> >> > > when using Save & Continue.
> >> > >
> >> > > Hope this helps,
> >> > > Marius
> >> > >
> >> > > On Mon, Feb 27, 2017 at 3:52 PM, D R <rir....@gmail.com> wrote:
> >> > >
> >> > > > Hi,
> >> > > >
> >> > > > In an XWiki Application I created I want to make sure documents
> >> created
> >> > > > within it get named in a specific pattern from the fields filled
> >> inside
> >> > > > them.
> >> > > >
> >> > > > Currently I use a custom button to redirect the user to a new
> >> document
> >> > > with
> >> > > > a dummy name so he doesn't need to fill the name (that should get
> >> > > > overwritten anyway on saving) but only the relevant fields.
> >> > > >
> >> > > > Something like
> >> > > > #set ( $createDocLink = $xwiki.getURL($document, 'inline',
> >> > > > "template=${escapetool.url($urlTemplate)}&parent=${
> >> > > > escapetool.url($urlParent)}&title=${escapetool.url($urlTitle)}")
> >> > > > )
> >> > > >
> >> > > > This leads to a new document as defined in the application sheet
> >> with
> >> > the
> >> > > > name 'New document'.
> >> > > >
> >> > > > Now I want the user to fill 3 fields ('freetext1', 'freetext2',
> >> > > > 'dropdown1'), click 'Save & View' or a custom button. Then the
> >> document
> >> > > > should be saved as '<freetext1> - <freetext2> (<dropdown1>)' and
> the
> >> > user
> >> > > > should be redirected to that page in view mode.
> >> > > >
> >> > > > I've tried different approaches including a temporary creation
> page
> >> > with
> >> > > > the 3 fields as HTML input fields (can't use the applications
> >> > dropdown),
> >> > > > event listeners (the redirect after saving doesn't work) ...
> >> > > >
> >> > > > Additionally the same must be done when a page is edited (one of
> >> the 3
> >> > > > fields is changed).
> >> > > >
> >> > > > Please help me find a sane approach before I bite the table.
> >> > > >
> >> > > > Regs, Dennis
> >> > > >
> >> > >
> >> >
> >>
> >
> >
>

Reply via email to