update dev300-m58
[ooovba.git] / framework / test / test_documentproperties.bas
blob15e4f62a2967fabdd61cd8ab2a8f5294dc83a526
1 Sub Main
2 ' Oeffnen der LOG-Datei
3 ' Es gibt 2 Moeglichgkeiten, diesen Test zu absolvieren.
4 ' 1) Ausgabe von Informationen in MessageBoxen
5 ' 2) Ausgabe von Informationen in einer LOG-Datei
7 ' Die Methoden OpenLOG, CloseLOG, Message, ErrorMessage und InfoMessage beruecksichtigen das automatisch!
8 ' Zum Umschalten zwischen den beiden Zustaenden genuegt es, eine der folgenden
9 ' zwei Programmzeilen zu aktivieren ...
11 'bLOGOn = cOn
12 bLOGOn = cOff
14 'bShowErrorsOnly = cOn
15 bShowErrorsOnly = cOff
17 OpenLOG ( cTestPath + "TestDocumentProperties.log" )
18 InfoMessage ( "Test DocumentProperties ... [start]" )
20 ' Service besorgen
21 InfoMessage ( "Service besorgen ... [start]" )
22 aDocumentProperties = createUnoService ( "com.sun.star.document.DocumentProperties" )
24 ' Erfolg abtesten
25 if ( isnull ( aDocumentProperties ) ) then
26 ErrorMessage ( "Service konnte nicht instanziiert werden!" )
27 exit sub
28 else
29 InfoMessage ( "Service erfolgreich instanziiert ..." )
30 InfoMessage ( "Service besorgen ... [ende]" )
31 end if
33 ' Unterstuetzte Schnittstellen, Methoden und Properties anzeigen
34 ' Achtung: Methoden und Properties koennen nicht angezeigt werden ...
35 ' neues Uno <-> Basic !?
36 msgbox aDocumentProperties.dbg_supportedInterfaces
37 'msgbox aDocumentProperties.dbg_methods
38 'msgbox aDocumentProperties.dbg_properties
40 ' Testen des Services unter normalen Bedingungen (also wie vorgesehen)
41 bState = Test_NormalUse ( aDocumentProperties )
42 ' Fehlerstatus abfragen
43 if ( bState = cError ) then
44 ErrorMessage ( "Der Service arbeitet unter normalen Bedingungen nicht korrekt!" )
45 end if
47 bState = Test_ErrorUse ( aDocumentProperties )
48 ' Fehlerstatus abfragen
49 if ( bState = cError ) then
50 ErrorMessage ( "Der Service verhaelt sich in Fehlersituationen nicht korrekt!" )
51 end if
53 ' Schliessen der Error-Logdatei
54 InfoMessage ( "Test DocumentProperties ... [ende]" )
55 CloseLOG
56 End Sub
58 '*****************************************************************************************************************
59 ' Testfunktionen
60 '*****************************************************************************************************************
62 '----------------------------------------------------------------------------
63 ' Testmethode: Testet den Service unter normalen Bedingungen
65 ' Returnwert cOK bedeutet, dass sich das Objekt normal verhaelt ...
66 ' Returnwert cError bedeutet, dass sich das ein Fehler aufgetreten ist ...
67 '----------------------------------------------------------------------------
68 Function Test_NormalUse ( aDocumentProperties ) as Boolean
70 ' Zunaechst wird vom Erfolg des Test ausgegangen.
71 ' Sollte einer der Detail-Tests fehlschlagen, dann wird dieser Wert
72 ' zurueckgesetzt. Damit wird dann angezeigt, dass mindestens ein
73 ' Einzeltest nicht korrekt funktionierte.
75 Test_NormalUse = cOK
77 bState = Test_NormalUse_XPropertySet ( aDocumentProperties )
78 if ( bState = cError ) then
79 Test_NormalUse = cError
80 end if
82 bState = Test_NormalUse_XNameContainer ( aDocumentProperties )
83 if ( bState = cError ) then
84 Test_NormalUse = cError
85 end if
87 bState = Test_NormalUse_XPersist ( aDocumentProperties )
88 if ( bState = cError ) then
89 Test_NormalUse = cError
90 end if
92 End Function
94 '----------------------------------------------------------------------------
95 ' Testmethode: Testet den Service unter Randbedingungen und provoziert Fehlerzustaende
97 ' Returnwert cOK bedeutet, dass das Objekt damit keine Probleme hat ...
98 ' Returnwert cError bedeutet, dass das Objekt noch nicht robust genug ist ...
99 '----------------------------------------------------------------------------
100 Function Test_ErrorUse ( aDocumentProperties ) as Boolean
102 Test_ErrorUse = cOK
104 End Function
106 '----------------------------------------------------------------------------
107 ' Testmethode: Testen des unterstuetzten Interfaces "XPropertySet" unter normalen Bedingungen
109 ' Returnwert = cOK ; wenn der Test erfolgreich war
110 ' Returnwert = cError ; wenn sich das Objekt nicht korrekt verhalten hat
111 '----------------------------------------------------------------------------
112 Function Test_NormalUse_XPropertySet ( aDocumentProperties ) as Boolean
114 ' Einschalten der Fehlerbehandlung, um Exceptions oder aehnliches abzufangen!
115 on Error goto Test_NormalUse_XPropertySet_Error
117 InfoMessage ( "Test_NormalUse_XPropertySet ... [start]" )
119 ' 1) Test der Funktion "getPropertySetInfo()"
120 ' Da diese Funktion keine Parameter besitzt und zudem eine "get"-Methode
121 ' darstellt, wird sie durch Basic automatisch als "Property" behandelt!
122 ' Daher schreibt man nicht "getPropertySetInfo()" sondern nur "PropertySetInfo".
124 ' Besorgen der Info
125 PropertySetInfo = aDocumentProperties.PropertySetInfo
126 ' Und abtesten auf Gueltigkeit
127 if ( isnull (PropertySetInfo) ) then
128 ErrorMessage ( "getPropertySetInfo() ... Error (Keine Info bestimmbar!)" )
129 goto Test_NormalUse_XPropertySet_Error
130 end if
132 ' Hier fehlt noch der Test der InfoStruktur! (Laesst sich unter Basic irgendwie NICHT testen!!!???)
133 ' ...
135 InfoMessage ( "getPropertySetInfo() ... OK" )
137 ' 2) getPropertyValue() & setPropertyValue ()
138 ' In diesem Service sind mehrere Properties bereits definiert und vorbelegt.
139 ' Zum Test werden repraesentativ einige davon verwendet. Naemlich je eine
140 ' der verschiedenen Datentypen!
141 ' Das sind im folgenden: OWString, sal_Bool, sal_Int16, sal_uInt16, sal_Int32, DateTime, Sequence< sal_Int8 >
142 ' Achtung! sal_uInt16 kann in Basic so nicht dargestellt werden. Daher wird ein normaler
143 ' Integer-Wert angenommen - Bedingung ist, das hier im Test der Wertebereich nicht
144 ' ueberschritten wird!
145 ' Es wird versucht den Standardwert dieser zu ermitteln und zu merken;
146 ' dann einen neuen Wert zu setzen; sowie diesen wiederum zu lesen und mit den
147 ' vorherigen Werten zu vergleichen!
149 ' Zunaechst werden die Standardwerte dieser Properties besorgt ...
150 sDefaultValue_OWString$ = aDocumentProperties.getPropertyValue ( "Author" )
151 bDefaultValue_sal_Bool = aDocumentProperties.getPropertyValue ( "AutoloadEnabled" )
152 nDefaultValue_sal_Int16% = aDocumentProperties.getPropertyValue ( "EditingCycles" )
153 nDefaultValue_sal_uInt16% = aDocumentProperties.getPropertyValue ( "Priority" )
154 nDefaultValue_sal_Int32& = aDocumentProperties.getPropertyValue ( "EditingDuration" )
155 aDefaultValue_DateTime = aDocumentProperties.getPropertyValue ( "ModifyDate" )
156 ' aDefaultValue_ByteSequence = aDocumentProperties.getPropertyValue ( "ExtraData" )
157 aDefaultValue_ByteSequence = aDocumentProperties.ExtraData
159 ' ... dann die Werte zur Kontrolle ausgeben.
160 ShowProperties ( aDocumentProperties )
162 InfoMessage ( "getPropertyValue() ... OK" )
164 ' Jetzt werden neue Werte vereinbart ...
165 ' Diese werden so gewaehlt, das sie garantiert von den Standardwerten verschieden sind!
166 ' Dazu werden die alten auf Wert abgefragt und entsprechend die neuen gesetzt.
167 sNewValue_OWString$ = sDefaultValue_OWString$ + "NeuerWert"
168 bNewValue_sal_Bool = not bDefaultValue_sal_Bool
169 nNewValue_sal_Int16% = nDefaultValue_sal_Int16% + 1
170 if ( nDefaultValue_sal_uInt16% = 1 ) then
171 nNewValue_sal_uInt16% = 2
172 else
173 nNewValue_sal_uInt16% = 1
174 end if
175 nNewValue_sal_Int32& = nDefaultValue_sal_Int32& + 1
177 aNewValue_DateTime = aDefaultValue_DateTime
178 aNewValue_DateTime.HundredthSeconds = aDefaultValue_DateTime.HundredthSeconds + 1
179 aNewValue_DateTime.Seconds = aDefaultValue_DateTime.Seconds + 1
180 aNewValue_DateTime.Minutes = aDefaultValue_DateTime.Minutes + 1
181 aNewValue_DateTime.Hours = aDefaultValue_DateTime.Hours + 1
182 aNewValue_DateTime.Day = aDefaultValue_DateTime.Day + 1
183 aNewValue_DateTime.Month = aDefaultValue_DateTime.Month + 1
184 aNewValue_DateTime.Year = aDefaultValue_DateTime.Year + 1
186 aNewValue_ByteSequence = aDefaultValue_ByteSequence
187 nElementCount% = UBound ( aDefaultValue_ByteSequence )
188 ' for nCounter%=0 to nElementCount% step 1
189 ' aNewValue_ByteSequence(nCounter%) = ( aDefaultValue_ByteSequence(nCounter%) + 1 )
190 ' next nCounter%
192 ' Anschliessend muessen diese neuen Werte gesetzt werden.
193 aDocumentProperties.setPropertyValue ( "Author" , sNewValue_OWString$ )
194 aDocumentProperties.setPropertyValue ( "AutoloadEnabled", bNewValue_sal_Bool )
195 aDocumentProperties.setPropertyValue ( "EditingCycles" , nNewValue_sal_Int16% )
196 aDocumentProperties.setPropertyValue ( "Priority" , nNewValue_sal_uInt16% )
197 aDocumentProperties.setPropertyValue ( "EditingDuration", nNewValue_sal_Int32& )
198 aDocumentProperties.setPropertyValue ( "ModifyDate" , aNewValue_DateTime )
199 ' aDocumentProperties.setPropertyValue ( "ExtraData" , aNewValue_ByteSequence )
200 aDocumentProperties.ExtraData = aNewValue_ByteSequence
202 ' Dann lassen wir sie uns ausgeben, um sie mit den vorherigen vergleichen zu koennen.
203 ' (Das geht natuerlich nur, wenn "bLOGOn=cOn" ist - also eine LOG-Datei geschrieben wird!)
204 ShowProperties ( aDocumentProperties )
206 ' Nun werden die Properties wieder gelesen ...
207 sLastValue_OWString$ = aDocumentProperties.getPropertyValue ( "Author" )
208 bLastValue_sal_Bool = aDocumentProperties.getPropertyValue ( "AutoloadEnabled" )
209 nLastValue_sal_Int16% = aDocumentProperties.getPropertyValue ( "EditingCycles" )
210 nLastValue_sal_uInt16% = aDocumentProperties.getPropertyValue ( "Priority" )
211 nLastValue_sal_Int32& = aDocumentProperties.getPropertyValue ( "EditingDuration" )
212 aLastValue_DateTime = aDocumentProperties.getPropertyValue ( "ModifyDate" )
213 aLastValue_ByteSequence = aDocumentProperties.getPropertyValue ( "ExtraData" )
215 ' ... und mit den vorher als zu setzend bestimmte Werte vergleichen!
216 ' Es duerfen KEINE Unterschiede auftreten, da sonst "setPropertyValue()" nicht korrekt funktioniert hat!
218 if ( CompareOWString ( sNewValue_OWString$, sLastValue_OWString$ ) = cDifferent ) then
219 ErrorMessage ( "setPropertyValue() ... Fehler [OWString fehlerhaft]" )
220 goto Test_NormalUse_XPropertySet_Error
221 elseif ( CompareBool ( bNewValue_sal_Bool, bLastValue_sal_Bool ) = cDifferent ) then
222 ErrorMessage ( "setPropertyValue() ... Fehler [sal_Bool fehlerhaft]" )
223 goto Test_NormalUse_XPropertySet_Error
224 elseif ( CompareInt16 ( nNewValue_sal_Int16%, nLastValue_sal_Int16% ) = cDifferent ) then
225 ErrorMessage ( "setPropertyValue() ... Fehler [sal_Int16 fehlerhaft]" )
226 goto Test_NormalUse_XPropertySet_Error
227 elseif ( CompareInt16 ( nNewValue_sal_uInt16%, nLastValue_sal_uInt16% ) = cDifferent ) then
228 ErrorMessage ( "setPropertyValue() ... Fehler [sal_uInt16 fehlerhaft]" )
229 goto Test_NormalUse_XPropertySet_Error
230 elseif ( CompareInt32 ( nNewValue_sal_Int32&, nLastValue_sal_Int32& ) = cDifferent ) then
231 ErrorMessage ( "setPropertyValue() ... Fehler [sal_Int32 fehlerhaft]" )
232 goto Test_NormalUse_XPropertySet_Error
233 elseif ( CompareDateTime ( aNewValue_DateTime, aLastValue_DateTime ) = cDifferent ) then
234 ErrorMessage ( "setPropertyValue() ... Fehler [DateTime fehlerhaft]" )
235 goto Test_NormalUse_XPropertySet_Error
236 elseif ( CompareByteSequence ( aNewValue_ByteSequence, aLastValue_ByteSequence ) = cDifferent ) then
237 ErrorMessage ( "setPropertyValue() ... Fehler [ByteSequence fehlerhaft]" )
238 goto Test_NormalUse_XPropertySet_Error
239 end if
241 InfoMessage ( "setPropertyValue() ... OK" )
243 ' Nun wird noch mit den zuerst ermittelten Default-Werten verglichen!
244 ' Hier MUESSEN Unterschiede auftreten, da sonst "get-" UND "setPropertyValue()" nicht korrekt funktioniert haben!
246 if ( CompareOWString ( sDefaultValue_OWString$, sLastValue_OWString$ ) = cEqual ) then
247 ErrorMessage ( "Zusammenspiel set & getPropertyValue() ... Fehler [OWString fehlerhaft]" )
248 goto Test_NormalUse_XPropertySet_Error
249 elseif ( CompareBool ( bDefaultValue_sal_Bool, bLastValue_sal_Bool ) = cEqual ) then
250 ErrorMessage ( "Zusammenspiel set & getPropertyValue() ... Fehler [sal_Bool fehlerhaft]" )
251 goto Test_NormalUse_XPropertySet_Error
252 elseif ( CompareInt16 ( nDefaultValue_sal_Int16%, nLastValue_sal_Int16% ) = cEqual ) then
253 ErrorMessage ( "Zusammenspiel set & getPropertyValue() ... Fehler [sal_Int16 fehlerhaft]" )
254 goto Test_NormalUse_XPropertySet_Error
255 elseif ( CompareInt16 ( nDefaultValue_sal_uInt16%, nLastValue_sal_uInt16% ) = cEqual ) then
256 ErrorMessage ( "Zusammenspiel set & getPropertyValue() ... Fehler [sal_uInt16 fehlerhaft]" )
257 goto Test_NormalUse_XPropertySet_Error
258 elseif ( CompareInt32 ( nDefaultValue_sal_Int32&, nLastValue_sal_Int32& ) = cEqual ) then
259 ErrorMessage ( "Zusammenspiel set & getPropertyValue() ... Fehler [sal_Int32 fehlerhaft]" )
260 goto Test_NormalUse_XPropertySet_Error
261 elseif ( CompareDateTime ( aDefaultValue_DateTime, aLastValue_DateTime ) = cEqual ) then
262 ErrorMessage ( "Zusammenspiel set & getPropertyValue() ... Fehler [DateTime fehlerhaft]" )
263 goto Test_NormalUse_XPropertySet_Error
264 ' elseif ( CompareByteSequence ( aDefaultValue_ByteSequence, aLastValue_ByteSequence ) = cEqual ) then
265 ' ErrorMessage ( "Zusammenspiel set & getPropertyValue() ... Fehler [ByteSequence fehlerhaft]" )
266 ' goto Test_NormalUse_XPropertySet_Error
267 end if
269 InfoMessage ( "Zusammenspiel set & getPropertyValue() ... OK" )
271 ' Der Test war erfolgreich! Meldung ausgeben und zurueck zm Aufrufer.
272 ' Ausschalten der Fehlerbehandlung
273 on Error goto 0
274 ' Meldung ausgeben
275 InfoMessage ( "Test_NormalUse_XPropertySet ... [ende]" )
276 ' Status setzen
277 Test_NormalUse_XPropertySet = cOK
278 ' Und Funktion beenden
279 Exit Function
281 ' Es ist ein unerwartete Fehler aufgetreten! (Exception ...)
282 ' Meldung ausgeben und mit Fehler zurueckkehren.
283 Test_NormalUse_XPropertySet_Error:
284 ' Ausschalten der Fehlerbehandlung
285 on Error goto 0
286 ' Meldung ausgeben
287 ErrorMessage ( "Test_NormalUse_XPropertySet ... [Error]" )
288 ' und Fehlerstatus setzen
289 Test_NormalUse_XPropertySet = cError
290 ' Abbruch der Funktion erzwingen!
291 Exit Function
293 End Function
295 '----------------------------------------------------------------------------
296 ' Testmethode: Testen des unterstuetzten Interfaces "XNameContainer" unter normalen Bedingungen
298 ' Returnwert = cOK ; wenn sich das Objekt korrekt verhalten hat
299 ' Returnwert = cError ; wenn das Objekt noch nicht robust genug ist
300 '----------------------------------------------------------------------------
301 Function Test_NormalUse_XNameContainer ( aDocumentProperties ) as Boolean
303 ' Einschalten der Fehlerbehandlung, um Exceptions oder aehnliches abzufangen!
304 on Error goto Test_NormalUse_XNameContainer_Error
306 InfoMessage ( "Test_NormalUse_XNameContainer ... [start]" )
308 ' Da das Initialisieren im Konstruktor des Objektes und das Aufraeumen im Destruktor
309 ' automatisch geschieht und diese Methode pro Programmablauf nur einmal verwendet wird,
310 ' darf sich kein Element schon im NameContainer befinden!
311 ' Wenn doch, ist das ein Fehler!
312 if ( aDocumentProperties.hasElements () = TRUE ) then
313 ErrorMessage ( "Der NameConatiner sollte eigentlich leer sein, enthaelt initial aber schon Elemente!?" )
314 goto Test_NormalUse_XNameContainer_Error
315 end if
317 ' Zunaechst werden mehrere Elemente in den NameContainer eingefuegt.
318 sItemName_1$ = "Item 1"
319 sItemName_2$ = "Item 2"
320 sItemName_3$ = "Item 3"
321 sItemName_4$ = "Item 4"
322 sItemName_5$ = "Item 5"
324 sFirstValue_1$ = "Value 1"
325 sFirstValue_2$ = "Value 2"
326 sFirstValue_3$ = "Value 3"
327 sFirstValue_4$ = "Value 4"
328 sFirstValue_5$ = "Value 5"
330 aDocumentProperties.insertByName ( sItemName_1$, sFirstValue_1$ )
331 aDocumentProperties.insertByName ( sItemName_2$, sFirstValue_2$ )
332 aDocumentProperties.insertByName ( sItemName_3$, sFirstValue_3$ )
333 aDocumentProperties.insertByName ( sItemName_4$, sFirstValue_4$ )
334 aDocumentProperties.insertByName ( sItemName_5$, sFirstValue_5$ )
336 ' Zur Kontrolle die Werte ausgeben. (Nur wichtig, wenn geloggt wird!)
337 ' Dabei wird die Methode "getElementNames()" gleich implizit mitgetestet!
338 ShowNameContainer ( aDocumentProperties )
340 ' Aber auch die Anzahl kontrollieren.
341 ' (Hier wird eine eigene BASIC-Hilfsfunktion verwendet! keine Interface-Methode)
342 if ( getNameContainerCount ( aDocumentProperties ) <> 5 ) then
343 ErrorMessage ( "insertByName() ... Fehler (Der NameConatiner enthaelt nicht die eingefuegten 5 Elemente!)" )
344 goto Test_NormalUse_XNameContainer_Error
345 end if
347 ' Nun noch feststellen, ob die 5 denn auch tatsaechlich vorhanden sind.
348 if ( aDocumentProperties.hasByName ( sItemName_1$ ) = FALSE ) then
349 ErrorMessage ( "hasByName() ... Fehler [Element 1 nicht vorhanden!?]" )
350 goto Test_NormalUse_XNameContainer_Error
351 elseif ( aDocumentProperties.hasByName ( sItemName_2$ ) = FALSE ) then
352 ErrorMessage ( "hasByName() ... Fehler [Element 2 nicht vorhanden!?]" )
353 goto Test_NormalUse_XNameContainer_Error
354 elseif ( aDocumentProperties.hasByName ( sItemName_3$ ) = FALSE ) then
355 ErrorMessage ( "hasByName() ... Fehler [Element 3 nicht vorhanden!?]" )
356 goto Test_NormalUse_XNameContainer_Error
357 elseif ( aDocumentProperties.hasByName ( sItemName_4$ ) = FALSE ) then
358 ErrorMessage ( "hasByName() ... Fehler [Element 4 nicht vorhanden!?]" )
359 goto Test_NormalUse_XNameContainer_Error
360 elseif ( aDocumentProperties.hasByName ( sItemName_5$ ) = FALSE ) then
361 ErrorMessage ( "hasByName() ... Fehler [Element 5 nicht vorhanden!?]" )
362 goto Test_NormalUse_XNameContainer_Error
363 end if
365 ' Dann die Werte wieder auslesen.
366 sCompareValue_1$ = aDocumentProperties.getByName ( sItemName_1$ )
367 sCompareValue_2$ = aDocumentProperties.getByName ( sItemName_2$ )
368 sCompareValue_3$ = aDocumentProperties.getByName ( sItemName_3$ )
369 sCompareValue_4$ = aDocumentProperties.getByName ( sItemName_4$ )
370 sCompareValue_5$ = aDocumentProperties.getByName ( sItemName_5$ )
372 ' Zum Vergleich die Werte ausgeben. (Nur wichtig, wenn geloggt wird!)
373 ShowNameContainer ( aDocumentProperties )
375 ' Dann die Werte automatisch vergleichen!
376 if ( CompareOWString ( sFirstValue_1$, sCompareValue_1$ ) = cDifferent ) then
377 ErrorMessage ( "getByName() ... Fehler [Element 1 fehlerhaft]" )
378 goto Test_NormalUse_XNameContainer_Error
379 elseif ( CompareOWString ( sFirstValue_2$, sCompareValue_2$ ) = cDifferent ) then
380 ErrorMessage ( "getByName() ... Fehler [Element 2 fehlerhaft]" )
381 goto Test_NormalUse_XNameContainer_Error
382 elseif ( CompareOWString ( sFirstValue_3$, sCompareValue_3$ ) = cDifferent ) then
383 ErrorMessage ( "getByName() ... Fehler [Element 3 fehlerhaft]" )
384 goto Test_NormalUse_XNameContainer_Error
385 elseif ( CompareOWString ( sFirstValue_4$, sCompareValue_4$ ) = cDifferent ) then
386 ErrorMessage ( "getByName() ... Fehler [Element 4 fehlerhaft]" )
387 goto Test_NormalUse_XNameContainer_Error
388 elseif ( CompareOWString ( sFirstValue_5$, sCompareValue_5$ ) = cDifferent ) then
389 ErrorMessage ( "getByName() ... Fehler [Element 5 fehlerhaft]" )
390 goto Test_NormalUse_XNameContainer_Error
391 end if
393 InfoMessage ( "getByName() ... OK" )
395 ' Jetzt wird versucht einige der Elemente in ihrem Wert zu veraendern.
396 sNewValue_1$ = "NewValue 1"
397 sNewValue_2$ = "NewValue 2"
398 sNewValue_3$ = "NewValue 3"
399 sNewValue_4$ = "NewValue 4"
400 sNewValue_5$ = "NewValue 5"
402 aDocumentProperties.replaceByName ( sItemName_1$, sNewValue_1$ )
403 aDocumentProperties.replaceByName ( sItemName_2$, sNewValue_2$ )
404 aDocumentProperties.replaceByName ( sItemName_3$, sNewValue_3$ )
405 aDocumentProperties.replaceByName ( sItemName_4$, sNewValue_4$ )
406 aDocumentProperties.replaceByName ( sItemName_5$, sNewValue_5$ )
408 ' Zur Kontrolle die Werte ausgeben. (Nur wichtig, wenn geloggt wird!)
409 ShowNameContainer ( aDocumentProperties )
411 ' Dann die Werte wieder auslesen.
412 sCompareValue_1$ = aDocumentProperties.getByName ( sItemName_1$ )
413 sCompareValue_2$ = aDocumentProperties.getByName ( sItemName_2$ )
414 sCompareValue_3$ = aDocumentProperties.getByName ( sItemName_3$ )
415 sCompareValue_4$ = aDocumentProperties.getByName ( sItemName_4$ )
416 sCompareValue_5$ = aDocumentProperties.getByName ( sItemName_5$ )
418 ' Zum Vergleich die Werte ausgeben. (Nur wichtig, wenn geloggt wird!)
419 ShowNameContainer ( aDocumentProperties )
421 ' Dann die Werte automatisch vergleichen!
422 if ( CompareOWString ( sNewValue_1$, sCompareValue_1$ ) = cDifferent ) then
423 ErrorMessage ( "replaceByName() ... Fehler [Element 1 fehlerhaft]" )
424 goto Test_NormalUse_XNameContainer_Error
425 elseif ( CompareOWString ( sNewValue_2$, sCompareValue_2$ ) = cDifferent ) then
426 ErrorMessage ( "replaceByName() ... Fehler [Element 2 fehlerhaft]" )
427 goto Test_NormalUse_XNameContainer_Error
428 elseif ( CompareOWString ( sNewValue_3$, sCompareValue_3$ ) = cDifferent ) then
429 ErrorMessage ( "replaceByName() ... Fehler [Element 3 fehlerhaft]" )
430 goto Test_NormalUse_XNameContainer_Error
431 elseif ( CompareOWString ( sNewValue_4$, sCompareValue_4$ ) = cDifferent ) then
432 ErrorMessage ( "replaceByName() ... Fehler [Element 4 fehlerhaft]" )
433 goto Test_NormalUse_XNameContainer_Error
434 elseif ( CompareOWString ( sNewValue_5$, sCompareValue_5$ ) = cDifferent ) then
435 ErrorMessage ( "replaceByName() ... Fehler [Element 5 fehlerhaft]" )
436 goto Test_NormalUse_XNameContainer_Error
437 end if
439 InfoMessage ( "replaceByName() ... OK" )
441 ' Hier sollen einige der 5 Eintraege geloescht werden.
442 aDocumentProperties.removeByName ( sItemName_1$ )
443 aDocumentProperties.removeByName ( sItemName_3$ )
445 ' Dann wieder die Anzahl kontrollieren.
446 ' (Hier wird eine eigene BASIC-Hilfsfunktion verwendet! keine Interface-Methode)
447 if ( getNameContainerCount ( aDocumentProperties ) <> 3 ) then
448 ErrorMessage ( "removeByName() ... Fehler (Der NameConatiner enthaelt nicht die erwarteten 3 Elemente!)" )
449 goto Test_NormalUse_XNameContainer_Error
450 end if
452 ' Nun noch feststellen, ob die restlichen 3 denn auch tatsaechlich die richtigen sind.
453 if ( aDocumentProperties.hasByName ( sItemName_2$ ) = FALSE ) then
454 ErrorMessage ( "removeByName() ... Fehler [Element 2 nicht vorhanden!?]" )
455 goto Test_NormalUse_XNameContainer_Error
456 elseif ( aDocumentProperties.hasByName ( sItemName_4$ ) = FALSE ) then
457 ErrorMessage ( "removeByName() ... Fehler [Element 4 nicht vorhanden!?]" )
458 goto Test_NormalUse_XNameContainer_Error
459 elseif ( aDocumentProperties.hasByName ( sItemName_5$ ) = FALSE ) then
460 ErrorMessage ( "removeByName() ... Fehler [Element 5 nicht vorhanden!?]" )
461 goto Test_NormalUse_XNameContainer_Error
462 end if
464 ' Zur Kontrolle die Werte nochmals ausgeben. (Nur wichtig, wenn geloggt wird!)
465 ShowNameContainer ( aDocumentProperties )
467 InfoMessage ( "removeByName() ... OK" )
469 ' Der Test war erfolgreich! Meldung ausgeben und zurueck zm Aufrufer.
470 ' Ausschalten der Fehlerbehandlung
471 on Error goto 0
472 ' Meldung ausgeben
473 InfoMessage ( "Test_NormalUse_XNameContainer ... [ende]" )
474 ' Status setzen
475 Test_NormalUse_XNameContainer = cOK
476 ' Und Funktion beenden
477 Exit Function
479 ' Es ist ein unerwartete Fehler aufgetreten! (Exception ...)
480 ' Meldung ausgeben und mit Fehler zurueckkehren.
481 Test_NormalUse_XNameContainer_Error:
482 ' Ausschalten der Fehlerbehandlung
483 on Error goto 0
484 ' Meldung ausgeben
485 ErrorMessage ( "Test_NormalUse_XNameContainer ... [Error]" )
486 ' und Fehlerstatus setzen
487 Test_NormalUse_XNameContainer = cError
488 ' Abbruch der Funktion erzwingen!
489 Exit Function
491 End Function
493 '----------------------------------------------------------------------------
494 ' Testmethode: Testen des unterstuetzten Interfaces "XPersist" unter normalen Bedingungen
496 ' Returnwert = cOK ; wenn der Test erfolgreich war
497 ' Returnwert = cError ; wenn sich das Objekt nicht korrekt verhalten hat
498 '----------------------------------------------------------------------------
499 Function Test_NormalUse_XPersist ( aDocumentProperties ) as Boolean
501 ' Einschalten der Fehlerbehandlung, um Exceptions oder aehnliches abzufangen!
502 on Error goto Test_NormalUse_XPersist_Error
504 InfoMessage ( "Test_NormalUse_XPersist ... [start]" )
506 ' Laden der Properties aus einer Datei
507 aDocumentProperties.read ( cTestPath + "TestDebug_in.sdw" )
509 ' Zur Kontrolle anzeigen
510 ShowProperties ( aDocumentProperties )
512 ' Speichern der Properties in einer neuen Datei
513 aDocumentProperties.write ( cTestPath + "TestDebug_Out.sdw" )
514 aDocumentProperties.read ( cTestPath + "TestDebug_Out.sdw" )
516 ' Zur Kontrolle anzeigen
517 ShowProperties ( aDocumentProperties )
519 ' Der Test war erfolgreich! Meldung ausgeben und zurueck zm Aufrufer.
520 ' Ausschalten der Fehlerbehandlung
521 on Error goto 0
522 ' Meldung ausgeben
523 InfoMessage ( "Test_NormalUse_XPersist ... [ende]" )
524 ' Status setzen
525 Test_NormalUse_XPersist = cOK
526 ' Und Funktion beenden
527 Exit Function
529 ' Es ist ein unerwartete Fehler aufgetreten! (Exception ...)
530 ' Meldung ausgeben und mit Fehler zurueckkehren.
531 Test_NormalUse_XPersist_Error:
532 ' Ausschalten der Fehlerbehandlung
533 on Error goto 0
534 ' Meldung ausgeben
535 ErrorMessage ( "Test_NormalUse_XPersist ... [Error]" )
536 ' und Fehlerstatus setzen
537 Test_NormalUse_XPersist = cError
538 ' Abbruch der Funktion erzwingen!
539 Exit Function
541 End Function
543 '*****************************************************************************************************************
544 ' Hilfsfunktionen und -methoden
545 '*****************************************************************************************************************
547 '----------------------------------------------------------------------------
548 ' Hilfsmethode: Oeffnet die LOG-Datei.
549 '----------------------------------------------------------------------------
550 Sub OpenLOG ( sFileName$ )
551 if ( bLOGOn = cOn ) then
552 sLOGFileName$ = sFileName$
553 nLOGFileHandle% = FreeFile
554 open sLOGFileName$ for output as nLOGFileHandle%
555 end if
556 End Sub
558 '----------------------------------------------------------------------------
559 ' Hilfsmethode: Schliesst die LOG-Datei.
560 '----------------------------------------------------------------------------
561 Sub CloseLOG
562 if ( bLOGOn = cOn ) then
563 close #nLOGFileHandle%
564 end if
565 End Sub
567 '----------------------------------------------------------------------------
568 ' Hilfsmethode: Gibt einen Text in einer LOG-Datei aus.
569 '----------------------------------------------------------------------------
570 Sub WriteLOG ( sMessage$ )
571 if ( bLOGOn = cOn ) then
572 Write #nLOGFileHandle% sMessage$
573 end if
574 End Sub
576 '----------------------------------------------------------------------------
577 ' Hilfsmethode: Gibt eine MessageBox mit Fehlertext, Zeilennummer und Warnschild aus.
578 '----------------------------------------------------------------------------
579 Sub ErrorMessage ( sMessage$ )
580 ' Entweder in die LOG-Datei schreiben oder eine MessageBox anzeigen.
581 if ( bLOGOn = cOn ) then
582 WriteLOG ( sMessage$ )
583 else
584 MsgBox ( sMessage$, 16 )
585 end if
586 End Sub
588 '----------------------------------------------------------------------------
589 ' Hilfsmethode: Gibt eine Hinweisbox aus.
590 '----------------------------------------------------------------------------
591 Sub InfoMessage ( sMessage$ )
592 ' Nur was anzeigen, wenn Nutzer es wuenscht!
593 if ( bShowErrorsOnly = cOff ) then
594 ' Ansonsten wird entweder in die LOG-Datei geschrieben oder eine MessageBox angezeigt.
595 if ( bLOGOn = cOn ) then
596 WriteLOG ( sMessage$ )
597 else
598 MsgBox ( sMessage$, 64 )
599 end if
600 end if
601 End Sub
603 '----------------------------------------------------------------------------
604 ' Hilfsfunktion: Vergleicht zwei OWString-Werte
606 ' Returnwert = cEqual ; wenn Werte identisch sind
607 ' Returnwert = cDifferent ; wenn Werte verschieden sind
608 '----------------------------------------------------------------------------
609 Function CompareOWString ( sOWString_1$, sOWString_2$ ) as Boolean
611 if ( sOWString_1$ = sOWString_2$ ) then
612 CompareOWString = cEqual
613 else
614 CompareOWString = cDifferent
615 end if
617 End Function
619 '----------------------------------------------------------------------------
620 ' Hilfsfunktion: Vergleicht zwei DateTime-Strukturen
622 ' Returnwert = cEqual ; wenn Werte identisch sind
623 ' Returnwert = cDifferent ; wenn Werte verschieden sind
624 '----------------------------------------------------------------------------
625 Function CompareDateTime ( aDateTime_1, aDateTime_2 ) as Boolean
627 if ( aDateTime_1.Day = aDateTime_2.Day and aDateTime_1.Month = aDateTime_2.Month and aDateTime_1.Year = aDateTime_2.Year and aDateTime_1.Hours = aDateTime_1.Hours and aDateTime_1.Minutes = aDateTime_1.Minutes and aDateTime_1.Seconds = aDateTime_1.Seconds and aDateTime_1.HundredthSeconds = aDateTime_1.HundredthSeconds ) then
628 CompareDateTime = cEqual
629 else
630 CompareDateTime = cDifferent
631 end if
633 End Function
635 '----------------------------------------------------------------------------
636 ' Hilfsfunktion: Vergleicht zwei ByteSequence's
638 ' Returnwert = cEqual ; wenn Werte identisch sind
639 ' Returnwert = cDifferent ; wenn Werte verschieden sind
640 '----------------------------------------------------------------------------
641 Function CompareByteSequence ( seqByteSequence_1, seqByteSequence_2 ) as Boolean
643 ' Wenn beide leer sind, sind sie auch identisch !
644 ' Dieser Test mit "IsArray" ist noetig, da bei einem leeren Array die
645 ' Funktion "UBound" einen Fehler produziert!
646 if ( IsArray ( seqByteSequence_1 ) = FALSE and IsArray ( seqByteSequence_2 ) = FALSE ) then
647 CompareByteSequence = cEqual
648 Exit Function
649 end if
651 ' Wenn jedoch nur eine leer ist, dann sind sie nicht identisch.
652 if ( IsArray ( seqByteSequence_1 ) = FALSE ) or ( IsArray ( seqByteSequence_2 ) = FALSE ) then
653 CompareByteSequence = cDifferent
654 Exit Function
655 end if
657 ' Besorgen der Anzahl der Elemente der Sequences
658 nElementCount_1% = UBound ( seqByteSequence_1 )
659 nElementCount_2% = UBound ( seqByteSequence_2 )
661 ' Wenn diese Anzahl schon verschieden ist, dann ...
662 if ( nElementCount_1% <> nElementCount_2% ) then
663 ' ... sind die Sequences wohl verschieden.
664 CompareByteSequence = cDifferent
665 ' Die Element brauchen dann nicht mehr verglichen zu werden.
666 Exit Function
667 end if
669 ' Ansonsten werden die Elemente einzeln miteinander verglichen.
670 for nCounter%=0 to nElementCount_1% step 1
671 ' Wenn auch nur ein paar davon verschieden ist, dann ...
672 if ( nElementCount_1%(nCounter%) <> nElementCount_2%(nCounter%) ) then
673 ' ... kann der Vergleich abgebrochen werden!
674 CompareByteSequence = cDifferent
675 Exit Function
676 end if
677 next nCounter%
679 ' Wenn man bis hier gekommen ist, dann sind die Sequences identisch.
680 CompareByteSequence = cEqual
682 End Function
684 '----------------------------------------------------------------------------
685 ' Hilfsfunktion: Vergleicht zwei Int16-Werte
687 ' Returnwert = cEqual ; wenn Werte identisch sind
688 ' Returnwert = cDifferent ; wenn Werte verschieden sind
689 '----------------------------------------------------------------------------
690 Function CompareInt16 ( nInt16_1%, nInt16_2% ) as Boolean
692 if ( nInt16_1% = nInt16_2% ) then
693 CompareInt16 = cEqual
694 else
695 CompareInt16 = cDifferent
696 end if
698 End Function
700 '----------------------------------------------------------------------------
701 ' Hilfsfunktion: Vergleicht zwei Int32-Werte
703 ' Returnwert = cEqual ; wenn Werte identisch sind
704 ' Returnwert = cDifferent ; wenn Werte verschieden sind
705 '----------------------------------------------------------------------------
706 Function CompareInt32 ( nInt32_1&, nInt32_2& ) as Boolean
708 if ( nInt32_1& = nInt32_2& ) then
709 CompareInt32 = cEqual
710 else
711 CompareInt32 = cDifferent
712 end if
714 End Function
716 '----------------------------------------------------------------------------
717 ' Hilfsfunktion: Vergleicht zwei Bool-Werte
719 ' Returnwert = cEqual ; wenn Werte identisch sind
720 ' Returnwert = cDifferent ; wenn Werte verschieden sind
721 '----------------------------------------------------------------------------
722 Function CompareBool ( bBool_1, bBool_2 ) as Boolean
724 if ( bBool_1 = bBool_2 ) then
725 CompareBool = cEqual
726 else
727 CompareBool = cDifferent
728 end if
730 End Function
732 '----------------------------------------------------------------------------
733 ' Hilfsfunktion: Vergleicht die Properties zweier Objekte um Unterschiede festzustellen.
735 ' Returnwert = cEqual ; wenn Objekte von den Properties her identisch sind
736 ' Returnwert = cDifferent ; wenn Objekte von den Properties her verschieden sind
737 '----------------------------------------------------------------------------
738 Function CompareDocumentProperties ( aDocumentProperties_1, aDocumentProperties_2 ) as Boolean
740 ' Besorgen der Werte und zwischenspeichern (bezogen auf Objekt 1)
741 sAuthor_1$ = aDocumentProperties_1.getPropertyValue ( "Author" )
742 bAutoloadEnabled_1 = aDocumentProperties_1.getPropertyValue ( "AutoloadEnabled" )
743 nAutoloadSecs_1% = aDocumentProperties_1.getPropertyValue ( "AutoloadSecs" )
744 sAutoLoadURL_1$ = aDocumentProperties_1.getPropertyValue ( "AutoloadURL" )
745 sBliendCopiesTo_1$ = aDocumentProperties_1.getPropertyValue ( "BlindCopiesTo" )
746 sCopiesTo_1$ = aDocumentProperties_1.getPropertyValue ( "CopiesTo" )
747 aCreationDate_1 = aDocumentProperties_1.getPropertyValue ( "CreationDate" )
748 sDefaultTarget_1$ = aDocumentProperties_1.getPropertyValue ( "DefaultTarget" )
749 sDescription_1$ = aDocumentProperties_1.getPropertyValue ( "Description" )
750 nEditingCycles_1% = aDocumentProperties_1.getPropertyValue ( "EditingCycles" )
751 nEditingDuration_1& = aDocumentProperties_1.getPropertyValue ( "EditingDuration" )
752 seqExtraData_1 = aDocumentProperties_1.getPropertyValue ( "ExtraData" )
753 sInReplyTo_1$ = aDocumentProperties_1.getPropertyValue ( "InReplyTo" )
754 bIsEncrypted_1 = aDocumentProperties_1.getPropertyValue ( "IsEncrypted" )
755 sKeywords_1$ = aDocumentProperties_1.getPropertyValue ( "Keywords" )
756 sMIMEType_1$ = aDocumentProperties_1.getPropertyValue ( "MIMEType" )
757 sModifiedBy_1$ = aDocumentProperties_1.getPropertyValue ( "ModifiedBy" )
758 aModifyDate_1 = aDocumentProperties_1.getPropertyValue ( "ModifyDate" )
759 sNewsgroups_1$ = aDocumentProperties_1.getPropertyValue ( "Newsgroups" )
760 sOriginal_1$ = aDocumentProperties_1.getPropertyValue ( "Original" )
761 bPortableGraphics_1 = aDocumentProperties_1.getPropertyValue ( "PortableGraphics" )
762 aPrintDate_1 = aDocumentProperties_1.getPropertyValue ( "PrintDate" )
763 sPrintedBy_1$ = aDocumentProperties_1.getPropertyValue ( "PrintedBy" )
764 nPriority_1% = aDocumentProperties_1.getPropertyValue ( "Priority" )
765 bQueryTemplate_1 = aDocumentProperties_1.getPropertyValue ( "QueryTemplate" )
766 sRecipient_1$ = aDocumentProperties_1.getPropertyValue ( "Recipient" )
767 sReferences_1$ = aDocumentProperties_1.getPropertyValue ( "References" )
768 sReplyTo_1$ = aDocumentProperties_1.getPropertyValue ( "ReplyTo" )
769 bSaveGraphicsCompressed_1 = aDocumentProperties_1.getPropertyValue ( "SaveGraphicsCompressed" )
770 bSaveOriginalGraphics_1 = aDocumentProperties_1.getPropertyValue ( "SaveOriginalGraphics" )
771 bSaveVersionOnClose_1 = aDocumentProperties_1.getPropertyValue ( "SaveVersionOnClose" )
772 sTemplate_1$ = aDocumentProperties_1.getPropertyValue ( "Template" )
773 bTemplateConfig_1 = aDocumentProperties_1.getPropertyValue ( "TemplateConfig" )
774 aTemplateDate_1 = aDocumentProperties_1.getPropertyValue ( "TemplateDate" )
775 sTemplateFileName_1$ = aDocumentProperties_1.getPropertyValue ( "TemplateFileName" )
776 sTheme_1$ = aDocumentProperties_1.getPropertyValue ( "Theme" )
777 sTitle_1$ = aDocumentProperties_1.getPropertyValue ( "Title" )
778 bUserData_1 = aDocumentProperties_1.getPropertyValue ( "UserData" )
780 ' Besorgen der Werte und zwischenspeichern (bezogen auf Objekt 2)
781 sAuthor_2$ = aDocumentProperties_2.getPropertyValue ( "Author" )
782 bAutoloadEnabled_2 = aDocumentProperties_2.getPropertyValue ( "AutoloadEnabled" )
783 nAutoloadSecs_2% = aDocumentProperties_2.getPropertyValue ( "AutoloadSecs" )
784 sAutoLoadURL_2$ = aDocumentProperties_2.getPropertyValue ( "AutoloadURL" )
785 sBliendCopiesTo_2$ = aDocumentProperties_2.getPropertyValue ( "BlindCopiesTo" )
786 sCopiesTo_2$ = aDocumentProperties_2.getPropertyValue ( "CopiesTo" )
787 aCreationDate_2 = aDocumentProperties_2.getPropertyValue ( "CreationDate" )
788 sDefaultTarget_2$ = aDocumentProperties_2.getPropertyValue ( "DefaultTarget" )
789 sDescription_2$ = aDocumentProperties_2.getPropertyValue ( "Description" )
790 nEditingCycles_2% = aDocumentProperties_2.getPropertyValue ( "EditingCycles" )
791 nEditingDuration_2& = aDocumentProperties_2.getPropertyValue ( "EditingDuration" )
792 seqExtraData_2 = aDocumentProperties_2.getPropertyValue ( "ExtraData" )
793 sInReplyTo_2$ = aDocumentProperties_2.getPropertyValue ( "InReplyTo" )
794 bIsEncrypted_2 = aDocumentProperties_2.getPropertyValue ( "IsEncrypted" )
795 sKeywords_2$ = aDocumentProperties_2.getPropertyValue ( "Keywords" )
796 sMIMEType_2$ = aDocumentProperties_2.getPropertyValue ( "MIMEType" )
797 sModifiedBy_2$ = aDocumentProperties_2.getPropertyValue ( "ModifiedBy" )
798 aModifyDate_2 = aDocumentProperties_2.getPropertyValue ( "ModifyDate" )
799 sNewsgroups_2$ = aDocumentProperties_2.getPropertyValue ( "Newsgroups" )
800 sOriginal_2$ = aDocumentProperties_2.getPropertyValue ( "Original" )
801 bPortableGraphics_2 = aDocumentProperties_2.getPropertyValue ( "PortableGraphics" )
802 aPrintDate_2 = aDocumentProperties_2.getPropertyValue ( "PrintDate" )
803 sPrintedBy_2$ = aDocumentProperties_2.getPropertyValue ( "PrintedBy" )
804 nPriority_2% = aDocumentProperties_2.getPropertyValue ( "Priority" )
805 bQueryTemplate_2 = aDocumentProperties_2.getPropertyValue ( "QueryTemplate" )
806 sRecipient_2$ = aDocumentProperties_2.getPropertyValue ( "Recipient" )
807 sReferences_2$ = aDocumentProperties_2.getPropertyValue ( "References" )
808 sReplyTo_2$ = aDocumentProperties_2.getPropertyValue ( "ReplyTo" )
809 bSaveGraphicsCompressed_2 = aDocumentProperties_2.getPropertyValue ( "SaveGraphicsCompressed" )
810 bSaveOriginalGraphics_2 = aDocumentProperties_2.getPropertyValue ( "SaveOriginalGraphics" )
811 bSaveVersionOnClose_2 = aDocumentProperties_2.getPropertyValue ( "SaveVersionOnClose" )
812 sTemplate_2$ = aDocumentProperties_2.getPropertyValue ( "Template" )
813 bTemplateConfig_2 = aDocumentProperties_2.getPropertyValue ( "TemplateConfig" )
814 aTemplateDate_2 = aDocumentProperties_2.getPropertyValue ( "TemplateDate" )
815 sTemplateFileName_2$ = aDocumentProperties_2.getPropertyValue ( "TemplateFileName" )
816 sTheme_2$ = aDocumentProperties_2.getPropertyValue ( "Theme" )
817 sTitle_2$ = aDocumentProperties_2.getPropertyValue ( "Title" )
818 bUserData_2 = aDocumentProperties_2.getPropertyValue ( "UserData" )
820 ' Als erwarteten Zielwert schon mal "Properties identisch" annehmen!!!
821 ' Für den Fall, das nur eine diesen Anspruch nicht erfüllt, wird der Wert einfach zurückgesetzt.
822 ' Von da bleibt der neue Wert bestehen und zeigt an, daß sich mindestens eine Property geändert hat!
823 CompareDocumentProperties = cEqual
825 ' Dann die Werte vergleichen
826 if ( CompareOWString ( sAuthor_1$, sAuthor_2$ ) = cDifferent ) then
827 CompareDocumentProperties = cDifferent
828 elseif ( CompareBool ( bAutoloadEnabled_1, bAutoloadEnabled_2 ) = cDifferent ) then
829 CompareDocumentProperties = cDifferent
830 elseif ( CompareInt16 ( nAutoloadSecs_1%, nAutoloadSecs_2% ) = cDifferent ) then
831 CompareDocumentProperties = cDifferent
832 elseif ( CompareOWString ( sAutoLoadURL_1$, sAutoLoadURL_2$ ) = cDifferent ) then
833 CompareDocumentProperties = cDifferent
834 elseif ( CompareOWString ( sBliendCopiesTo_1$, sBliendCopiesTo_2$ ) = cDifferent ) then
835 CompareDocumentProperties = cDifferent
836 elseif ( CompareOWString ( sCopiesTo_1$, sCopiesTo_2$ ) = cDifferent ) then
837 CompareDocumentProperties = cDifferent
838 elseif ( CompareDateTime ( aCreationDate_1, aCreationDate_2 ) = cDifferent ) then
839 CompareDocumentProperties = cDifferent
840 elseif ( CompareOWString ( sDefaultTarget_1$, sDefaultTarget_2$ ) = cDifferent ) then
841 CompareDocumentProperties = cDifferent
842 elseif ( CompareOWString ( sDescription_1$, sDescription_2$ ) = cDifferent ) then
843 CompareDocumentProperties = cDifferent
844 elseif ( CompareInt16 ( nEditingCycles_1%, nEditingCycles_2% ) = cDifferent ) then
845 CompareDocumentProperties = cDifferent
846 elseif ( CompareInt32 ( nEditingDuration_1&, nEditingDuration_2& ) = cDifferent ) then
847 CompareDocumentProperties = cDifferent
848 elseif ( CompareByteSequence( seqExtraData_1, seqExtraData_2 ) = cDifferent ) then
849 CompareDocumentProperties = cDifferent
850 elseif ( CompareOWString ( sInReplyTo_1$, sInReplyTo_2$ ) = cDifferent ) then
851 CompareDocumentProperties = cDifferent
852 elseif ( CompareBool ( bIsEncrypted_1, bIsEncrypted_2 ) = cDifferent ) then
853 CompareDocumentProperties = cDifferent
854 elseif ( CompareOWString ( sKeywords_1$, sKeywords_2$ ) = cDifferent ) then
855 CompareDocumentProperties = cDifferent
856 elseif ( CompareOWString ( sMIMEType_1$, sMIMEType_2$ ) = cDifferent ) then
857 CompareDocumentProperties = cDifferent
858 elseif ( CompareOWString ( sModifiedBy_1$, sModifiedBy_2$ ) = cDifferent ) then
859 CompareDocumentProperties = cDifferent
860 elseif ( CompareDateTime ( aModifyDate_1, aModifyDate_2 ) = cDifferent ) then
861 CompareDocumentProperties = cDifferent
862 elseif ( CompareOWString ( sNewsgroups_1$, sNewsgroups_2$ ) = cDifferent ) then
863 CompareDocumentProperties = cDifferent
864 elseif ( CompareOWString ( sOriginal_1$, sOriginal_2$ ) = cDifferent ) then
865 CompareDocumentProperties = cDifferent
866 elseif ( CompareBool ( bPortableGraphics_1, bPortableGraphics_2 ) = cDifferent ) then
867 CompareDocumentProperties = cDifferent
868 elseif ( CompareDateTime ( aPrintDate_1, aPrintDate_2 ) = cDifferent ) then
869 CompareDocumentProperties = cDifferent
870 elseif ( CompareOWString ( sPrintedBy_1$, sPrintedBy_2$ ) = cDifferent ) then
871 CompareDocumentProperties = cDifferent
872 elseif ( CompareInt16 ( nPriority_1%, nPriority_2% ) = cDifferent ) then
873 CompareDocumentProperties = cDifferent
874 elseif ( CompareBool ( bQueryTemplate_1, bQueryTemplate_2 ) = cDifferent ) then
875 CompareDocumentProperties = cDifferent
876 elseif ( CompareOWString ( sRecipient_1$, sRecipient_2$ ) = cDifferent ) then
877 CompareDocumentProperties = cDifferent
878 elseif ( CompareOWString ( sReferences_1$, sReferences_2$ ) = cDifferent ) then
879 CompareDocumentProperties = cDifferent
880 elseif ( CompareOWString ( sReplyTo_1$, sReplyTo_2$ ) = cDifferent ) then
881 CompareDocumentProperties = cDifferent
882 elseif ( CompareBool ( bSaveGraphicsCompressed_1, bSaveGraphicsCompressed_2 ) = cDifferent ) then
883 CompareDocumentProperties = cDifferent
884 elseif ( CompareBool ( bSaveOriginalGraphics_1, bSaveOriginalGraphics_2 ) = cDifferent ) then
885 CompareDocumentProperties = cDifferent
886 elseif ( CompareBool ( bSaveVersionOnClose_1, bSaveVersionOnClose_2 ) = cDifferent ) then
887 CompareDocumentProperties = cDifferent
888 elseif ( CompareOWString ( sTemplate_1$, sTemplate_2$ ) = cDifferent ) then
889 CompareDocumentProperties = cDifferent
890 elseif ( CompareBool ( bTemplateConfig_1, bTemplateConfig_2 ) = cDifferent ) then
891 CompareDocumentProperties = cDifferent
892 elseif ( CompareDateTime ( aTemplateDate_1, aTemplateDate_2 ) = cDifferent ) then
893 CompareDocumentProperties = cDifferent
894 elseif ( CompareOWString ( sTemplateFileName_1$, sTemplateFileName_2$ ) = cDifferent ) then
895 CompareDocumentProperties = cDifferent
896 elseif ( CompareOWString ( sTheme_1$, sTheme_2$ ) = cDifferent ) then
897 CompareDocumentProperties = cDifferent
898 elseif ( CompareOWString ( sTitle_1$, sTitle_2$ ) = cDifferent ) then
899 CompareDocumentProperties = cDifferent
900 elseif ( CompareBool ( bUserData_1, bUserData_2 ) = cDifferent ) then
901 CompareDocumentProperties = cDifferent
902 end if
904 End Function
906 '----------------------------------------------------------------------------
907 ' Hilfsfunktion: Wandelt eine Struktur des Types DateTime in einen formatierten String um
908 '----------------------------------------------------------------------------
909 Function DateTime2String ( aDateTime ) as String
911 stempString$ = ""
912 stempString$ = stempString$ + aDateTime.Day + "."
913 stempString$ = stempString$ + aDateTime.Month + "."
914 stempString$ = stempString$ + aDateTime.Year + " - "
915 stempString$ = stempString$ + aDateTime.Hours + ":"
916 stempString$ = stempString$ + aDateTime.Minutes + ":"
917 stempString$ = stempString$ + aDateTime.Seconds + ":"
918 stempString$ = stempString$ + aDateTime.HundredthSeconds + " Uhr"
920 DateTime2String = stempString$
922 End Function
924 '----------------------------------------------------------------------------
925 ' Hilfsfunktion: Wandelt eine Sequence von Bytes in einen formatierten String um
926 '----------------------------------------------------------------------------
927 Function ByteSequence2String ( seqByteSequence ) as String
929 nElementCount% = UBound ( seqByteSequence() )
931 if ( nElementCount% < 1 ) then
932 stempString$ = "leer"
933 else
934 stempString$ = "{"
935 for nCounter%=0 to nElementCount% step 1
936 stempString$ = stempString$ + seqByteSequence(nCounter%)
937 next nCounter%
938 stempString$ = stempString$ + "}"
939 end if
941 ByteSequence2String = stempString$
943 End Function
945 '----------------------------------------------------------------------------
946 ' Hilfsmethode: Zeigt die aktuellen Werte ALLER Properties an
947 '----------------------------------------------------------------------------
948 Sub ShowProperties ( aDocumentProperties )
950 ' Besorgen der Werte und zwischenspeichern
951 sAuthor$ = aDocumentProperties.getPropertyValue ( "Author" )
952 bAutoloadEnabled = aDocumentProperties.getPropertyValue ( "AutoloadEnabled" )
953 nAutoloadSecs% = aDocumentProperties.getPropertyValue ( "AutoloadSecs" )
954 sAutoLoadURL$ = aDocumentProperties.getPropertyValue ( "AutoloadURL" )
955 sBliendCopiesTo$ = aDocumentProperties.getPropertyValue ( "BlindCopiesTo" )
956 sCopiesTo$ = aDocumentProperties.getPropertyValue ( "CopiesTo" )
957 dCreationDate = aDocumentProperties.getPropertyValue ( "CreationDate" )
958 sDefaultTarget$ = aDocumentProperties.getPropertyValue ( "DefaultTarget" )
959 sDescription$ = aDocumentProperties.getPropertyValue ( "Description" )
960 nEditingCycles% = aDocumentProperties.getPropertyValue ( "EditingCycles" )
961 nEditingDuration& = aDocumentProperties.getPropertyValue ( "EditingDuration" )
962 seqExtraData = aDocumentProperties.getPropertyValue ( "ExtraData" )
963 sInReplyTo$ = aDocumentProperties.getPropertyValue ( "InReplyTo" )
964 bIsEncrypted = aDocumentProperties.getPropertyValue ( "IsEncrypted" )
965 sKeywords$ = aDocumentProperties.getPropertyValue ( "Keywords" )
966 sMIMEType$ = aDocumentProperties.getPropertyValue ( "MIMEType" )
967 sModifiedBy$ = aDocumentProperties.getPropertyValue ( "ModifiedBy" )
968 dModifyDate = aDocumentProperties.getPropertyValue ( "ModifyDate" )
969 sNewsgroups$ = aDocumentProperties.getPropertyValue ( "Newsgroups" )
970 sOriginal$ = aDocumentProperties.getPropertyValue ( "Original" )
971 bPortableGraphics = aDocumentProperties.getPropertyValue ( "PortableGraphics" )
972 dPrintDate = aDocumentProperties.getPropertyValue ( "PrintDate" )
973 sPrintedBy$ = aDocumentProperties.getPropertyValue ( "PrintedBy" )
974 nPriority% = aDocumentProperties.getPropertyValue ( "Priority" )
975 bQueryTemplate = aDocumentProperties.getPropertyValue ( "QueryTemplate" )
976 sRecipient$ = aDocumentProperties.getPropertyValue ( "Recipient" )
977 sReferences$ = aDocumentProperties.getPropertyValue ( "References" )
978 sReplyTo$ = aDocumentProperties.getPropertyValue ( "ReplyTo" )
979 bSaveGraphicsCompressed = aDocumentProperties.getPropertyValue ( "SaveGraphicsCompressed" )
980 bSaveOriginalGraphics = aDocumentProperties.getPropertyValue ( "SaveOriginalGraphics" )
981 bSaveVersionOnClose = aDocumentProperties.getPropertyValue ( "SaveVersionOnClose" )
982 sTemplate$ = aDocumentProperties.getPropertyValue ( "Template" )
983 bTemplateConfig = aDocumentProperties.getPropertyValue ( "TemplateConfig" )
984 dTemplateDate = aDocumentProperties.getPropertyValue ( "TemplateDate" )
985 sTemplateFileName$ = aDocumentProperties.getPropertyValue ( "TemplateFileName" )
986 sTheme$ = aDocumentProperties.getPropertyValue ( "Theme" )
987 sTitle$ = aDocumentProperties.getPropertyValue ( "Title" )
988 bUserData = aDocumentProperties.getPropertyValue ( "UserData" )
990 ' Eine Zeichenkette zusammenbasteln, welche die Werte formatiert darstellt.
991 sOutLine$ = "[OWString]" + chr$(9) + "Author" + chr$(9) + "= {" + chr$(9) + sAuthor$ + "}" + chr$(13)
992 sOutLine$ = sOutLine$ + "[sal_Bool]" + chr$(9) + "AutoloadEnabled" + chr$(9) + "= {" + chr$(9) + bAutoloadEnabled + "}" + chr$(13)
993 sOutLine$ = sOutLine$ + "[sal_Int16]" + chr$(9) + "AutoloadSecs" + chr$(9) + "= {" + chr$(9) + nAutoloadSecs% + "}" + chr$(13)
994 sOutLine$ = sOutLine$ + "[OWString]" + chr$(9) + "AutoLoadURL" + chr$(9) + "= {" + chr$(9) + sAutoLoadURL$ + "}" + chr$(13)
995 sOutLine$ = sOutLine$ + "[OWString]" + chr$(9) + "BliendCopiesTo" + chr$(9) + "= {" + chr$(9) + sBliendCopiesTo$ + "}" + chr$(13)
996 sOutLine$ = sOutLine$ + "[OWString]" + chr$(9) + "CopiesTo" + chr$(9) + "= {" + chr$(9) + sCopiesTo$ + "}" + chr$(13)
997 sOutLine$ = sOutLine$ + "[DateTime]" + chr$(9) + "CreationDate" + chr$(9) + "= {" + chr$(9) + DateTime2String(dCreationDate) + "}" + chr$(13)
998 sOutLine$ = sOutLine$ + "[OWString]" + chr$(9) + "DefaultTarget" + chr$(9) + "= {" + chr$(9) + sDefaultTarget$ + "}" + chr$(13)
999 sOutLine$ = sOutLine$ + "[OWString]" + chr$(9) + "Description" + chr$(9) + "= {" + chr$(9) + sDescription$ + "}" + chr$(13)
1000 sOutLine$ = sOutLine$ + "[sal_Int16]" + chr$(9) + "EditingCycles" + chr$(9) + "= {" + chr$(9) + nEditingCycles% + "}" + chr$(13)
1001 sOutLine$ = sOutLine$ + "[sal_Int32]" + chr$(9) + "EditingDuration" + chr$(9) + "= {" + chr$(9) + nEditingDuration& + "}" + chr$(13)
1002 sOutLine$ = sOutLine$ + "[Sequence<Byte>]" + chr$(9) + "ExtraData" + chr$(9) + "= {" + chr$(9) + ByteSequence2String(seqExtraData) + "}" + chr$(13)
1003 sOutLine$ = sOutLine$ + "[OWString]" + chr$(9) + "InReplyTo" + chr$(9) + "= {" + chr$(9) + sInReplyTo$ + "}" + chr$(13)
1004 sOutLine$ = sOutLine$ + "[sal_Bool]" + chr$(9) + "IsEncrypted" + chr$(9) + "= {" + chr$(9) + bIsEncrypted + "}" + chr$(13)
1005 sOutLine$ = sOutLine$ + "[OWString]" + chr$(9) + "Keywords" + chr$(9) + "= {" + chr$(9) + sKeywords$ + "}" + chr$(13)
1006 sOutLine$ = sOutLine$ + "[OWString]" + chr$(9) + "MIMEType" + chr$(9) + "= {" + chr$(9) + sMIMEType$ + "}" + chr$(13)
1007 sOutLine$ = sOutLine$ + "[OWString]" + chr$(9) + "ModifiedBy" + chr$(9) + "= {" + chr$(9) + sModifiedBy$ + "}" + chr$(13)
1008 sOutLine$ = sOutLine$ + "[DateTime]" + chr$(9) + "ModifyDate" + chr$(9) + "= {" + chr$(9) + DateTime2String(dModifyDate) + "}" + chr$(13)
1009 sOutLine$ = sOutLine$ + "[OWString]" + chr$(9) + "Newsgroups" + chr$(9) + "= {" + chr$(9) + sNewsgroups$ + "}" + chr$(13)
1010 sOutLine$ = sOutLine$ + "[OWString]" + chr$(9) + "Original" + chr$(9) + "= {" + chr$(9) + sOriginal$ + "}" + chr$(13)
1011 sOutLine$ = sOutLine$ + "[sal_Bool]" + chr$(9) + "PortableGraphics" + chr$(9) + "= {" + chr$(9) + bPortableGraphics + "}" + chr$(13)
1012 sOutLine$ = sOutLine$ + "[DateTime]" + chr$(9) + "PrintDate" + chr$(9) + "= {" + chr$(9) + DateTime2String(dPrintDate) + "}" + chr$(13)
1013 sOutLine$ = sOutLine$ + "[OWString]" + chr$(9) + "PrintedBy" + chr$(9) + "= {" + chr$(9) + sPrintedBy$ + "}" + chr$(13)
1014 sOutLine$ = sOutLine$ + "[sal_Int16]" + chr$(9) + "Priority" + chr$(9) + "= {" + chr$(9) + nPriority% + "}" + chr$(13)
1015 sOutLine$ = sOutLine$ + "[sal_Bool]" + chr$(9) + "QueryTemplate" + chr$(9) + "= {" + chr$(9) + bQueryTemplate + "}" + chr$(13)
1016 sOutLine$ = sOutLine$ + "[OWString]" + chr$(9) + "Recipient" + chr$(9) + "= {" + chr$(9) + sRecipient$ + "}" + chr$(13)
1017 sOutLine$ = sOutLine$ + "[OWString]" + chr$(9) + "References" + chr$(9) + "= {" + chr$(9) + sReferences$ + "}" + chr$(13)
1018 sOutLine$ = sOutLine$ + "[OWString]" + chr$(9) + "ReplyTo" + chr$(9) + "= {" + chr$(9) + sReplyTo$ + "}" + chr$(13)
1019 sOutLine$ = sOutLine$ + "[sal_Bool]" + chr$(9) + "SaveGraphicsCompressed" + chr$(9) + "= {" + chr$(9) + bSaveGraphicsCompressed + "}" + chr$(13)
1020 sOutLine$ = sOutLine$ + "[sal_Bool]" + chr$(9) + "SaveOriginalGraphics" + chr$(9) + "= {" + chr$(9) + bSaveOriginalGraphics + "}" + chr$(13)
1021 sOutLine$ = sOutLine$ + "[sal_Bool]" + chr$(9) + "SaveVersionOnClose" + chr$(9) + "= {" + chr$(9) + bSaveVersionOnClose + "}" + chr$(13)
1022 sOutLine$ = sOutLine$ + "[OWString]" + chr$(9) + "Template" + chr$(9) + "= {" + chr$(9) + sTemplate$ + "}" + chr$(13)
1023 sOutLine$ = sOutLine$ + "[sal_Bool]" + chr$(9) + "TemplateConfig" + chr$(9) + "= {" + chr$(9) + bTemplateConfig + "}" + chr$(13)
1024 sOutLine$ = sOutLine$ + "[DateTime]" + chr$(9) + "TemplateDate" + chr$(9) + "= {" + chr$(9) + DateTime2String(dTemplateDate) + "}" + chr$(13)
1025 sOutLine$ = sOutLine$ + "[OWString]" + chr$(9) + "TemplateFileName" + chr$(9) + "= {" + chr$(9) + sTemplateFileName$ + "}" + chr$(13)
1026 sOutLine$ = sOutLine$ + "[OWString]" + chr$(9) + "Theme" + chr$(9) + "= {" + chr$(9) + sTheme$ + "}" + chr$(13)
1027 sOutLine$ = sOutLine$ + "[OWString]" + chr$(9) + "Title" + chr$(9) + "= {" + chr$(9) + sTitle$ + "}" + chr$(13)
1028 sOutLine$ = sOutLine$ + "[sal_Bool]" + chr$(9) + "UserData" + chr$(9) + "= {" + chr$(9) + bUserData + "}"
1030 ' Ausgabe der formatierten Zeichenkette
1031 InfoMessage ( sOutLine$ )
1032 End Sub
1034 '----------------------------------------------------------------------------
1035 ' Hilfsmethode: Zeigt die aktuellen Elemente des NameContainers an.
1036 '----------------------------------------------------------------------------
1037 Sub ShowNameContainer ( aDocumentProperties )
1039 if ( aDocumentProperties.hasElements () = FALSE ) then
1040 InfoMessage ( "Keine Elemente im NameContainer enthalten." )
1041 Exit Sub
1042 end if
1044 aNameField = aDocumentProperties.getElementNames ()
1045 if ( IsArray ( aNameField ) = FALSE ) then
1046 ErrorMessage ( "getElementNames() .... Fehler (Es konnte keine Sequence bestimmt werden!)" )
1047 Exit Sub
1048 end if
1049 nElementCount% = UBound ( aNameField () )
1051 stempString$ = ""
1052 for nCounter%=0 to nElementCount% step 1
1053 stempString$ = "[" + nCounter% + "]"
1054 stempString$ = stempString$ + chr$(9) + aNameField(nCounter%)
1055 stempString$ = stempString$ + chr$(9) + "="
1056 stempString$ = stempString$ + chr$(9) + aDocumentProperties.getByName ( aNameField(nCounter%) )
1057 stempString$ = stempString$ + chr$(13)
1058 next nCounter%
1060 InfoMessage ( stempString$ )
1062 End Sub
1064 '----------------------------------------------------------------------------
1065 ' Hilfsfunktion: Ermittelt die Anzahl der im NameContainer enthaltenen Elemente.
1067 ' Returnwert = Anzahl der Elemente
1068 '----------------------------------------------------------------------------
1069 Function getNameContainerCount ( aDocumentProperties ) as Long
1071 if ( aDocumentProperties.hasElements () = FALSE ) then
1072 getNameContainerCount = 0
1073 Exit Function
1074 end if
1076 aNameField = aDocumentProperties.getElementNames ()
1077 nElementCount% = UBound ( aNameField () )
1079 ' Da die Zaehlung bei 0 beginnt, und der ermittelte Wert die obere Grenze darstellt,
1080 ' muss hier eine 1 draufgeschlagen werden.
1081 getNameContainerCount = nElementCount% + 1
1083 End Function