none
Formatar DateTime no método Create RRS feed

  • Pergunta

  • Boa tarde a todos,

       Estou utilizando o método CrmService.Create no Formulário de Atv de Serviço para que seja aberta um novo formulário de Atv. Serviço, com o nome do Cliente e o horário (scheduledstart e scheduledend) já setados.

       Todavia estes dois últimos campos são do tipo datetime e estão formatados para que seja exibido ambas a data e a hora.
       O problema é que quando clico no botão para abrir nova Atv. Serviço aparece um erro informando que o formato de datetime é inválido ou o valor está fora do limite suportado. Coloquei para verificar os valores trazidos e ele me mostra o dia da semana e a data por extenso (sem o ano), seguido da hora, a palavra UTC e por último o ano.

       Gostaria de saber o que preciso fazer para setar a data e o horário corretamente.

       Obrigado,
       Btruno Cardoso.
    terça-feira, 30 de junho de 2009 17:01

Respostas

  • Depende muito do que vai fazer, porém vc pode pensar da seguinte forma:

    1 - Se vou executar algum tratamento que não necessite a busca de informações na base de dados do CRM (como por exemplo, validações e formatações em campos) procure utilizar JScript, pois o processamento será realizado somente na maquina cliente.

    2 - Se vou executar processos com consultas na base do CRM, com possibilidade de espera no retorno destas informações, vc pode utilizar tanto JScript (assíncrono) quanto WorkFlow (que sempre trabalha de forma assíncrona).

    3 - Se vou executar processos com consultas na base do CRM, com necessidade de retorno imediato para tratamento posterior, utilize JScript Síncrono. Porém, recomendo fortemente a evitar o máximo possível este passo, pois vai interferir diretamente na performance da aplicação.

    []
    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    • Marcado como Resposta RicardoAlves sábado, 13 de novembro de 2010 17:50
    sexta-feira, 3 de julho de 2009 14:20
  • Olá Bruno,

    Com os passos que te passei sobre a criação do Workflow vc consegue buscar os dados da Atividade principal para copiar na Nova.

    Porém, se quiser continuar com seu código, vc tinha passado neste post o seguinte:

    var diain = horarioInicio.getDate();
    var mesin = horarioInicio.getMonth();
    var anoin = horarioInicio.getYear();
    var horain = horarioInicio.getHours(); 
    var minin = horarioInicio.getMinutes();
    var init = new Date(diain, mesin, anoin, horain, minin);

    Troque a linha:

         var init = new Date(diain, mesin, anoin, horain, minin);

    Por:

         var init = new Date(anoin, mesin, diain, horain, minin, 0);
       


    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    • Marcado como Resposta RicardoAlves sábado, 13 de novembro de 2010 17:50
    sexta-feira, 3 de julho de 2009 13:15

Todas as Respostas

  • Olá Bruno,

    Em JScript, vc utiliza a sintaxe:

    crmForm.all.scheduledstart.DataValue = new Date();

    Via Plugin (C#), gostaria de lhe sugerir a função que publiquei em http://gtezini.blogspot.com/2008/12/crm-40-converter-systemdatetime-para.html .

    Através dela você passa o parâmetro de data (DateTime) e a função te retorna o DateTime no formato que o CRM aceita.

    Ex: serviceappointment.scheduledstart = ConvertToCRMDateTime(dt);

    []


    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    terça-feira, 30 de junho de 2009 17:38
  • Olá Bruno

    Em JScript eu utilizo dessa forma:

    data = new Date();
    crmForm.all.scheduledstart.value = data.getDate() + "/" + (data.getMonth() + 1) + "/" + data.getYear() ;
    terça-feira, 30 de junho de 2009 18:37
  • Olá Gilberto e Regina,

       Primeiramente obrigado pelas respostas.
       Não sei se eu não soube como utilizar as respostas de vocês ou se não expliquei bem o meu problema.

       Quando eu coloco que o campo datetime deve exibir a data e a hora, no meu formulário estes dois valores ficam em campos separados, como se fossem atributos diferentes.
       Então, se eu só formatar a data e também a hora e atribui-los aos campos scheduledstart e scheduledend, vai funcionar?!


       Bruno Cardoso
    quarta-feira, 1 de julho de 2009 11:55
  • Olá Bruno,

    Em JScript, no OnLoad do Formulário de Atividades, se colocar:

    crmForm.all.scheduledstart.DataValue = new Date();

    Terá como resultado no campo de Data: [1/7/2009] e no campo de hora [14:31].

    []


    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    quarta-feira, 1 de julho de 2009 17:39
  •    Gilberto,

       O problema inicial que estava tendo aqui eu consegui resolver. Que era pegar o scheduledstart e o scheduledend de uma Atv. Serviço e jogar para outro formulário de Atv. de Serviço.

       No entanto passei a ter um novo problema: se a data é, por exemplo, 12/05/2009, no novo formulário aparece como 05/12/2009. Ou seja, o dia e o mês vêm trocados. Você sabe me dizer como corrijo isto?

       Obrigado,
       Bruno Cardoso
    quinta-feira, 2 de julho de 2009 10:45
  • Bruno,

    Você está fazendo este tratamento em JScript ou em C#?
    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    quinta-feira, 2 de julho de 2009 13:08
  • Tudo em JScript
    quinta-feira, 2 de julho de 2009 13:16
  • Ok.

    Uma forma de atualização do campo, é esta:

    var d = new Date();
    var day = d.getDate();
    var month = d.getMonth();
    var year = d.getYear();
    var hh = 10;
    var mi = 30;
    var ss = 00;

    crmForm.all.scheduledstart.DataValue = new Date(year, month, day, hh, mi, ss);

    []


    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    quinta-feira, 2 de julho de 2009 13:37
  • Gilberto,

        O que quero fazer exatamente, como expliquei acima, é abrir um novo formulário de Atv. Serviço com scheduledstart e scheduledend setados. Eu até consigo pegar os valores separados (de dia, mês, etc). Todavia, quando uso o método CRMService.Create para criar o novo formulário passando estas duas datas, o dia e o mês chegam trocados.
       E qndo tento passar direto, não funciona pq dá uma mensgem de q o formato de data é inválido.

       Convertendo estes valores para o tipo Date, como vc fez vai funcionar?
       Obrigado.
    quinta-feira, 2 de julho de 2009 13:44
  • Pode tentar converter sim.

    Dúvida: Vc não poderia criar esta nova atividade através de Workflow? Por que precisa criar uma nova atividade em JScript?


    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    quinta-feira, 2 de julho de 2009 13:51
  • A conversão não funcionou muito bem.
    Fiz da seguinte forma:

    varhorarioInicio = crmForm.all.scheduledstart.DataValue;

     

     

    var diain = horarioInicio.getDate();

    var mesin = horarioInicio.getMonth();

    var anoin = horarioInicio.getYear();

    var horain = horarioInicio.getHours();  

    var minin = horarioInicio.getMinutes();

    var init = new Date(diain, mesin, anoin, horain, minin);



    Estou fazendo com Jscript porque não tenho domínio de workflow. Você acha que pode ser mais fácil?

    quinta-feira, 2 de julho de 2009 14:04
  • Em que momento exatamente vc precisa criar a nova atividade? Qdo salva a atividade principal?
    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    quinta-feira, 2 de julho de 2009 14:12
  •     Bom, eu coloquei um outro botão no meu formulário e através dele eu abro o novo formulário. Utilizei o crmForm.Save() para caso o usuário se esqueça de salvar o primeiro formulário.
        Mas não é sempre que o usuário precisará abrir um formulário novo, minha intenção é fazer tipo um "Salvar e novo", mas com as datas já setadas e também o nome do cliente.
    quinta-feira, 2 de julho de 2009 14:23
  • Bruno,

    Apresento a vc duas possibilidades:

    1 - Recurso chamado [Follow-up ou Acompanhamento].

    Se vc reparar na tela de Atividade, existe um botão padrão do CRM chamado [Acompanhamento]. Clicando neste botão, aparecerá no lado direito da tela de atividades o [Assistente de Formulário] para criação de nova Atividade, justamente com os recursos que vc precisa (inclusive com os botões de Salvar e Salvar e Abrir). O assisntente é fácil de usar.


    2 - Via Workflow, basta seguir os passos abaixo:

    1 - Configurações -> Fluxo de Trabalho;
    2 - Novo Fluxo, para a Entidade de Atividade de Serviço;
    3 - Na tela já vem marcada a opção [Iniciar qto registro for criado];
    4 - Clique no botão adicionar Etapa > Criar Registro;
    5 - Escolha a Atividade de Serviço - Clicar no Botão Definir Propriedades;
    6  - Como vc quer que já venha preenchido o campo de Cliente, basta clicar no campo e utilizar o [Assistente de Formulário] a direita da tela. Note que vc define um valor dinâmico para o campo. Neste exemplo, já vem posicionado nos PickLists a Entidade [Atividade de Serviço] e o campo [Clientes]. Clique no botão [Adicionar] e pronto. Faça o mesmo com outros campos que deseja.

    []

    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    quinta-feira, 2 de julho de 2009 14:46
  • Gilberto,

       Pelo que entendi e testei do recurso Acompanhamento, não é o que eu quero.

       E quanto ao workflow? Qual a diferença entre fazê-lo por dentro do CRM e utilizando .Net?
       Porque me parece (talvez eu não tenha entendido bem) que não tem como eu "setar" os valores da forma com eu quero. Porque estes valores sempre vão variar de acordo com o formulário original.

       Bruno Cardoso
    quinta-feira, 2 de julho de 2009 15:46
  • Olá Bruno,

    Fazer via workflow é vantajoso porque justamente descarta a necesidasde de desenvolvimento, já que o produto lhe oferece o recurso. Inclusive vc ganha tempo no projeto.
    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    quinta-feira, 2 de julho de 2009 16:55
  • Gilberto,

       Não entendi como vou conseguir o que quero utilizando o workflow pelo CRM? Não sei como os valores de cliente, scheduledstart e scheduledend de um formulário de Atv. de Serviço e jogá-los no outro formulário de Atv. Serviço. Utilizando workflow via .Net não seria mais fácil não?

       E como eu disse anteriormente. Com JScript funciona quase perfeitamente, o único problema é a data que vai com o dia e mês trocados. Há como eu padronizar o formato da data? Para sempre aparecer no formato brasileiro?

       Obrigado.
    sexta-feira, 3 de julho de 2009 10:17
  • Olá Bruno,

    Com os passos que te passei sobre a criação do Workflow vc consegue buscar os dados da Atividade principal para copiar na Nova.

    Porém, se quiser continuar com seu código, vc tinha passado neste post o seguinte:

    var diain = horarioInicio.getDate();
    var mesin = horarioInicio.getMonth();
    var anoin = horarioInicio.getYear();
    var horain = horarioInicio.getHours(); 
    var minin = horarioInicio.getMinutes();
    var init = new Date(diain, mesin, anoin, horain, minin);

    Troque a linha:

         var init = new Date(diain, mesin, anoin, horain, minin);

    Por:

         var init = new Date(anoin, mesin, diain, horain, minin, 0);
       


    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    • Marcado como Resposta RicardoAlves sábado, 13 de novembro de 2010 17:50
    sexta-feira, 3 de julho de 2009 13:15
  •    ok!! Obrigado novamente Gilberto!

       Mais uma dúvida: em termos de performance, é melhor utilizar JScript ou workflow e porque?

    Bruno Cardoso
    sexta-feira, 3 de julho de 2009 13:21
  • Depende muito do que vai fazer, porém vc pode pensar da seguinte forma:

    1 - Se vou executar algum tratamento que não necessite a busca de informações na base de dados do CRM (como por exemplo, validações e formatações em campos) procure utilizar JScript, pois o processamento será realizado somente na maquina cliente.

    2 - Se vou executar processos com consultas na base do CRM, com possibilidade de espera no retorno destas informações, vc pode utilizar tanto JScript (assíncrono) quanto WorkFlow (que sempre trabalha de forma assíncrona).

    3 - Se vou executar processos com consultas na base do CRM, com necessidade de retorno imediato para tratamento posterior, utilize JScript Síncrono. Porém, recomendo fortemente a evitar o máximo possível este passo, pois vai interferir diretamente na performance da aplicação.

    []
    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    • Marcado como Resposta RicardoAlves sábado, 13 de novembro de 2010 17:50
    sexta-feira, 3 de julho de 2009 14:20
  • Certo!

    Muito obrigado pela ajuda Gilberto.

    Voltando ao problema da passagem da data.. onde é configurado o formato da data? Seria no banco?
    sexta-feira, 3 de julho de 2009 14:32