Política de Privacidade

Política de privacidade

Todas as suas informações pessoais recolhidas, serão usadas para o ajudar a tornar a sua visita no nosso site o mais produtiva e agradável possível.

A garantia da confidencialidade dos dados pessoais dos utilizadores do nosso site é importante para o aplicativo.

A informação pessoal recolhida pode incluir o seu nome, número de telefone e/ou telemóvel,  e/ou outros.

O uso do aplicativo pressupõe a aceitação deste Acordo de privacidade. A equipa do aplicativo reserva-se ao direito de alterar este acordo sem aviso prévio. Deste modo, recomendamos que consulte a nossa política de privacidade com regularidade de forma a estar sempre atualizado.

Os anúncios

Tal como outros websites, coletamos e utilizamos informação contida nos anúncios. A informação contida nos anúncios, inclui o seu endereço IP (Internet Protocol), o seu ISP (Internet Service Provider, como o Sapo, Clix, ou outro), o browser que utilizou ao visitar o nosso website (como o Internet Explorer ou o Firefox), o tempo da sua visita e que páginas visitou dentro do nosso website.

Cookie DoubleClick Dart

O Google, como fornecedor de terceiros, utiliza cookies para exibir anúncios no nosso website;

Com o cookie DART, o Google pode exibir anúncios com base nas visitas que o leitor fez a outros websites na Internet;

Os utilizadores podem desativar o cookie DART visitando a Política de privacidade da rede de conteúdo e dos anúncios do Google.

Ligações a Sites de terceiros

O aplicativo possui ligações para outros sites, os quais, a nosso ver, podem conter informações / ferramentas úteis para os nossos visitantes. A nossa política de privacidade não é aplicada a sites de terceiros, pelo que, caso visite outro site a partir do nosso deverá ler a politica de privacidade do mesmo.

Não nos responsabilizamos pela política de privacidade ou conteúdo presente nesses mesmos sites.

Armazenamento local

Podemos coletar e armazenar informações (inclusive informações pessoais) localmente em seu dispositivo usando mecanismos como armazenamento no navegador da web (inclusive HTML 5) e caches de dados de aplicativo.

 

Anúncios

Variáveis dinâmicas em JavaScript

Olá pessoal, tudo bom?

Em javascript, as vezes, pode surgir a necessidade de criar variáveis em tempo de execução, ou em alguma condição específica, estas variáveis serão nomeadas dinamicamente.
No grid que está para download neste blog, precisei criar várias variáveis dinâmicas, pois quando o desenvolvedor colocar mais de um grid na mesma página, preciso de variáveis diferentes para armazenar diversos valores próprios de cada grid, por isso o uso desse tipo de variáveis.

Criando uma variavel normal em javascript:

var nomeTeste = "valor de teste";

Criando variáveis dinâmicas usando o objeto window javascript:

//criando as variáveis dinamicamente
for (var i = 0; i < 10; i++)
{
    window["nomePadrao" + i] = i + 10;
}

//recuperando os valores dessas variáveis
var strCompleta = "";
for (var i = 0; i < 10; i++)
{
    strCompleta += window["nomePadrao" + i] + ",";
}

Este foi só um exemplo para demonstrar o uso das variáveis dinâmicas, um uso mais prático, seria o abaixo, que usei para construir o grid.
Tenho minha partial view que renderiza o grid e dentro dessa partial view tenho meu script que cria essas variáveis dinâmicas de acordo com o parâmetro que é passado junto da chamada da partial view, este parâmetro é o nome do grid que é concatenado a uma string fixa, veja o exemplo abaixo:

Chamando a partial view:

@Html.Partial(Url.Content("~/Views/Shared/GridPartial.cshtml"), new string[] { "nomeDoGrid1" })

Na partial view fica da seguinte forma:

@model IEnumerable<string>

@{
    var nomeGrid = Model.ElementAt(0);
}

<script>

    //criando algumas variáveis de exemplo
    window["paginaAtual" + '@nomeGrid'];
    window["registroSelecionado" + '@nomeGrid'];

    //recuperando
    alert(window["paginaAtual" + gridSelecionado]);
    //ou
    alert(window["paginaAtual" + '@nomeGrid']);

</script>

Posteriormente, na hora de recuperar esses valores, através de outras funções, consigo saber qual grid o usuário selecionou e uso somente as variáveis relacionadas com aquele grid.

Espero que tenha sido útil, abraços.

Usando a classe TaskFactory

Olá pessoal, tudo bom?
Dias atrás encontrei um problema com uma demanda no trabalho.
Precisava enviar muitos e-mails através de uma aplicação .net.
Para não desenvolver uma aplicação console ou windows forms que ficaria rodando no servidor, usei a solução de usar programação assíncrona para executar minha rotina, usando a classe TaskFactory.
Esta classe dá suporte para a criação de tarefas em .net, ela dispara uma tarefa com sua rotina no servidor, e sua aplicação continua rodando normalmente no cliente, sem precisar ficar esperando a tarefa terminar para continuar executando.

Ela é usada da seguinte forma:

using System.Threading.Tasks;

Task.Factory.StartNew(() =>
{
//Sua rotina aqui
//No meu caso para não desenvolver uma aplicação console ou um windows forms que ficaria rodando silenciosamente no servidor
//resolvi usar este método para enviar os emails, e minha aplicação continuar rodando no lado do cliente
});

Mais informações sobre a classe você encontra em: TaskFactory Class

Abraços.

Forçando atualização de arquivos no servidor

Muitas vezes você altera algum arquivo javascript ou um css e quando abre a página da aplicação, as alterações não foram efetuadas, fazendo com que seja utilizado um CTRL+F5 ou limpeza de cache, histórico etc, para poder ver as mudanças na tela, ou alguma ação de um javascript.

Para resolver esse problema, você pode utilizar um tipo de versionamento do arquivo .js ou .css e de outros formatos também, basta utilizar por exemplo: ?1500 ao final do arquivo, como no exemplo abaixo:


<link href="@Url.Content("~/Content/Site.css?1500")" rel="stylesheet" type="text/css" />

<script src="@Url.Content("~/Scripts/Validacoes.js?1500")" type="text/javascript"></script>

Eu sempre utilizei esse ?1500 e sempre forçou a busca dos meus arquivos atualizados no servidor.

Abraços.

Interrompendo uso da tecla ESC

Na maioria dos navegadores, quando você usa uma chamada AJAX, ou uma imagem GIF como um ajaxloader.gif, a tecla ESC aborta o carregamento do AJAX e interrompe a execução da imagem GIF. Este pequeno trecho de javascript e jquery abaixo, interrompe a ação da tecla ESC, fazendo com que seu AJAX e/ou sua imagem GIF não sejam interrompidas:

//chamada que interrompe a ação da tecla ESC
$(document).keypress(function(e) {
    if(e.keyCode == 27) { //keycode da tecla ESC = 27
        e.preventDefault();
    }
});

É uma chamada simples que pode ser usada sem problemas em nossas aplicações.

Nesse link você encontra outros javascripts keycodes. Você pode tratar qualquer tecla do sistema dessa maneira, inclusive acrescentando outras funções quando pressionada determinada tecla:

Javascript KeyCodes

Abraços.

Mvc Grid – Solution

Segue o link dos arquivos do Mvc Grid desenvolvido.

Nele contém tudo que você precisa para utilizar o grid, contém um exemplo de fácil compreensão.

Qualquer dúvida estou a disposição, abraços.

Download MVC Grid Haroldo

Em breve postarei um How-to, para facilitar a utilização.

Pode ocorrer de dar problema com o css do grid, pois ainda não tive muito tempo de arredondar essa parte, por isso é melhor cada uma configurar de acordo com o necessidade.

 

Order by usando Reflection em C#

Neste post mostrarei como usar Reflection para ordenar qualquer lista, através de um campo string passado via parâmetro.

Para desenvolver o grid do qual falei no primeiro post, precisei implementar a seguinte solução: um método que ordenasse qualquer lista de acordo com um campo informado, no caso, o campo seria a coluna que o usuário está ordenando o grid, que seria uma string contendo o nome do campo, passada via post para minha action.

Para ser usado pelo grid, criei uma DLL com uma classe e as seguintes implementações:

using System.Web.Mvc;

private static object GetPropertyValue(object obj, string property)
{
    System.Reflection.PropertyInfo propertyInfo = obj.GetType().GetProperty(property);
    return propertyInfo.GetValue(obj, null);
}
public static dynamic NomeDoMetodo <T>(FormCollection meuFormulario, IEnumerable<T> listaDesconhecida)
{
    var campoOrdenar = meuFormulario["campoOrdenar"];
    var listaOrdenada = listaDesconhecida.OrderBy(o => GetPropertyValue(o, campoOrdenar)).ToList();
    dynamic dadosRetorno = new
    {
        resultado = listaOrdenada
    };
    return dadosRetorno;
}

Com esta implementação é possível ordenar uma lista com tipo desconhecido e ordenar por um campo de forma dinâmica, sem conhecer o campo no qual se quer ordenar.

Foi incluída a referência de System.Web.MVC para a ClassLibrary reconhecer o FormCollection e no caso estou retornando um dynamic, pois não conheço o tipo da lista e é o tipo que me atende no grid.

Na aplicação que estiver usando o grid, a chamada a essa função ficará da seguinte forma na ActionResult:

var resultado = NomeDaClassLibrary.NomeDaClasse.NomeDoMetodo(seuFormulario, suaLista);

Simples de se usar e funciona muito bem. Espero que tenha sido útil essa dica, abraços!

Primeiro post…

Tudo bom galera.

Neste blog vou compartilhar minhas experiências em .NET e desenvolvimento em geral.

Mostrar recursos utilizados para resolver algumas situações encontradas quando se trabalha com desenvolvimento .NET.

Como uma dificuldade que sempre nossa equipe de desenvolvimento encontra quando se inicia um novo projeto, o problema com um grid que funcione de acordo com as nossas necessidades.

Diante desse problema, ao iniciar um novo projeto, vimos a necessidade de se utilizar esse grid, vendo que uma opção boa seria paga, então resolvi tentar desenvolver algo fácil de usar e bem reutilizável nas nossas aplicações web. Em uma semana e com a ajuda e idéias da equipe toda, saiu um grid com chamada ajax, paginação, ordenação, redimensionamento de colunas e outras coisas simples.

Não é nada de tão especial e diferente, só acho válida a ideia e é bom compartilhar, pois alguém pode estar com o mesmo problema e esse grid pode ser a solução ou parte da solução.

Lógico que pode apresentar erros ou não conter alguma funcionalidade, mas sugestões serão bem vindas e críticas construtivas também, e tudo pode ser melhorado.

Em breve disponibilizarei todos os arquivos e um how-to para conhecimento de todos.

Obrigado e até a próxima.