CRM 2013 Javascript Object Model - Data.Entity

by Pedro Azevedo 9. July 2014 02:24

Boas pessoal,

Mais um capítulo dos métodos de Javascript desta vez sobre o Xrm.Page.data.entity

Xrm.Page.data.entity.addOnSave([function reference])

function showMessage() {
                Xrm.Utility.alertDialog("Função do evento save");
}

 

function addOnSaveTest() {
                Xrm.Page.data.entity.addOnSave(showMessage);
}

Xrm.Page.data.entity.removeOnSave([function reference])

function removeOnSaveTest() {
                Xrm.Page.data.entity.removeOnSave(showMessage);
}

 

Xrm.Page.data.entity.getDataXml()

function getDataXmlTest() {
                Xrm.Page.data.entity.addOnSave(function(){
                               Xrm.Utility.alertDialog(Xrm.Page.data.entity.getDataXml());
                });
}

Neste XML só aparecem os campos que eu alterei e aquelas que serão enviadas para o registo ser guardado.

Xrm.Page.data.entity.getEntityName()

function getEntityNameTest() {
                Xrm.Utility.alertDialog(Xrm.Page.data.entity.getEntityName());
}

Xrm.Page.data.entity.getId()

function getIdTest() {
                Xrm.Utility.alertDialog(Xrm.Page.data.entity.getId())
}

Xrm.Page.data.entity.getIsDirty()

function getIsDirtyTest() {
                Xrm.Utility.alertDialog(Xrm.Page.data.entity.getIsDirty());
}

 

O primeiro teste foi no evento onload do formulário e como se está a espera o formulário não está dirty. O segundo é invocado após alteração do campo como seria de esperar o CRM diz que o formulário está dirty.

Xrm.Page.data.entity.getPrimaryAttributeValue()

function getPrimaryAttributeValueTest() {
                Xrm.Utility.alertDialog(Xrm.Page.data.entity.getPrimaryAttributeValue());
}

Xrm.Page.data.entity.save( null | "saveandclose" |"saveandnew" )

Aqui é definido o comportamento da função save, se passarmos null ele deve simular o gravar normal, o saveandclose e o saveandnew dizem tudo destas duas opções.

function saveTest() {
                Xrm.Page.data.entity.save();

                Xrm.Page.data.entity.save("saveandclose");

                Xrm.Page.data.entity.save("saveandnew");
}

Já tínhamos visto a função Xrm.Page.data.save() a diferença é que esta corre assincronamente enquanto o save dentro da entity é síncrono e com opções diferentes.

 

Até a próxima.

Tags: , , , , , ,

Acordo entre a Microsoft e a Salesforce

by Pedro Azevedo 6. July 2014 03:05

 

Boas pessoal,

Hoje vou falar de um assunto sensível e muito tem abalado a comunidade. O acordo efetuado com o principal rival do Microsoft Dynamics CRM, a Salesforce.

Para quem não sabe Marc Benioff, CEO da Salesforce foi sempre um anti-Microsoft e nunca se inibi-o de o dizer. Agora e com o Satya Nadella (para os mais distraídos, quem veio substituir o Ballmer) fizeram um acordo de cooperação.

O acordo abrange várias áreas mas eu vou-me concentrar apenas na parte respeitante ao Dynamics CRM. Quando se apresentam as vantagens do Microsoft Dynamics CRM para o Salesforce existe uma grande vantagem que é a facilidade de integração com o Microsoft Office, que tem dois grandes produtos que são largamente utilizados: Outlook e Excel (inclui o Power BI). Para além do Office “on-premise”, ainda existe acordo para a integração dentro do Office 365 (que vai permitir usar o OneDrive e o Sharepoint).

Para ajudar a festa este acordo vai permitir que o Salesforce1 execute nos sistemas operativos Windows (incluindo o Windows Phone), outra força que os parceiros da Microsoft elencavam como grande vantagem.

Bom acho que não havia mais nenhum anel para “vender”. Estou a ser injusto falta ainda a parte servidora (Exchange e SQL Server), mas como a Salesforce não tem uma implementação on-premise não lhe interessava estes produtos.

Eu não entendo o porquê deste acordo e o CEO da Microsoft também não disse grande coisa, ainda por cima numa fase que o Microsoft Dynamics CRM apresentava um crescimento muito grande e apresentando soluções superiores a da Salesforce.

 

Qual é a vossa opinião?

 

Até a próxima.

Tags: , , ,

CRM 2013 Javascript Object Model - Coleções

by Pedro Azevedo 30. June 2014 21:47

Boas pessoal,

Neste post mais uma vez sobre o object model do Javascript para o Dynamics CRM 2013, iremos debruçar sobre collections. Antes virmos os métodos que nos permitem aceder as várias colecções vamos ver três métodos que nos vão ajudar a trabalhar sobre as colecções:

Xrm.Page.ui.controls.forEach(delegate function(control, index))

Aplica uma acção numa função delegate a cada objecto numa colecção

Xrm.Page.ui.controls.get([String][Number][delegate function(attribute, index)])

Extrair um ou mais objectos da colecção

Xrm.Page.ui.controls.getLength()

Retorna o número de itens de uma colecção

Fica aqui uma pequena referência mas eu vou aplicar várias vezes estes métodos com as várias assinaturas. Principalmente no primeiro exemplo que vou percorrer todos este métodos.

Xrm.Page.data.entity.attributes

function attributesAllTest() {

                    Xrm.Utility.alertDialog("Esta entidade tem " + Xrm.Page.data.entity.attributes.getLength() + " entidades no formulário");

                   

                    var firstControlById = Xrm.Page.data.entity.attributes.get(0);

                    var firstControlByName = Xrm.Page.data.entity.attributes.get(firstControlById.getName());

                   

                    var booleanAtts = Xrm.Page.data.entity.attributes.get(isBoolean);

                    var message = "";

                    for (var i in booleanAtts) {

                                         message += "- " + booleanAtts[i].getName() + "\n";

                    }

                    Xrm.Utility.alertDialog(message);

                   

                    message = "";

                    Xrm.Page.data.entity.attributes.forEach(function (attribute, index) {

                                         message += attribute.getName() + "(" + attribute.getAttributeType() + ") \n";

                    });

                    Xrm.Utility.alertDialog(message);

}

 

function isBoolean(att, index) {

                    return att.getAttributeType() == "boolean";

}

 

 

 

Xrm.Page.ui.controls

function controlsTest() {

                    var message = "";

                    Xrm.Page.ui.controls.forEach(function (control, index) {

                                         message += control.getName() + "(" + control.getControlType() + ") \n";

                    });

                   

                    Xrm.Utility.alertDialog(message);

}

Xrm.Page.ui.formSelector.items

Vou abordar esta colecção aquando Xrm.Page.ui.

Xrm.Page.ui.navigation.items

Vou abordar esta colecção aquando Xrm.Page.ui.

Xrm.Page.ui.tabs

function tabsTest() {

                    var message = "";

                    Xrm.Page.ui.tabs.forEach(function (tab, index) {

                                         message += "A tab " + tab.getName() + " está " + tab.getDisplayState() + "\n";

                    });

                   

                    Xrm.Utility.alertDialog(message);

}

 

 

Xrm.Page.getAttribute("…").controls

function attControlsTest() {

                    var message = "";

                    Xrm.Page.getAttribute("subject").controls.forEach(function (control, index) {

                                         message += control.getName() + "(" + control.getControlType() + ") \n";

                    });

                   

                    Xrm.Utility.alertDialog(message);

}

 

Xrm.Page.ui.tabs.get("…").sections

function sectionsTest() {

                    var message = "";

                    Xrm.Page.ui.tabs.get("Summary").sections.forEach(function (section, index) {

                                         message += "A secção " + section.getName() + "tem a seguinte label " + section.getLabel() + " \n";

                    });

                   

                    Xrm.Utility.alertDialog(message);

}

 Xrm.Page.ui.tabs.get("…").sections.get("…").controls

function sectionControlsTest() {

                    var message = "";

                    Xrm.Page.ui.tabs.get("Summary").sections.get("Contact").controls.forEach(function (control, index) {

                                         message += control.getName() + "(" + control.getControlType() + ") \n";

                    });

                   

                    Xrm.Utility.alertDialog(message);

}

 

Até a próxima.

Tags: , , ,

Como fazer debug de um plugin no CRM Online

by Pedro Azevedo 11. June 2014 06:14

Boas pessoal,

Hoje vou mostrar como podemos efectuar debug num plugin do CRM Online, como vão ver não é um debug em real time mas mesmo assim permite-nos ver como é que os dados fluem no nosso plugin. Basicamente é capturado todos os dados num ficheiro e vamos carregar esse ficheiro na ferramenta “Plugin Registration”. Vou já mostrar com a nova interface da ferramenta que apareceu com o SP1 do Microsoft Dynamics CRM Online. É bom relembrar que apenas temos esta opção devido ao facto de a única maneira que temos para fazer deploy dos plugins é no modo sandbox.

Tendo em conta que já temos um plugin registado e queremos realizar o debug deste plugin através da ferramenta “Plugin Registration”. Esta ferramenta está na instalação do SDK, para ter acesso a nova interface relembro que têm que fazer no mínimo o download do SDK do SP1. Depois de instalar tem acesso aplicação nesta pasta …\SDK\Tools\PluginRegistration\PluginRegistration.exe.

Depois de iniciar aplicação terá este aspecto:

 Aqui carregamos no botão “CREATE NEW CONNECTION”, depois disto teremos que introduzir as nossas credenciais:

 

Depois da autenticação é listado a lista de Plugins registados e seleccionamos o plugin sobre o qual queremos realizar o debug e carregamos em “Install Profile”:

 

Depois do profile instalado irá aparecer um nó com o “Plugin-in Profiler”, sobre o passo registado dizemos que queremos começar o profile, carregando no botão “Start Profiling”:

 

Vai aparecer uma janela de settings que podemos aceitar os por defeito:

 

O nó do passo altera-se como vamos ver mais adiante, agora vamos até a nossa instância de CRM Online e vamos despoletar o nosso plugin, ao correr vai aparecer uma janela com o título “Erro de Processo de Negócio” onde vamos fazer download do ficheiro:

De seguida vamos ao nosso Visual Studio e vamos fazer “attach” ao processo da ferramenta “Plugin Registration”:

 

E colocamos um breakpoint onde vamos querer parar e fazer debug. Voltando a ferramenta e voltando ao passo do plugin, verificamos que o passo está marcado como “Profiled”, e seleccionamos o “Debug”:

 

Na janela a seguir vamos então seleccionar o ficheiro que fizemos download anteriormente e colocamos no campo: “Profile Location” e vamos também dizer onde está a DLL respeitante ao nosso plugin, depois de carregar o plugin temos a opção de escolhermos a classe responsável pelo plugin. Ao seleccionarmos o botão “Start Execution” ele vai correr o plugin com base no ficheiro de profile que disponibilizamos e podemos fazer step by step com os dados que inserimos:

 

 

 Assim vimos como podemos realizar debug de um plugin no CRM Online. Não é o ideal mas dá uma tremenda ajuda.

 

Até a próxima.

Tags: , , , , ,

CRM 2013 - SP1

by Pedro Azevedo 7. June 2014 01:00

 

Boas Pessoal,

Estou aqui para dizer que já temos acesso a uma nova versão. As organizações online em princípio já têm esta versão, denominada como Spring 2014, para os ambientes on-premise podem fazer download aquieste update é conhecido como SP1, no site referido pode-se ver as correcções efetuadas.

Por isso pessoal toca a ir experimentar as novas novidades que nos trás este novo update. Antes de atualizar não deixem de olhar este site.

Vejam aqui o novo ecrã nas definições para a Gestão de Serviço:

 

Até a próxima.

Tags: , , , , ,

CRM 2013 Javascript Object Model - Contexto

by Pedro Azevedo 28. May 2014 20:04

Boas pessoal,

Chegou a vez de falarmos sobre o Xrm.Page.context. Aqui temos que obter primeiro o objecto de contexto.

context.client.getClient()

Valores de retorno possíveis deste método:

Cliente

Valor

Browser

Web

Outlook

Outlook

Mobile

Mobile

function getClientTest() {

                Xrm.Utility.alertDialog(Xrm.Page.context.client.getClient());

}

De referir que este método veio tornar o método isOutlookClient obsoleto.

 

context.client.getClientState()

Valores de retorno possíveis deste método:

Cliente

Valor

Web, Outlook, Mobile

Online

Outlook, Mobile

Offline

function getClientStateTest() {

                Xrm.Utility.alertDialog(Xrm.Page.context.client.getClientState());

}

Tal como o método anterior este método veio tornar obsoleto o método isOutlookOnline.

 

context.getClientUrl()

Valores possíveis no retorno:

Cliente

Valor

Microsoft Dynamics CRM (on-premises)

http(s)://server/org

Microsoft Dynamics CRM Online

https://org.crm.dynamics.com

Microsoft Dynamics CRM for Outlook with Offline Access when offline

http://localhost:2525

Na documentação o método getServerURL não vem documentado mas ainda funciona apesar de estar obsoleto deve-se usar sempre o getClientUrl.

 

context.getCurrentTheme()

Este método serve essencialmente para podermos customizar os nossos Recursos Web mediante o theme do Outlook. Valores possíveis de retorno para este método:

Valor

Theme

default

Microsoft Dynamics CRM web application

Office12Blue

Microsoft Dynamics CRM for Outlook 2007 or 2010 Blue Theme

Office14Silver

Microsoft Dynamics CRM for Outlook 2007 or 2010 Silver or Black Theme

function getCurrentThemeTest() {

                Xrm.Utility.alertDialog(Xrm.Page.context.getCurrentTheme());

}

Devem ter atenção que alguns destes métodos não funcionam por exemplo nos tablets por isso os métodos acima passam a ser essenciais. Por exemplo este método em específico não funciona nos tablets.

 

context.getOrgLcid()

Esta função permite devolver a linguagem base da organização.

 

function getOrgLcidTest() {

                Xrm.Utility.alertDialog(Xrm.Page.context.getOrgLcid());

}

Este valor representa o Português de Portugal. Já agora o Português do Brazil é o 1046.

 

context.getOrgUniqueName()

function getOrgUniqueNameTest() {

                Xrm.Utility.alertDialog(Xrm.Page.context.getOrgUniqueName());

}

context.getQueryStringParameters()

Este método serve para ler os query strings passados ao formulário para além dos parâmetros que o CRM envia pode-se passar parâmetros customizados, por exemplo usando a função que já testamos a openEntityForm.

 

function getQueryStringParametersTest() {

                var params = Xrm.Page.context.getQueryStringParameters();

                for(var par in params) {

                               Xrm.Utility.alertDialog("QueryString:" + par + " com o valor " + params[par]);

                }

}

 

 

context.getUserId()
function getUserIdTest() {

                Xrm.Utility.alertDialog(Xrm.Page.context.getUserId());

}

 

context.getUserId() 
function getUserLcidTest() {

                Xrm.Utility.alertDialog(Xrm.Page.context.getUserLcid());

}

 

context.getUserName()
Esta função retorna o nome do utilizador.
function getUserNameTest() {

                    Xrm.Utility.alertDialog(Xrm.Page.context.getUserName());

}

 

context.getUserRoles()

function getUserRolesTest() {

                var roles = Xrm.Page.context.getUserRoles();

                for(var role in roles) {

                               Xrm.Utility.alertDialog("Role ID:" + role);

                }

}

context.prependOrgName(sPath)

 

function prependOrgNameTest() {

Xrm.Utility.alertDialog(getClientUrlTest() + Xrm.Page.context.prependOrgName("/XRMServices/2011/OrganizationData.svc/"));

}

 

Neste contexto ainda tenho a referir que o método getAuthenticationHeader foi retirado definitivamente, este tinha permanecido por causa de compatibilidades com o CRM 4.0.

 

Até a próxima

 

Tags: , , , , , , ,

Plugin para intervir na operações especiais - Ganho e Perda da Oportunidade

by Pedro Azevedo 18. May 2014 19:21

Boas pessoal,

Na continuação deste post vou aqui relatar como realizar o dito plugin, um plugin que interfere em operações especiais. Neste caso vai-se referenciar as operações na entidade Oportunidade que permite marcar um registo como Ganho ou Perdido. Imaginamos que se quer verificar se um determinado campo está preenchido, neste caso quero obrigar que o utilizador preencha a descrição antes de fechar a oportunidade.

O código é o seguinte:

public class CloseOpportunity : IPlugin {
	public void Execute(IServiceProvider serviceProvider) {
		ITracingService tracingService = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
		IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));

		if (context.InputParameters.Contains("OpportunityClose") && context.InputParameters["OpportunityClose"] is Entity) {
			Guid oppId = ((EntityReference)((Entity)context.InputParameters["OpportunityClose"]).Attributes["opportunityid"]).Id;

			IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
			IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);

			Entity opportunity = service.Retrieve("opportunity", oppId, new Xrm.Sdk.Query.ColumnSet(true));
			if (!opportunity.Contains("description") || string.IsNullOrEmpty(opportunity["description"].ToString()))
				throw new InvalidPluginExecutionException("Para fechar a Oportunidade terá que preencher a descrição");
		}
	}
}

O normal em plugins é esperarmos a entidade no parâmetro “Target” neste caso, esta informação está no parâmetro “OpportunityClose”, ou seja, vem na forma do objecto final, pois quando fechamos uma Oportunidade temos que preencher informações, do estado, receita real, data de fecho e caso seja perdida qual o concorrente que ganhou.

Para verificarmos as propriedades da Oportunidade teremos que obter e no objecto “OpportunityClose” tem o ID da Oportunidade e é com esse ID que vamos obter a Oportunidade relacionada.

No código ainda se pode ressalvar como cancelamos a operação, com recurso a excepção “InvalidPluginExecutionException”, a mensagem que colocamos na excepção é a mensagem que vai aparecer ao utilizador.

Depois do código completo temos que registar o plugin com as seguintes configurações:

  •         Mensagem: Win ou Lose
  •         Entidade Primária: Opportunity
  •         Entidade Secundária: Nenhuma

E registamos no event Pre-Operation para que não seja gravado na BD.

Vamos ver diretamente no Plugin Registration como fica, depois de realizarmos uma ligação, podemos registar o nosso assembly:

 Após selecionarmos a opção "Register New Assembly" aparecerá um formulário para colocarmos o caminho do assembly que contém o nosso plugin e escolhemos qual o Plugin que queremos registar, neste caso estou a selecionar o Plugin acima:

 Se tudo correr bem obtém-se a seguinte mensagem:

Irá aparecer um novo nó com o assembly que se acabou de criar e sobre este vamos adicionar um "passo" (Register New Step):

No formulário a seguir configuramos em que mensagem queremos nos registar, qual a entidade primária, em que fase do pipeline e o modo de execução:

Com isto temos o nosso Plugin registado e pronto a funcionar.

Até a próxima.

Tags: , , , ,

CRM 2013 - Spring Preview

by Pedro Azevedo 14. May 2014 22:04

Boas pessoal,

O Release Preview do próximo release já saiu e eu faço aqui uma análise do que nos espera. Podem fazer download do Release Preview aqui. Este será um dos maiores upgrades que já ocorreram, isto bem feito poderia ser considerado uma nova versão do Dynamics CRM. Hoje vamos explorar o documento.

Este update será automático para os utilizadores de Microsoft Dynamics CRM Online e virá através de um update. Estariam a imaginar um update rollup, mas não terá como denominação Service Pack, neste caso Service Pack 1 (SP1). Pelo que percebi os updates rollups vão continuar normalmente a ser lançados mas os major releases vão passar a denominar-se como service packs.

Como referi aquando do Convergence este release vai afectar três áreas:

Marketing

Como sabemos o módulo de marketing presente atualmente no Microsoft Dynamics CRM é bastante simples e não fornece todas as capacidades que uma equipa de Marketing necessita. E como é referido no documento as equipas de Marketing possuem muitas ferramentas que não se interligam entre elas para gerirem campanhas de Marketing.

Com este intuito a Microsoft desenvolveu este novo produto que se interliga com o Microsoft Dynamics CRM e que será específico para as equipas de Marketing, o Microsoft Dynamics Marketing.

Como podemos ver na imagem uma forma visual e drag and drop para configurarmos a nossa campanha com múltiplos canais, email, redes sociais, etc. com o objetivo de gerarmos Leads qualificadas.

A gestão do ciclo de vida de uma Lead uma das grandes funcionalidades deste novo produto, gerir desde a aquisição, pontuação, distribuição e segmentação entre o marketing e as vendas. A possibilidade de as equipas de marketing poderem construir um modelo de pontuação das leads permite que qualifiquemos com muita mais eficácia as Leads.

Na homepage desta ferramenta poderemos adicionar indicadores de performance, relatórios com informações sobre Leads geradas, efetividade dos emails, etc.

A configuração das mensagens de email são muito configuráveis com um editor (dava jeito ter um igual no Dynamics CRM) muito poderoso:

Poderá personalizar o conteúdo por quem envia, recebe e pelo motivo. Algumas das funcionalidades:

  • APIs abertas para suportar envio de emails por aplicações externas, fazendo o controlo dentro do Dynamics Marketing.
  • Entrega de emails de uma forma massiva e transacional para escalar milhões de emails para clientes por dia.
  • Controlar o número de emails enviados num determinado período de tempo a um contacto para evitar o aborrecimento dos clientes.

Avaliar e analisar dados do Dynamics Marketing com relatórios específicos Power BI.

Vendas

A área das vendas foi a área que menos alterações obteve, mas absorve muitas das vantagens na melhoria dos outros módulos, pois receber Leads com mais informações e qualificadas da parte Marketing irá gerar mais vendas. Mesmo assim pode-se destacar melhorias nas aplicações tablet com suporte offline, onde todos os dados visualizados ficam em cache para permitindo assim a sua visualização quando se perde a conectividade.

A disponibilização do Insights que já tinha falado num post anterior quem vem melhorar a informação sobre os contactos, poupando muito tempo em pesquisas, estando tudo concentrado no próprio contacto ou cliente. Estará disponível para o CRM Online sem custos adicionais para clientes com licenças profissionais, neste momento apenas para os estados unidos, estando previsto para o final de 2014 a disponibilização global.

Serviço a Cliente

Um dos módulos com mais alterações é o módulo de serviço ao cliente. Um das atualizações mais interessantes para as equipas de apoio ao cliente com a disponibilização do Unified Service Desk (USD) quem vem substituir o antigo CCA.

Com uma configuração realizada dentro do Microsoft Dynamics CRM, permite ter num único sítio todas as aplicações necessárias para prestar o melhor serviço ao cliente através de qualquer canal, automatizando tarefas e poder gerir várias sessões de clientes em simultâneo:

Penso que todos os que tenham estado pelo menos um ano dentro de um CRM implementou algo para dar suporte a SLAs, com este novo upgrade este problema vem resolvido de raiz:

Isto traz o poder de customizar e automatizar regras quando um SLA estiver quase ultrapassado. Na imagem anterior estamos a ver várias novidades, um controlo de timer que pode mostrar quanto tempo falta ou o tempo decorrido de uma SLA:

O conceito de “entitlement” uma espécie de contrato de serviço, que rapidamente nos diz que nível de suporte poderemos dar ao nosso cliente:

Ainda sobre um incidente temos mais algumas novidades:

  • Noção de pai/filho

·         Podermos realizar merge de dois incidentes para o mesmo caso:

  •  Criação automática de incidentes:

Regras para criação de incidentes automáticos quando um email é recebido ou por análise as redes sociais, onde converte o email ou o post automaticamente num incidente.

Até aqui as aplicações mobile apenas suportavam entidades de vendas, a partir de agora existe um suporte as entidades de serviço a cliente nomeadamente:

  • Incidentes e itens de filas com suporte de leitura e escrita
  • Entitlements e filas com suporte de leitura

Parature

O grande poder desta ferramenta é oferecer uma ligação com o cliente independentemente do dispositivo e canal que este utiliza. Neste momento o Parature oferece:

  • Portal – um sítio central 24 horas nos 7 dias da semana que facilmente é integrado na página web da organização. Onde os clientes pesquisam sobre a base dados de conhecimento com as Perguntas e Respostas mais realizadas. Ainda é possível por exemplo submeter, controlar e receber notificações de um incidente.
  • Mobile – uma aplicação web mobile compatível com a maior parte dos dispositivos móveis.
  • Portal Facebook – clientes e consumidores podem ver as perguntas e respostas mais efetuadas, ver as últimas atualizações, bem como submeter incidentes. Outra das funcionalidades dentro do Facebook é a possibilidade de integrar o char ao vivo dentro da página da empresa.

Social

Com a ferramenta Microsoft Social Listening ficamos com o poder de seguir os nossos produtos, marcas, concorrentes e campanhas estão a ser vistos em múltiplos canais com o Facebook ou Twitter.

Podem ver posts anteriores em que falo em algumas funcionalidades desta ferramenta.

Plataforma

Uma funcionalidade mais genérica é a possibilidade de podermos criar regras nas transições de estado, ou seja, podermos que dizer que quando uma entidade estiver num determinado estado só pode ir para determinados estados:

No último grande release tinha sido introduzido a sincronização server-side de email, tarefas, apontamentos e contactos para os ambientes on-premise entre o Dynamics CRM e o Exchange. Com esta release também é disponível para os ambientes online e ambas as ferramentas. Para além do Exchange Online são suportados os fornecedores de email POP3\SMTP23 para o envio e sincronização de emails. A ferramenta Email Router ainda continua a ser suportada.

A integração com Sharepoint foi melhorada entre os produtos online deixando de haver a necessidade de instalar o “CRM List Component”. Passará haver um aviso semelhante ao aviso do cliente Outlook a dizer que não existe integração com o Sharepoint.

Foram acrescentadas funcionalidades nos ambientes de desenvolvimento ou de testes (conhecidos como sandbox):

Na imagem anterior podemos ver o novo centro de administração de instâncias e desta tiramos as principais novas funcionalidades:

  • Cópia – Podemos realizar dois tipos de cópia. Copia simples que contém esquema e customizações de um ambiente para o outro. Cópia completa que inclui também dados, utilizadores.
  • Reset – poder fazer reset as instâncias sandbox, basicamente é apagar tudo e colocar uma instância nova.
  • Snapshot – Poder realizar um snapshot ou restaurar um, nas instâncias sandbox.

Foram também melhoradas algumas questões ao nível da plataforma. Uma novidade é quando vamos exportar podermos exportar para soluções que podem ser carregadas em versões inferiores a atual.

Temos acesso a novas ferramentas - CRM Package Deployment Tool e CRM Configuration Migration Tool. Houve melhorias no Plugin Registration Tool e no Toolkit para o Visual Studio. Existe um maior suporte ao Powershell. Uma nova API – Microsoft.Xrm.Tooling.xxx. OAuth discovery para suportar clientes ISV e Office. E o operador OR nos workflows.

Para finalizar o suporte a novas versões de várias tecnologias:

  • Windows 8.1
  • Internet Explorer 11
  • iOS7 Safari on iPad (web application)
  • iPad Air using Safari (web application)
  • Windows Server 2012 R2 (CRM server)
  • iPad Air using CRM for Tablets

Pessoal muita coisa para um único upgrade, por isso toca a pegar nas vossas instâncias e preparar-nos para o que aí vem.

 

Até a próxima.

Tags: , , , ,

CRM 2011 - UR17

by Pedro Azevedo 9. May 2014 01:21

 Boas pessoal,

Quando os olhos estão virados para a saída do SP1 do Dynamics CRM 2013, saiu mais um rollup para o Dynamics CRM 2011, UR17.

O grande destaque vai para os utilizadores do Internet Explorer 11 tanto para o Windows 8.1 e Windows 7, pois passam a ter suporte. O KB com mais de 60 issues resolvidos podem ser vistos aqui. Para fazer download pode ser aqui.

 

Até a próxima.

Tags: ,

Feedback do evento ENEI

by Pedro Azevedo 28. April 2014 18:51

Boas pessoal,

Mais um post rápido para transmitir a minha participação (uma apresentação e um workshop) do ENEI 2014 que decorreu em Aveiro. Fiquei muito agradado com o evento, havia muita gente interessada e fiquei a trocar ideias com muitos dos participantes.

O evento estava bem organizado, com muitas boas sessões e foi com muito agrado que participei neste evento.

O que espero que quem assistiu as minhas sessões tenham apreendido? Que existe outras ferramentas de desenvolvimento, que saibam sugerir esta ferramenta quando se adeqúe e que para muitas soluções optar por uma plataforma pode reduzir o custo de desenvolvimento.

Deste evento trago mais uma experiência e também a certeza que os slides podem e vão ser melhorados, já estou a trabalhar noutra versão onde espero mostrar um exemplo prático de como se faz sem o Dynamics CRM e como se resolve com esta ferramenta, deixo-vos aqui algumas fotos do evento:

 

 

Deixo também os slides da apresentação bem como a solução usada no workshop:

 

 

Depois foi redescobrir uma cidade lindíssima. Foi em todos os aspetos um evento magnífico, obrigado a organização por esta oportunidade e espero vir a repetir novamente.

 

Até a próxima.

EneiGrupoEmpresarios_1_0_0_0.zip (24,86 kb)

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