2012-03-21 66 views
2

我正在編寫Salesforce.com和其他服務之間的集成,並且遇到了整數字段的問題。在Salesforce.com中,我將「小數位數」設置爲「0」的字段定義爲「數字」。在其他服務中,它作爲整數存儲在明確的位置。這兩個字段應該存儲相同的整數值。如何確定Salesforce.com中的字段是否存儲整數?

一旦我在該字段的Salesforce.com變體中存儲值,就會出現問題。 Salesforce.com將從其Query()QueryAll()操作返回相同的值,且附加的錯誤數量不正確。

例如,如果我在Salesforce.com中爲該字段插入值「827」,那麼稍後從Salesforce.com中提取該數字時,它將表示該值爲「827.0」。

我不想硬編碼我的集成從特定字段中刪除這些十進制值。這是不可維護的。我希望它足夠聰明,可以在運行其他集成代碼之前從所有整數字段中除去小數值。使用Salesforce.com SOAP API,我該如何實現這一目標?

我認爲這將有DescribeSObject()的‘場域’屬性的東西,我可以掃描元數據,但我不明白的方式來提取從DescribeSObjectResult小數位的數量。

回答

7

啊哈!小數位數在Field對象上名爲Scale的屬性上。你知道你有一個整數字段,如果它等於「0」。

+1

Bleh。我在我自己的問題中將頁面與答案聯繫起來。謝謝。 – Technetium 2012-03-21 19:00:51

3

從技術上講,即使「小數位數」屬性設置爲0,sObject字段也不是整數。它們總是具有不同比例屬性的小數位。在APEX中記住這一點很重要,因爲可用的小數方法與整數方法不同,並且您還有其他潛在的類型轉換問題(並非總是,但在某些情況下)。

+1

只需簡要說明您的最終評論 - Apex認爲整數N和十進制N.0是相等的。我還記得至少有一個遺留數字字段(NumberOfEmployees,也許我有一些筆記,如果你感興趣的話)會出現Integer行爲。 – jkraybill 2012-03-22 03:08:01

+0

謝謝你指出。在做出關於平等的最後評論之前,我應該檢查一下。我確定該類型是sObject數字的十進制數,因此我將編輯出最後一行。 – barelyknown 2012-03-22 04:14:16

+0

很酷。僅供參考幾個遺留數字字段(無論您在WSDL中看到xsd:int作爲類型)的「真實」類型實際上不是Demical。我發現我正在討論的錯誤 - 試圖在Apex中執行acct.put('NumberOfEmployees',myDecimal)拋出「System.SObjectException:從Decimal到Integer的非法賦值」。我不記得acct.NumberOfEmployees = myDecimal是否有效,它很可能。 – jkraybill 2012-03-22 08:09:14