quinta-feira, 27 de abril de 2017

Exibindo corretamente Data/Hora em páginas Visualforce do Salesforce

Você que desenvolve páginas Visualforce no Salesforce, provavelmente já enfrentou dificuldades ao exibir data e hora em páginas Visualforce - VF. Como já expliquei em um post anterior (com título Datetime no horário local em páginas Visualforce), o Salesforce armazena as informações de Data/Hora no GMT 0. Portanto, se não for feito nada, essas informações serão exibidas na VF no GMT 0, o que irá confundir o usuário.

Além da sugestão de resolução que dei no post supracitado, encontrei duas outras formas. Veja quais são:

1) Utilizar <apex:OutputField />

Veja que quando se utiliza o <apex:OutputField /> diferente do <apex:OutputText /> a hora já vem formatada no GMT padrão.

Controller:


  
public class TesteController {
    public MeuObjeto__c obj { get; set; }
    
    public TesteController() {
        this.obj = new MeuObjeto__c();
        this.obj.DataHoraOcorrido__c = DateTime.Now();
    }
}


Visualforce:


 
<apex:page controller="TesteController" >

 <apex:outputText value="{!Obj.DataHoraOcorrido__c}" />
 <br/><br/>
 <apex:outputField value="{!Obj.DataHoraOcorrido__c}" />

</apex:page>


Resultado:




2) Utilizar o fuso horário através do Apex


Dessa forma, crio uma propriedade no Apex que retorna um cálculo em cima do Timezone (fuso horário) do Usuário, que deve ser adicionado à Data/Hora.


Controller:


public class TesteController {
    public MeuObjeto__c obj { get; set; }
    
    public TesteController() {
        this.obj = new MeuObjeto__c();
        this.obj.DataHoraOcorrido__c = DateTime.Now();
    }
    
    public Double Timezone {
        get {
            return UserInfo.getTimeZone().getOffset(DateTime.now()) / (1000 * 3600 * 24.0);
        }
    }
}


Visualforce:


 
<apex:page controller="TesteController" >

 Não formatado: <br/>
 <apex:outputText value="{!Obj.DataHoraOcorrido__c + timezone}" />

 <br/><br/>

 Formatado: <br/>
 <apex:outputText value="{0,date,dd/MM/yyyy HH:mm:ss}">
  <apex:param value="{!Obj.DataHoraOcorrido__c + timezone}"/>
 </apex:outputText>

</apex:page>


Resultado:





Por hoje é só! Até a próxima...



* Está precisando de um suporte ou uma consultoria formatações de Data e Hora nas Visualforce dentro da sua plataforma Salesforce? Entre em contato conosco - CbCloud: http://www.cbcloud.com.br/ Somos parceiros Salesforce

Nenhum comentário: