none
Lookup com Filtro RRS feed

  • Pergunta

  • Caros,
    Ando com um problema um tanto chato que preciso resolver no CRM 4.0, mas ainda não encontrei a solução.

    Em uma determinada entidade que criei, chamada Solicitação, preciso relacionar à ela outras duas entidades, Estado e Cidade.
    Na entidade Cidade eu tenho uma relação para indicar o Estado que esta cidade pertence.

    O que preciso é conseguir selecionar na entidade Solicitação o Estado e, na hora que eu for selecionar a Cidade, que só venha no Lookup as cidades que pertençam ao Estado que determinei!

    Alguém pode me dar uma luz de como fazer isso?

    Obrigado!

    quinta-feira, 26 de fevereiro de 2009 17:18

Respostas

  • Ricardo,

    Notei um ponto de "limitação" no uso do Picklist dinâmico.

    Realmente faz sentido o erro, porque para o CRM, o conteúdo do Picklist vem de sua base de dados (Metadados). Como estamos preenchendo o Picklist somente ao carregar o formulário, no lado do cliente, ao salvar, o CRM "fica confuso", dizendo que [antes] não existiam dados no Picklist e que, [ao salvar], agora tem dados!...gerando então a msg de erro.

    Sugestão para solução:

    Use o Picklist dinâmico [apenas] como repositório temporário de dados, ou seja, para visualizar o que deseja. No [OnChange] do Picklist, "copie" o conteúdo da opção selecionada para um campo simples (texto) e, ao salvar, no [OnSave]do Form, limpe novamente o Picklist para não gerar o erro novamente. Limpe da seguinte forma:

    for(i=crmForm.all.new_pick.options.length-1; i>=0 ;i--)
    {
       crmForm.all.new_pick.remove(i);
    }

    Mais trabalhoso, não!!...

    []
    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    • Sugerido como Resposta Gilberto Tezini sexta-feira, 27 de fevereiro de 2009 15:34
    • Marcado como Resposta Ricardo Brunoro terça-feira, 3 de março de 2009 13:22
    quinta-feira, 26 de fevereiro de 2009 19:39

Todas as Respostas

  •  Olá Ricardo,

    Recurso de filtro de [Lookup] ainda não é possível, somente na próxima versão do CRM,  a 5.0!

    Porém, é possível desenvolver um recurso para que, ao selecionar o Estado, vc popule um [PICKLIST] com as cidades correspondentes.

    Segue um exemplo meu, em: http://gtezini.blogspot.com/2009/02/crm-40-preenchimento-automatico-de.html

    []s
    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    quinta-feira, 26 de fevereiro de 2009 17:46
  • Gilberto, tudo bom?

    Cara, já andei fuçando seu blog (muito bom por sinal, parabéns!!) e até "brinquei" um pouco com esse seu exemplo, mas tive um problema ao tentar salvar o registro com esse picklist populado "real time", ele retornou um erro dizendo que o número informado não condizia com o range possível (algo assim).
    Você tem idéia do que pode ser? Vou montar esse teste que fiz novamente e te falo o erro que deu exatamente.

    Outra coisa, é possível eu fazer esse picklist vir em ordem alfabética? Quando fiz o teste veio por ordem de criação dos registros.

    Obrigado!
    quinta-feira, 26 de fevereiro de 2009 17:51
  • Ricardo,

    Muito grato! A idéia é realmente compartilhar experiências!

    Faça o que falou, tente usar meu exemplo e depois me passe o erro exato a que se referiu.

    Referente a ordenação, basta fazer o seguinte:

    No meu exemplo, utilizo o método [RetrieveMultiple], em JavaScipt, para buscar os dados. Basta acrescentar o código abaixo na string que monta o método. Acrescente o código antes da TAG </query>:

    "        <q1:Orders>" +
    "          <q1:Order>" +
    "            <q1:AttributeName>name</q1:AttributeName>" +
    "            <q1:OrderType>Ascending</q1:OrderType>" +
    "          </q1:Order>" +
    "        </q1:Orders>"

    []

    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    quinta-feira, 26 de fevereiro de 2009 18:30
  • Gilberto,

    Perfeito esse método de ordenar! Tá ficando perfeito o que eu preciso, o problema agora é o erro ao gravar.
    O erro é o seguinte:
    "Um ou mais dos valores de opção desta lista de seleção não estão no intervalo de valores permitidos."

    Alguma idéia do que possa ser?

    Obrigado!

    quinta-feira, 26 de fevereiro de 2009 18:45
  • Ricardo,

    Notei um ponto de "limitação" no uso do Picklist dinâmico.

    Realmente faz sentido o erro, porque para o CRM, o conteúdo do Picklist vem de sua base de dados (Metadados). Como estamos preenchendo o Picklist somente ao carregar o formulário, no lado do cliente, ao salvar, o CRM "fica confuso", dizendo que [antes] não existiam dados no Picklist e que, [ao salvar], agora tem dados!...gerando então a msg de erro.

    Sugestão para solução:

    Use o Picklist dinâmico [apenas] como repositório temporário de dados, ou seja, para visualizar o que deseja. No [OnChange] do Picklist, "copie" o conteúdo da opção selecionada para um campo simples (texto) e, ao salvar, no [OnSave]do Form, limpe novamente o Picklist para não gerar o erro novamente. Limpe da seguinte forma:

    for(i=crmForm.all.new_pick.options.length-1; i>=0 ;i--)
    {
       crmForm.all.new_pick.remove(i);
    }

    Mais trabalhoso, não!!...

    []
    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    • Sugerido como Resposta Gilberto Tezini sexta-feira, 27 de fevereiro de 2009 15:34
    • Marcado como Resposta Ricardo Brunoro terça-feira, 3 de março de 2009 13:22
    quinta-feira, 26 de fevereiro de 2009 19:39
  • Gilberto,

    Realmente ficou trabalhoso agora... heheh!
    Até estive procurando na Internet algo sobre isso e encontrei um exemplo em um blog onde fizeram um código que transforma um campo texto num tipo de picklist... aparentemente funciona, mas acho que é uma solução um tanto complicada e com certeza não deve ser suportada heheheh.

    Vou tentar arrumar a solução conforme você falou também, e ver se atende a necessidade!

    Obrigado!

    sexta-feira, 27 de fevereiro de 2009 12:13
  • Olá Ricardo,

    Não sei se é tarde demais!...porém consegui alterar o código do Picklist dinâmico, de forma que não ocorre mais o erro na gravação.

    Apenas um detalhe (explicado no blog): Após criar seu Picklist, preenchê-lo como uma quantidade de informações [suficientes]. O que isto significa: Por exemplo, ao selecionar uma [Conta], tente saber qual seria a quantidade [máxima] de contatos carregados no Picklist. Então carregue seu Picklist com esta qtde de linhas (o texto para o Picklist não importa).

    Segue artigo atualizado: http://gtezini.blogspot.com/2009/02/crm-40-preenchimento-automatico-de.html

    Acredito que melhorou um pouco! rsrs

    []s 
    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    segunda-feira, 2 de março de 2009 14:03
  • Olá Gilberto!
    Tudo bom?

    Tarde demais com certeza não é heheh!
    A tua idéia então é preencher o picklist logo após criar ele vazio para que seja possível ao recarregar ele com os dados dinâmicos ele não se perder na hora de gravar o valor, certo?
    Se eu tiver um picklist sendo preenchido atualmente com 15 registros, por exemplo, mas pode ser que este aumente para 25 registros, então o ideal é já criar o picklist com uns 30 registros para não ter problema? Se eu criar com 15 e ele precisar preencher 16 vai dar erro né?

    Obrigado pela ajuda!!

    segunda-feira, 2 de março de 2009 14:18
  • Olá Ricardo!,

    Isto mesmo. A idéia é esta, preencher o Picklist com uma estimativa máxima de linhas.

    []
    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    segunda-feira, 2 de março de 2009 14:31
  • Gilberto,

    Pensando na sua solução de jogar o texto do item selecionado no picklist para um campo texto e limpando o picklist para salvar, dei uma incrementada e fiz com que o texto fosse jogado para um campo lookup da cidade, o que vai facilitar inclusive para localizações avançadas, pelo que vi!

    Obrigado mais uma vez!
    terça-feira, 3 de março de 2009 13:21
  • Show de bola!
    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    terça-feira, 3 de março de 2009 13:36