2016-11-29 4 views
0

Я интегрирую Perl с отчетами Salesforce. Я пытаюсь подключить Perl-скрипт через стандартный REST API (/ 00O93000009NpOy? Export = 1 & enc = UTF-8 & xf = csv) отчета Salesforce и получения кода ответа 200. На высоком уровне мне нужно загрузить отчет Salesforce в Excel формат с использованием Perl-скрипта.Интеграция Perl REST с Salesforce Report

Пожалуйста, смотрите в мой код:

#!/usr/bin/perl 
use warnings; 
use strict; 
use WWW::Mechanize; 
use WWW::Salesforce; 
use REST::Client; 

# Authenticate first via SOAP interface to get a session ID: 
my $sforce = eval { WWW::Salesforce->login(
        'username' => "USER_NAME", 
        'password' => "PASSWORD"); }; 
die "Could not login to SFDC: [email protected]" if [email protected]; 

# Get the session ID: 
my $hdr = $sforce->get_session_header(); 
my $sid = ${$hdr->{_value}->[0]}->{_value}->[0]; 


my $host = 'https://ap1.salesforce.com'; 
my $client = REST::Client->new(host => $host); 

# Get ALL incidents 
$client->GET('/00O93000009NpOy?export=1&enc=UTF-8&xf=csv', 
       {'Authorization' => "OAuth $sid", 
       'Accept' => 'application/json'}); 

print 'Response: ' . $client->responseContent() . "\n"; 
print 'Response status: ' . $client->responseCode() . "\n"; 
foreach ($client->responseHeaders()) { 
    print 'Header: ' . $_ . '=' . $client->responseHeader($_) . "\n"; 
} 

И когда я запустил этот код Perl через командную строку, то я получил ответ, как это:

C:\Users\Documents>perl TEST.pl`enter code here` 
Response: 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.or 
g/TR/html4/loose.dtd"> 
<html> 
<head> 
    <meta HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE"> 





<script> 
if (this.SfdcApp && this.SfdcApp.projectOneNavigator) { SfdcApp.projectOneNaviga 
tor.handleRedirect('https://login.salesforce.com/?ec=302&startURL=%2F00O90000009 
NhOy%3Fenc%3DUTF-8%26export%3D1%26xf%3Dcsv'); } else 
if (window.location.replace){ 
window.location.replace('https://login.salesforce.com/?ec=302&startURL=%2F00O900 
00009NhOy%3Fenc%3DUTF-8%26export%3D1%26xf%3Dcsv'); 
} else {; 
window.location.href ='https://login.salesforce.com/?ec=302&startURL=%2F00O90000 
009NhOy%3Fenc%3DUTF-8%26export%3D1%26xf%3Dcsv'; 
} 
</script> 

</head> 


</html> 





<!-- Body events --> 
<script type="text/javascript">function bodyOnLoad(){if(window.PreferenceBits){w 
indow.PreferenceBits.prototype.csrfToken="null";};}function bodyOnBeforeUnload() 
{}function bodyOnFocus(){}function bodyOnUnload(){}</script> 

</body> 
</html> 


<!-- 
................................................................................ 
................... 
................................................................................ 
................... 
................................................................................ 
................... 
................................................................................ 
................... 
--> 

Response status: 200 
Header: Connection=close 
Header: Date=Tue, 29 Nov 2016 10:05:43 GMT 
Header: Pragma=NO-CACHE 
Header: Content-Type=text/html;charset=UTF-8 
Header: Client-Date=Tue, 29 Nov 2016 10:05:43 GMT 
Header: Client-Peer=182.50.78.41:443 
Header: Client-Response-Num=1 
Header: Client-SSL-Cert-Issuer=/C=US/O=Symantec Corporation/OU=Symantec Trust Ne 
twork/CN=Symantec Class 3 Secure Server CA - G4 
Header: Client-SSL-Cert-Subject=/C=US/ST=California/L=San Francisco/O=Salesforce 
.com, Inc/OU=Applications/CN=*.salesforce.com 
Header: Client-SSL-Cipher=ECDHE-RSA-AES256-GCM-SHA384 
Header: Client-SSL-Socket-Class=IO::Socket::SSL 
Header: Set-Cookie=BrowserId=UGPsAKnYTgWN3JcU4kcKxg;Path=/;Domain=.salesforce.co 
m;Expires=Sat, 28-Jan-2017 10:05:43 GMT 

Хотя ответ должен быть в формате JSON, а не абсурдным. Я пробовал работать с верстаком и получаю ответ в формате JSON, который хорош. Ответ не является правильным.

+2

Добро пожаловать в Переполнение стека. Выделение синтаксиса в вашем сообщении немного нарушено. Пожалуйста, отредактируйте вопрос и посмотрите. – simbabque

+2

Похоже, что вам нужно войти в систему. Эта страница, похоже, перенаправляется на _login.salesforce.com_. Возможно, что 'eval' в начале вашего кода не делает то, что вы думаете. Вы посмотрели содержимое 'sforce'? – simbabque

ответ

0

Для того, чтобы получить JSON Вашего доклада попробуйте следующее:

$client->GET('https://<server name>.salesforce.com/services/data/v35.0/analytics/reports/<report id>', 
       {'Authorization' => "OAuth $sid", 
       'Accept' => 'application/json'}); 

Это работало для меня.

+0

https: // .salesforce.com/services/data/v35.0/аналитика/отчеты/