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 ...
14 'bShowErrorsOnly = cOn
15 bShowErrorsOnly
= cOff
17 OpenLOG ( cTestPath
+ "TestDocumentProperties.log" )
18 InfoMessage ( "Test DocumentProperties ... [start]" )
21 InfoMessage ( "Service besorgen ... [start]" )
22 aDocumentProperties
= createUnoService ( "com.sun.star.document.DocumentProperties" )
25 if ( isnull ( aDocumentProperties
) ) then
26 ErrorMessage ( "Service konnte nicht instanziiert werden!" )
29 InfoMessage ( "Service erfolgreich instanziiert ..." )
30 InfoMessage ( "Service besorgen ... [ende]" )
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!" )
47 bState
= Test_ErrorUse ( aDocumentProperties
)
48 ' Fehlerstatus abfragen
49 if ( bState
= cError
) then
50 ErrorMessage ( "Der Service verhaelt sich in Fehlersituationen nicht korrekt!" )
53 ' Schliessen der Error-Logdatei
54 InfoMessage ( "Test DocumentProperties ... [ende]" )
58 '*****************************************************************************************************************
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.
77 bState
= Test_NormalUse_XPropertySet ( aDocumentProperties
)
78 if ( bState
= cError
) then
79 Test_NormalUse
= cError
82 bState
= Test_NormalUse_XNameContainer ( aDocumentProperties
)
83 if ( bState
= cError
) then
84 Test_NormalUse
= cError
87 bState
= Test_NormalUse_XPersist ( aDocumentProperties
)
88 if ( bState
= cError
) then
89 Test_NormalUse
= cError
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
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".
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
132 ' Hier fehlt noch der Test der InfoStruktur! (Laesst sich unter Basic irgendwie NICHT testen!!!???)
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
173 nNewValue_sal_uInt16
% = 1
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 )
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
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
269 InfoMessage ( "Zusammenspiel set & getPropertyValue() ... OK" )
271 ' Der Test war erfolgreich! Meldung ausgeben und zurueck zm Aufrufer.
272 ' Ausschalten der Fehlerbehandlung
275 InfoMessage ( "Test_NormalUse_XPropertySet ... [ende]" )
277 Test_NormalUse_XPropertySet
= cOK
278 ' Und Funktion beenden
281 ' Es ist ein unerwartete Fehler aufgetreten! (Exception ...)
282 ' Meldung ausgeben und mit Fehler zurueckkehren.
283 Test_NormalUse_XPropertySet_Error:
284 ' Ausschalten der Fehlerbehandlung
287 ErrorMessage ( "Test_NormalUse_XPropertySet ... [Error]" )
288 ' und Fehlerstatus setzen
289 Test_NormalUse_XPropertySet
= cError
290 ' Abbruch der Funktion erzwingen!
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
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
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
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
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
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
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
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
473 InfoMessage ( "Test_NormalUse_XNameContainer ... [ende]" )
475 Test_NormalUse_XNameContainer
= cOK
476 ' Und Funktion beenden
479 ' Es ist ein unerwartete Fehler aufgetreten! (Exception ...)
480 ' Meldung ausgeben und mit Fehler zurueckkehren.
481 Test_NormalUse_XNameContainer_Error:
482 ' Ausschalten der Fehlerbehandlung
485 ErrorMessage ( "Test_NormalUse_XNameContainer ... [Error]" )
486 ' und Fehlerstatus setzen
487 Test_NormalUse_XNameContainer
= cError
488 ' Abbruch der Funktion erzwingen!
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
523 InfoMessage ( "Test_NormalUse_XPersist ... [ende]" )
525 Test_NormalUse_XPersist
= cOK
526 ' Und Funktion beenden
529 ' Es ist ein unerwartete Fehler aufgetreten! (Exception ...)
530 ' Meldung ausgeben und mit Fehler zurueckkehren.
531 Test_NormalUse_XPersist_Error:
532 ' Ausschalten der Fehlerbehandlung
535 ErrorMessage ( "Test_NormalUse_XPersist ... [Error]" )
536 ' und Fehlerstatus setzen
537 Test_NormalUse_XPersist
= cError
538 ' Abbruch der Funktion erzwingen!
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
%
558 '----------------------------------------------------------------------------
559 ' Hilfsmethode: Schliesst die LOG-Datei.
560 '----------------------------------------------------------------------------
562 if ( bLOGOn
= cOn
) then
563 close #nLOGFileHandle
%
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$
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$
)
584 MsgBox ( sMessage
$, 16 )
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$
)
598 MsgBox ( sMessage
$, 64 )
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
614 CompareOWString
= cDifferent
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
630 CompareDateTime
= cDifferent
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
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
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.
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
679 ' Wenn man bis hier gekommen ist, dann sind die Sequences identisch.
680 CompareByteSequence
= cEqual
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
695 CompareInt16
= cDifferent
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
711 CompareInt32
= cDifferent
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
727 CompareBool
= cDifferent
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
906 '----------------------------------------------------------------------------
907 ' Hilfsfunktion: Wandelt eine Struktur des Types DateTime in einen formatierten String um
908 '----------------------------------------------------------------------------
909 Function DateTime2String ( aDateTime
) as String
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$
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"
935 for nCounter
%=0 to nElementCount
% step
1
936 stempString$
= stempString$
+ seqByteSequence(nCounter
%)
938 stempString$
= stempString$
+ "}"
941 ByteSequence2String
= stempString$
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$
)
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." )
1044 aNameField
= aDocumentProperties
.getElementNames ()
1045 if ( IsArray ( aNameField
) = FALSE ) then
1046 ErrorMessage ( "getElementNames() .... Fehler (Es konnte keine Sequence bestimmt werden!)" )
1049 nElementCount
% = UBound ( aNameField () )
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)
1060 InfoMessage ( stempString$
)
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
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