如何将Informatica PowerCenter暴露为Web服务供Salesforce调用并传递数据
将Informatica PowerCenter暴露为Web服务供Salesforce调用的步骤
要实现Salesforce传递Id给Informatica、后者查询数据库记录的对接,核心是把PowerCenter的工作流包装成Web服务,具体操作如下:
1. 先搞定PowerCenter的映射逻辑
- 创建Web服务源定义:定义一个接收
Id字段的源,数据类型要和Salesforce的Id匹配(字符串类型,长度设为18)。 - 配置目标定义:如果需要把查询结果返回给Salesforce,就定义和数据库记录对应的字段结构;如果只需要执行查询不需要返回,也可以设成日志目标或者无目标。
- 搭建映射流程:
- 用
Source Qualifier组件,写带参数的SQL查询,比如SELECT * FROM your_target_table WHERE id = :p_input_id,这里:p_input_id是占位符,用来接收传入的Id。 - 把Web服务源的
Id字段关联到Source Qualifier的参数上,确保参数能正确传递。 - 要是需要返回结果,就把Source Qualifier的输出连到目标组件;不需要的话,直接加个日志组件记录执行状态就行。
- 用
2. 创建并测试工作流
- 基于上面的映射建会话任务,配置好数据库连接、参数映射这些细节。
- 把会话任务加到工作流里,先手动跑一遍,传入测试Id,确认能正确查询到数据库记录,确保逻辑没问题。
3. 用Web Services Hub把工作流转成Web服务
- 打开Informatica Administrator控制台,找到对应的Integration Service。
- 右键点要暴露的工作流,选Deploy as Web Service:
- 填Web服务的名称、命名空间(比如
http://yourcompany.com/informatica/salesforce)。 - 定义输入参数:把映射里的
Id字段设为Web服务的输入参数,名称和类型要和Salesforce那边对应上。 - 定义输出参数(如果要返回结果):把需要传给Salesforce的数据库字段配置成输出。
- 选好Web Services Hub的部署节点,完成部署。
- 填Web服务的名称、命名空间(比如
4. 配置安全访问(可选但建议做)
- 如果需要身份验证,在Web Services Hub里配置SOAP安全,比如Basic Auth或者OAuth,和Salesforce的认证方式对齐。
- 加个访问控制,限制只有Salesforce的IP段或者指定账号能调用这个服务,避免乱调用。
5. 测试Web服务可用性
- 用SOAP UI或者Postman,拿部署后生成的WSDL地址,发一个带Id参数的SOAP请求,看看能不能正确返回结果或者执行查询。
- 举个SOAP请求的例子:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://yourcompany.com/informatica/salesforce"> <soapenv:Header/> <soapenv:Body> <ser:QueryRecordById> <ser:p_input_id>001D000000K0fXOIAZ</ser:p_input_id> </ser:QueryRecordById> </soapenv:Body> </soapenv:Envelope>
6. Salesforce端调用配置
- 在Salesforce里,要么用Apex类,要么用External Services来调用这个Web服务:
- 用Apex的话,先在Setup > Apex Classes里选Generate from WSDL,把Web服务的WSDL转成Apex类。
- 写Apex代码,传入Salesforce的Id,调用Web服务,处理返回结果。比如:
QueryRecordByIdService service = new QueryRecordByIdService(); // 配置认证信息(如果开了Basic Auth) service.inputHttpHeaders_x.put('Authorization', 'Basic ' + EncodingUtil.base64Encode(Blob.valueOf('inf_username:inf_password'))); // 传入要查询的Id String targetId = '001D000000K0fXOIAZ'; QueryRecordByIdResponse response = service.QueryRecordById(targetId); // 打印结果或者做后续处理 System.debug('查询到的记录: ' + response);
内容的提问来源于stack exchange,提问作者kumar
相关产品推荐
相关产品推荐

