Esconder botão dinâmicamente ribbon ou barra de comandos

by Pedro Azevedo 19. February 2014 23:30

Boas Pessoal,

Já queria fazer este post há muito tempo, mas fui adiando e nunca cheguei a criar sobre a versão CRM 2011. Por isso estou agora a fazê-lo sobre a versão CRM 2013 mas é similar a anterior, por isso poderão aplicar os mesmos conceitos sobre o CRM 2011.

Criei neste momento por causa de uma dúvida nos fóruns do MSDN, em que se quer inibir a criação de uma encomenda numa proposta. Neste caso o critério é que a razão de estado da oportunidade esteja preenchida e tem como requisito que seja feito via Javascript e não por plugin.

Para além de responder a questão do fórum este post tem como objetivo de ser um manual genérico para desabilitar um botão dinamicamente.

Bom o primeiro requisito é instalar esta ferramenta que podem ver aqui um pequeno manual.

A primeira coisa a fazer é criar uma solução que tenha a entidade Proposta (quote), depois desta solução criada teremos que fazer load dela na Ribbon Workbench e terá um layout deste género:

 

O que nós queremos é o botão que temos selecionado “Create Order” estar visível apenas quando uma determinada função Javascript retornar true. Para isso sobre este botão “Create Order” e com o botão direito do rato, carregar “Customise Button”, quando fazemos isto ele deve acrescentar o comando de criar encomenda na tab “Solution Elements”:

Para já aqui é tudo, voltamos mais a frente. Agora vamos criar uma regra de enable, na entrada “Enable Rules” escolham “Add New”:

 

Ele cria uma nova entrada, se quiserem podem modificar o nome, sobre esta nova entrada carreguem em “Add Rule”:

 

Com isto deve aparecer uma lista de regras que podemos aplicar, no nosso caso será uma regra de Javascript.

 

Depois de confirmarmos que queremos uma regra de Javascript, basta dizer qual a função a ser chamada e sobre qual o recurso web queremos aplicar.

Como podem comprovar vou chamar a função Javascript enablequotebutton do recurso web que especifiquei, este recurso web terá que estar na solução que carregamos dentro da ferramenta, neste caso na solução TesteRibbon.

O código presente neste webresource é o seguinte:

function enablequotebutton(){
  LoadWebResource('new_json');
  LoadWebResource('new_jquery');
  LoadWebResource('new_xrmservicetoolkit');
 
  var opId = Xrm.Page.getAttribute("opportunityid").getValue()[0].id;
  var cols = ["statuscode"];
  var retrievedOpportunity = XrmServiceToolkit.Soap.Retrieve("opportunity", opId, cols);

  if(retrievedOpportunity.attributes["statuscode"].value != 1){
    return true;
  }
  else{
    return false;
  }
}

function LoadWebResource(resource) {
  httpRequest = new XMLHttpRequest();
  httpRequest.open("GET", "/webresources/" + resource, false);
  httpRequest.send(null);
  try
    {
      eval(httpRequest.responseText); 
    }
    catch (e)
    {
      alert("Erro");
    }
}

Como podem ver no troço de código anterior estou a utilizar uma função auxiliar para poder carregar bibliotecas Javascript, pois estou a utilizar a biblioteca XrmServiceToolkit para poder ir buscar propriedades da oportunidade associada a proposta.

Depois disto não esqueçam de publicar a solução na Ribbon Workbench.

Até a próxima.

Tags: , , , , ,

Ferramenta - Site Map Editor

by Pedro Azevedo 12. February 2014 23:47

 Boas pessoal,

Continuando a série sobre ferramentas, esta ferramenta permite editar o site map. Bom no CRM 2011 permitia mexer no menu a esquerda, no CRM 2013 serve para editar a Barra de Navegação. Eu vou demonstrar sobre a versão CRM 2013 mas é similar para a versão do CRM 2011.

A ferramenta que utilizo realizada pela Microsoft foi retirada do Pinpoint. Por isso o nosso amigo Scott Durow disponibilizou noutro sítio.

Depois de fazerem download da solução e a instalarem, terão esta entrada nas várias soluções:

Ao abrirmos esta solução, ele vai abrir no modo configuração e aparecer a página que permite editarmos o site map.

Aqui podemos adicionar\eliminar áreas, grupos e os próprios elementos aqui designados como subarea. Basicamente são os três botões mais a direita. O botão de save permite guardar as configurações mas não publica as alterações, por isso teremos que publicar todas as customizações. Outra funcionalidade que podermos reorganizar os vários elementos com um simples drag na drop.

Sobre cada elemento temos várias opções:

 

Aqui configuramos as áreas, em que costumamos a ter as áreas de Vendas, Marketing, Serviço, Definições e o Help. Ou seja são as seguintes áreas:

A seguir podemos definir as propriedades do grupo:

 

Podemos ver o grupo do MyWork (em português “O Meu Trabalho”):

Vejam que os vários elementos estão agrupados em grupos e tem o tútulo que configuramos. Podemos ver o outro grupo que é o grupo “Clientes”.

A seguir podemos ver os elementos em concreto:

 

 

Aqui temos mais opções para configurar, mas penso que todos intuitivos.

E é isto uma ferramenta simples mas muito útil. Existe pelo menos mais uma alternativa que ainda não explorei mas prometo que vou explorar e digo-vos alguma coisa. A alternativa está dentro de um conjunto de ferramentas muito poderosa que é a XRMToolbox. Eu já uso algumas destas ferramentas, muito úteis. Mas com certeza será o meu próximo alvo de análise.

Até a próxima.

Tags: , , ,

CRM 2013 - Javascript Object Model

by Pedro Azevedo 8. February 2014 00:55

Boas pessoal,

O “object model” do Javascript permite-nos aceder aos elementos de um formulário do CRM, efectuar chamadas a API do CRM, etc. Desde o CRM 4.0 com o crmForm até ao mais recente Xrm que apareceu com o CRM 2011. O CRM 2011 (até ao UR12) ainda suportava a biblioteca do CRM 4.0 mas com o CRM 2013 essa compatibilidade foi totalmente quebrada, suportando tudo o que derivou do Xrm do CRM 2011.

Neste vídeo está um resumo muito bom do novo object model e de onde tirei a imagem a seguir:

Como nunca tinha feito um post completo de métodos Javascript, apenas falei esporadicamente, vou agora colocar alguns dos métodos que temos disponíveis desde o CRM 2011 e vou realçar as novidades no CRM 2013.

A biblioteca Xrm como vimos na imagem anterior é dividida em vários “namespaces”:

Xrm.Utility

alertDialog (CRM 2013)

Lança caixa de diálogo com uma mensagem

confirmDialog (CRM 2013)

Lança caixa de diálogo de confirmação com uma mensagem e dois botões. OK e Cancel

isActivityType (CRM 2013)

Determina se uma entidade é uma actividade

openEntityForm

Abre um formulário de uma entidade

openWebResource

Abre um Recurso Web HTML

openWebResourceDialog (CRM 2013)

Abre um Recurso Web específico com uma janela de diálogo. Esta função ainda não está disponível.

Xrm.Page.data

getIsValid (CRM 2013)

Realiza uma validação dos dados presentes no formulário

refresh (CRM 2013)

Permite a refrescamento dos dados do formulário sem que ocorra um refrescamento de toda a página.

save (CRM 2013)

Guarda os dados do formulário.

Xrm.Page.data.entity

addOnSave

Adiciona uma função a ser chamada quando um registo é gravado

getDataXml

Retorna um XML numa string que vai será enviada para o servidor quando um registo é gravado

getEntityName

Retorna o nome da entidade do registo

getId

Retorna o ID (guid) do registo

getIsDirty

Verifica se mexemos em algum dos campos do formulário

getPrimaryAttributeValue (CRM 2013)

Retorna o valor do atributo primário da entidade

removeOnSave

Remove a função que é chamada quando o registo é gravado

save

Guarda o registo com as opções de fechar ou novo

setFormDirty (CRM 2013)

Coloca o formulário dirty para forçar a gravação do formulário

Xrm.Page.context

client.getClient (CRM 2013)

Retorna qual o tipo de cliente que está a correr, outlook, web ou móvel

client.getClientState (CRM 2013)

Retona qual o estado do cliente se está online ou offline.

getClientUrl

Retorna o URL base usado para aceder a aplicação

getCurrentTheme

Qual o “theme” corrente no Microsoft Office Outlook

getOrgLcid

Retorna o LCID da linguagem base da organização

getOrgUniqueName

Retorna o nome da organização

getQueryStringParameters

Retorna um dicionário chave-valor que representa querystring passada a página.

getUserId

Retorna o ID (guid) do utilizador actual

getUserLcid

Retorna o LCID da linguagem escolhida pelo utilizador com linguagem preferida

getUserName (CRM 2013)

Retorna o nome do utilizador actual

getUserRoles

Retorna um array de IDs com as regras de segurança associadas ao utilizador

prependOrgName

Coloca o nome da organização no inicio de um caminho

Xrm.Page.ui

close

Fecha o formulário

formSelector.getCurrentItem

Retorna uma referência para o formulário activo

formSelector.items

Mostra todos os formulários disponíveis para o utilizador actual

getViewPortHeight

Altura do viewport em pixéis

getViewPortWidth

Largura do viewport em pixéis

getCurrentControl

Retorna o controlo que tem actualmente o focus

getFormType

Qual o contexto do formulário

navigation.items

Retorna todos os itens de navegação da página

setFormNotification (CRM 2013)

Coloca notificações no topo do formulário

clearFormNotification (CRM 2013)

Limpa notificações do formulário

refreshRibbon (CRM 2013)

Actualiza a ribbon

Collections

Xrm.Page.data.entity.attributes

Atributos numa página

Xrm.Page.ui.controls

Todos os controlos

Xrm.Page.ui.formSelector.items

Todos os formulários disponíveis para o utilizador

Xrm.Page.ui.navigation.items

Todos os items de navegação do formulário

Xrm.Page.ui.tabs

Todos os tabs de uma página

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

Todos os controlos para um atributo

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

Todas as secções de um tab

Xrm.Page.ui.Section.controls

Todos os controlos de uma secção

Xrm.Page.getAttribute(“…”) ou Xrm.Page.data.entity.attributes

getAttributeType

Retorna o tipo de atributo

getFormat

Retorna o formato do atributo

getIsDirty

Se o atributo mudou depois da última gravação

getIsPartyList

Se um lookup é uma partylist

getMaxLength

Retorna o tamanho máximo de uma string que o atributo suporta

getName

Retorna o nome do atributo

getParent

Obter uma referência para o objecto Xrm.Page.data.entity que é pai de todos os atributos

getRequiredLevel

Se este atributo é obrigatório ou recomendado

getSubmitMode

Obtém como é que atributo vai ser submetido na gravação

getUserPrivilege

Previlégios de um utilizador usando o Field Level Security

getValue

Retorna o valor de um atributo

setValue

Afecta um atributo com um valor

setRequiredLevel

Afecta o nível de obrigatoriedade de um atributo

setSubmitMode

Como se vai comportar o atributo quando o registo for gravado

getMax

Retorna o máximo valor para o atributo

getMin

Retorna o mínimo valor para o atributo

getPrecision

Retorna as casas decimais

setPrecision (CRM 2013)

Faz override do número de casas decimais

Xrm.Page.getControl(“…”) ou Xrm.Page.ui.controls.get

getAttribute

Retorna o atributo que está associado ao controlo

getControlType

Retorna o tipo de controlo

getDisabled

Verifica se o controlo está disabled

setDisabled

Coloca um controlo disabled

getLabel

Retorna a label do controlo

setLabel

Coloca uma label num controlo

getName

Obtém o nome do controlo

getParent

Retorna a secção que o controlo está dentro

getVisible

Verifica se um controlo está visível ou não

setVisible

Coloca um controlo visível ou invisível

setFocus

Coloca o focus num determinado controlo

setNotification

Mostra uma mensagem ao nível do controlo. Para além de algum aviso de dados poderá ser utilizado como uma tooltip customizada

clearNotification (CRM 2013)

Limpa mensagens ao nível do controlo

Lookup Controls

addCustomFilter (CRM 2013)

Utiliza FetchXml para adicionar filtros adicionais a um controlo lookup

addCustomView

Adiciona uma nova vista a caixa de diálogo de um lookup

addPreSearch (CRM 2013)

Aplica uma função para filtrar o controlo lookup antes do popup abrir

getDefaultView

Retorna o ID da vista que está por defeito na caixa de diálogo de um lookup

setDefaultView

Afecta a vista por defeito na caixa de diálogo de um lookup

removePreSearch (CRM 2013)

Retira a função de filtragem dos controlos lookup

OptionSet

getInitialValue

Retorna o valor que uma caixa de selecção ou um booleano tem aquando da abertura do formulário

getOption[s]

Retorna uma ou mais opções

getSelectedOption

Obtém a opção que está seleccionada

getText

Retorna o texto de uma opção seleccionada

addoption

Adiciona uma opção

removeOption

Remove uma opção

clearOptions

Limpa todas as opções

IFRAME and Web Resource Controls

getData

Retorna a querystring passado a um Recurso Web Silverlight

setData

Atribuir valor a querystring de um Recurso Web Silverlight

getInitialUrl

Retorna o URL por defeito que um controlo iFrame é configurado

getObject

Retorna o objecto que representa um iFrame ou Recurso Web

getSrc

Retorna o URL que vai ser mostrado num iFrame ou Recurso Web

setSrc

Coloca um URL para mostrar num iFrame ou Recurso Web

Sub-Grid Control

refresh

Refresca os dados mostrados num SubGrid

OnChange Event

addOnChange

Adiciona uma função a ser chamada quando um atributo é modificado

removeOnChange

Remove a função que iria ser chamada quando um atributo é modificado

fireOnChange

Causa a chamada ao evento OnChange

Datetime Controls

setIsAllDay (CRM 2013)

 

setShowTime (CRM 2013)

Especifica se um controlo de data mostra a componente tempo ou não

Ficou então uma referência rápida, em futuros posts espero falar de alguns destes métodos com exemplos concretos.

 

Até a próxima

Tags:

CRM 2013 - Gestão dos Formulários de Criação Rápida

by Pedro Azevedo 2. February 2014 15:53

Boas pessoal,

Depois de vermos como funcionam os formulários de criação rápida vamos agora ver em concreto como é que estes formulários são criados e como os podemos configurar.

Como foi dito no post anterior algumas entidades (tirando algumas entidades para suporte interno e as actividades onde se inclui as actividades customizadas) podem ter um formulário criação rápida, para comprovar vamos habilitar a entidade Campanha para ter formulário de criação rápida. Para isso nas configurações da entidade temos o setting “Permitir criação rápida” para permitir a criação rápida:

 

Se voltarmos a barra de navegação não vamos ver a entrada para a campanha, isto porque apesar de dizermos que permitimos a criação rápida ainda falta configurar esse formulário. Para criarmos um formulário de criação rápida vamos aos formulários e criamos um formulário deste tipo:

 De seguida aparece-me um formulário para eu poder colocar campos existentes, o layout deste formulário está estabelecido e não dá para modificar, nem para adicionar novas secções por exemplo:

Não sei se repararam mas eu deixei o tabulador no “Inserir” de propósito para vermos que para além do layout, não podemos inserir iFrames, Recursos Web ou Sub-Grids.

Depois de gravarmos o formulário e publicarmos já podemos criar uma campanha rápida:

Se seleccionarmos a campanha ele vai aparecer o formulário que nós configuramos, mas ao gravarmos este mesmo formulário ele dá um erro de SQL Server, um erro que não é nada perceptível. Mas o erro foi propositado, o erro é porque eu não adicionei ao formulário de criação rápida os campos obrigatórios.

 Para resolver voltei a configuração do formulário e adicionei o campo obrigatório neste caso seria o nome. Depois de adicionar esse campo já consegui criar uma campanha através do formulário rápido.

Vamos experimentar outra situação que é criar um outro formulário de criação rápida, ao contrário do que acontece com os formulários principais não podemos associar perfis de segurança, por essa razão ele vai mostrar sempre o primeiro que criamos para mostrarmos por exemplo o segundo que criamos teremos que utilizar a funcionalidade “Ordenar Formulário” e escolher a opção de “Definir Formulário de Criação Rápida”.

 

Ak

Um funcionalidade simples e que vai dar muito útil.

 

Até a próxima.

Tags: , ,

CRM 2011 - UR16

by Pedro Azevedo 23. January 2014 22:10

 

Boas pessoal,

Está disponível o Update Rollup 16, podem descarregar aqui. Todas as informações estão disponíveis aqui com todos os dados e novidades.

Este é mais um update que apenas trás resoluções de issues, mas trata-se de um grande número de resoluções, cerca de 140 uma grande percentagem sobre o cliente Outlook. Isto depois de uma grande melhoria trazida no UR15.

Até a próxima.

Tags: , , ,

CRM 2013 - Formulários de leitura rápida

by Pedro Azevedo 19. January 2014 01:12

 

Boas pessoal,

Esta é outro tipo de “formulário rápido” desta vez de visualização. Nos formulários de visualização rápida (Quick View Forms) permite-nos mostrar informações (campos e listas) de uma entidade em outro formulário que tenha uma ligação com essa entidade. Até hoje consegue-se ver um registo relacionado através de um lookup, se quiséssemos visualizar mais informações teríamos que abrir o registo, retirar essa informação e voltar para o formulário original. Com este tipo de formulário podemos mostrar os dados que mais visualizamos directamente no formulário sem ter que abrir novas janelas. Por exemplo podermos mostrar dados do cliente no formulário do contacto vejam esse exemplo a seguir:


 

Aqui estamos a mostrar um formulário rápido que existe na entidade conta e que adicionamos a um formulário da entidade contacto. Como podemos ver aparece um formulário todo giro com icons e tudo, os campos são readonly. Sobre as listas podemos criar registos através dos formulários de criação rápida. Portanto para além de vermos informações sobre o cliente ainda podemos criar registos relacionados com o cliente.

 

Até a próxima

Tags: , ,

Parceria Dynamics CRM com InsideView - Social Insights

by Pedro Azevedo 15. January 2014 23:26

Boas pessoal,

Na sequência do post anterior sobre aquisições, venho aqui falar não de uma compra mas de uma parceria com a empresa InsideView que ocorreu em Outubro de 2013, para trazer para dentro do CRM esta ferramenta. Dentro do CRM esta ferramenta será conhecida como Social Insights. A InsideView trabalha com todos os nomes relevantes do sector CRM.

E o que esta ferramenta permite? Informações de perfis, emails, números de telefone outras informações tanto para clientes como de contactos. Ter um maior conhecimento, desde notícias, informações sociais, financeiras de uma empresa. Perfis sociais dos principais actores das empresas. Partilha de conexões, adicionar conexões do Outlook, LinkedIn e Facebook. Toda esta informação pode ser sincronizada com os dados que temos dentro do Dynamics CRM.

Em resumo uma maneira de obter novas informações sobre os nossos clientes e poder realizar negócios com eficácia e colocar inteligência no nosso sistema de CRM. Com uma licença profissional este serviço fica automaticamente disponível, infelizmente esta ferramenta neste momento apenas está disponível nos Estados Unidos:

Com mais de 30000 fontes esta ferramenta torna-se muito poderosa, espero falar muito em breve mais desta ferramenta com alguns casos práticos.

 

Até a próxima.

Tags: , , , ,

Microsoft Dynamics CRM - Resumo das aquisições

by Pedro Azevedo 7. January 2014 07:32

 

Boas pessoal,

Este post não vai ser técnico nem sobre novas funcionalidades do CRM 2013 mas sim um balanço das várias compras que a Microsoft tem feito. Isto é importante para todos sabermos em que direcção a Microsoft está a ir.

E porquê hoje? Bem a Microsoft anunciou a compra de outra empresa a Parature por 100 milhões de dólares. A Parature é um dos líderes de serviço ao cliente em Cloud, que permite ligar-se aos clientes por múltiplos canais, tais como, email, web, chat ou redes sociais. Esta compra vai fortalecer a parte do serviço no Dynamics CRM. Se quiserem saber mais sobre a compra vejam aqui.

Podemos dizer que a Microsoft “começou” com a compra do Yammer a 25 de Junho de 2012, uma rede social privada ao estilo do facebook. Já é possível integrar esta ferramenta com o Dynamics CRM, para isso teremos que comprar uma licença do Yammer. Como no facebook permite trocar posts por exemplo num determinado negócio, receber notificações. Esta compra foi realizada por 1,2 milhões de dólares. Prevê-se que esta ferramenta esteja presente em outros produtos da Microsoft.

De seguida a Microsoft reforçou a sua oferta no Marketing com a compra da Marketing Pilot no dia 17 de Outubro de 2012. Aqui a estratégia da Microsoft foi diferente pois tem um novo produto Microsoft Dynamics Marketing em que vai ter um conector para se ligar ao Microsoft Dynamics CRM.

A 10 de Março de 2013 a Microsoft comprou a Netbreeze, com esta compra a Microsoft reforça a parte social depois da compra do Yammer, mas desta vez com objectivos diferentes, pois esta ferramenta permite descobrir o sentimento por exemplo de uma marca nas redes sociais e a intervenção na hora nestes sentimentos.

Isto vem reforçar que o Dynamics CRM é uma das grandes apostas da Microsoft e que trás aos clientes e parceiros grandes ferramentas e trunfos para lutar contra a concorrência.

 

Até a próxima.

Tags: ,

CRM 2013 - Restaurar botão "Executar Relatorio"

by Pedro Azevedo 3. January 2014 02:57

 Boas pessoal,

Nas minhas aventuras pelo CRM 2013 reparei que o botão de executar relatório não estava presente na entidade proposta e encomenda. O mais estranho é que na lista de propostas este botão está presente, mesmo quando selecionamos uma proposta, por isso para mim isto não fazia sentido. Então fui a procura de uma solução e encontrei este post que explica como mostrar o botão que criar ligações.

Então vou fazer a mesma coisa para a execução do relatório. Para vermos o comportamento reparem na diferença entre a lista e o próprio registo:

Como podem comprovar o botão não se encontra disponível dentro do registo. Então vamos ver como o podemos voltar a mostrar este botão, primeiro vamos recorrer a ferramenta Ribbon Workbench. Nesta ferramenta e como eu refiro no post de introdução a esta tarefa podemos restaurar botões que estavam presentes na ribbon.

Depois de fazermos load da solução que deve conter a entidade proposta (quote) e selecionarmos a tab da ribbon vemos a ribbon que aparecia no CRM 2011. No seletor vamos mudar para formulário, porque queremos mostrar quando abrimos um registo. Aqui vamos selecionar o botão “Run Report” com o botão direito do rato e escolher a opção “Customize Command”, o que vai aparecer aquela entrada nos comandos. Com o botão direito do rato este comando vamos escolher a opção “Edit Display Rules”, aqui vamos ver logo uma entrada sugestiva “Mscrm.HideOnCommandBar”. Então basta seleccionarmos esta entrada e carregar no “Remove”.

 

Agora basta publicar esta solução e ao acedermos novamente ao registo vamos passar a ver esta entrada.

Até a próxima.

Tags: , ,

CRM 2013 - Formulários Criação Rápida (Quick Create Forms)

by Pedro Azevedo 26. December 2013 00:42

Boas pessoal,

Ora aí está uma outra nova funcionalidade que veio tornar ainda melhor este fantástico produto (olha que lindo deveria receber uma comissão da MSF). Esta nova funcionalidade permite criar um registo de uma entidade sem termos que sair de onde estamos.

Na barra de navegação do lado direito está um sinal de somar com a label “Criar” (este botão está presente em todas as áreas), ao seleccionar temos a possibilidade de criar para várias entidades, por defeito está disponível para as entidades: concorrente, conta, contacto, incidente, oportunidade e oportunidade potencial. Mas não estamos limitados a estas entidades, qualquer entidade pode ser passível de ter um formulário de criação rápida.

Apesar das actividades aparecerem neste menu quando seleccionamos e ao contrário do que acontece com as outras actividades ele abre um formulário completo, ou seja, saímos do registo onde estávamos.

Quando escolhemos uma destas entidades aparece um menu flyout apenas com alguns campos para preencher, bem como os campos obrigatórios, vejam a seguir um exemplo:

Como podemos ver na imagem anterior o formulário rápido aparece por cima de onde estávamos e quando acabarmos a criação podemos continuar a fazer o que estávamos a fazer. Como podemos visualizar as regras de obrigatoriedade são aplicadas, bem toda a lógica efectuada em javascript e com as regras de negócio.

Depois de gravarmos ele dá um feedback que foi criado com êxito e dá-nos a possibilidade de ver o registo criado e podermos actualizar os restantes dados ou criar novamente outro registo.

O formulário rápido é possível customizar, vamos detalhar em outro post.

Outra maneira de lançar a criação rápida é nas sub-grids carregar no botão com o sinal ‘+’. Atenção que existem sub-grids que apenas permitem adicionar existentes.

Noutro post vamos ver como podemos gerir esta funcionalidade.

 

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