1。下载Salesforce平台中WSDL文件

在Salesforce中创建了自己需要用到的对象后,我们想要在别的应用中读写纪录到对象中,首先需要的是自己Salesforce平台的权限通过。登陆自己的Salesforce,下载WSDL文件。

依次点击右上角你的名字中设置--》应用程序设置--》发展--》API。

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

到了如下页面后,下载图中的三个WSDL文件。

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-.jar com.sforce.ws.tools.wsdlc enterprise.wsdl enterprise.jar

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

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

这里需要先安装java的jdk,本来是开发java的程序来读写Salesforce的对象和数据,我就当大家都已经装好了jdk的了。如果执行没有问题,那么你的文件夹应该多了3个jar文件,最后整个文件夹便变成:

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名称,如下图

找到对应的api名称后,如果需要创建一条Position纪录,那么可以这样new一个对象  Position__c a = new Position__c(); 然后通过Set的扩展方法来对对象字段的值进行赋值便可。

Salesforce中通过SOAP API和Metadata API开发java的web server服务的更多相关文章

  1. arcgis api for js入门开发系列二不同地图服务展示(含源代码)

    上一篇介绍了arcgis api离线部署,这篇开始正式介绍arcgis api for js开发:想要学习webgis开发,首先得熟悉了解前端技术,比如界面布局设计的html+css,核心的是java ...

  2. ubuntu16.04-x64系统中Jexus web server部署.NetCore和端口分析引发的猜想!

    您有这样的牢骚么? 有一周没更新博客了,简单说下在干什么吧:主要是公司安排对接某旅游大公司的接口,接口数量倒也就10个左右,对接完后还需要加入到业务系统中和App端,因此还是需要花点时间的:时间上来说 ...

  3. C#中自己动手创建一个Web Server(非Socket实现)

    目录 介绍 Web Server在Web架构系统中的作用 Web Server与Web网站程序的交互 HTTPListener与Socket两种方式的差异 附带Demo源码概述 Demo效果截图 总结 ...

  4. Android开发-API指南-<meta-data>

    <meta-data> 英文原文:http://developer.android.com/guide/topics/manifest/meta-data-element.html 采集( ...

  5. API网关在API安全性中的作用

    从单一应用程序切换到微服务时,客户端的行为不能与客户端具有该应用程序的一个入口点的行为相同.简单来说就是微服务上的某一部分功能与单独实现该应用程序时存在不同. 目前在使用微服务时,客户端必须处理微服务 ...

  6. salesforce 零基础学习(五十五)java通过SOAP方式定时访问某个文件然后插入到sObject中

    项目源码:https://github.com/zhangyueqidlmu/SOAP-Access-SFDC.git 项目背景:salesforce端相关数据需要其他系统提供,其他系统可以提供相关数 ...

  7. HTML5中与页面显示相关的API

    1.HTML5中与页面显示相关的API 在HTML5中,增加了几个与页面显示相关的API,其中一个是Page Visibility API Page Visibility API  是指当页面变为最小 ...

  8. 【ASP.NET Web API教程】5.5 ASP.NET Web API中的HTTP Cookie

    原文:[ASP.NET Web API教程]5.5 ASP.NET Web API中的HTTP Cookie 5.5 HTTP Cookies in ASP.NET Web API 5.5 ASP.N ...

  9. 【ASP.NET Web API教程】4.3 ASP.NET Web API中的异常处理

    原文:[ASP.NET Web API教程]4.3 ASP.NET Web API中的异常处理 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本系列教程,请先看前面的内 ...

随机推荐

  1. 用公式编辑器编辑n元乘积的方法

    在数学中经常会出现很多个元素进行求和或者是乘积的情况,但是在整个数学过程中,不可能将所有的元素都写出来,这样很费时费力同时过程也很赘余,不能很好地理解其中的过程,因此数学中对于这一类的多元相加或者相乘 ...

  2. Struts2_day03--课程安排_OGNL概述入门_什么是值栈_获取值栈对象_值栈内部结构

    Struts2_day03 上节内容 今天内容 OGNL概述 OGNL入门案例 什么是值栈 获取值栈对象 值栈内部结构 向值栈放数据 向值栈放对象 向值栈放list集合 从值栈获取数据 获取字符串 获 ...

  3. 工作表(Worksheet)基本操作应用示例

    在编写代码时,经常要引用工作表的名字.知道工作表在工作簿中的位置.增加工作表.删除工作表.复制工作表.移动工作表.重命名工作表,等等.下面介绍与此有关及相关的一些属性和方法示例. [示例04-01]增 ...

  4. 1854: [Scoi2010]游戏[并查集]

    1854: [Scoi2010]游戏 Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 4938  Solved: 1948[Submit][Status] ...

  5. 探讨Java I/O类和接口

    (输出)Output:程序---->数据源(如某个文件) (输入)Input:数据源---->程序 Java.io定义的I/O类如下表所示: BufferedInputStream Buf ...

  6. 设置 SSH Key 登录服务器和 Git 服务器

    设置 SSH Key 登录服务器 通过 ssh 登录服务器,一直都是用的账号和密码,今天看到一篇文章说这样不安全,使用 ssh key 的方式登录则是更好的选择,因此,研究实践了一下,并记录在这里. ...

  7. 160505、oracle 修改字符集 修改为ZHS16GBK

    修改oracle字符集 方法/步骤   oracle数据库的字符集更改 A.oracle server 端 字符集查询 select userenv('language') from dual 其中N ...

  8. 160425、linux安装SVN服务器

    1:查看linux是否已经安装svn服务 [root@nb ~]# rpm -qa subversion subversion-1.6.11-15.el6_7.x86_64 2:安装svn #yum ...

  9. 用angular引入复杂的json文件

    我们在写网页时是有很多的重复代码和重复样式的,我们也不能一口气敲下来,这样就成为了体力劳动了. 所以我在遇到这种情况的时候大部分是用angular来获取json的,而用angular来让json数据库 ...

  10. java基础之Flex弹性布局、JSP错误处理以及Log4J

    一.Flex弹性布局 1.产生的比较晚,目前在移动网页开发中可以使用,而且逐渐成为主流. 在桌面网页开发中使用的比较少(主要是桌面浏览器的兼容性问题更加严重) 2.开启方法: 在容器标签上加上 dis ...