[Force.comでWeb制作]HTTPコールアウトのエンドポイントのデバッグ

By |4月 9, 2010|Force.comでWeb制作, |


Force.comから外部のWebサービスに対してHTTPコールアウトをした場合や、外部からHTTPリクエストを受け取るときに、HTTPヘッダ情報のデバッグを行う方法のご紹介。

参考:Endpoint for Debugging HTTP Callouts

HTTPリクエストを受け取る用のVisualforceページを用意してしまって、そのページをSitesで公開して、そのページのコントローラでHTTPヘッダを解析してどこかに表示する、ということをやればスピーディーにデバッグが行えます。

Visualforceページ&コントローラ例

[php]
<apex:page controller="Endpoint_Controller" cache="false" showHeader="false" sidebar="false" action="{!init}">
<pre>
<apex:outputText escape="false" value="{!debugInfo}"></apex:outputText>
</pre>
</apex:page>
[/php]

[php]

public without sharing class Endpoint_Controller {

public String debugInfo {get; set;}{

debugInfo = ”;

if (ApexPages.currentPage() != null){
// Incoming Headers
debugInfo += ‘\n***ALL INCOMING HEADERS ***\n’;
for (string key: ApexPages.currentPage().getHeaders().keySet()){
if (ApexPages.currentPage().getHeaders().get(key) != null){
debugInfo += key + ‘ = ‘ + ApexPages.currentPage().getHeaders().get(key) + ‘\n’;
}
}

// Incoming Parameters
debugInfo += ‘\n***ALL INCOMING PARAMETERS ***\n’;
for (string key: ApexPages.currentPage().getParameters().keySet()){
if (ApexPages.currentPage().getParameters().get(key) != null){
debugInfo += key + ‘ = ‘ + ApexPages.currentPage().getParameters().get(key) + ‘\n’;
}
}

// Other Page Reference Stuff
debugInfo += ‘\n***OTHER PAGE REFERENCE INFO ***\n’;
debugInfo += ‘Anchor: ‘ + ApexPages.currentPage().getAnchor() + ‘\n’;
debugInfo += ‘URL: ‘ + ApexPages.currentPage().getUrl() + ‘\n’;
}

}

public Endpoint_Controller(){}

public PageReference init() {

Task t = new Task();
t.Subject = ‘Endpoint Invoked’;
t.Description = debugInfo;
t.ActivityDate = Date.Today();
insert t;

return null;

}

static testMethod void Endpoint_Controller_test() {

// Set the page reference and pass through some parameters
PageReference thePage = Page.Endpoint;
thePage.getParameters().put(‘param1′,’1’);
thePage.getParameters().put(‘param2′,’2’);
Test.setCurrentPage(thePage);

// Run the init function to have it handle the web to lead submission
Endpoint_Controller ep = new Endpoint_Controller();
ep.init();
}
}
[/php]

ページアクセス時に、initメソッドが実行されて、HTTPのパラメータを分析します。その情報をdebugInfoという変数に格納して、ページ上に表示したりタスクレコードに保存したりします。

外部のWebサービスと連携するときに、このページとコントローラを該当組織にインストールしておいて、連携の途中でエンドポイントをこのページ向きにしてやれば、途中途中のHTTPパラメータのデバッグが可能になります。

やってることは、SF開発用の確認君みたいな感じ。

こちらにサンプル用意しておきました。
http://abeuhuru-developer-edition.na2.force.com/endpoint