- 定义class为global
- Method 使用关键字 webservice 声明
- webservice 声明的method需要声明为static
- Method返回值不能是:Map/Set
- webservice 声明的变量不能标记为static
global class MyWebService { webservice static Id makeContact(String contactLastName, Account a) { Contact c = new Contact(lastName = contactLastName, AccountId = a.Id); insert c; return c.id; } }
第一步:在开放Apex类方法作为SOAP Web服务时,需要在Sales force → Setup → API, 根据需求选择一个合适的WSDL文件,这里我们选择Partner WSDL
Tips:Salesforce提供WSDL(Web Service Description Language)文件。它们被称为“企业WSDL”和“合作伙伴WSDL”。 WSDL是一个XML文档,其中包含有关如何使用Web服务进行通信的标准说明(Salesforce API作为Web服务公开)。 WSDL被开发人员用来帮助创建Salesforce集成件。一个典型的过程涉及使用开发环境(例如,Eclipse for Java或Visual Studio for .Net)使用WSDL,并生成在集成中引用的类
参考链接:Differences between Salesforce provided WSDL files
/********************************************* 企业WSDL 1.企业WSDL是强类型的。 2.企业WSDL绑定(绑定)到Salesforce的特定配置(即特定组织的Salesforce配置)。 3.如果对组织的Salesforce配置进行了修改(例如,自定义字段或自定义对象),则Enterprise WSDL会更改。 由于上述原因,企业WSDL主要面向客户 WSDL合作伙伴 1.合作伙伴WSDL是松散键入的。 2.合作伙伴WSDL可用于反映/询问Salesforce的任何配置(即,任何组织的Salesforce配置)。 3.合作伙伴WSDL是静态的,因此,如果对组织的Salesforce配置进行了修改,则WSDL不会更改。 由于上述原因,合作伙伴WSDL主要用于合作伙伴 **********************************************/
第二步:然后我们来创建一个WebServie类: GenerateContact
/** * * @Author:Ricardo * @Time:2020-04-21 * @function:test SOAP Method * * **/ global class GenerateContact { webservice static string createcontactinorganisationsecond(string firstname,string lastname,string title,string cemail){ contact con = new contact(); con.FirstName = firstname; con.LastName = lastname; con.Title = title; con.email = cemail; insert con; return 'success'; } }
第三步:将我们的WebService类生成WSDL文件,然后保存起来
完成这几步之后,我们登录另一个Sales force账户,参照Salesforce SOAP 接口集成服务这篇博客中,关于如何引入外部SOAP接口的描述,将上面的俩WSDL文件导入系统.
需要注意的一个,我在尝试引入Partner WSDL文件时,遇到一个异常:
根据错误描述,我发现WSDL文件中有anyType这种元素,解决办法就是用文本编辑器将所有的anyType替换成String即可.
在上传GenerateContact.xml时,修改下类名称,方便使用
在生成的SOAP_GenerateContact和partnerSoapSforceCom中查找endpoint_x,并将其添加到remote site(远程站点)中
OK,上述步骤都搞定之后呢,我们就可以从尝试调用这个SOAP方法了,代码如下
partnerSoapSforceCom.Soap mypartnersoap = new partnerSoapSforceCom.Soap(); partnerSoapSforceCom.LoginResult partnerloginresult = mypartnersoap.login('child-system-username','child-system-password + child-system-SecurityToken'); SOAP_GenerateContact.SessionHeader_element webservicesessionheader = new SOAP_GenerateContact.SessionHeader_element(); webservicesessionheader.sessionId = partnerloginresult.sessionId; SOAP_GenerateContact.GenerateContact generateContact = new SOAP_GenerateContact.GenerateContact(); generateContact.SessionHeader = webservicesessionheader; String result = generateContact.createcontactinorganisationsecond('first','last','contactTitle','blog@test.com'); system.debug('result:' + result );
在控制台中执行这段代码,然后在我们的子系统中,就能找到这条通过接口创建的数据记录了
这篇博客主要记录SOAP API的登录以及简单的插入数据,更多功能可以查询Sales force官方给出的SOAP API的文档
参考文档: