CRM接口开发日志


前言

学习情况总结


一、Inbound WebService的创建

一个Web Service是 一个部署在网络上的业务逻辑,可以通过某种网络协议进行访问。
a) 通过WSDL【Web Service Description Language】来指定一个WS
b) 通过SOAP【Simple Object Access Protocol】来传输
c) 通过XML来存储内容
以上三个是WS的核心技术。
WSDL由发布者提供,它提供了WS的各种操作、操作的输入输出参数结构以及与WS通讯的机制。
一个WSDL文件被发布成一个XML的实例。
SOAP是一个轻量级的协议,它用于在分布式环境下进行结构化数据的交换传递。服务使用者按照一定的格式提交请求【Request】,服务提供者提供响应【Response】。
总结:通过WSDL、SOAP、XML技术来实现接口

1.对应关系

在这里插入图片描述
如上图所示:IO对应BO,IC对应BC,ICF对应BCF

在这里插入图片描述
如上图所示:WS和BS一一对应。

2.通过BS创建Inbound WebService(入栈WS)

创建IO

  1. 通过向导新建New Object->EAI->Integration Object

  2. 选择相应的Project,选择Source System为:EAI Siebel Wizard

  3. 选择BC、Include Component、Container Naming、Lower CamelCase for XML Tags
    在这里插入图片描述

  4. 不发布,取消勾选Deploy在这里插入图片描述

  5. 为需要的BC创建Key,然后创建Key Field字段(?作用)

在这里插入图片描述

创建BS

  1. 选择Class为CSSEAIDataSyncService,勾选External Use(Display Name在创建Inbound的时候选择BS的时候会用到)在这里插入图片描述

  2. 为BS创建两条User Property,
    Application Services Interface:Y
    Internal Integration Object:NGC Order Header BO【上述建立的IO名称】

  3. 创建方法和以及参数,复杂参数的类型要选择IO型,再选择刚才创建的IO。标准方法QueryById,参数要按照下图
    在这里插入图片描述

  4. 其他标准方法以及参数如下
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

创建Inbound WebService

  1. 浏览器中:管理-Web服务->入站Web服务,新建一条记录,命名空间填http://siebel.com/CustomUI名称是IO名

在这里插入图片描述

  1. 服务端口新建一条记录,名称是 BS名称 ,服务名称是BS的 Display Name,实施类型选 业务服务 ,地址http://localhost:8888/eai_chs/start.swe?SWEExtSource=WebService&SWEExtCmd=Execute&WSSOAP=1,联编SOAP_RPC_LITERAL

在这里插入图片描述

  1. 操作里选择创建的方法,验证类型填无,名称需要加个前缀(否则影响唯一性验证)

在这里插入图片描述

  1. 将界面拉到最上方,清除缓存,生成WSDL,打开文档自动生成器,导入刚才的WSDL,生成新WSDL

在这里插入图片描述

测试

  1. 使用SoapUI测试接口,创建Project,选择新生成的带头结构的WSDL
    在这里插入图片描述

  2. 选择需要测试的方法

在这里插入图片描述

  1. 修改endpoint为建立的Inbound WebService服务端口的地址,此处是http://localhost:8888/eai_chs/start.swe?SWEExtSource=WebService&SWEExtCmd=Execute&WSSOAP=1

在这里插入图片描述

  1. 修改XML的参数,并运行测试,头文件要填相应的账号密码

在这里插入图片描述

  1. 观察报文,200 OK代表无误,有数据传回,或者直接看返回值

在这里插入图片描述

二、Outbound WebService的调用

1.调用OA接口实例

  1. 找到要调用的BS,查找需要调用的方法和参数,找到对应的IO
    在这里插入图片描述

  2. 找到IO的IC和IC Field,记录相应字段,在代码里组合
    在这里插入图片描述

		var psIn = TheApplication().NewPropertySet();
		var psOut = TheApplication().NewPropertySet();
		//IO层
		var siebelMsg = TheApplication().NewPropertySet();
		siebelMsg.SetType("getUserIdRequest:parameters");//BS方法的参数名
		siebelMsg.SetProperty("MessageId","1");		
		siebelMsg.SetProperty("MessageType","Integration Object");
		siebelMsg.SetProperty("IntObjectName","getUserId");//IO名
		siebelMsg.SetProperty("IntObjectFormat","Siebel Hierarchical");//对应storage type

		//第一层
		//构造IC对象数组
		var ListOfgetUserId = TheApplication().NewPropertySet();	
		ListOfgetUserId.SetType("ListOfgetUserId"); 	
		
		var getUserId = TheApplication().NewPropertySet();
		getUserId.SetType("getUserId");//IC名
		getUserId.SetProperty("in0","loginid2");//参数名、参数值
		getUserId.SetProperty("in1",Login);//参数名、参数值
		
		//构造IO
		//固定步骤
		ListOfgetUserId.AddChild(getUserId);
		siebelMsg.AddChild(ListOfgetUserId);

		psIn.AddChild(siebelMsg);
		//参数准备完毕,开始调用
		bsOAWorkflow.InvokeMethod("getUserId",psIn,psOut);

三、接口日志的记录

		//接口日志对象
		var bsXML=TheApplication().GetService("EAI XML Converter");
		var psInxml=TheApplication().NewPropertySet();
		var psOutxml=TheApplication().NewPropertySet();
		var bsSys=TheApplication().GetService("NGC System Service");
		var sLogId = "";
				
		//接口入参日志
		bsXML.InvokeMethod("PropSetToXML",psIn,psInxml);
		sLogId = bsSys.Log("接口显示名" , "" , "Running" , "" , psInxml.GetValue().substring(0,4000) , "");
		//此处调用接口
		//bsZCRM_ZZ.InvokeMethod("ZcrmWtc",psIn,psOut);

		//接口出参日志
		bsXML.InvokeMethod("PropSetToXML",psOut,psOutxml);
		bsSys.Log("接口显示名" , sLogId , "Success" , psOutxml.GetValue().substring(0,16349) , 	psInxml.GetValue().substring(0,4000) ,"");	

catch(e)
   {
		//接口异常日志
		bsSys.Log("拉取未投产数据" , sLogId , "Error" ,  e.message.substring(0,16349) , psInxml.GetValue().substring(0,4000) , "" );
		throw e.message;
	}

四、REST API的使用

主要是移动端对BC、BS的调用接口

  1. 浏览器:系统管理->Rest集成,如果是调用BC:接口代码既BO的大写,BO、BC填写相应的名称;若果是调用BS,BO、BC不填只用填BS即可,方法分为标准方法和BS客户化方法,方法和字段分别填写方法和参数即可

在这里插入图片描述在这里插入图片描述

五、数据批量导入的使用

  1. 配置模板文件TXT,示例如下:

BOName:Service Request,BCName:Service Request,Imdata1:Status:F,Imdata2:Account:P#Name,Imdata3:NGC All WOEG Amount:F,Imdata4:INS Product:F,Imdata5:Area:F,Imdata6:Sub-Area:F
斜体字符为自定义字段,指定BO、BC之后,配置要导入的字段普通字段和静态PK用 :F结尾,动态PK用**😛#pickmap指定的值**

  1. 系统管理-文件模板中,自定义模板编码,创建文件模板,并上传模板文件

在这里插入图片描述

  1. 编辑想要导入的数据csv,字段顺序要一一对应,Import Status固定填New,Import Type插入的话就填Insert,Import Name自定义,Code和Batch要和导入数据头对应
    在这里插入图片描述

  2. 在系统管理-导入数据界面,自定义批次号和Code(上下要一致才可导入),导入csv,创建数据头,即可点导入
    在这里插入图片描述

六、开发环境迁移到测试

  1. 从EDOC上下载迁移清单,用siebel小工具,先去重,再分对象来进行or链接,一般or链接对象在十个左右
    在这里插入图片描述

  2. 本地在DEV TOOLS中选择对象,右键Add to Archive,等所有对象添加完毕之后,选择sif存储路径,一般存储到桌面,命名规则是添加日期和次数后缀,如objects2022110201.sif,最后点save
    在这里插入图片描述

  3. 本地打开UAT TOOLS,导航栏点击Tools,Import From Archive(s),冲突选项选择Overwrite,最后Import
    在这里插入图片描述

  4. 远程桌面,桌面object文件夹复制备份一次,新文件夹命名为日期和FD后缀

在这里插入图片描述

  1. 远程桌面使用UAT TOOLS,编译对象,编译路径务必选择刚才新建文件夹下的srf
    在这里插入图片描述

  2. 编译完成后,打开BvSsh远程ssh工具,账号密码都为siebel,点击终端启停测试环境服务器,停命令**. ./stopsiebsrvr.sh**(点之间有空格),启命令**. ./startsrvr.sh**
    在这里插入图片描述

  3. 远程ssh工具使用ftp功能上传srf,先把右边服务器上的包备份,加上日期批次后缀即可,服务器包路径为**/data/app/siebel/ses/siebsrvr/objects/chs**。左边选择刚才编译好的包,右边备份完毕之后即可Upload
    在这里插入图片描述

  4. 通过终端工具启动服务器,启命令**. ./startsrvr.sh**,至此
    tips:
    Symbolic String也要导入,导入后其他对象需要重新编译才可生效,建议直接先导入
    Table不仅需要编译,还需要在UAT进行Apply
    Tablede Apply账密为SIEBEL/SIEBELUAT123#,ODBC为CRMUAT

七、测试环境迁移到正式

  1. 迁移清单路径如下
    在这里插入图片描述
  2. 远程桌面,桌面object文件夹复制备份一次,新文件夹命名为日期和FD/GY后缀(取决于发哪个)
  3. UAT只编译要迁移的对象,启停服务器,(换包?)
  4. 移交测试,测试没问题就下一步
  5. 打包迁移的对象,Add to Archive,在prod导入
  6. prod环境只用Apply表,不用编译
  7. 更新迁移清单状态
  8. 通知运维发版(唐师傅),将Object文件夹下要发的文件路径截图给运维即可
    Tips:正式环境账号SIEBEL,密码SIEBEL123,服务器是CRMPROD

八、服务请求Excel批量导入功能

配置模板

  1. 配置模板文件TXT,示例如下:

BOName:Service Request,BCName:Service Request,Imdata1:Status:F,Imdata2:Account:P#Name,Imdata3:NGC All WOEG Amount:F,Imdata4:INS Product:F,Imdata5:Area:F,Imdata6:Sub-Area:F
斜体字符为自定义字段,指定BO、BC之后,配置要导入的字段普通字段和静态PK用 :F结尾,动态PK用**😛#pickmap指定的值**

  1. 系统管理-文件模板中,自定义模板编码,创建文件模板,并上传模板文件

在这里插入图片描述

配置后端

  1. 需要搭建新的导入界面时,需要新建2个Applet(参考NGC FD Import Charge List Applet、NGC FD Charge Import Data List Applet),一个View(参考NGC Import Charge View),修改Screen(把View挂上去即可),修改数据导入附件BC的安全性(NGC FD Import Attachment)

  2. 编辑WebApple代码,导入临时表函数,自定义以下内容(直接copy风电的导入模板后修改以下内容即可)
    在这里插入图片描述

  3. 导入正式表同理,自定义以下内容

在这里插入图片描述

  1. 在服务NGC FD Analyze Data Service中编辑或者添加映射关系,例子如下:
/******************************************************************************
*==============================================================================
*创建时间:20221028
*创 建 人:DINGWJ
*入参说明:
*出参说明:
*方法简介:服务请求导入参数列表
*逻辑说明: 
*备注说明:
*==============================================================================
*******************************************************************************/
function GetFDSRFieldName(propertyname)
{
	var psData = TheApplication().NewPropertySet();
	psData.SetProperty("服务请求编号","Imdata1");
	psData.SetProperty("供应商服务编号","Imdata2");
	psData.SetProperty("组织","Imdata4");
	psData.SetProperty("创建时间","Imdata5");
	psData.SetProperty("联系人","Imdata3");
	return psData.GetProperty(propertyname);
	
}
  1. 修改AnalyzeData函数,添加判断条件
    在这里插入图片描述

  2. Excel表格的字段名需要和步骤3中写的映射关系一致,例子如下(这几个代码和截图没有关联关系)

在这里插入图片描述

九、服务器故障解决

开发环境服务器无法启动

停开发-虚拟机任务管理器-详细信息-搜索javaw-结束进程-启开发
在这里插入图片描述

测试环境服务器无法启动

  • 停服务器**. ./stopsiebsrvr.sh**

  • 停网关**. ./stopgateway.sh**

  • 查看所有siebel相关进程 ps -ef |grep sieb,如果有,则代表没有服务器完全停掉,需要手动关停(第一个数字是pid)
    在这里插入图片描述

  • 关闭siebel相关进程 pkill -15 siebel,或者killall siebel

  • 启动服务器**. ./startgateway.sh**,. ./startsiebsrvr.sh

遇到问题及其解决方案

  1. 接口测试时,SOAPUI显示404 document was not found
    服务器地址问题,目前填入本地地址即可解决测试问题http://win-h4n9npi29s8:8888?SWEExtSource=WebService&WSSOAP=1
  2. 不存在包含 ‘http://siebel.com/CustomUI:NGCQueryById’ 操作的有效 Web 服务。返回值500
    TOOLS的DEBUG环境要注意,调用接口的时候在开发环境(本地没有),测试本地接口的时候需要DEBUG本地环境才能调通
  3. 导入时报错,“setField的第一个值无效,应该为文本类型”
    是附件Excel格式问题,需要对格式进行整理。选择末尾空列,按住Ctrl+Shift+→,选中全部空列,右键删除即可,行同理。
  4. 导入时,数字后被强制加了.0,导致pick字段不匹配
    选择列的数据,点击数据-分列-下一步-下一步-文本,将数字以文本格式存储即可
  5. 迁移时,or链接显示的数量不对
    有几种情况
  • 迁移清单的对象类型错误
  • or链接过长,一般在十个左右
  • 无法识别字符** ’ ,需要写成 * **,括号有时也有问题
  • 有重复项
  1. ActivateField之后,GetFieldValue取不到值
    激活要在查询之前做,一般with(bc)下面就直接激活,然后方便对字段进行其他操作
  2. 写入数据无效
    Set之后记得WriteRecord();

心得总结

代码有很多细节需要注意,然后很多功能具体去做的时候,也有一些地方需要做客户化的修改。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值