
_Créditos das imagens: ChatGPT
# Criando Componentes Personalizados no FWWebEx: Simples e Poderoso! 🚀
Olá, comunidade #Totvs e #AdvPL! Hoje quero compartilhar uma pérola do [FWWebEx](https://github.com/DNATechByNaldoDJ/fw.webex/): como é incrivelmente fácil criar componentes reutilizáveis para interfaces web modernas. Para ilustrar, vamos dar uma olhada no **WebExDataTableFilterPanel**, um painel de filtro personalizado para DataTables que integra perfeitamente com o ecossistema Totvs.
O [FWWebEx](https://github.com/DNATechByNaldoDJ/fw.webex/) é um framework leve e flexível para construir aplicações web em AdvPL, permitindo criar elementos UI como modais, gráficos e tabelas com pouquíssimo esforço. Ele usa uma sintaxe intuitiva baseada em blocos WITH WEBEXOBJECT, o que torna o desenvolvimento ágil e legível.
### Exemplo: [Implementando um Painel de Filtro para DataTable](https://github.com/DNATechByNaldoDJ/fw.webex/blob/main/src/fw.webex/web/component/fw.webex.datatable.filter.panel.tlpp)
Aqui está o código principal da classe `WebExDataTableFilterPanel` (extraído de `fw.webex.datatable.filter.panel.tlpp`). Veja como é direto construir um modal com header, body, footer e scripts integrados:
```advpl
class WebExDataTableFilterPanel from WebExControl
// Propriedades protegidas
protected data cTitle as character
protected data cTargetTableID as character
protected data jTargetTableFields as json
// Construtor
public method New(cTitle as character, cTargetTableID as character, jTargetTableFields as json) as object
endclass
method New(cTitle, cTargetTableID, jTargetTableFields) class WebExDataTableFilterPanel
// Inicialização
::cTitle := cTitle
::cTargetTableID := cTargetTableID
::jTargetTableFields := jTargetTableFields
_Super:New("div")
WITH WEBEXOBJECT ::oPanel
// Configura o modal Bootstrap
.:AddClass("modal fade")
WITH WEBEXOBJECT ::oPanelContainer CLASS WebExDiv
.:AddClass("modal-dialog modal-lg")
WITH WEBEXOBJECT ::oPanelContent CLASS WebExDiv
.:AddClass("modal-content")
// Header com título e botão close
WITH WEBEXOBJECT ::oPanelHeader CLASS WebExDiv
.:AddClass("modal-header")
// ... (título e botão close)
END WEBEXOBJECT
// Body com container para filtros dinâmicos
WITH WEBEXOBJECT ::oPanelBody CLASS WebExDiv
.:AddClass("modal-body")
// ... (botão para adicionar filtro e script JS para rows dinâmicas)
END WEBEXOBJECT
// Footer com botões Close e Apply
WITH WEBEXOBJECT ::oPanelFooter CLASS WebExDiv
.:AddClass("modal-footer")
// ... (botões e script JS para aplicar filtros)
END WEBEXOBJECT
END WEBEXOBJECT
END WEBEXOBJECT
END WEBEXOBJECT
return(self)
```
### Por Que é Tão Fácil?
- **Estrutura em Blocos**: Os blocos `WITH WEBEXOBJECT` aninham elementos HTML de forma hierárquica, como um DOM virtual em AdvPL.
- **Integração Nativa**: Suporte a Bootstrap, DataTables e scripts JS embutidos – adicione classes, atributos e conteúdos com métodos simples como `.:AddClass()` ou `.:SetContent()`.
- **Reusabilidade**: Crie uma vez e use em múltiplas telas. No exemplo `[fw.webex.example.020.tlpp](https://github.com/DNATechByNaldoDJ/fw.webex/blob/main/src/fw.webex.examples/020/fw.webex.example.020.tlpp)`, vemos esse painel sendo integrado a um dashboard com DataTables server-side.
- **Extensibilidade**: Herda de `WebExControl` (de `fw.webex.control.tlpp`), que cuida de IDs, atributos e renderização automática.
Com [FWWebEx](https://github.com/DNATechByNaldoDJ/fw.webex/), você transforma ideias em componentes funcionais em minutos, sem reinventar a roda. Ideal para dashboards, relatórios e apps web no Protheus!
Já experimentou o [FWWebEx](https://github.com/DNATechByNaldoDJ/fw.webex/)? Compartilhe suas criações nos comentários ou me mande uma mensagem. Vamos trocar ideias! 💡
---
#FWWebEx #DesenvolvimentoTotvs #WebDevelopment #UIComponents #AdvPLProgramming
---
🤝 Quer contribuir?
- Toda ajuda é bem-vinda! A ideia aqui é evoluir juntos como comunidade Protheus:
- Criar novos componentes (SBAdminCardContainer, SBAdminCard, etc.)
- Melhorar o renderizador
- Adicionar eventos dinâmicos
- Documentar com mais exemplos
Torne-se um Sponsor:
🥊(дави)={0.5x[(Налдо)+(Алине)]}🥊
Comentários
Postar um comentário