2012-08-06 46 views
1

我需要驗證用戶通過Visualforce頁面輸入的日期字段。 我的代碼需要的格式是「yyyy-MM-dd」。Salesforce Apex:驗證格式和值的日期

在頂點處理這個問題的最好方法是什麼?在使用某些在Apex中不可用的標準類(例如SimpleDateFormat)之前,我已經在Java中做了類似的東西。

現在我可以使用正則表達式檢查「格式」是否正確。但我也必須防止用戶輸入滿足格式的「9999-99-99」。我希望Salesforce有一個很好的內置解決方案。

感謝, 卡爾文

回答

0

我設法解決我的問題,因爲它有點獨特。

所以我用一個正則表達式來驗證輸入日期的格式,以確保它是yyyy-MM-dd格式。

我用Date.valueOf 這個內置的方法總是以yyyy-MM-dd的形式取得一個日期。它會拋出一個異常,如果它有一個不好的值像9999-99-99等....我顯示異常的消息給用戶使用e.getMessage()來完成我的日期字段驗證。

5

你可以試試我所說的控制欺騙。我基本上創建了一個空的sObject,它有一個類似於Task對象的日期字段(或類似的輕量級)。在屏幕上,我顯示將顯示本地日期字段的任務日期的輸入。這樣做可以讓銷售人員驗證用戶輸入的日期,並且用戶也可以獲得良好的日曆彈出窗口。

這裏是什麼看起來像在控制器

public class MyController { 
public Task DateInput {get;set;} 

public MyController() { 
    DateInput = new Task(); 
} 

public void save() { 
    Date dInputDate = DateInput.ActivityDate; 

    //Format Date 
    DateTime dtValue = DateTime.newInstance(dInputDate.year(), dInputDate.month(), dInputDate.day()); 
    string sFormattedDate = dtValue.format('yyyy-MM-dd'); 

} 
} 

這裏的樣本是頁面將是什麼樣子

<apex:page controller="MyController"> 

<apex:form> 
    <apex:pageBlock> 
     <apex:pageBlockSection> 
      <apex:pageBlockSectionItem> 
       <apex:outputLabel for="inputDate" value="My Date"/> 
       <apex:inputField value="{!DateInput.ActivityDate}" /> 
      </apex:pageBlockSectionItem> 
     </apex:pageBlockSection> 
    </apex:pageBlock> 
</apex:form> 
</apex:page> 

你注意到我在保存方法做了格式化。你不能在Date上使用格式,但你可以在DateTime上,所以我只是將Date轉換爲DateTime,然後使用format方法來格式化我的日期。

+0

嘿約翰感謝您的回覆,我很久以前嘗試這種方法(因爲salesforce沒有一個體面的日期元素的視覺效果),但我決定使用JavaScript的自定義日期選擇器,因此走在不同的路線。我使用HTML輸入字段獲取日期。我昨天確實找到了解決我的問題的方法。 – 2012-08-08 15:54:37