Como modificar o filtro de um lookup no Dynamics CRM 2011

by Pedro Azevedo 11. February 2013 10:50

Boas pessoal,

Foi-me reportado um problema na escolha dos produtos no pipeline de vendas, aquando da escolha do produto estavam aparecer produtos inativos, ou seja, listava todos os produtos sem filtro. Bem este será o mote para apresentar várias soluções que segui para poder resolver este problema.

 

Aparentemente este problema seria de fácil resolução, primeira tentativa modificar a vista que esta associado por defeito ao lookup. Para acedermos a esta configuração, vamos a customização do formulário e duplo click no lookup e aparece a caixa em baixo. Mas esta (como podem verificar) encontrava-se bloqueada, vejam na imagem:

 

A segunda opção foi modificar esta vista e colocar mais um critério que seria o produto estar activo. Para isso teremos que ir a entidade produto e escolher a vista, infelizmente não é possível editar os critérios de pesquisa, veja na imagem:

Mais uma vez a solução não poderá ser aplicada. Tinha na manga uma última solução, para isso teria que recorrer ao Javascript.

O objectivo será adicionarmos uma nova vista por intermédio do Javascript com os critérios que queremos e depois colocar essa vista como defeito, já que não conseguimos seleccionar a vista.

 

O primeiro passo é criar este filtro no Advanced Find:

Quando abrimos o XML temos este aspecto: 

<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false">
  <entity name="product">
    <attribute name="name" />
    <attribute name="productnumber" />
    <attribute name="ret_codigofinanceiro" />
    <attribute name="productid" />
    <order attribute="name" descending="false" />
    <filter type="and">
      <condition attribute="statecode" operator="eq" value="0" />
    </filter>
  </entity>
</fetch>

 

De seguida temos que definir qual o layout da nossa vista:

<grid name='resultset' object='1' jump='name' select='1' icon='1' preview='1'>
  <row name='result' id='productid'>
    <cell name='name' width='300' />
    <cell name='productnumber' width='100' />
    <cell name='ret_codigofinanceiro' width='100' />
  </row>
</grid>

 

Agora teremos que aplicar dois métodos que nos vai possibilitar inserir a vista e coloca-la como a vista por defeito.

Para adicionar uma nova vista utilizamos a função addCustomView que tem a seguinte assinatura:

controlObj.addCustomView(viewId, entityName, viewDisplayName, fetchXml, layoutXml, isDefault)

 

Vejam aqui mais detalhes sobre esta função.

Para colocar esta vista como a vista por defeito teremos que utilizar a função setDefaultView (já agora para podermos obter a vista por defeito temos a função getDefaultView) com a seguinte assinatura:

controlObj.setDefaultView(viewGuid)

 

Vejam aqui mais detalhes.

Vejam a seguir todo o código:

NOTA: Quando vamos colocar o FetchXML em código Javascript devemos substituir as aspas por plicas:

 

var fetchXml = "<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>" +
                        "<entity name='product'>" +
                            "<attribute name='name' />" +
                            "<attribute name='productnumber' />" +
                            "<attribute name='ret_codigofinanceiro' />" +
                            "<attribute name='productid' /> " +
                            "<order attribute='name' descending='false' />" +
                            "<filter type='and'>" +
                                "<condition attribute='statecode' operator='eq' value='0' />" +
                            "</filter>" +
                        "</entity>" +
                   "</fetch>";
 
var layoutXml = "<grid name='resultset' object='1' jump='name' select='1' icon='1' preview='1'>" +
                        "<row name='result' id='productid'>" +
                            "<cell name='name' width='300' />" +
                            "<cell name='productnumber' width='100' />" +
                            "<cell name='ret_codigofinanceiro' width='100' />" +
                        "</row>" +
                    "</grid>";
 
var viewId = "{1DFB2B35-B07C-44D1-868D-258DEEAB88E2}";
var entityName = "product";
var viewDisplayName = "Produtos Activos";
 
Xrm.Page.getControl("productid").addCustomView(viewId, entityName, viewDisplayName, fetchXml, layoutXml, true);
Xrm.Page.getControl("productid").setDefaultView(viewId);

 

NOTA: Esta abordagem pode ser reutilizada em outras situações, imaginem que podem por exemplo filtrar um lookup com base noutro valor do formulário. Para isso bastava por exemplo no FetchXml substituir o 0 por uma expressão válida.

 

Até aqui tudo bem o problema é que a história não terminou por aqui, como no lookup a seleção da vista está desativa o código acima não vai fazer nada, porque o controlo está disabled. A solução passa por habilitar este campo momentaneamente e executar o nosso código e coloca-la novamente no seu estado anterior.

Para isso recorri ao jQuery para realizar esta operação. Não se esqueçam que têm que adicionar a biblioteca do jQuery como WebResource e depois referenciá-la no formulário, há tempos escrevi um post de como adicionar esta e outras bibliotecas, vejam aqui.

Complementem o código anterior com isto:

 

//…
//o mesmo código
 
$("#productid").attr("disableViewPicker", "0");
Xrm.Page.getControl("productid").addCustomView(viewId, entityName, viewDisplayName, fetchXml, layoutXml, true);
Xrm.Page.getControl("productid").setDefaultView(viewId);
$("#productid").attr("disableViewPicker", "1");

 

Para finalizar pegamos no código completo e colocámos o mesmo dentro de uma função de depois dentro de um WebResource. Nas propriedades do formulário (que contém o lookup) acrescentamos este WebResource e depois adicionamos um novo processamento no evento OnLoad do formulário para executar o método.

Até a próxima.

Tags: , , ,

eXtreme CRM 2013 Roma

by Pedro Azevedo 9. February 2013 00:38

Boas pessoal,

Estou aqui com um post rápido porque infelizmente as informações não foram muitas do evento eXtreme CRM e se não fosse o Jukka Niiranen e ainda tinha sido pior. Lá estou eu a reclamar Cool.

Decorreu entre os dias 3 e 6 de Fevereiro o eXtreme CRM 2013 em Roma. Para além dos habituais roadmaps, fica uma coisa a reter o release apelidado por Orion afinal não vai ser uma major release como o Polaris, será uma nova versão em princípio será o Microsoft Dynamics 2013. Nesta nova versão será o fim dos chamados “classic forms”, ou seja, vamos ter o ambiente flat para todas as entidades.

Outra das novidades foi a introdução de mais um release com o nome Gemini que trará novidades ao nível do Marketing e será consequência da aquisição da empresa Marketing Pilot. Este release está programado para sair no segundo trimestre de 2013.

Pelo que percebi será uma aplicação a parte mas com integração com o Dynamics CRM.

Para além do Gemini existe outra constelação a chegar (sim todos estes nomes têm surgido de constelações) é o Leo que está programado para o final de 2013.

 

Até a próxima

 

Fonte:

http://niiranen.eu/crm/2013/02/extreme-crm-2013-rome-takeaways/

http://blog.dorrekens.com/index.php/list/155-microsoft-crm-2013-roadmap

Tags: , , , ,

Roadmap CRM Dynamics - Polaris e Orion

by Pedro Azevedo 14. January 2013 01:59

 Boas pessoal,

Como sabem a tecnologia muda todos os dias e no mundo Microsoft Dynamics CRM não é diferente. Neste pouco tempo que tenho de Dynamics CRM descobri dois eventos onde se fala sobre o futuro deste produto. Estes eventos são o Convergence e o eXtreme CRM. Gostava de um dia poder participar num deles enquanto não acontece sigo estes eventos online e pelo twitter.

Hoje vou falar sobre o actual roadmap do Dynamics CRM e avizinha-se para breve grandes novidades. A seguir vou apresentar os dois próximos major releases e que foram falados no eXtremeCRM 2012 que decorreu entre 30 de Setembro e 3 de Outubro de 2012 e também tendo como base o release preview da Microsoft.

No total existem 4 major releases para sair, Polaris que deve sair ainda este mês, e depois o “Orion”, “Leo” e “Vega”. Hoje o grande foco será o próximo major release (Polaris) e vamos falar um pouco do Orion.

Polaris (2012 Q4)

Até a data este major release ainda não foi lançado mas por alguns anúncios estará para breve, até lá vamos dar uma olhadela para o que se fala sobre o Polaris. A seguir está uma imagem que resume as novas funcionalidades que o Dynamics CRM vai ter:

 

Novo interface

A Microsoft irá apresentar um novo interface, pelo que percebi em apenas algumas entidades, nomeadamente nas entidades Lead, Oportunidade e Incidente. Será uma interface flat, se vocês repararem nas duas imagens a baixo, não tem a imagem do controlo desenhado, parece que é tudo label.

 

Se repararem apenas quando seleccionamos o campo é que o desenho do controlo é mostrado.

 

Outra coisa a notar é a barra que aparece nas duas imagens no topo do formulário. Esta nova funcionalidade é algo que me parece muito interessante e como no documento diz permite guiar o utilizador pelas várias fases numa entidade, tendo debaixo da barra quais os principais passos dessa fase. Como podemos constatar na imagem em baixo, temos a configuração das várias fases que a oportunidade tem:

 

Em resumo e apesar de achar que a UI fica mais limpa e atractiva penso que poderá causar alguma estranheza aos utilizadores principalmente a utilizadores mas habituados a distinguir entre um formulário de edição e de leitura.

Mas esta funcionalidade poderá ser desfeita podendo voltar para os menus antigos conhecidos como “Classic Forms”.

Integração com produtos Microsoft

Uma das grandes vantagens que a Microsoft “vende” é ter uma grande integração e um look-and-feel semelhante entre as várias aplicações. O mesmo vai acontecer por exemplo com o Yammer.

Yammer

Desconhecia completamente e passou para mim a ser uma ferramenta muito interessante e aconselhável, resumindo é uma plataforma social empresarial, uma excelente ferramenta colaborativa e que pode ficar associado a um, negócio em específico. Aqui pode surgir posts\conversas entre colegas ou com clientes.

Skype & Lync

Em relação ao Skype uma interligação directa nos formulários, possibilitando uma chamada apenas com um click (a semelhança do que acontece com o Lync). Neste momento ainda é necessário que o Skype esteja instalado mas está previsto que tal não seja necessário.

Office 2013 e Bing Maps

Compatibilidade multi-browser

Esta feature pelo que tenho lido já deveria ter sido lançada em Julho de 2012 e vai permitir usar mais browsers para além do Internet Explorer. Apresento a seguir os browsers suportados de referir a utilização no iPad.

 

Esta feature vai ser uma grande mais-valia para este produto.

 

Todas estas novidades estarão disponíveis no CRM Online, existem algumas dúvidas no on-premise mas que pelo menos está prometido a parte do multi-browser.

Importante dizer também que existe uma maior aproximação e uniformização entre o que fazemos no on-premise e no online já que vão ser introduzidos Custom Assembly e Custom Workflow.

Orion (2013 Q2)

Outro major release que está planeado para o segundo trimestre de 2013 ainda não existem muitos detalhes, mas ficam aqui quatro pontos:

  • Windows 8 UI – que vai ser a base para aplicações entre dispositivos
  • Exchange Sync – melhorias no CRM Outlook
  • Office 2013 “Productivity” – Melhoria da compatibilidade
  • Colaboração social com o Yammer

 

Até a próxima

 

Fontes:

http://crmhobbit.wordpress.com/2012/10/04/extremecrm-recap-day-2-or-whats-in-the-crm-roadmap/

http://niiranen.eu/crm/2012/10/future-stars-dynamics-crm-roadmap-news-from-las-vegas/

http://blog.customereffective.com/blog/2012/10/microsoft-dynamics-crm-roadmap-update-from-extreme-crm-2012.html

Tags: , , , , , ,

Biblioteca XrmServiceToolkit

by Pedro Azevedo 5. January 2013 23:17

Boas pessoal,

Hoje queria ressalvar um grande projeto oferecido a comunidade. É a biblioteca XrmServiceToolkit que podemos fazer download daqui: https://xrmservicetoolkit.codeplex.com/.

Esta biblioteca que tem um ficheiro único XrmServiceToolkit.js e basta colocar como Recurso Web. Nela temos funções genéricas, SOAP ou REST e que esconde toda a construção destas chamadas e que ajuda muito especialmente em requisições SOAP. Existe também os chamados métodos extendidos que permite por exemplo trabalhar com OptionSet dependentes.

Temos a possibilidade de fazermos estas chamadas síncronas ou assíncronas. Para além de suportar qualquer deploy do Dynamics CRM 2011 (On-Prem; IFD e Online)

Em resumo um espectáculo e mais qualquer alteração por exemplo na questão de suportar outros browsers e não podermos usar esta declaração var xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"), esta biblioteca foi logo atualizada por isso só mudou um sitio.

 

Esta biblioteca depende de outras duas bibliotecas jQuery e JSON. Vocês podem ver as versões necessárias no site que referi.

Exemplo funções genéricas:

XrmServiceToolkit.Common.enableField(fieldName);

Exemplo Actualizar REST:

var account = {};
account.Name = "My Name";
account.Address1_City = "Lisboa";
account.Address1_Line1 = "Minha Rua";
account.EMailAddress1 = "psa@psazevedo.com";

XrmServiceToolkit.Rest.Update(
	accountId,
	account,
	"AccountSet",
	function () {
		alert("Foi atualizado");
	},
	function (error) {
		alert("ups... Erro")
	},
	false
);


Exemplo Retorno Múltiplo em REST:

XrmServiceToolkit.Rest.RetrieveMultiple(
    "ContactSet",
    "$select=ContactId, FullName",
    function (results) {
        alert(results.length);
        var fullname = results[0].FullName;
        alert(fullname);
    },
    function (error) {
        alert(error)
    },
    function onComplete() {
        alert('completed')
    },
    false
);

Exemplo Criação em SOAP:

var createContact = new XrmServiceToolkit.Soap.BusinessEntity("contact");
createContact.attributes["firstname"] = "Pedro";
createContact.attributes["lastname"] = "Azevedo";
createContact.attributes["gendercode"] = { value: 2, type: "OptionSetValue" };
createContact.attributes["birthdate"] = birthDate;
createContact.attributes["donotemail"] = true;
createContact.attributes["donotphone"] = false;
createContact.attributes["parentcustomerid"] = { id: accountId, logicalName: "account", type: "EntityReference" };
contactId = XrmServiceToolkit.Soap.Create(createContact);

Exemplo Pesquisa pelo ID:

var contactid = Xrm.Page.getAttribute("primarycontactid").getValue()[0].id;
var cols = ["firstname", "lastname", "middlename", "familystatuscode"];
var retrievedContact = XrmServiceToolkit.Soap.Retrieve("contact", contactid, cols);
alert(retrievedContact.attributes['lastname'].value);

Aproveitem estas benesses que a comunidade nos dá. Futuramente irei falar de outras bilbliotecas\ferramentas para nos auxiliar no dia-a-dia. Um bem haja ao Jaimie.

Até a próxima

Tags: , , , ,

Ativar o trace no Dynamics CRM

by Pedro Azevedo 21. December 2012 03:36

Boas pessoal,

Uma das primeiras coisas que aprendi quando comecei a mexer no Dynamics CRM foi ativar o trace, para controlar erros que não se apanham na interface gráfica e para ver detalhes de erros reportados pelos utilizadores.

Trace CRM Dynamics

Para ativar o trace “basta” ir ao registry e mudar uma chave. O caminho do registry é este: HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\MSCRM e muda-se a chave TraceEnabled para 1. Quando é activado os logs vão para esta diretoria: C:\Program Files\Microsoft Dynamics CRM\Trace.

 

Costumo utilizar uma ferramenta para gerir estes logs: https://crmdiagtool2011.codeplex.com/. Lanço aqui um alerta para termos cuidado com o crescimento dos logs no disco. Se deixarmos muito tempo pode assumir rapidamente alguns GBs.

Event Viewer

Outro sítio onde costumo controlar erros que acontecem no CRM é no Event Viewer vejam aqui um exemplo.

 

Existem outros logs, que são "automáticos" pelos menos por defeito. Aqui vão a localização destes mesmos logs:

Reporting Services

%programfiles%\Microsoft SQL Server\MSRS10_50.(INSTANCENAME)\Reporting Services\LogFiles

Outlook

Outlook (Máquina do cliente) ou Logs de Instalação: Users\<User>\AppData\Roaming\Microsoft\MSCRM\Logs (Por vezes em alguma máquinas em vez de Roaming é Local penso que tenha a ver com a versão do windows):

 

PS: Tenciono melhorar este post com os logs de instalação, outlook, etc.

Email Router

Para o email router temos que ir a pasta de instalação C:\Program Files\Microsoft CRM Email\Service teremos que encontrar um ficheiro Microsoft.CRM.Tools.EmailAgent.xml. Dentro deste ficheiro temos o seguinte código:

<ConfigUpdatePeriod>3600000</ConfigUpdatePeriod>
<LogLevel>1</LogLevel>
<LogFile></LogFile>

Dentro deste XML colocamos colocamos o LogLevel a 3 e colocarmos um caminho para o log, por exemplo: C:\Program Files\Microsoft CRM Email\Setup\log.txt

 

Até a próxima.

Tags: , , ,

Como evitar os alertas de emails pendentes

by Pedro Azevedo 13. December 2012 08:49

Boas pessoal,

Se você abre o CRM recebe um alerta a dizer que o tem “Emails Pendentes” e como eu passado alguns logins fica farto de fechar esse alerta, veja aqui alguma soluções.

Primeiro vamos analisar o porquê disto acontecer, bem como a mensagem diz existem emails pendentes para serem enviados e aonde podemos ver esses emails?

Se forem as Definições, dentro do sistema visualizarem as tarefas de sistema. Aqui podemos mudar a vista para visualizarmos as tarefas suspensas e aqui devem ver os tais emails pendentes que por alguma razão obscura foram adiados para 30-12-9999, sobre estes emails podemos retomar ou cancelar.

Mas se você não se quiser preocupar mais com esta mensagem podemos prevenir que o CRM mesmo que aja estes emails não mostre esta mensagem, primeira solução modificar uma chave no registry.

Dentro do caminho HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSCRM criar a chave DisablePendingEmailReminder do tipo DWORD e com o valor 1.

Outra solução é através do URL saltar o alerta:

On-Premise

http://contoso:5555/{Organization Name}/main.aspx?skipNotification=1

Claims-Based (IFD)

https://{Organization Name}.contoso.com:5556/main.aspx?skipNotification=1

Online

https://{Organization Name}.crm.dynamics.com/main.aspx?skipNotification=1

 

Até a próxima

 

Referências:

http://blog.cajunmchicken.com/2011/07/crm-2011-remove-pending-e-mail-warning.html

http://quantusdynamics.blogspot.pt/2012/06/dynamics-crm-2011-disable-pending-email.html

Tags: ,

O meu primeiro Post

by Pedro Azevedo 5. December 2012 01:43

Olá, este é o meu primeiro post neste fantástico blog. Este blog será inteiramente dedicado a plataforma Microsoft Dynamics CRM, nomeadamente nas versões 4.0, 2011 e Online. Tenho intervenções noutras tecnologias mas estas serão relatadas no meu site pessoal www.psazevedo.com onde estão todas as minha aventuras nas várias tecnologias da Microsoft, por exemplo como foi a escolha do motor deste blog.

 

Já ando no mundo do trabalho há 9 anos e nestes anos trabalhei quase unicamente com tecnologias da Microsoft desde a versão .Net 1.0. Desktop, mobile e aplicações Web, passei por tudo. Quantas vezes desenvolvi coisas para tratar informações sobre clientes, sejam contactos, propostas, vendas e na penúltima experiência implementação de um pipeline de vendas. Nunca tinha pensado que estava a implementar partes de um CRM, fazia parte de desenvolvimentos "normais".

 

Na minha e actual experiência surgiu a possibilidade de trabalhar com o Microsoft CRM Dynamics, uma plataforma que ignorava pois pensava que era tudo muito estático e tínhamo-nos limitar ao que estava implementado, nada mais errado e vou prová-lo com este blog. Comecei a estudar a versão 3.0 mas nunca cheguei a implementar nada nesta versão, neste momento estou a trabalhar sobre a versão 4.0 e a preparar a migração para a versão 2011.

 

Sempre senti falta de ajudar mais a comunidade mas nunca tinha surgido o assunto e o timing certo, mas parece que agora é de vez, primeiro com a criação deste blog e do meu site pessoal, participação nos vários fóruns de discussão da Microsoft, e colaborar com todas as comunidades em Portugal, por exemplo fazendo apresentações e artigos.

 

Numa pesquisa feita reparei que não existe muita participação dos programadores e empresas portuguesas que estejam a trabalhar com esta tecnologia, então o meu objectivo é falar mais sobre esta plataforma e tentar motivar outros profissionais e quem sabe formar uma comunidade, se alguma vez se concretizar seria interessante formar uma comunidade Dynamics com todos os produtos desta gama: CRM; ERP(NAV, AX, SL e GP).

 

Espero contribuir e aprender com todos.

Tags:

Pessoal

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