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/Refactoring+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/
> Refactoring+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