salesforce 零基础学习(五十一)使用 Salesforce.com SOAP API 实现用户登录以及简单的增删改查(JAVA访问salesforce)

此篇请参看:https://resources.docs.salesforce.com/202/latest/en-us/sfdc/pdf/salesforce_developer_environment_tipsheet.pdf

salesforce提供了多种API和外部交互,常用的有REST API方式以及SOAP API方式。其中,REST方式好处是方便,如果业务逻辑不复杂情况下,rest方式是首选,但是如果操作特别复杂,比如在api中需要调用审批流,需要进行复杂的业务逻辑,则可以考虑使用SOAP API。

此篇内容为使用java通过SOAP方式实现用户登录以及简单的增删改查操作,因为salesforce对于TLS升级到1.1,方便起见,目前使用的JDK版本为1.8,使用SOAP方式操作的步骤如下(假定你的jdk安装完成以及环境变量配置完成):

1.下载Force.com Web Service Connector

下载链接为http://mvnrepository.com/artifact/com.force.api/force-wsc  我下载的版本为38.0.4

2.下载开发的WSDL文件

Setup->Build->API,这里有很多可以选择的WSDL,企业级WSDL,合作伙伴,元信息等。此处选择企业级WSDL,选择以后详情页右键另存为MyProject.wsdl,名字随便起

不同WSDL区别:https://developer.salesforce.com/docs/atlas.en-us.202.0.api.meta/api/sforce_api_quickstart_intro.htm#choose_wsdl

3.下载Rhino JavaScript framework,下载完rar文件以后选择其中的js.jar

https://developer.mozilla.org/en-US/docs/Mozilla/Projects/Rhino/Download_Rhino

4.下载StringTemplate engine framework ,我选择的是目前最新的4.0.8.jar

http://www.stringtemplate.org/download.html

5.下载ANTRL runtime,我下载的是最新的版本的complete模式,其他模式有可能缺少相关的类

http://www.antlr.org/download.html

6.生成myproject.jar,将上述jar包以及myproject.wsdl放置在C:\Users\test\Desktop\myproject目录下,打开控制台

  1) cd C:\Users\test\Desktop\myproject

  2)java -classpath force-wsc-38.0.4.jar;ST4-4.0.8.jar;antlr-4.5.3-complete.jar;js.jar com.sforce.ws.tools.wsdlc myproject.wsdl myproject.jar

 7.使用force-wsc-38.04.jar以及生成的myproject.jar实现java通过soap api方式访问sfdc,使用soap api访问有很多限制,比如一次insert或者upsert不能超过200等,这里举例登录以及批量添加功能。

 限制详情:https://developer.salesforce.com/docs/atlas.en-us.204.0.salesforce_app_limits_cheatsheet.meta/salesforce_app_limits_cheatsheet/salesforce_app_limits_platform_apicalls.htm

SOAP API : https://resources.docs.salesforce.com/204/latest/en-us/sfdc/pdf/apex_api.pdf

Test:

 1 package controller;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 
 6 import com.sforce.soap.enterprise.Connector;
 7 import com.sforce.soap.enterprise.EnterpriseConnection;
 8 import com.sforce.soap.enterprise.sobject.Company_Info__c;
 9 import com.sforce.ws.ConnectionException;
10 import com.sforce.ws.ConnectorConfig;
11 
12 public class Test {
13     static final String USERNAME = "zhangyueqi_dlmu@163.com";
14     static final String PASSWORD = "zyq123EfaM6E59ROTm6mgvEjXMD4IUS";
15     static EnterpriseConnection connection;
16     static List<Company_Info__c> companyInfoList;
17     public static void main(String[] args) {
18 
19         ConnectorConfig config = new ConnectorConfig();
20         config.setUsername(USERNAME);
21         config.setPassword(PASSWORD);
22 
23         try {
24 
25             connection = Connector.newConnection(config);
26             System.out.println("Auth EndPoint: "+config.getAuthEndpoint());
27             System.out.println("Service EndPoint: "+config.getServiceEndpoint());
28             System.out.println("Username: "+config.getUsername());
29             System.out.println("SessionId: "+config.getSessionId());
30             companyInfoList = new ArrayList<Company_Info__c>();
31             createData();
32             List<Company_Info__c> tempCompanyInfoList = new ArrayList<Company_Info__c>();
33             for(int i=0;i<companyInfoList.size();i++) {
34                 tempCompanyInfoList.add(companyInfoList.get(i));
35                 //create超过200将会报错。sfdc的limit
36                 if(i % 199 == 198 || i == companyInfoList.size()-1) {
37                     connection.create(tempCompanyInfoList.toArray(new Company_Info__c[tempCompanyInfoList.size()]));
38                     tempCompanyInfoList.clear();
39                 }
40             }
41             
42         } catch (ConnectionException e1) {
43             e1.printStackTrace();
44         } 
45     }
46     
47     private static void createData() {
48         for(int i=0;i<220;i++) {
49             Company_Info__c companyInfo = new Company_Info__c();
50             companyInfo.setCompany_Name__c("company name" + i);
51             companyInfo.setCompany_Code_Unique__c("company code unique" + i);
52             companyInfo.setCompany_Phone__c("13800000000");
53             companyInfo.setCompany_Place__c("company place " + i);
54             companyInfo.setCompany_Type__c("company type" + i);
55             companyInfoList.add(companyInfo);
56         }
57     }
58 }

总结:此篇主要内容为如何生成SOAP以及SOAP API的简单使用,详情可以参看SOAP API获取更多使用功能。篇中如果有错误地方,欢迎指正,有问题欢迎留言。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏散尽浮华

Linux系统下的用户密码设定梳理

随着linux使用的普遍,对于linux用户以及系统的安全要求越来越高,而用户密码复杂程度是系统安全性高低的首要体现。因此如何对linux下用户的密码进行规则限...

2369
来自专栏破晓之歌

python+Django+mysql多图,多文件上传(包含admin)

新建app,修改setting.py中的installed_app和静态路径,增加媒体路径

1482
来自专栏james大数据架构

资源等待类型sys.dm_os_wait_stats

动态管理视图  sys.dm_os_wait_stats  返回执行的线程所遇到的所有等待的相关信息。可以使用该聚合视图来诊断 SQL Server 以及特定查...

1987
来自专栏唐维黎的专栏

Web 性能压测工具 ApacheBench(ab)使用总结

对于 web 服务,不管是上新,还是平时产品运营,节假日活动等,在这之前都需要评估现网压力承受能力,提前进行扩容,并做到防患于未然。所以对网站性能压力测试是必不...

1.5K0
来自专栏一个爱瞎折腾的程序猿

在asp.net core2.1中添加中间件以扩展Swashbuckle.AspNetCore3.0支持简单的文档访问权限控制

在此之前的接口项目中,若使用了 Swashbuckle.AspNetCore,都是控制其只在开发环境使用,不会就这样将其发布到生产环境(安全第一) 。 那么,...

1091
来自专栏程序员八阿哥

Python从入门到摔门(6):Python Web服务器Tornado使用小结

举例来说,假设某个银行网站有这样的 URL: http://bank.example.com/withdraw?amount=1000000&for=Eve ...

1182
来自专栏木宛城主

基于Socket的网络聊天室编程(第一版)

一:什么是套接字 在网络编程中最常用的方案便是Client/Server (客户机/服务器)模型。在这种方案中客户应用程序向服务器程序请求服务。一个服务程序通常...

2165

访问数据 - 反应方式(Vert.x入门的第4部分)

原文地址:https://dzone.com/articles/accessing-data-the-reactive-way

7734
来自专栏刘望舒

Android系统启动流程(四)Launcher启动过程与系统启动流程

前言 此前的文章我们学习了init进程、Zygote进程和SyetemServer进程的启动过程,这一篇文章我们就来学习Android系统启动流程的最后一步:L...

2128
来自专栏依乐祝

ASP.NET Core 2.1中基于角色的授权

Identity是一个会员资格系统,它允许我们将登录功能添加到我们的应用程序中,身份可能属于一个或多个角色。例如,“User1”属于“Admin”角色,“Use...

1001

扫码关注云+社区