2011-05-03 77 views
1

我需要從salesforce中提取attatchments?我需要將一些筆記和附件轉移到另一個環境中。我能夠提取的音符,但不知道如何去提取attatchments我如何從salesforce中提取附件?

感謝

Prady

回答

3

這主要取決於你用什麼工具/實用程序來提取。如果Body字段包含在查詢中,則對於Attachment sObject的SOQL將一次返回一行。這被強制用來控制資源並防止過度使用SOQL腳本。

方法#1,如果queryMore不可用:發出SOQL沒有Body場枚舉所有附件,然後發出每個附件ID一個SOQL檢索Body

方法2:發出SOQL檢索所有需要附件然後循環使用queryMore一次獲得一個。方法#3:如果你可以「凍結」SF環境,並且只想系統快照以預加載一個不同的將來使用的,你可以使用「數據導出」。在設置菜單中,數據管理中有一個導出數據命令,請確保您單擊「包含在導出中」以包含所有二進制數據。正當程序後,它會給你一個完整的數據備份,你可以離線關閉。

順便說一句,身體base64編碼,你需要對它進行解碼,以獲得我用來從Salesforce中的附件二進制內容實際的二進制

+0

那是有趣......這樣的附件被存儲爲二進制的DB,而不是物理文件?這是否意味着對附件的備份會給我實際的文件,並將它們轉移到新的envmt會與以前的envmt具有相同的結果? – Prady 2011-05-04 04:52:57

+0

嗯,我們不知道他們是如何在他們身上存儲附件的,請記住SF和它的所有子系統(如SOQL)實際上代表了一個抽象層。底線,我們甚至不關心,他們的問題;)。現在,您的評論提醒我還有第三種方法可以做到這一點。我會更新帖子 – mmix 2011-05-04 08:43:53

3

這裏是解決方案。他們的文檔中的示例指出以下內容:

curl 
https://na1.salesforce.com/services/data/v20.0/sobjects/Document/015D0000000NdJOIA0/body 
-H "Authorization: Bearer token" 

所以這裏有幾個不同的元素。主機(https://na1.salesforce.com)您應該能夠在登錄過程後獲得,該主機是基於會話的,因此可以隨時更改。第二個元素是URL的其餘部分,您將從Attachment對象的「body」字段中獲得該元素。第三個也是最後一個元素是Authorization標頭,由字符串「Bearer」組成,加上在用SF後端進行身份驗證後給予您的標記。

響應是二進制文件,它是不是在base64,只是將其保存到一個文件,你很好去。

這裏是我是如何做的目標C中的例子:

// How to get the correct host, since that is configured after the login. 
NSURL * host = [[[[SFRestAPI sharedInstance] coordinator] credentials] instanceUrl]; 

// The field Body contains the partial URL to get the file content 
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@%@", [host absoluteString], {AttachmentObject}.body]]; 

// Creating the Authorization header. Important to add the "Bearer " before the token 
NSString *authHeader = [NSString stringWithFormat:@"Bearer %@",[[[[SFRestAPI sharedInstance] coordinator] credentials] accessToken]]; 

NSMutableURLRequest * urlRequest = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:60.0]; 
[urlRequest addValue:authHeader forHTTPHeaderField:@"Authorization"]; 
[urlRequest setHTTPMethod:@"GET"]; 

urlConnection = [NSURLConnection connectionWithRequest:urlRequest delegate:self]; 

希望它能幫助。

+0

謝謝,這有很大的幫助。我希望他們有這樣的內置到iOS Salesforce SDK中的東西。 – 2016-07-22 00:23:39

0

在SalesForce附件將針對例如帳戶對象。

步驟來檢索附件(在Java中)

  1. 獲取到其中文件被附加對象的ID。 e.q.帳戶對象

    String pid = Account__r().getId(); 
    
  2. 在步驟1中

    *String q = "Select Name, Body, ContentType from Attachment 
    where ParentId = '" + pid + "'"; 
    QueryResult qr = connection.query(q); 
    SObject[] sarr = qr.getRecords();* 
    SObject so = sarr[0]; 
    
  3. 類型強制轉換的Salesforce通用對象(的sObject)爲 「附件」 對象

    *Attachment att = (Attachment)so;* 
    
  4. 執行用於ID的查詢上的Salesforce對象 「附件」
  5. 從附件體中檢索字節數組流,並執行字節數組所需的操作。

    *byte[] bName = att.getBody(); 
    // Do your operation in byte array stream* 
    
相關問題