----- Il 15-nov-17, alle 15:11, Giovanni Porcari giovanni.porcari@xxxxxxxxx ha
scritto:
|> Il giorno 15 nov 2017, alle ore 14:58, Silvano Valleferro
|> <s.valleferro@xxxxxxxxxxx> ha scritto:
|>
|> Il codice è questo:
|>
|> class Form(BaseComponent):
|> py_requires = "gnrcomponents/attachmanager/attachmanager:AttachManager"
|>
|> def th_form(self, form):
|> bc = form.center.borderContainer()
|>
self.opportunityTestata(bc.borderContainer(region='left',datapath='.record',width='50%'))
|>
|> def opportunityTestata(self,bc):
|>
|> bc.contentPane(region='top',
|> height='30%').linkerBox('idclifor',margin='2px',openIfEmpty=True,
|> validate_notnull=True,
|>
auxColumns='$idclifor,$ragionesociale,$indirizzo,$localita,$idprovincia',
|> condition='$idstato < 10',
|>
newRecordOnly=True,formResource='Form',
|>
dialog_height='30%',dialog_width='100px', limit=30)
|>
|> sx_center = bc.contentPane(region='center', background_color='green')
|> fb = sx_center.formbuilder(cols=1, border_spacing='4px')
|> fb.field('datacreazione')
|> fb.field('oracreazione')
|> fb.field('idoperatore')
|> fb.field('idgruppo')
|> fb.field('idattivita', width='35em')
|>
|> sx_b = bc.contentPane(region='bottom', height='50%',
background_color='yellow')
|>
sx_b.inlineTableHandler(relation='@opportunity_righe',viewResource='ViewFromOpportunity')
|>
|> def th_options(self):
|> return dict(dialog_height='400px', dialog_width='600px')
|
|
|
| Ciao Silvano
|
|
| a volte genropy tende a farti cadere in sottili tranelli e per questo bisogna
| sempre riflettere bene
| su quello che scriviamo.
|
| Nel tuo caso tu ha messo :
|>
self.opportunityTestata(bc.borderContainer(region='left',datapath='.record',width='50%'))
|
|
| Questo significa che tutti i path relativi sono *dentro* al tuo record.
|
| Poi questo 'left' me lo dividi in center e bottom.
|
| Nel center metti un formbuilder con i campi del record ma nel bottom metti
| un tablehandler sulle righe.
|
|
| Il povero tablehandler ha bisogno di una sua zona di controlli e li mette di
| defaul relativi al datapath corrente.
| l'effetto finale è che questa partita te viene cambiata ogni volta che carichi
| un record e quindi il tutto smette di funzionare.
|
| Quindi hai 2 soluzioni:
|
| la prima è che TOGLI il datapath da
|
|
self.opportunityTestata(bc.borderContainer(region='left',datapath='.record',width='50%'))
|
| che quindi diventa
|
| self.opportunityTestata(bc.borderContainer(region='left',width='50%'))
|
| poi nel center lo rimetterai:
|
|
| sx_center = bc.contentPane(region='center', background_color='green'
| ,datapath='.record')
|
|
|
| In alternativa, invece, potresti ridare il datapath quando mettin
| l'inlinetablehandler:
|
| sx_b = bc.contentPane(region='bottom', height='50%',
| background_color='yellow',datapath='#FORM.opportunity_rows')
|
sx_b.inlineTableHandler(relation='@opportunity_righe',viewResource='ViewFromOpportunity')
|
|
| In questo modo, anche se il 'left' era su '#FORM.record', tu vai a forzare il
| bottom a '#FORM.opportunity_rows' ovvero
| in una zona dello store che non viene cambiata al caricamento del record.
|
|
| Spero che ti sia chiaro e che lo sia per chi ci sta a leggendo.
|
|
| fammi sapere se va…
|
|
| G
Perfetto !!
Era proprio questo il problema.
Quindi, se ho capito bene:
L'inlineTableHandler lavorerebbe in automatico sul suo path corretto (se il
path non è già inizializzato),
ma avendo io fatto ereditare il pane su cui operava con un path definito
all'inizio e diverso dal suo andava in crisi (operando su un path errato)
Grazie
Silvano