Novidades sobre UR12 e Polaris

by Pedro Azevedo 22. February 2013 01:43

 

Boas Pessoal,

Hoje venho falar de mais recente rollup este é um major release apelidado de Polaris, vem ultrapassar uma das grandes queixas dos utilizadores e das equipas de TI era a necessidade de utilização do Internet Explorer. Vem ultrapassar esta dificuldade mas na minha opinião vem criar uma entropia com a mudança de alguns formulários, tais como, Clientes Potenciais, Contactos, Contas, Oportunidades e Incidentes.

A disponibilização deste rollup não foi fácil com uma primeira saída (10 de Janeiro) a não correr bem tendo sido retirado e ter que esperar mais algum tempo (29 de Janeiro) para podermos usar a nova versão no ambiente on-premise pois na versão online foi colocada em 21 de Janeiro.

Os browsers que vão passar a ser compatíveis são: Firefox, Chrome e Safari no Mac. Para além de suportar múltiplos browsers e da nova interface também traz como novidades ao nível do suporte para o Office 2013, integração nativa com skype (parece ser a ferramenta de eleição para comunicação) e mapas do bing.

Para saber todas as novidades do Polaris sugiro vivamente a ver os slides do Jukka Niiranen.

Existe uma diferença que eu gostava de esclarecer e que para mim também foi confuso, Polaris e UR12, pode parecer a mesma coisa mas não é, pois o Polaris é o nome do novo release para o CRM Online e o UR12 é o novo update rollup do CRM 2011. Aliás o “único” ponto em comum será a compatibilidade multi-browser.

Comparando com o que tinha sido previsto deixou-se cair a compatibilidade com iPad e adicionou-se a compatibilidade com o Windows 8.1:

 

E o que muda para nós programadores, MUITO. Para garantirmos a compatibilidade entre browsers temos que esquecer definitivamente a utilização do object model do javascript para o CRM 4.0 bem como a chamada SOAP feitas com ActiveXObject. Para validar este tipo de código podemos recorrer a esta ferramenta.

Existem também várias limitações nos novos formulários do UR12 já que por exemplo a impossibilidade de usar Javascript neste novos formulários. Uma das alternativas é voltar aos classic forms, veja aqui como. Para ver a totalidade de limitações pode ver neste blog.

Este rollup está disponível aqui sendo que este é o KB.

 

Até a próxima

 

Fontes:

http://niiranen.eu/crm/2013/01/whats-new-in-microsoft-dynamics-crm-polaris-release-slides/

http://blogs.msdn.com/b/crminthefield/archive/2013/01/29/podcast-and-overview-microsoft-dynamics-crm-2011-update-rollup-12.aspx

http://support.microsoft.com/kb/2784954

https://community.dynamics.com/crm/b/mscrmshop/archive/2013/03/15/how-to-switch-between-classic-and-new-process-flow-forms-in-crm-polaris.aspx

Tags: , , ,

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: , , , ,

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