在Salesforce中創建Web Service供外部系統調用

  • 2019 年 10 月 8 日
  • 筆記

在Salesforce中可以創建Web Service供外部系統調用,並且可以以SOAP或者REST方式向外提供調用接口,下來的內容將詳細講述一下用SOAP的方式創建Web Service並且用java的程序進行簡單的調用。

【註:要想使其成為web service,那麼class一定要定義成global的,具體的方法要用 webService static 修飾】

在salesforce中開發-新建apex類。具體內容如下所示

2):在保存好上述的class之後,我們到setup –> build –> develop –> apex classes 中找到剛剛保存的class,我們會發現在對應的Action中有WSDL這個選項,此選項就是Salesforce默認所提供的將Web Service的class轉化成WSDL文件。如下圖所示

3):點擊上圖的WSDL按鈕,會看到如下界面,這裡顯示的是生成的WSDL文件的詳細信息,我們點擊鼠標右鍵,將此文件保存到本地,這裡姑且取名為AccountWebservice.wsdl

4):我們可以簡單的創建一個TestWebservice的javaproject

將AccountWebservice.wsdl生成AccountWebservice.jar

打開cmd 輸入 java -classpath antlr-runtime-3.5.2.jar;tools.jar;st4-4.0.4.jar;force-wsc-45.1.0.jar com.sforce.ws.tools.wsdlc AccountWebservice.wsdl AccountWebservice.jar

將jar包導入項目中

代碼如下,java中調用webservice中的接口方法

import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;

import com.sforce.soap.AccountWebservice.Account; import com.sforce.soap.AccountWebservice.SoapConnection; import com.sforce.soap.enterprise.Connector; import com.sforce.soap.enterprise.EnterpriseConnection; import com.sforce.ws.ConnectorConfig;

import net.sf.json.JSONObject;

public class Test { static final String USERNAME = "[email protected]"; //Salesforce賬號中的用戶名 static final String PASSWORD = "#########"; //密碼,這個密碼有點特殊,需要在密碼後面加入安全標記 static EnterpriseConnection connection; public static void main(String[] args) { ConnectorConfig config = new ConnectorConfig(); config.setUsername(USERNAME); config.setPassword(PASSWORD); SoapConnection sc =null; try { connection = Connector.newConnection(config); config.setServiceEndpoint("https://ap8.salesforce.com/services/Soap/class/AccountWebservice"); sc = new SoapConnection(config); Account[] ss=sc.getAccountList(); List<Account> resultList = new ArrayList<>(ss.length); for (Account account : ss) { resultList.add(account); } Map<String,Object> map = new HashMap<>(); map.put("total", resultList.size()); map.put("rows", resultList); JSONObject jsons = JSONObject.fromObject(map); System.out.println(jsons.toString()); }catch(Exception e) { e.printStackTrace(); } }

}

測試