IselTech 2017

by Pedro Azevedo 15. April 2017 11:36

Boas pessoal,

Está confirmada a primeira palestra do ano, vou palestrar em Maio no ISEL, para quem não sabe a faculdade que me formou como profissional, mas mais importante como pessoa. A minha experiência no ISEL foi fantástica os engenheiros são de alto gabarito e por isso estou eternamente grato ao ISEL.

O evento irá decorrer entre os dia 25 e 27 e tem um custo baixo e mesmo este será totalmente entre a associação “AFA - Associação Futuro Autónomo”. Por isso aproveitem para terem três dias com tecnologia de todos os quadrantes, vejam aqui para mais detalhes.

Resultado de imagem para isel tech 2017

Deixando de lado as emoções, vou ao ISEL falar de como o Azure e o Office 365 transformou o Dynamics 365 num produto que realmente pode rivalizar com o Salesforce e mesmo apresentado argumentos superiores.

Até a próxima

Tags: , , , , ,

Participação no TugaIT 2017

by Pedro Azevedo 7. April 2017 14:56

Boas pessoal,

Mais um evento para Maio desta vez a reedição do evento TugaIT, se bem se lembram no ano passado participei neste evento, é o primeiro evento internacional deste ano e como disse nas resoluções deste ano espero poder participar em pelo menos mais um mas desta vez num país fora de Portugal.

Este é um evento com várias temáticas que cobrem todos os espectros, desde de Desenvolvimento, Plataforma de Dados, Azure, Office 365, Integração, ou seja, um evento completo, para além do evento de um dia cheio de palestras em simultâneo, os dois dias anteriores haverá workshops muito interessantes e dados por pessoas muito competentes a maior parte MVPs Smile

Vocês devem de se estar a perguntar onde se insere o Dynamics no meio de isto tudo, não se insere diretamente, infelizmente o Dynamics ainda não consegue estar presente nestas edições com uma secção diária apenas para esta temática, por isso tento sempre adequar a minha palestra ao contexto do evento, no ano passado falei na integração do Dynamics com Azure e Office 365, desta vez vou falar sobre Common Data Service.

O evento decorre entre os dias 18 e 20 de Maio nas instalações da Microsoft, apareçam se tiverem a possibilidade tentem fazer um dos workshops e aproveitem o dia 20 para assistirem as palestras de uma forma gratuita. Encontra-mo-nos lá.

Resultado de imagem para tugait

Vejam mais informações no site do evento.

Até a próxima.

Tags: , , ,

Novos métodos na API de Javascript–Autocomplete

by Administrator 20. December 2016 15:19

Boas pessoal,

Continuando os posts de Javascript, como viram existiu uma grande mudança  com os processos.

Entre o CRM 2015 e o CRM 2016 a grande diferença está na disponibilização de controlos AutoComplete e a disponibilização via API, onde temos os seguintes métodos:

 

Apenas com estes métodos não conseguiríamos fazer nada, pois temos que apanhar quando o utilizador começa a escrever. Para ajudar foram acrescentados os seguintes métodos:

 

Para além de podermos adicionar e remover um handler para o evento KeyPress ainda podemos forçar o evento KeyPress.

Vamos então fazer um exemplo da utilização destes métodos, para isso tentei pesquisar um webservice público e encontrei um muito giro que tem informações sobre países do mundo, então o objetivo foi ter um campo que definisse o continente e filtrar logo a partida e depois houvesse um autocomplete no campo do país:

image

Como podem ver pela imagem esta melhoria traz um novo potencial ao Dynamics 365.

Até a próxima

Tags: , , ,

Novos métodos na API de Javascript–Dynamics 365

by Pedro Azevedo 15. December 2016 16:59

Boas pessoal,

Continuando a senda dos novos métodos da API de Javascript, hoje apresento-vos os métodos para gerir as instâncias de processos e métodos para sabermos quando o estado de um processo é modificado.

Isto porque com a chegada do Dynamcis 365 novas funcionalidades foram acrescentadas, e os processos de negócio não fugiram a regra, a Microsoft tenta sempre que estas mudanças também sigam a mesma atualização.

O que temos de novo nos processos de negócio? Bom eu sei que o que foi mais partilhado foi a nova interface e está linda! Mas não é o assunto deste post, queria falar das outras novidades que é a possibilidade de podermos ter várias instâncias de processos a decorrer ao mesmo tempo.

Para dar suporte a esta nova funcionalidade a Microsoft acrescentou mais duas funções:

Chamo mais uma vez atenção que estas funções trabalham com instâncias de processos e não com processos como vimos nos posts anteriores.

Então para começar escolhi a entidade Lead por já ter um processo de negócio por defeito, para além do que vem por defeito criei outro processo, como podem ver pela imagem abaixo ele apenas deteta um processo instanciado, isto é porque apesar de ter dois tipos de processo disponíveis apenas um está neste momento instanciado:

image

A seguir vou instanciar o outro e correr novamente a página, como podem ver já mostra dois processos instanciados:

image

image

Este foi o código que utilizei para obter estas imagens:

Como em vários outros métodos para obter os dados temos que passar um callback e que recebe um objeto com os vários processos, os vários processos vêm como propriedades desse objeto e dentro de cada as várias propriedades que podemos obter, como vamos ver mais a frente necessitamos por exemplo do guid para fazermos operações.

Agora que tenho dois processos instanciados posso neste momento trocar entre os duas instâncias, como tinha mostrado tinha ativado o segundo processo agora vou trocar novamente para o primeiro:

Aqui temos então o método setActiveProcessInstance que recebe o guid do processo a ser ativado e um callback a dizer se essa operação teve sucesso ou não.

Por hoje foi tudo, mas ao escrever este post senti falta de explicar um pouco mais toda esta funcionalidade dos processos de negócio que com esta versão sofreu algumas alterações fica prometido um post a explicar toda esta funcionalidade.

Até a próxima

Tags: , , ,

Apresentação do 24HOP - Portuguese Edition 2016

by Administrator 20. November 2016 14:42

Boas Pessoal,

Aqui estou para relatar e disponibilizar a apresentação que apresentei no 24HOP - Portuguese Edition 2016. Antes de disponibilizar a apresentação, deixem-me partilhar com vocês esta nova experiência, devem estar a pensar que estou maluquinho pois já tenho feito várias apresentações, mas esta tinha um aspeto diferente. Realizar uma palestra sem público. Mais uma vez devem estar a pensar que pirei, então não será melhor realizar uma palestra sem público e assim não ter a pressão dos mesmos?

Deixem-me dizer que não, pois sem público ao vivo nós não conseguimos perceber se estes estão a gostar, quando temos um público ao vivo e vemos que os estamos a perder, acentuamos algo para ser mais motivador, mandamos uma piada e temos feedback, numa sessão onde temos público online e que não conseguimos obter nenhum feedback foi das experiências mais estranhas e prefiro 1000 vezes fazer apresentações onde estamos a ver a nossa plateia.

Em relação ao conteúdo aqui ficam os slides e dizer que a gravação do vídeo também está online, basta para isso registarem-se:

 

Até a próxima

Tags: , , , ,

Novos métodos na API de Javascript – Processos II

by Pedro Azevedo 14. November 2016 16:38

Boas pessoal,

Depois do post anterior a falar sobre a barra de processos e de ter falado apenas do processo vamos agora falar sobre os stages. Vamos ver a que dados podemos aceder, sobre os stages:

var StageCollection = activeProcess.getStages();
 
StageCollection.forEach(function (stage, n) {
    Xrm.Utility.alertDialog("Categoria Stage -> " + stage.getCategory().getValue());
    Xrm.Utility.alertDialog("Id do Stage -> " + stage.getId());
 
    Xrm.Utility.alertDialog("Nome da Entidade da Stage -> " + stage.getEntityName());
    Xrm.Utility.alertDialog("Nome da Stage -> " + stage.getName());
    Xrm.Utility.alertDialog("Estado da Stage -> " + stage.getStatus());
 
    Xrm.Utility.alertDialog("Número de Steps -> " + stage.getSteps().getLength());
});

E este é o resultado:

image_thumb11_thumb

image_thumb13_thumb

image_thumb15_thumb

image_thumb16_thumb

image_thumb17_thumb

image_thumb18_thumb

image_thumb23_thumb

image53_thumb_thumb

image_thumb24_thumb

Não coloquei aqui os passos todos, podemos ver todas as informações do primeiro stage, que é o que está ativo, depois mostro o próximo stage e vejam que já está noutra entidade e que neste momento está inativo.

Vamos ver como podemos obter apenas o stage que está ativo:

function onload() {
    var activeStage = Xrm.Page.data.process.getActiveStage();
    Xrm.Utility.alertDialog(activeStage.getId() + " - " + activeStage.getName());
}

image_thumb1_thumb

Como podemos ver na imagem temos o guid e o nome do stage que está ativo. Claro que podemos ativar um stage com o seguinte código:

Xrm.Page.data.process.setActiveStage("15322A8F-67B8-47FB-8763-13A28686C29D", function(result) {
    if(result == "success") {
        Xrm.Utility.alertDialog("Success");
    } else {
        Xrm.Utility.alertDialog("Invalid");
    }
});

No post anterior não referi mas a função que colocar outro stage ativo e semelhança do que coloca o processo ativo, a função para além do sucesso e insucesso, e principalmente no caso de insucesso ele dá-nos mais razões para o insucesso, vamos ver o exemplo para este caso que outros valores podem ser passados a função:

  • crossEntity – o stage terá que ser sobre a entidade corrente;
  • invalid – pode ser três razões:
    • O Id do stage não é válido
    • O stage ativo não é o que está selecionado
    • O registo não está salvo
  • unreachable – o passo está noutro path
  • dirtyForm – se os dados da página não está gravado

Um método interessante é o getActivePath que nos dá qual é o caminho dos stages que faltam baseado nas regras de ramificações (mediante valores do formulário o nosso processo de negócio pode ter várias ramificações) e os dados presentes no registo, vejam um exemplo:

var activePathCollection = Xrm.Page.data.process.getActivePath();
activePathCollection.forEach(function (stage, n) {
    Xrm.Utility.alertDialog("Id do Stage -> " + n);
    
    var stageSteps = stage.getSteps();
    stageSteps.forEach(function (step, i) {
        Xrm.Utility.alertDialog("Nome do Passo -> " + step.getName());
        Xrm.Utility.alertDialog("Atributo do Passo -> " + step.getAttribute());
        Xrm.Utility.alertDialog("Passo Necessário -> " + step.isRequired());
    })
});

Com o método anterior, também vemos os métodos que podem ser executados sobre cada step, ou seja, podemos ver o nome do passo, qual o atributo e saber se esse atributo é necessário ou não.

Só nos falta falar nos eventos, aqui a API possibilita-nos saber quando um processo é alterado ou selecionado, da seguinte maneira:

Xrm.Page.data.process.addOnStageChange(function () {
    Xrm.Utility.alertDialog("O Stage foi modificado");
});
 
Xrm.Page.data.process.addOnStageSelected(function () {
    Xrm.Utility.alertDialog("O Stage foi selecionado");
});

image_thumb[3]

image_thumb[1]

A primeira mensagem é quando eu digo que quero mudar de processo, ou seja, disse que quero ir para a próxima fase. A segunda mensagem é quando eu seleciono, ou seja, por exemplo quero ver o que está na próxima fase, ou o que já foi escolhido na fase anterior.

Até a próxima

Tags: , ,

Novos métodos na API de Javascript–Processos I

by Pedro Azevedo 4. October 2016 19:30

Boas pessoal,

Há algum tempo atrás realizei alguns posts sobre a API de Javascript no CRM 2013, com o CRM 2015 apareceram novos métodos. A principal alteração foi ao nível da barra de processos de negócio, vamos conhecer melhor estas alterações:

image

Assinalado a vermelho vemos o que foi adicionado entre as versões 2013 e 2015, que tem a ver com os processos, em que estes podem ser divididos em fases (stages) e passos (steps).

image

Começando pelo Xrm.Page.ui.process, onde conseguimos controlar a visibilidade e colocar expandida ou recolhida:

Xrm.Page.ui.process.setDisplayState("collapsed");
Xrm.Page.ui.process.setVisible(false);

image

image

Podemos ver o comportamento com cada um dos código individualmente executados. Para além de definirmos, podemos ver o estado:

//Pode retornar "collapsed" ou "expanded"
Xrm.Page.ui.process.getDisplayState();
 
//Devolve true ou false mediante estar visível ou não
Xrm.Page.ui.process.getVisible();

Passando para o Xrm.Page.data.process, vamos saber qual é o processo selecionado, para isso vamos chamar o seguinte script:

var activeProcess = Xrm.Page.data.process.getActiveProcess();
Xrm.Utility.alertDialog(activeProcess.getId() + " - " + activeProcess.getName());

image

Como podemos ver na imagem temos o guid e o nome do processo que está ativo. Agora vamos forçar que o processo mude para o próximo ou anterior stage, com o seguinte código:

function onload()
    var activeProcess = Xrm.Page.data.process.getActiveProcess;
    if (activeProcess != null) {
        Xrm.Page.data.process.movePrevious(function (result) {
            ReadResult(result)
        });
    }
    
    var activeProcess = Xrm.Page.data.process.getActiveProcess();
    if (activeProcess != null) {
        Xrm.Page.data.process.moveNext(function (result) {
            ReadResult(result)
        });
    }
}
 
function ReadResult(result){
    if (result == "success") {
        Xrm.Utility.alertDialog("Funciona");
    } else {
        Xrm.Utility.alertDialog("Temos um problema");
    }
}

image

Na imagem vemos o que aconteceu quando tentamos ir para o próximo stage do nosso processo. Aqui dá um problema porque para avançar a Lead é necessário Qualificar, ou seja, necessita de uma oportunidade criada.

Neste momento temos estado a mexer no processo que está selecionado. Mas uma das funcionalidades mais interessantes é o utilizador poder mudar de processo, então como posso eu mudar de processo com código? Vamos começar por obter todos os processos que um utilizador pode mudar, com o seguinte código:

Xrm.Page.data.process.getEnabledProcesses(function (processes) {
    for (var processId in processes) {
        Xrm.Utility.alertDialog("id: " + processId + " name: " + processes[processId]);
    }
});

image

image

Com um Id do processo que quero mudar, posso mudar com o seguinte código:

Xrm.Page.data.process.setActiveProcess("c0d9760e-b261-4a3b-8355-f75eb45b9c1c", function(result) {
    if(result == "success") {
     alert("Success");
    } else {
     alert("Invalid");
    }
});

image

Em relação a apenas a parte do processo é tudo, no próximo artigo falarei, sobre os Stages.

 

Até a próxima

Tags: , ,

About

Muito bem casado, Pai babado e um gosto muito grande pela tecnologia.

Tenho um lema "Sharing is Learning"

Mais aqui -> http://www.psazevedo.com

Month List