带有Open Office和Microsoft Office的Web服务(一)

日期: 2009-03-03 作者:Daniel Rubio翻译:杨君 来源:TechTarget中国 英文

大多数关于SOA方面的讨论都集中在绑定到企业应用的服务重用。云中普遍存在的这些服务可以使用户重用办公室生产力套件的数据。下面我们会对如何在云中配置这些服务做进一步的讲解,以便充分利用这两个套件:Microsoft办公软件以及Open办公软件,和前面的平台相比,Open办公软件拥有免税许可证。   如果云中的大部分服务都是数据密集型的,我们会将注意力集中到电子表格程序上:Microsoft Office的Excel程序以及Open Office的Calc程序。

在讨论访问服务的真正流程之前,需要意识到这两个套件都支持网络刮削,这一点和访问服务极为相似,但却是一个截然不同的流程。   网络刮削包括获……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

大多数关于SOA方面的讨论都集中在绑定到企业应用的服务重用。云中普遍存在的这些服务可以使用户重用办公室生产力套件的数据。下面我们会对如何在云中配置这些服务做进一步的讲解,以便充分利用这两个套件:Microsoft办公软件以及Open办公软件,和前面的平台相比,Open办公软件拥有免税许可证。

  如果云中的大部分服务都是数据密集型的,我们会将注意力集中到电子表格程序上:Microsoft Office的Excel程序以及Open Office的Calc程序。在讨论访问服务的真正流程之前,需要意识到这两个套件都支持网络刮削,这一点和访问服务极为相似,但却是一个截然不同的流程。

  网络刮削包括获取网页原始信息,并将信息放到文档上,以便进一步进行操作。和使用服务相比,这一过程非常费时,而且很麻烦。在进行网络刮削时所有的套件都依赖终端用户提供的格式化指令,以便安全的从HTML网页上析取数据,但是这一切似乎是在地址上进行的,无法接收输入值,使用Office生产力套件中的服务颇具有强迫性。

  如果你想对Open Office刮削这一流程有更多的了解,你可以通过插入->链接到外部数据选项,引进一个网络地址,遵循现有向导的指示。在Microsoft Excel程序中,你可以利用新网络查询选项,该选项是通过数据->进入外部数据菜单而定位的。

  涉及到访问服务,你首先要意识到这两个套件都依赖Macros,Macros用于描述一个执行并行操作的小型程序。这两个Office套件支持用多种语言编写的Macros。此外,人们还可以事先打包Macros,并且不需要任何编程背景知识就可以访问Macros。

  至于Open Office,我们可以依靠年代久远,结实可靠的编程语言:Basic。假设你有一个Calc电子表格,里面包含了业务地址,你想知道每个地址周围最近的医院,以便预防突发事件,表1.1包含了一个用Basic语言编写的Open Office Macro,清晰的展示了访问Yahoo本地Web服务的过程。

  表1.1使用Open Office 2.x Basic Macro调用本地Web服务

  REM  *****  BASIC  *****

  Sub Main

  End Sub

  Private hospitalName As String
  Private hospitalPhone As String
  Private hospitalNameMatch As Boolean
  Private hospitalPhoneMatch As Boolean
  Function get_closest_hospital(ByVal zipcode As String) As String
oSimpleFileAccess = createUnoService
  ( "com.sun.star.ucb.SimpleFileAccess" )
 
  定义访问URL

  xmlFile = "http://local.yahooapis.com/LocalSearchService/V3/localSearch?
appid=YahooDemo&query=hospital&zip=" + zipcode + "&results=1"
 
  打开输入文件

  oInputStream = oSimpleFileAccess.openFileRead( xmlFile )
 
  用流创建一个XML语法分析器 

  oSaxParser = createUnoService( "com.sun.star.xml.sax.Parser" )
 
  定义处理XML的SAX事件处理器

  oDocEventsHandler = CreateDocumentHandler()
 
  将处理器和文档联系在一起

  oSaxParser.setDocumentHandler( oDocEventsHandler )
 
  创建一个输入源结构

  oInputSource = createUnoStruct( "com.sun.star.xml.sax.InputSource" )
   With oInputSource

  aInputStream = oInputStream   ' Assign input stream
   End With
 
  分析文档,为变量赋值

  oSaxParser.parseStream( oInputSource )
 
  关闭输入文件
 
  oInputStream.closeInput()
 
  get_closest_hospital() = hospitalName + " Tel. " + hospitalPhone
 
  End Function

  ==================================================

  Xml Sax functions

  ==================================================

  Private goLocator As Object

  Private glLocatorSet As Boolean

  创建一个实施接口的对象

  com.sun.star.xml.sax.XDocumentHandler.

  并将返回的文档处理器作为函数结果

  Function CreateDocumentHandler()
  oDocHandler = CreateUnoListener
  ( "DocHandler_", "com.sun.star.xml.sax.XDocumentHandler" )
 
  glLocatorSet = False
 
  CreateDocumentHandler() = oDocHandler
  End Function
  Sub DocHandler_startDocument()
  End Sub
  Sub DocHandler_endDocument()
  End Sub
  Sub DocHandler_startElement
  ( cName As String, oAttributes As com.sun.star.xml.sax.XAttributeList )

  If cName = "Title" Then
     hospitalNameMatch = True
   EndIf
   If cName = "Phone" Then
      hospitalPhoneMatch = True
   EndIf
  End Sub
  Sub DocHandler_endElement( cName As String )
  End Sub
  Sub DocHandler_characters( cChars As String ) 
    If hospitalNameMatch = True Then
     hospitalName = cChars
     hospitalNameMatch = False
    EndIf
    If hospitalPhoneMatch = True Then
     hospitalPhone = cChars
     hospitalPhoneMatch = False
    EndIf
  End Sub
  Sub DocHandler_ignorableWhitespace( cWhitespace As String )
  End Sub
  Sub DocHandler_processingInstruction( cTarget As String, cData As String )
  End Sub
  Sub DocHandler_setDocumentLocator
  ( oLocator As com.sun.star.xml.sax.XLocator )

  Save the locator object in a global variable

  goLocator = oLocator 

  glLocatorSet = True
  End Sub
  [End Listing 1.1]

相关推荐