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. angularJs 多文件动态上传(删除其中一个文件的时候,要么file没被删除,要么删除了之后,点击事件失效)

    <div cacModule.controller('CacScriptEditCtrl', CacScriptEditCtrl); CacScriptEditCtrl.$inject = [' ...

  2. django 模型中的计算字段

    models.py class Person(models.Model): family_name= models.CharField(max_length=20, verbose_name='姓') ...

  3. 20 个常用的 CSS 技巧

    1. 黑白图像 这段代码会让你的彩色照片显示为黑白照片,是不是很酷? img.desaturate {    filter: grayscale(100%);    -webkit-filter: g ...

  4. jquery获取设置input值

    $("#input").val("123"),注意val()这个函数$("#input").val("123"),//给 ...

  5. 项目期复习总结2:Table, DIV+CSS,标签嵌套规则

    文件夹: 1.表格的意义,含义? 2.表格有哪些元素? 3.表格布局,表格布局的优缺点 4.行元素,块元素的差别? 5.标签的合理嵌套及标签的语义性 ① 表格的意义,含义? 表格应该用来展现那些适合表 ...

  6. ProcessBuilder执行本地命令

    /**关键技术剖析 * 用本命令名和命令的参数选项构造ProcessBuilder对象,它的start方法执行命令,启动一个进程,返回一个Process对象 * ProcessBuilder的envi ...

  7. Go基础---->go的第一个程序

    今天我们学习搭建一个学习go语言的开发环境. Go语言 一.下载go 下载地址:https://golang.org/dl/ 校验下载,在命令行输入go version 二.编写第一个hello wo ...

  8. 基于k8s的promethus监控

    没有监控 就没有眼睛. 除了k8s的基本监控外(pod运行状况.占用内存.cpu).为了对微服务项目中的(1)各种参数线程池.QPS.RT.业务指标(2)系统负载.thread.mem.class.t ...

  9. 170425、centos安装mysql5.6数据库

    # rpm -qa | grep mysql ## 查看该操作系统上是否已经安装了 mysql 数据库, 有的话,可以通过 rpm -e 命令 或者 rpm -e --nodeps 命令来卸载掉 # ...

  10. Django -- some config

    1.主项目下的url配置:urls.py文件 from django.contrib import adminfrom django.urls import path, includefrom dja ...