<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="sc_ScDDELinkObj" script:language="StarBasic">


'*************************************************************************
'
'  Licensed to the Apache Software Foundation (ASF) under one
'  or more contributor license agreements.  See the NOTICE file
'  distributed with this work for additional information
'  regarding copyright ownership.  The ASF licenses this file
'  to you under the Apache License, Version 2.0 (the
'  "License"); you may not use this file except in compliance
'  with the License.  You may obtain a copy of the License at
'  
'    http://www.apache.org/licenses/LICENSE-2.0
'  
'  Unless required by applicable law or agreed to in writing,
'  software distributed under the License is distributed on an
'  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
'  KIND, either express or implied.  See the License for the
'  specific language governing permissions and limitations
'  under the License.
'
'*************************************************************************





' Be sure that all variables are dimensioned:
option explicit


' REQUIRED VARIABLES for interface/service tests:

' Requiered for  com.sun.star.container.XNamed
Global cNameToSet As String ' "fixed" if name is fixed
Global DDEItem As String
Global DDETopic As String
Global DDEApplication As String

Global oTestDoc As Object


Sub CreateObj()

'*************************************************************************
' COMPONENT: 
' sc.ScDDELinkObj
'*************************************************************************
On Error Goto ErrHndl
    Dim oSheet As Object
    Dim oF As String

    oDoc = utils.createDocument("scalc", cObjectName)
    oSheet = oDoc.Sheets(0)

    oTestDoc = utils.loadTestDocument("ScDDELinksObj.sdc")

    DDEItem = "Sheet1.A1"

    ' This construction of 2-way conversion of testdocs location 
    ' should take place here, because there is unnecessary slash at the end of 
    ' cTestDocsDir.
    DDETopic = utils.URL2Path(utils.Path2URL(cTestDocsDir &amp; "ScDDELinksObj.sdc"))

    DDEApplication = "soffice"

    oF = "=DDE(""" + DDEApplication + """;""" + DDETopic + """;""" + DDEItem + """)"
    
    oSheet.getCellByPosition(1, 2).Formula = oF
    oSheet.getCellByPosition(3, 4).Formula = oF
    oSheet.getCellByPosition(5, 6).Formula = oF

    oObj = oDoc.getPropertyValue("DDELinks").getByIndex(0)
    cNameToSet = "fixed"
Exit Sub
ErrHndl:
    Test.Exception()
End Sub

Sub DisposeObj()
    oTestDoc.dispose()
End Sub
</script:module>
