+ Start a Discussion
moscowmule888moscowmule888 

カスタムボタン押下時にSFDC上のWebServiceをコールする方法



カスタムボタン押下時のアクションとして、

OnClick JavaScriptを設定し、

JavaScript からSalesforce上に作成したWeb Serviceをコールしたいのですが、

なかなかうまくいきません、

 

// WebService

global class Hoge {
    webservice static Account foo() {
        // 適当な処理
    }
}

 

// JavaScript

{!REQUIRESCRIPT('/soap/ajax/10.0/connection.js')}
var envelope =
  '<?xml version="1.0"?>' +
  '<methodCall>' +
  '  <methodName>foo</methodName>' +
  '  <params></params>' +
  '</methodCall>';

sforce.connection.remoteFunction({
    url : 'https://na7-api.salesforce.com/services/Soap/class/Hoge',
    requestHeaders : {'Content-Type' : 'text/xml', 'SOAPAction' : "\"\""},
    requestData : envelope,
    method : 'POST',
    onSuccess : function(response) {
        alert('Success' + response);
    },
    onFailure : function(response) {
        alert('Failed' + response);
    }
});

 

上記のソースでカスタムボタンを押下すると、Faultとなり

The SOAP request must use SOAP 1.1, did not recieve a SOAP 1.1 Envelope as the document root

となってしまいます。

 

どなたかか、sforce.connection.remoteFunctionからSFDC上のWebServiceのコール方法を

ご存じの方がいらっしゃいましたら、ご教授頂きたいです。

 

やりたいことは、カスタムボタン押下時にSFDC上のWebServiceをコールすること(画面遷移はしない)なので、

remoteFunctionを使わずWebServiceをコールする方法でも構いません。

 

よろしくお願い致します。

 


Best Answer chosen by Admin (Salesforce Developers) 
ikouikou

これでどうでしょうか。

 

apex

global class Hello{
	webService static String getHello(){
		return 'Hello World!';
	}
}

 

 JavaScript

{!REQUIRESCRIPT('/soap/ajax/18.0/connection.js')}
{!REQUIRESCRIPT('/soap/ajax/18.0/apex.js')}
var ret = sforce.apex.execute('Hello','getHello',{}); 
alert(ret);

 

All Answers

ikouikou

これでどうでしょうか。

 

apex

global class Hello{
	webService static String getHello(){
		return 'Hello World!';
	}
}

 

 JavaScript

{!REQUIRESCRIPT('/soap/ajax/18.0/connection.js')}
{!REQUIRESCRIPT('/soap/ajax/18.0/apex.js')}
var ret = sforce.apex.execute('Hello','getHello',{}); 
alert(ret);

 

This was selected as the best answer
moscowmule888moscowmule888

無事カスタムボタン押下時にApexコードを呼び出せました。

 

Webサービスとかそんな面倒なことやる必要ないんですね。

 

apex.jsというのがあるのは全然知りませんでした。

完全に盲点でした。

ありがとうございました。