003_SSIS webservice 数据抽取

目的:抽取电子交易数据

完整流程如下图:

实现步骤:

1.执行sql任务sql如下:

select (current date - 1 days)||' 00:00:00' as start_date,(current date - 1 days)||' 23:59:59' as end_date from sysibm.sysdummy1

将查询的结果配置在变量中:

2.因为接口数据一次只能抽取一天的,所以为了历史数据,采用foreach容器,采用ADO 枚举器,将变量result传入

在变量映射部分获取到开始时间跟截止时间

3.新建http连接管理器,如图

 4.新建web服务任务编辑器,如图,首先现在WSDL文件,直接下载的WSDL文件可能无法使用,原因大概为下载下来的

WSDL中有一百个接口,其中要使用的可能是70个,其余的是多余的,无法解析。解决方法:首先确认好要抽取数据的接口

名称,然后只保留这一个接口即可。

WSDL文件的格式如下,按照下面格式保留所需的接口,注意闭标签,当输入选项卡中看到接口名称,即说明WSDL文件配置成功。

<definitions>

<types>
   definition of types........
</types>

<message>
   definition of a message....
</message>

<portType>
   definition of a port.......
</portType>

<binding>
   definition of a binding....
</binding>

</definitions>

将foreach中变量传入到输入选项卡中,TokenRing为上游提供的固定值

 并将获取到的内容输出到变量中

 下一步由c#脚本生成xml文件,并将上一步的User::HDTYPE_2变量传入,脚本内容如下,因为该接口存在一定的问题,

webservice返回的数据中含有xsd内容,所以这个xml文件无法生成xsd,处理方法为用xpath将数据内容提取,生成一个

只含有数据的xml文件,然后再由ssis工具生成xsd文件,如图:

 xml文件位置固定,这样每次有新的xml生成就会覆盖原有文件,生成的xsd需要注意的是,系统生成的xsd是由当前xml中的数据生成的,

数据库中为varchar类型的,但此次xml中只含有数字的话,xsd就认为这里为int类型,这里要人工将xsd中的数据类型与数据库中的数据

类型一一对照,手动修改。

public void Main()
{
// TODO: Add your code here
//String content = Dts.Variables["HDTYPE_2"].Value.ToString();
//MessageBox.Show(content);

System.Xml.XmlDocument xdoc = new System.Xml.XmlDocument();
xdoc.InnerXml = Dts.Variables["HDTYPE_2"].Value.ToString();
String text = "<?xml version=\"1.0\" encoding=\"utf-16\"?><DataSet><NewDataSet><Status Result=\"ok\" />";
String text2 = "";
XmlNodeList listNodes = xdoc.SelectNodes("//c_product");
foreach (XmlNode node in listNodes)
{
text +="<c_product>" + node.InnerXml + "</c_product>";

}

XmlNodeList listNodes2 = xdoc.SelectNodes("//c_product_control");
foreach (XmlNode node2 in listNodes2)
{
text2 += "<c_product_control>" + node2.InnerXml + "</c_product_control>";

}
String eXml = text2 + "</NewDataSet></DataSet>";
String Xml = text + eXml;
/*StreamWriter sw = new StreamWriter(@"D:\app\Microsoft SQL Server\MSAS11.HBDCAPP\OLAP\Backup\cigaTransService\GetCigaBaseDATAforJAVA.xml");
sw.WriteLine(Xml);
sw.Close();*/
System.Xml.XmlDocument xdoc2 = new System.Xml.XmlDocument();
xdoc2.InnerXml = Xml;


xdoc2.Save(@"D:\app\Microsoft SQL Server\MSAS11.HBDCAPP\OLAP\Backup\cigaTransService\GetCigaBaseDATAforJAVA.xml");

Dts.TaskResult = (int)ScriptResults.Success;
}

xml源处理好后,进行数据类型的转换,转换也要跟数据库中进行一一对应,精确度,字符串的长度等

处理好后,即可插入到数据库中,结束后对重复的数据进行删除

做完该项抽取后,可以对该包做一个加密处理,双击控制流空白处,点击属性,在如下图中进行设置

猜你喜欢

转载自www.cnblogs.com/renzy194/p/12031184.html