Salesforce中通過SOAP API和Metadata API開發java的web server服務


1。下載Salesforce平台中WSDL文件

在Salesforce中創建了自己需要用到的對象后,我們想要在別的應用中讀寫紀錄到對象中,首先需要的是自己Salesforce平台的權限通過。登陸自己的Salesforce,下載WSDL文件。

依次點擊右上角你的名字中設置--》應用程序設置--》發展--》API。

如果你的是英文,那么依次點擊Your Name --》 Setup --》 App Setup --》 Develop --》 API。

到了如下頁面后,下載圖中的三個WSDL文件。

image

2.下載並構建WSC Jar,然后把對應的wsdl文件編譯成對應jar

這里官方的方法是下載github中的Salesforces的WSC項目 https://github.com/forcedotcom/wsc 在github中也有WSC把wsdl文件生成jar的教程,但是當我執行到mvn clean package 清理WSC項目的時候便進行不下去了,是因為下載某些包的時候鏈接是外網,盡管有翻牆,但還是更新失敗,而且速度很慢,最后只有失敗告終。於是我去尋找另外的方法。究其原理,不過也就是為了獲取一個WSC的jar,然后通過cmd的命令來構建wsdl文件的jar文件,然后把這些jar文件引入到java項目中,便可以讀寫Salesforce中的對象。

在這個鏈接  http://code.google.com/p/sfdc-wsc/downloads/list 中下載wsc的jar文件。其中我下載的是wsc-23.jar文件。如果打不開網址,需要翻一下牆,下載如果不能繼續,試下右鍵 用迅雷下載,我的就是用迅雷下載的,如果有會員,那最多十幾秒的事情。

下載完成后,便是把wsdl文件編譯成對應jar。這里我用windows系統。把剛才下載的jar包和3個wsdl文件放在同一個文件夾中,打開cmd黑色的命令窗,先用cd命令進入到對應的文件夾中。接下來cmd命令窗口中輸入如下:

java -classpath wsc-23.jar com.sforce.ws.tools.wsdlc enterprise.wsdl enterprise.jar

java -classpath wsc-23.jar com.sforce.ws.tools.wsdlc partner.wsdl partner.jar

java -classpath wsc-23.jar com.sforce.ws.tools.wsdlc metadata.wsdl metadata.jar

這里需要先安裝java的jdk,本來是開發java的程序來讀寫Salesforce的對象和數據,我就當大家都已經裝好了jdk的了。如果執行沒有問題,那么你的文件夾應該多了3個jar文件,最后整個文件夾便變成:

image

3.創建程序並引用外部jar文件

准備就緒,接下來想開發任何程序都可以了,web,server,安卓(安卓和IOS有另外的SDK,沒必要用這種方法,個人理解)等等都行了。

創建java程序和引用jar外部包我就不解釋,要應用的jar就是上圖文件夾中的4個jar,對,wsc-23.jar也要

package wsc;

import com.sforce.soap.enterprise.Connector;
import com.sforce.soap.enterprise.DeleteResult;
import com.sforce.soap.enterprise.EnterpriseConnection;
import com.sforce.soap.enterprise.Error;
import com.sforce.soap.enterprise.QueryResult;
import com.sforce.soap.enterprise.SaveResult;
import com.sforce.soap.enterprise.sobject.Account;
import com.sforce.soap.enterprise.sobject.Contact;
import com.sforce.ws.ConnectionException;
import com.sforce.ws.ConnectorConfig;

public class Main {
  
static final String USERNAME = "YOUR-USERNAME";                   //Salesforce賬號中的用戶名
static final String PASSWORD = "YOUR-PASSWORD&SECURITY-TOKEN";    //密碼,這個密碼有點特殊,需要在密碼后面加入安全標記
  static EnterpriseConnection connection;

  public static void main(String[] args) {

    ConnectorConfig config = new ConnectorConfig();
    config.setUsername(USERNAME);
    config.setPassword(PASSWORD);
        
    try {
      
      connection = Connector.newConnection(config);
      // 增刪改查
      queryContacts();
      createAccounts();
      updateAccounts();
      deleteAccounts();
      
      
    } catch (ConnectionException e1) {
        e1.printStackTrace();
    }  

  }
  
  // queries and displays the 5 newest contacts
  private static void queryContacts() {
    
    System.out.println("Querying for the 5 newest Contacts...");
    
    try {
       
      // query for the 5 newest contacts      
      QueryResult queryResults = connection.query("SELECT Id, FirstName, LastName, Account.Name " +
              "FROM Contact WHERE AccountId != NULL ORDER BY CreatedDate DESC LIMIT 5");
      if (queryResults.getSize() > 0) {
        for (int i=0;i<queryResults.getRecords().length;i++) {
          // cast the SObject to a strongly-typed Contact
          Contact c = (Contact)queryResults.getRecords()[i];
          System.out.println("Id: " + c.getId() + " - Name: "+c.getFirstName()+" "+
              c.getLastName()+" - Account: "+c.getAccount().getName());
        }
      }
      
    } catch (Exception e) {
      e.printStackTrace();
    }    
    
  }
  
  // create 5 test Accounts
  private static void createAccounts() {
    
    System.out.println("Creating 5 new test Accounts...");
    Account[] records = new Account[5];
    
    try {
       
      // create 5 test accounts
      for (int i=0;i<5;i++) {
        Account a = new Account();
        a.setName("Test Account "+i);
        records[i] = a;
      }
      
      // create the records in Salesforce.com
      SaveResult[] saveResults = connection.create(records);
      
      // check the returned results for any errors
      for (int i=0; i< saveResults.length; i++) {
        if (saveResults[i].isSuccess()) {
          System.out.println(i+". Successfully created record - Id: " + saveResults[i].getId());
        } else {
          Error[] errors = saveResults[i].getErrors();
          for (int j=0; j< errors.length; j++) {
            System.out.println("ERROR creating record: " + errors[j].getMessage());
          }
        }    
      }
      
    } catch (Exception e) {
      e.printStackTrace();
    }    
    
  }
  
  // updates the 5 newly created Accounts
  private static void updateAccounts() {
    
    System.out.println("Update the 5 new test Accounts...");
    Account[] records = new Account[5];
    
    try {
       
      QueryResult queryResults = connection.query("SELECT Id, Name FROM Account ORDER BY " +
              "CreatedDate DESC LIMIT 5");
      if (queryResults.getSize() > 0) {
        for (int i=0;i<queryResults.getRecords().length;i++) {
          // cast the SObject to a strongly-typed Account
          Account a = (Account)queryResults.getRecords()[i];
          System.out.println("Updating Id: " + a.getId() + " - Name: "+a.getName());
          // modify the name of the Account
          a.setName(a.getName()+" -- UPDATED");
          records[i] = a;
        }
      }
      
      // update the records in Salesforce.com
      SaveResult[] saveResults = connection.update(records);
      
      // check the returned results for any errors
      for (int i=0; i< saveResults.length; i++) {
        if (saveResults[i].isSuccess()) {
          System.out.println(i+". Successfully updated record - Id: " + saveResults[i].getId());
        } else {
          Error[] errors = saveResults[i].getErrors();
          for (int j=0; j< errors.length; j++) {
            System.out.println("ERROR updating record: " + errors[j].getMessage());
          }
        }    
      }
      
    } catch (Exception e) {
      e.printStackTrace();
    }    
    
  }
  
  // delete the 5 newly created Account
  private static void deleteAccounts() {
    
    System.out.println("Deleting the 5 new test Accounts...");
    String[] ids = new String[5];
    
    try {
       
      QueryResult queryResults = connection.query("SELECT Id, Name FROM Account ORDER BY " +
              "CreatedDate DESC LIMIT 5");
      if (queryResults.getSize() > 0) {
        for (int i=0;i<queryResults.getRecords().length;i++) {
          // cast the SObject to a strongly-typed Account
          Account a = (Account)queryResults.getRecords()[i];
          // add the Account Id to the array to be deleted
          ids[i] = a.getId();
          System.out.println("Deleting Id: " + a.getId() + " - Name: "+a.getName());
        }
      }
      
      // delete the records in Salesforce.com by passing an array of Ids
      DeleteResult[] deleteResults = connection.delete(ids);
      
      // check the results for any errors
      for (int i=0; i< deleteResults.length; i++) {
        if (deleteResults[i].isSuccess()) {
          System.out.println(i+". Successfully deleted record - Id: " + deleteResults[i].getId());
        } else {
          Error[] errors = deleteResults[i].getErrors();
          for (int j=0; j< errors.length; j++) {
            System.out.println("ERROR deleting record: " + errors[j].getMessage());
          }
        }    
      }
      
    } catch (Exception e) {
      e.printStackTrace();
    }    
    
  }
 
}

例子中如果需要用到新的對象,比如我自己創建的Position對象,那么可以在對象的詳細頁面找到對象對應的api名稱,以及對象中字段api名稱,如下圖

image

找到對應的api名稱后,如果需要創建一條Position紀錄,那么可以這樣new一個對象  Position__c a = new Position__c(); 然后通過Set的擴展方法來對對象字段的值進行賦值便可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM