quinta-feira, 11 de setembro de 2025

segunda-feira, 8 de setembro de 2025

DDD na Prática

 Excelente aula sobre o assunto do MACORATTI

quarta-feira, 23 de julho de 2025

sexta-feira, 16 de maio de 2025

[Windows] + [Visual Studio WITH DEVOPS] + [WIFI (IPV6 Enabled)] = CRASH!!

Vejam esta combinação:
[Windows] + [Visual Studio WITH DEVOPS] + [WIFI (IPV6 Enabled)]

Ela tem resultado pra muitos DEVS uma ENORME dor de cabeça, porque desestabiliza a conexão do VS com o DEVOPS.

O principal culpado?
IPV6 habilitado na sua conexão WIFI!
Por quê?
Não faço a menor idéia, somente a MS poderia responder em detalhes.

Esta combinação tem gerado o erro:
"The underlying connection was closed: An unexpected error occurred on a send"

A "solução" então?
Desabilite a configuração IPV6 na sua conexão WIFI, que tudo volta a ficar estável na conexão do VS com o DEVOPS.

Vá em:
Painel de Controle -> Network and Internet -> Network and Sharing Center -> Change adapter settings
Double click em WIFI
Na ana General, clique em properties e desabilite o ipv6


















segunda-feira, 18 de novembro de 2024

SOLID Principles

Para nós, developers, o conceito das coisas é muito importante, dado que, sem ele, não conseguimos alcançar uma madureza na profissão.

E alguns dos conceitos que precisamos saber bem se encontra nesta palavra : SOLID.

No canal do BALTA ele explica e demonstra de forma muito clara todos os 5 princípios.

Gostaria então de compartilhar com vocês. Os vídeos a seguir estão na ordem das Letras da palavra SOLID.









quinta-feira, 20 de abril de 2023

.NET MAUI Tutorial for Beginners

Dica rápida...que tal desenvolver apps para android/iOS "like a PRO", usando .NET MAUI?!
Com estes dois incríveis tutoriais do @JamesMontemagno isto é totalmente possível.
Bom estudo!



quarta-feira, 23 de novembro de 2022

CRM-GT - Painel de Gráficos

Painel de gráficos é um recurso importante do produto CRM-GT, onde podemos criar dashboards analíticos interessantes, dos seguintes tipos:
  • Área Polar
  • Barra Empilhada
  • Barra Horizontal
  • Barra Vertical
  • Círculo
  • Círculo (metade)
  • Contador
  • Filtro
  • Funil
  • Gauge
  • Linha
  • Mapa
  • Pizza
  • Tabela
Neste artigo vamos ver como estes gráficos são construídos na plataforma.
A área de [Configuração do Painel] é onde criamos os registros que representam os gráficos. Cada registro representa um gráfico.

Cadastramos um novo gráfico da seguinte maneira:
  • Para o campo [Grupo] informamos um valor que vai representar um Label para uma [aba] que será criada para o gráfico. Então, se colocarmos, por exemplo "Vendas", teremos
  • O campo [nome] será o [título] do gráfico
  • Escolha o tipo de gráfico no lookup de tipos (12 possíveis)
  • Informe uma largura (em px)
  • Informe uma altura (em px)
  • O campo [ordem] (read only aqui) mostra em qual posição ficará o gráfico em relação a outros do [mesmo grupo]. Você pode reordenar os gráficos clicando no botão [Reordenações]
  • No campo [Query Exec] é onde informamos a Fonte de Dados para o gráfico. Clique no link [Abrir Query Exec] para Criar/Editar sua query. Para a maioria dos gráficos você precisa informar os valores para o eixo X e Y do gráfico. No exemplo baixo, para um gráfico de barras, mostraremos um total (SUM de totalamount) agrupados pelo [nome do Pipeline]
  • Note que na query existem algumas macros iniciadas com a palavra [@ChartFilter_]. Este é um recurso para que possamos filtrar os dados por qualquer campo que desejarmos, obtidos a partir da tela, na área de [Filtro]. Para adicionar filtros no gráfico, criamos um [novo] registro de gráfico, escolhemos o tipo [Filtro] e informamos no campo [Grupo] o "mesmo valor" cadastrado para os outros registros de gráficos na qual desejamos aplicar os filtros. Pegando o mesmo exemplo já citado, para o gráfico de barras, que vai estar na ABA (ou Grupo) chamado "Vendas" vamos adicionar os seguintes filtros
    • Data de / Até
    • Contas

Note a relação então de registros para o [mesmo grupo].
No exemplo abaixo teremos [1] filtro que será usado para os gráficos pertencentes ao GRUPO "Vendas"

E para finalizar a configuração dos filtros, as [macros] devem estar presentes em [todas] as Query Execs para os registros exemplificados acima.
No momento da criação/alteração da Query Exec existe uma documentação completa no uso de todas as [macros], na aba [Dicas de Uso]

Então, lá vamos encontrar todas as formas possíveis de uso das macros [@ChartFilter_]

Gráfico - Tipo Tabela

Será visulizado um GRID com as colunas que você especificar no SELECT criado na Query Exec associada.
Você pode configurar a tabela para aceitar um [duplo clique] na linha para abrir o detalhe do registro correspondente na lista.
Então para que isto aconteça basta abrir a Query Exec associada e adicionar o ID (com o label hidden_id) da tabela em questão e o [Nome da Tabela] também (com o label hidden_table).
Exemplo, vamos mostrar num Grid os registros da tabela de Oportunidade. Portanto, ficará da seguinte forma

Se precisar relacionar duas [tabelas] de forma que, ao clicar no registro de uma delas, mostre dados relacionados em outra, adicione na [primeira] query os campos com os seguintes LABELs:
[hidden_tabletorefresh] - Representa o id da [queryExec] que deseja dar o [refresh] (e está associada ao gráfico da [segunda] tabela)
[hidden_queryexecfieldidtofilter] - É o [id] do campo (@ChartFilter) que está configurado na queryExec [hidden_tabletorefresh]

Então, exemplificando, vamos ter dois gráficos do tipo tabela, cada um com sua QueryExec (QE), que vamos dar um id apenas ilustrativo para cada uma, de A e B.

Na QE-A vamos configurar o [hidden_id], [hidden_table], [hidden_tabletorefresh] e [hidden_queryexecfieldidtofilter]. E na QE-B precisamos, na cláulusa WHERE, ter um filtro do tipo @ChartFilter, onde o [id] do @ChartFilter bata com o que foi informado no [hidden_queryexecfieldidtofilter].

Exemplo no WHERE da QE-B: @ChartFilter_VarChar_MyCustomFieldId_[]
Então, na QE-A teremos como [hidden_queryexecfieldidtofilter] o valor [MyCustomFieldId].

Notou que o @ChartFilter, no final, está com o [label] vazio? (..._[]).
Isto é importante, para que este campo de filtro NÃO apareça na área do dashboard de [campos de filtro].

Gráfico - Tipo Contador

No gráfico do tipo Contador, será mostrado um balão, e centralizado nele o valor que você [agregou] na Query Exec associada.
Na Query Exec você deverá especificar 3 campos
  • Agragador com o alias [count]
  • Um descritivo qualquer chamado [label]
  • Um valor RGB com o alias [rgbcolor]
Gráfico - Tipo Mapa

Para o gráfico do tipo mapa, informe na Query Exec associada os campos
  • Um descritivo qualquer com o alias [title]
  • O mesmo descritivo acima com o alias [infoTitle]
  • Um descritivo detalhado com o alias [infoDetail]
  • Uma latitude com o alias [latitude]
  • Uma longitude com o alias [longitude]
Gráfico - Tipo Barra Empilhada

A diferença para a barra normal (horizontal/vertical) é que na montagem do DataSet (QueryExec) precisamos informar os múltiplos valores para o mesmo [dataset]

Exemplo (meramente ilustrativo, com union em uma tabela qualquer):
(SELECT 'DataSet 1' as label, 1 as count1, 3 as count2, 1 as count3 FROM {status} LIMIT 1)
UNION ALL
(SELECT 'DataSet 2' as label, 6 as count1, 1 as count2, 8 as count3 FROM {status} LIMIT 1)
UNION ALL
(SELECT 'DataSet 3' as label, 2 as count1, 12 as count2, 5 as count3 FROM {status} LIMIT 1)

Resultado:


Recurso de Drill-Down

Este importante recurso permite ver mais detalhes de uma parte específica do seu gráfico. Exemplo, em um gráfico de barras, se você clicar em uma barra específica, o sistema abre um popup com os registros referentes aquela barra.
Este recurso já está habilitado por padrão nos gráficos de
  • Área Polar
  • Barra Empilhada
  • Barra Horizontal
  • Barra Vertical
  • Funil
  • Linha
  • Pizza

Por padrão, o popup somente mostra o campo [name] na lista de registros. Mas você pode configurar a Query Exec para ter os campos adicionais que desejar.
Para isto adicione, entre aspas, os campos desejados (separe os campos usando o caracter pipe [|] ), e nomeie este valor com o alias [drilldownfields]

Neste exemplo eu adicionei o campo [name] da opportunity e o [name] da tabela Status. Lembre-se de adicionar um LEFT JOIN se as tabelas relacionadas (Status no caso) não estiverem na Query.

Clicando na barra [Em Desenvolvimento]

E o detalhe