.. _tablehandler/ViewResource/advanced_methods/th_sections_method/remote_sections: remoteSections ============== Supponiamo di avere la necessità di mostrare delle *sections* dinamiche, i cui **bottoni si modificano sulla base del record selezionato**. Per esempio, nel progetto `Sandbox `_, potremmo voler sezionare le fatture del cliente sulla base della combinazione "anno-mese": questo dato sarà ovviamente **differente per ogni singolo cliente**, e la section dovrà quindi adattarsi al record selezionato per mostrare alcuni bottoni piuttosto che altri. Prendiamo quindi la vista ``ViewFromCliente`` nella risorsa della table *fattura* e aggiungiamo la toolbar superiore con la bottoniera:: def th_top_custom(self,top): top.bar.replaceSlots('vtitle', 'sections@annomese', sections_annomese_remote=self.calcolaSectionsAnnoMese) Notiamo che rispetto alle :ref:`sections` finora definite, in questo caso andiamo a effettuare una chiamata a un metodo ``calcolaSectionsAnnoMese``, che definiamo come segue:: @public_method(remote_cliente_id='^#FORM.record.id') def calcolaSectionsAnnoMese(self, cliente_id=None, **kwargs): if not cliente_id: return [] f = self.db.table('fatt.fattura').query(where='$cliente_id=:cli_id', cli_id=cliente_id, columns="to_char($data, 'YYYY-MM') AS annomese", distinct=True).fetch() return [dict(code=f"c_{r['annomese'].replace('-','')}", caption=r['annomese'], condition="to_char($data, 'YYYY-MM')=:am", condition_am=r['annomese']) for r in f] Il metodo utilizza il decoratore ``public_method``, a cui viene passato il parametro ``remote_cliente_id``, che serve a individuare il path del *cliente_id* sulla base del quale andare a fare le successive operazioni di lettura. Se questo non esiste (nuovo record), infatti, la *section* sarà vuota. Se invece il record esiste già, allora viene fatta una *query* per individuare le combinazioni "anno-mese" per le quali esistono delle fatture: così facendo non avremo bottoni "vuoti" con tutti i periodi, ma solo bottoni corrispondenti ai periodi con dei risultati, diversi cliente per cliente. .. raw:: html
**Parametri:** +------------------------+------+--------------------------------------------------+ | Nome parametro | Tipo | Descrizione | +========================+======+==================================================+ |multivalue |B |Se impostato a True consente di poter effettuare | | | |selezioni multiple di valori di partizionamento | | | |dei dati | +------------------------+------+--------------------------------------------------+ |multiButton |L |Permette di indicare un numero di bottoni oltre il| | | |quale la bottoniera si convertirà in tendina (es: | | | |multiButton=5) | +------------------------+------+--------------------------------------------------+ |variable_struct |B |Se impostato a True permette di selezionare nelle | | | |sections una determinata th_struct precedentemente| | | |definita (es: struct="clienti con_acquisti") | +------------------------+------+--------------------------------------------------+ .. sectionauthor:: Davide Paci