我需要从销售人员中提取附件?我需要将一些笔记和附件转移到另一个环境中。我能够提取笔记,但不确定如何提取附件
谢谢
普拉迪
这主要取决于您用来提取的工具/实用程序。如果字段包含在查询中,sObject 的 SOQLAttachment
将始终一次返回一行。Body
强制执行此操作是为了节省资源并防止过度使用 SOQL 脚本。
方法 #1,如果 queryMore 不可用:发出SOQL
无Body
字段以枚举所有附件,然后为每个附件 ID 发出一个 SOQL 以检索Body
方法 #2:发出 SOQL 以检索所有需要的附件,然后循环使用queryMore
以一次获取一个。
方法 3:如果您可以“冻结”SF 环境并且只想拍摄系统快照以预加载不同的系统以供将来使用,则可以使用“数据导出”。在设置菜单中,数据管理中有一个导出数据命令,确保单击“包含在导出中”以包含所有二进制数据。经过正当程序后,它将为您提供完整的数据备份,您可以离线处理。
顺便说一句,正文是 base64 编码的,您需要对其进行解码以获得实际的二进制文件
这是我用来从 SalesForce 获取附件二进制内容的解决方案。他们文档中的示例指出以下几点:
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 中,只需将其保存到文件中即可。
这是我在Objective 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];
希望能帮助到你。
在 SalesForce 中,附件将针对一个对象,例如 Account 对象。
检索附件的步骤(Java 中)
获取文件附加到的对象的 ID。eq 帐户对象
String pid = Account__r().getId();
对步骤 1 中 ID 的 Salesforce 对象“附件”执行查询
*String q = "Select Name, Body, ContentType from Attachment
where ParentId = '" + pid + "'";
QueryResult qr = connection.query(q);
SObject[] sarr = qr.getRecords();*
SObject so = sarr[0];
将 Salesforce 通用对象 (SObject) 类型转换为“附件”对象
*Attachment att = (Attachment)so;*
从附件正文中获取字节数组流,对字节数组进行所需的操作。
*byte[] bName = att.getBody();
// Do your operation in byte array stream*