Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从salesforce提取附件?_Salesforce_Soql - Fatal编程技术网

如何从salesforce提取附件?

如何从salesforce提取附件?,salesforce,soql,Salesforce,Soql,我需要从salesforce中提取附件?我需要把一些笔记和附件转移到另一个环境中。我能够提取笔记,但不知道如何提取附件 谢谢 Prady这主要取决于您用于提取的工具/实用程序。如果查询中包含Body字段,那么附件sObject的SOQL将始终一次返回一行。这是为了节约资源和防止过于霸道的SOQL脚本 方法1,若queryMore不可用:发出一个不带正文的SOQL字段以枚举所有附件,然后为每个附件ID发出一个SOQL以检索正文 方法2:发布一个SOQL来检索所有需要的附件,然后使用queryMor

我需要从salesforce中提取附件?我需要把一些笔记和附件转移到另一个环境中。我能够提取笔记,但不知道如何提取附件

谢谢


Prady

这主要取决于您用于提取的工具/实用程序。如果查询中包含Body字段,那么附件sObject的SOQL将始终一次返回一行。这是为了节约资源和防止过于霸道的SOQL脚本

方法1,若queryMore不可用:发出一个不带正文的SOQL字段以枚举所有附件,然后为每个附件ID发出一个SOQL以检索正文

方法2:发布一个SOQL来检索所有需要的附件,然后使用queryMore循环一次获取一个附件

方法3:如果您可以冻结SF环境,并且只想拍摄系统快照以预加载另一个要继续使用的系统,那么您可以使用数据导出。在“设置”菜单中的“数据管理”中有一个“导出数据”命令,请确保单击“导出中包含”以包含所有二进制数据。经过适当的程序后,它将为您提供完整的数据备份,您可以脱机处理


顺便说一句,正文是base64编码的,您需要对其进行解码以获得实际的二进制文件。这主要取决于您使用什么工具/实用程序来提取。如果查询中包含Body字段,那么附件sObject的SOQL将始终一次返回一行。这是为了节约资源和防止过于霸道的SOQL脚本

方法1,若queryMore不可用:发出一个不带正文的SOQL字段以枚举所有附件,然后为每个附件ID发出一个SOQL以检索正文

方法2:发布一个SOQL来检索所有需要的附件,然后使用queryMore循环一次获取一个附件

方法3:如果您可以冻结SF环境,并且只想拍摄系统快照以预加载另一个要继续使用的系统,那么您可以使用数据导出。在“设置”菜单中的“数据管理”中有一个“导出数据”命令,请确保单击“导出中包含”以包含所有二进制数据。经过适当的程序后,它将为您提供完整的数据备份,您可以脱机处理


顺便说一句,正文是base64编码的,您需要对其进行解码以获得实际的二进制内容。这是我用来从SalesForce获取附件二进制内容的解决方案。其文档中的示例指出以下几点:

curl
https://na1.salesforce.com/services/data/v20.0/sobjects/Document/015D0000000NdJOIA0/body
-H "Authorization: Bearer token"
这里有几个不同的元素。您应该能够在登录过程后获得的主机,此主机基于会话,因此可以随时更改。第二个元素是URL的其余部分,您将从附件对象的body字段中获取。第三个也是最后一个元素是授权头,它由字符串承载器和在您使用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];

希望有帮助。

以下是我从SalesForce获取附件二进制内容时使用的解决方案。其文档中的示例指出以下几点:

curl
https://na1.salesforce.com/services/data/v20.0/sobjects/Document/015D0000000NdJOIA0/body
-H "Authorization: Bearer token"
这里有几个不同的元素。您应该能够在登录过程后获得的主机,此主机基于会话,因此可以随时更改。第二个元素是URL的其余部分,您将从附件对象的body字段中获取。第三个也是最后一个元素是授权头,它由字符串承载器和在您使用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];

希望有帮助。

在SalesForce附件中将针对对象,例如Account对象

在Java中检索附件的步骤

获取文件附加到的对象的ID。e、 q.账户对象

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];
Typecast Salesforce通用对象SObject到附件对象

*Attachment att = (Attachment)so;*
从附件主体检索字节数组流,并对字节数组执行所需的操作

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

在SalesForce中,附件将针对对象,例如Account对象

在Java中检索附件的步骤

获取文件附加到的对象的ID。e、 q.账户对象

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];
Typecast Salesforce通用对象SObject到附件对象

*Attachment att = (Attachment)so;*
从附件主体检索字节数组流,并对字节数组执行所需的操作

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

这很有趣。。。那么附件是以二进制形式存储在数据库中,而不是物理文件?这是否意味着备份附件会给我ac
实际文件并将其传输到新的envmt将产生与以前的envmt相同的结果?好吧,我们不知道它们如何存储附件,请记住SF及其所有子系统(如SOQL)实际上代表一个抽象层。总之,我们根本不在乎,这是他们的问题;。现在,你的评论提醒我还有第三种方法。我会更新帖子,这很有趣。。。那么附件是以二进制形式存储在数据库中,而不是物理文件?这是否意味着备份附件会给我实际的文件,并将它们传输到新的envmt将获得与以前的envmt相同的结果?好吧,我们不知道它们如何存储附件,请记住,SF及其所有子系统(如SOQL)实际上代表一个抽象层。总之,我们根本不在乎,这是他们的问题;。现在,你的评论提醒我还有第三种方法。我会更新这篇博文,谢谢你帮了大忙。我希望他们能在iOS Salesforce SDK中内置类似的东西。谢谢你的帮助。我希望他们在iOS Salesforce SDK中内置类似的东西。