<?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="sw_SwXTextFieldTypes" 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



Sub CreateObj()

'*************************************************************************
' COMPONENT: 
' sw.SwXTextFieldTypes
'*************************************************************************
On Error Goto ErrHndl
    Dim oFieldMaster As Object
    Dim oDBF As Object
    Dim oCursor As Object

    oDoc = utils.createDocument("swriter", cObjectName)

    oFieldMaster = oDoc.createInstance("com.sun.star.text.FieldMaster.Database")
    oDBF = oDoc.createInstance("com.sun.star.text.TextField.Database")

    oFieldMaster.setPropertyValue("DataBaseName","Address Book File")
    oFieldMaster.setPropertyValue("DataTableName","address")
    oFieldMaster.setPropertyValue("DataColumnName","FIRSTNAME")

    oCursor = oDoc.Text.createTextCursor()

    oDBF.attachTextFieldMaster(oFieldMaster)
    oDoc.Text.insertTextContent(oCursor, oDBF, false)

    oObj = oDoc.getTextFields()
Exit Sub
ErrHndl:
    Test.Exception()
End Sub
</script:module>
