Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.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:通过R中的URL下载报告_R_Url_Salesforce_Report_Httr - Fatal编程技术网

Salesforce:通过R中的URL下载报告

Salesforce:通过R中的URL下载报告,r,url,salesforce,report,httr,R,Url,Salesforce,Report,Httr,我尝试通过URL下载Salesforce中提供的报告,例如 http://YOURInstance.my.salesforce.com/012389u13541?export=1&enc=UTF-8&xf=csv 在R 然而,我已经通过HTTR-GET进行了一些调查,以获取该报告,直到今天,还没有任何有意义的结果。不幸的是,R正在下载HTML代码,而不是所需的csv文件。我还尝试实现此处建议的方法: 包“RForcecom”允许通过API进行交互,但我无法理解如何在R中实现上

我尝试通过URL下载Salesforce中提供的报告,例如

http://YOURInstance.my.salesforce.com/012389u13541?export=1&enc=UTF-8&xf=csv
在R

然而,我已经通过HTTR-GET进行了一些调查,以获取该报告,直到今天,还没有任何有意义的结果。不幸的是,R正在下载HTML代码,而不是所需的csv文件。我还尝试实现此处建议的方法:

包“RForcecom”允许通过API进行交互,但我无法理解如何在R中实现上述解决方案

一般获取请求:

GET("http://YOUR_Instance.my.salesforce.com/012389u13541?export=1&enc=UTF-8&xf=csv")
我希望输出是csv格式的,但我收到的报告数据是html源代码

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3...
<html>
<head>
    <meta HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
...

您确定您有有效的报告id吗?它看起来不对劲(你只是为了这篇文章的目的把它弄糊涂了吗?)。您得到的HTML中有什么错误消息?SF登录屏幕

你所做的就是有效地“刮屏”。这不是一个真正的API,它随时都可能崩溃,您应该找到/构建正确使用Salesforce的东西。你已经被警告过了

但是如果你想要一个快速而肮脏的解决方案

您需要假装自己是经过身份验证的用户,并且拥有有效的会话id。向GET请求添加cookie

如何获取有效的会话id

  • 您必须首先登录到SF(例如,使用call或我在这里列出了一些RESTAPI想法:)
  • 或者在SF中显示某个用户的会话ID,然后用户将其复制粘贴到您的应用程序中
一旦你有了它-添加一个
Cookie
头到你的GET中,带有值
sid=

这里是SoapUI中的原始请求和响应


您确定您有有效的报告id吗?它看起来不对劲(你只是为了这篇文章的目的把它弄糊涂了吗?)。您得到的HTML中有什么错误消息?SF登录屏幕

你所做的就是有效地“刮屏”。这不是一个真正的API,它随时都可能崩溃,您应该找到/构建正确使用Salesforce的东西。你已经被警告过了

但是如果你想要一个快速而肮脏的解决方案

您需要假装自己是经过身份验证的用户,并且拥有有效的会话id。向GET请求添加cookie

如何获取有效的会话id

  • 您必须首先登录到SF(例如,使用call或我在这里列出了一些RESTAPI想法:)
  • 或者在SF中显示某个用户的会话ID,然后用户将其复制粘贴到您的应用程序中
一旦你有了它-添加一个
Cookie
头到你的GET中,带有值
sid=

这里是SoapUI中的原始请求和响应


在您的示例中,我不认为您可以在尝试时将
rforcecom
会话与
httr
功能一起使用

这里有一个稍微不同的方法来解决这个问题

与其尝试检索已在Salesforce中创建的报表,不如在SOQL中指定报表,并使用
rforcecom.query
函数从r执行SOQL。这将返回数据帧中的数据,并且不需要在r中进行进一步的数据争用以使其可用

我经常使用这种技术,一旦您习惯了SalesforceAPI,我认为对于大多数用例来说,它可能更快、更强大

下面是一个简单的函数,我使用它返回Salesforce中所有opportunity的select opportunity数据

getSFOpps <- function(session) {

    #Construct SOQL Query
    soql <- "SELECT Id,
                Name,
                AccountId,
                Amount,
                CurrencyIsoCode,
                convertCurrency(Amount) usd_amount,
                CloseDate,
                CreatedDate,
                Region__c,
                IsClosed,
                IsWon,
                LastActivityDate,
                LeadSource,
                OwnerId,
                Probability,
                StageName,
                Type,
                IsDeleted
                    FROM Opportunity"

    #Retrieve Opp information
        as_tibble(RForcecom::rforcecom.query(session, soql))
}

getSFOpps在您的示例中,我不认为您可以在尝试使用
rforcecom
会话时使用
httr
函数

这里有一个稍微不同的方法来解决这个问题

与其尝试检索已在Salesforce中创建的报表,不如在SOQL中指定报表,并使用
rforcecom.query
函数从r执行SOQL。这将返回数据帧中的数据,并且不需要在r中进行进一步的数据争用以使其可用

我经常使用这种技术,一旦您习惯了SalesforceAPI,我认为对于大多数用例来说,它可能更快、更强大

下面是一个简单的函数,我使用它返回Salesforce中所有opportunity的select opportunity数据

getSFOpps <- function(session) {

    #Construct SOQL Query
    soql <- "SELECT Id,
                Name,
                AccountId,
                Amount,
                CurrencyIsoCode,
                convertCurrency(Amount) usd_amount,
                CloseDate,
                CreatedDate,
                Region__c,
                IsClosed,
                IsWon,
                LastActivityDate,
                LeadSource,
                OwnerId,
                Probability,
                StageName,
                Type,
                IsDeleted
                    FROM Opportunity"

    #Retrieve Opp information
        as_tibble(RForcecom::rforcecom.query(session, soql))
}

getSFOpps我最近也遇到了同样的问题,需要在查询中添加一个神奇的参数:isdtp=p1

因此,如果您尝试:


它应该直接将文件返回给您

我最近也遇到了同样的问题,有一个神奇的参数需要添加到查询中:isdtp=p1

因此,如果您尝试:

它应该直接将文件返回给您

从v0.2.0开始,R包实现Salesforce。您可以执行和管理报表,而无需从头编写函数来下拉报表数据。下面是一个如何在组织中查找报告并检索其数据的示例。在Salesforce中查看报告时,您也可以使用URL栏中显示的报告Id(在下面的屏幕截图中以红色突出显示)

#install.packages('salesforcer'))
库(dplyr,warn.conflicts=FALSE)
图书馆(salesforcer)
#使用用户名、密码和安全令牌进行身份验证。。。
sf_身份验证(用户名=”test@gmail.com", 
password=“{password_HERE}”,
安全令牌=“{security\u token\u HERE}”)
# ... 或者使用OAuth2.0身份验证
sf_auth()
#在组织中查找报告并运行它
从v0.2.0开始,所有_报告,R包实现Salesforce。您可以执行和管理报表,而无需从头编写函数来下拉报表数据。下面是一个如何在组织中查找报告并检索其数据的示例。在Salesforce中查看报告时,您也可以使用URL栏中显示的报告Id(在下面的屏幕截图中以红色突出显示)

#install.packages('salesforcer'))
库(dplyr,warn.conflicts=FALSE)
图书馆(salesforcer)
#使用用户名、密码和安全令牌进行身份验证。。。
sf_认证(用户名)