merge the formfield patch from ooo-build
[ooovba.git] / wizards / source / template / Correspondence.xba
blob03c7ef77fbe8cd483b0c1f3abd7a4bb0fe9362b0
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
3 <script:module xmlns:script="http://openoffice.org/2000/script" script:name="Correspondence" script:language="StarBasic">Option Explicit
5 Public msgNoTextmark$, msgError$
6 Public sAddressbook$
7 Public Table
8 Public sCompany$, sFirstName$, sLastName$, sStreet$, sPostalCode$, sCity$, sState$, sInitials$, sPosition$
9 Public DialogExited
10 Public oDocument, oText, oBookMarks, oBookMark, oBookMarkCursor, oBookText as Object
11 Public bTemplate, bDBFields as Boolean
13 Sub Main
14 bTemplate = true
15 BasicLibraries.LoadLibrary(&quot;Tools&quot;)
16 TemplateDialog = LoadDialog(&quot;Template&quot;, &quot;TemplateDialog&quot;)
17 DialogModel = TemplateDialog.Model
18 DialogModel.Step = 2
19 DialogModel.Optmerge.State = True
20 LoadLanguageCorrespondence()
21 TemplateDialog.Execute
22 TemplateDialog.Dispose()
23 End Sub
26 Sub Placeholder
27 bTemplate = false
28 BasicLibraries.LoadLibrary(&quot;Tools&quot;)
29 LoadLanguageCorrespondence()
30 bDBFields = false
31 OK()
32 End Sub
35 Sub Database
36 bTemplate = false
37 BasicLibraries.LoadLibrary(&quot;Tools&quot;)
38 LoadLanguageCorrespondence()
39 bDBFields = true
40 OK()
41 End Sub
44 Function LoadLanguageCorrespondence() as Boolean
45 If InitResources(&quot;&apos;Template&apos;&quot;, &quot;tpl&quot;) Then
46 msgNoTextmark$ = GetResText(1303) &amp; Chr(13) &amp; Chr(10) &amp; GetResText(1301)
47 msgError$ = GetResText(1302)
48 If bTemplate Then
49 DialogModel.Title = GetResText(1303+3)
50 DialogModel.CmdCancel.Label = GetResText(1102)
51 DialogModel.CmdCorrGoOn.Label = GetResText(1103)
52 DialogModel.OptSingle.Label = GetResText(1303 + 1)
53 DialogModel.Optmerge.Label = GetResText(1303 + 2)
54 DialogModel.FrmLetter.Label = GetResText(1303)
55 End If
56 LoadLanguageCorrespondence() = True
57 Else
58 msgbox(&quot;Warning: Resource could not be loaded!&quot;)
59 End If
60 End Function
63 Function GetFieldName(oFieldKnot as Object, GeneralFieldName as String)
64 If oFieldKnot.HasByName(GeneralFieldName) Then
65 GetFieldName = oFieldKnot.GetByName(GeneralFieldName).AssignedFieldName
66 Else
67 GetFieldName = &quot;&quot;
68 End If
69 End Function
72 Sub OK
73 Dim ParaBreak
74 Dim sDocLang as String
75 Dim oSearchDesc as Object
76 Dim oFoundAll as Object
77 Dim oFound as Object
78 Dim sFoundContent as String
79 Dim sFoundString as String
80 Dim sDBField as String
81 Dim i as Integer
82 Dim oDBAccess as Object
83 Dim oAddressDialog as Object
84 Dim oAddressPilot as Object
85 Dim oFields as Object
86 Dim oDocSettings as Object
87 Dim oContext as Object
88 Dim bDBvalid as Boolean
89 &apos;On Local Error Goto GENERALERROR
91 If bTemplate Then
92 bDBFields = DialogModel.Optmerge.State &apos;database or placeholder
93 TemplateDialog.EndExecute()
94 DialogExited = TRUE
95 End If
97 If bDBFields Then
98 oDBAccess = GetRegistryKeyContent(&quot;org.openoffice.Office.DataAccess/AddressBook/&quot;)
99 sAddressbook = oDBAccess.DataSourceName
101 bDBvalid = false
102 oContext = createUnoService( &quot;com.sun.star.sdb.DatabaseContext&quot; )
104 If (not isNull(oContext)) Then
105 &apos;Is the previously assigned address data source still valid?
106 bDBvalid = oContext.hasByName(sAddressbook)
107 end if
109 If (bDBvalid = false) Then
110 oAddressPilot = createUnoService(&quot;com.sun.star.ui.dialogs.AddressBookSourcePilot&quot;)
111 oAddressPilot.execute
113 oDBAccess = GetRegistryKeyContent(&quot;org.openoffice.Office.DataAccess/AddressBook/&quot;)
114 sAddressbook = oDBAccess.DataSourceName
115 If sAddressbook = &quot;&quot; Then
116 MsgBox(GetResText(1301))
117 Exit Sub
118 End If
119 End If
120 oFields = oDBAccess.GetByName(&quot;Fields&quot;)
121 Table = oDBAccess.GetByName(&quot;Command&quot;)
122 End If
124 ParaBreak = com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK
125 oDocument = ThisComponent
126 If bDBFields Then
127 &apos;set the address db as current db at the document
128 oDocSettings = oDocument.createInstance(&quot;com.sun.star.document.Settings&quot;)
129 oDocSettings.CurrentDatabaseDataSource = sAddressbook
130 oDocSettings.CurrentDatabaseCommand = Table
131 oDocSettings.CurrentDatabaseCommandType = 0
132 End If
133 oBookmarks = oDocument.Bookmarks
134 oText = oDocument.Text
136 oSearchDesc = oDocument.createsearchDescriptor()
137 oSearchDesc.SearchRegularExpression = True
138 oSearchDesc.SearchWords = True
139 oSearchDesc.SearchString = &quot;&lt;[^&gt;]+&gt;&quot;
140 oFoundall = oDocument.FindAll(oSearchDesc)
142 &apos;Loop over the foundings
143 For i = oFoundAll.Count -1 To 0 Step -1
144 oFound = oFoundAll.GetByIndex(i)
145 sFoundString = oFound.String
146 &apos;Extract the string inside the brackets
147 sFoundContent = FindPartString(sFoundString,&quot;&lt;&quot;,&quot;&gt;&quot;,1)
148 sFoundContent = LTrim(sFoundContent)
149 &apos; Define the Cursor and place it on the founding
150 oBookmarkCursor = oFound.Text.CreateTextCursorbyRange(oFound)
151 oBookText = oFound.Text
152 If bDBFields Then
153 sDBField = GetFieldname(oFields, sFoundContent)
154 If sDBField &lt;&gt; &quot;&quot; Then
155 InsertDBField(sAddressbook, Table, sDBField)
156 Else
157 InsertPlaceholder(sFoundContent)
158 End If
159 Else
160 InsertPlaceholder(sFoundContent)
161 End If
162 Next i
163 If bDBFields Then
164 &apos;Open the DB beamer with the right DB
165 Dim oDisp as Object
166 Dim oTransformer
167 Dim aURL as new com.sun.star.util.URL
168 aURL.complete = &quot;.component:DB/DataSourceBrowser&quot;
169 oTransformer = createUnoService(&quot;com.sun.star.util.URLTransformer&quot;)
170 oTransformer.parseStrict(aURL)
171 oDisp = oDocument.getCurrentController.getFrame.queryDispatch(aURL, &quot;_beamer&quot;, com.sun.star.frame.FrameSearchFlag.CHILDREN + com.sun.star.frame.FrameSearchFlag.CREATE)
172 Dim aArgs(3) as new com.sun.star.beans.PropertyValue
173 aArgs(1).Name = &quot;DataSourceName&quot;
174 aArgs(1).Value = sAddressbook
175 aArgs(2).Name = &quot;CommandType&quot;
176 aArgs(2).Value = com.sun.star.sdb.CommandType.TABLE
177 aArgs(3).Name = &quot;Command&quot;
178 aArgs(3).Value = Table
179 oDisp.dispatch(aURL, aArgs())
180 End If
182 GENERALERROR:
183 If Err &lt;&gt; 0 Then
184 Msgbox(msgError$,16, GetProductName())
185 Resume LETSGO
186 End If
187 LETSGO:
189 End Sub
192 Sub InsertDBField(sDBName as String, sTableName as String, sColName as String)
193 Dim oFieldMaster, oField as Object
194 If sColname &lt;&gt; &quot;&quot; Then
195 oFieldMaster = oDocument.createInstance(&quot;com.sun.star.text.FieldMaster.Database&quot;)
196 oField = oDocument.createInstance(&quot;com.sun.star.text.TextField.Database&quot;)
197 oFieldMaster.DataBaseName = sDBName
198 oFieldMaster.DataBaseName = sDBName
199 oFieldMaster.DataTableName = sTableName
200 oFieldMaster.DataColumnName = sColName
201 oField.AttachTextfieldmaster (oFieldMaster)
202 oBookText.InsertTextContent(oBookMarkCursor, oField, True)
203 oField.Content = &quot;&lt;&quot; &amp; sColName &amp; &quot;&gt;&quot;
204 End If
205 End Sub
208 Sub InsertPlaceholder(sColName as String)
209 Dim oFieldMaster as Object
210 Dim bCorrectField as Boolean
211 If sColname &lt;&gt; &quot;&quot; Then
212 bCorrectField = True
213 oFieldMaster = oDocument.createInstance(&quot;com.sun.star.text.TextField.JumpEdit&quot;)
214 Select Case sColName
215 Case &quot;Company&quot;
216 oFieldMaster.PlaceHolder = getResText(1350+1)
217 Case &quot;Department&quot;
218 oFieldMaster.PlaceHolder = getResText(1350+2)
219 Case &quot;FirstName&quot;
220 oFieldMaster.PlaceHolder = getResText(1350+3)
221 Case &quot;LastName&quot;
222 oFieldMaster.PlaceHolder = getResText(1350+4)
223 Case &quot;Street&quot;
224 oFieldMaster.PlaceHolder = getResText(1350+5)
225 Case &quot;Country&quot;
226 oFieldMaster.PlaceHolder = getResText(1350+6)
227 Case &quot;Zip&quot;
228 oFieldMaster.PlaceHolder = getResText(1350+7)
229 Case &quot;City&quot;
230 oFieldMaster.PlaceHolder = getResText(1350+8)
231 Case &quot;Title&quot;
232 oFieldMaster.PlaceHolder = getResText(1350+9)
233 Case &quot;Position&quot;
234 oFieldMaster.PlaceHolder = getResText(1350+10)
235 Case &quot;AddrForm&quot;
236 oFieldMaster.PlaceHolder = getResText(1350+11)
237 Case &quot;Code&quot;
238 oFieldMaster.PlaceHolder = getResText(1350+12)
239 Case &quot;AddrFormMail&quot;
240 oFieldMaster.PlaceHolder = getResText(1350+13)
241 Case &quot;PhonePriv&quot;
242 oFieldMaster.PlaceHolder = getResText(1350+14)
243 Case &quot;PhoneComp&quot;
244 oFieldMaster.PlaceHolder = getResText(1350+15)
245 Case &quot;Fax&quot;
246 oFieldMaster.PlaceHolder = getResText(1350+16)
247 Case &quot;EMail&quot;
248 oFieldMaster.PlaceHolder = getResText(1350+17)
249 Case &quot;URL&quot;
250 oFieldMaster.PlaceHolder = getResText(1350+18)
251 Case &quot;Note&quot;
252 oFieldMaster.PlaceHolder = getResText(1350+19)
253 Case &quot;Altfield1&quot;
254 oFieldMaster.PlaceHolder = getResText(1350+20)
255 Case &quot;Altfield2&quot;
256 oFieldMaster.PlaceHolder = getResText(1350+21)
257 Case &quot;Altfield3&quot;
258 oFieldMaster.PlaceHolder = getResText(1350+22)
259 Case &quot;Altfield4&quot;
260 oFieldMaster.PlaceHolder = getResText(1350+23)
261 Case &quot;Id&quot;
262 oFieldMaster.PlaceHolder = getResText(1350+24)
263 Case &quot;State&quot;
264 oFieldMaster.PlaceHolder = getResText(1350+25)
265 Case &quot;PhoneOffice&quot;
266 oFieldMaster.PlaceHolder = getResText(1350+26)
267 Case &quot;Pager&quot;
268 oFieldMaster.PlaceHolder = getResText(1350+27)
269 Case &quot;PhoneCell&quot;
270 oFieldMaster.PlaceHolder = getResText(1350+28)
271 Case &quot;PhoneOther&quot;
272 oFieldMaster.PlaceHolder = getResText(1350+29)
273 Case &quot;CalendarURL&quot;
274 oFieldMaster.PlaceHolder = getResText(1350+30)
275 Case &quot;InviteParticipant&quot;
276 oFieldMaster.PlaceHolder = getResText(1350+31)
277 Case Else
278 bCorrectField = False
279 End Select
280 If bCorrectField Then
281 oFieldMaster.Hint = getResText(1350)
282 oBookText.InsertTextContent(oBookMarkCursor, oFieldMaster, True)
283 End If
284 End If
285 End Sub
286 </script:module>