Problembehebung beim Einsatz von OLE-Objekten
Aufgrund dem Zusammenspiel von ClassiX® mit Microsoft-Word OLE-Objekten können viele Eigenheiten bei der Erstellung von Objekten entstehen. Auf dieser Seite sind die bekannten Eigenheiten und deren Möglichkeit diese zu umgehen aufgeführt.
- Bausteine werden nicht zusammenhängend angezeigt
- Formatierung der DocVariablen wird nicht korrekt wiedergegeben.
- DocVariable wird nicht erkannt
- Finden von benötigten DocVariablen
- Standard DocVariablen
- IF-Bedingung wird nicht korrekt interpretiert
- Ein Dokumentbaustein wird nicht mitgedruckt
- Tricks und Kniffe beim Aufruf externer OLE-Objekte
Bausteine werden nicht zusammenhängend angezeigt
Eine der Möglichkeiten für eine fehlerhafte Darstellung von Dokumentbausteinen ist ein "harter Zeilenumbruch" in einem Dynamischen Datenfeld. Diese lassen sich im Wordeditor in der Formatierungsansicht (¶) schnell finden. Der Zeilenumbruch sollte entweder ganz entfernt werden oder durch einen weichen Zeilenumbruch ( Shift + Return ) ersetzt werden.
Formatierung der DocVariablen wird nicht korrekt wiedergegeben.
Microsoft-Word spielt manchmal gemeine Streiche mit Usern und Entwicklern. In der Entwicklungsphase von ClassiX® ist das Phänomen vorgekommen, dass eine DocVariable in einem OLE-Baustein ein bestimmtes Format zugewiesen bekommt (z. B. Arial, Fett, Kursiv) und dann später beim Ausdruck nicht korrekt angezeigt wird.
In diesem Fall hilft es leider nur den gesamten Block (bzw. Tabellenspalte) in der die Variable ist neu zu formatieren. Am besten wird dazu der Block markiert, und auf Normal-Format ( Shift + Strg + N ) gesetzt. Anschließend kann die Formatierung wieder eingestellt werden.
Dokumentenvariable wird nicht erkannt.
Word meldet beim Bearbeiten des OLE-Bausteins das die Dokumentenvariable nicht verfügbar ist:
Ausschalten des Feldfunktionsmodus mit Alt + F9
Dieses könnte im einfachsten Fall an einem Schreibfehler in der Dokumentenvariablen sein. Um die Schreibweise der Variablen zu überprüfen, schalten Sie in den Feldfunktionsmodus (Alt + F9). Ist die Variable korrekt geschrieben könnte es sich noch um ein Aktualisierungsproblem handeln. Verlassen Sie den Word-Editor und rufen sie Ihn erneut auf.
Finden von benötigten DocVariablen
Die benötigten DocVariablen lassen sich über das Monitor-Window identifizieren. Gehen Sie dazu mit dem Mauszeiger über das einzubindende Element (z. B. die Anschrift des Kunden in der Angebotsmaske) und drücken Sie die rechte Maustaste. Das Monitor-Window öffnet sich und in der Titelleiste steht bereits der Name des gewünschten Objektes (in diesem Fall: "address"). Mit dem InstantView®-Befehl "GetObject
" bekommen Sie das gewünschte Objekt auf den Stack und mit dem Aufruf: "SendMsg(INSPECT_OBJECT)
" lässt sich das Objekt im Objektinspektor betrachten.
Im Objektinspektor lassen sich jetzt die Attribute des ausgewählten Objektes Betrachten. Wollen wir z. B. die Firmensitz des Kunden als DocVariable in einen DokumentBaustein einfügen notieren wir das in der DocVariable wie folgt: (vgl. Einfügen von "Dynamischen Datenfeldern")
- Strasse: { DOCVARIABLE address.street \*MERGEFORMAT }
- Postleitzahl: { DOCVARIABLE address.zipCode \*MERGEFORMAT }
- Ort: { DOCVARIABLE address.city \*MERGEFORMAT }
Standard DocVariablen (Übersicht der Dokumentvariablen)
Um die Bearbeitung in der Belegerstellung ein wenig zu erleichtern sind an dieser Stelle einige der wichtigsten DocVariablen für die Erstellung von Belegen aufgeführt.
"var": Über die Funktion: "var()" kann auf die InstantView®-Variablen zugegriffen werden. (Bsp: var(cyberEnterprise).uniqueID="000"
ermittelt den aktuellen Mandanten) Siehe auch: "Zugriffsausdruck ("var")"
Um die InstantView®-Variablen im Monitor-Window zu lokalisieren kann das Objekt "cyberEnterprise" auf den Stack gelegt werden. Von hier aus kann dann mit der Funktion "Get()" oder "Copy()" auf die Variablen zugegriffen werden. Oder über: "SendMsg(INSPECT_OBJECT)
" das Objekt im Objektinspektor betrachtet werden.
Analog dazu können sie auch aus dem Druckdialog das Monitor-Window aufrufen und sich mit printObject
das gesamte Dokument auf den Stack legen. Dieses lässt sich jetzt wieder mit dem Objektinspektor (SendMsg(INSPECT_OBJECT)
) genauer betrachten und nach gesuchten Variablennamen durchforsten.
"call": Mit Hilfe der speziellen Funktion call(Makroname) kann auch auf InstantView®-Makros, welche einen Rückgabewert liefern, zugegriffen werden um sie dann als DocVariable zu nutzen. Liefert das Makro ein Objekt als Rückgabewert, kann über die herkömmliche Art auch auf die Zugriffsausdrücke zurückgegriffen werden. Bsp: call(Makroname).y
Liste mit häufig genutzten InstantView®-Variablen
var(cyberEnterprise).uniqueID | Auswahl Mandanten |
Die UniqueID´s für die vorhandenen Mandanten können über den Menüpunkt: System->Mandanten angesehen werden. (Siehe auch: "var") | |
var(printObject).uniqueID | Transaktionsnummer |
Die Transaktionsnummer ist die Identifikation des zugehörigen Vorgangs (Bsp: Lieferscheinnummer, Angebotsnummer etc.) | |
TopTransaction().date | Transaktionsdatum |
Transaktion von... | |
CX_PARTNER.Speech(_,_,_) | Anrede zusammenstellen |
Bei der Angabe: "Speech" handelt es sich um ein Klassenfunktion der Klasse CX_PARTNER. Sie erstellt mit Hilfe der übergebenen Parameter eine formatierte Ausgabe der Anrede. | |
CX_BUSINESS_OBJECT.Address() | Adresse Einfügen |
über Die Klassenfunktion .Address() der Klasse CX_BUISNESS_OBJECT wird Ein Addressobjekt (CX_STREET_ADDRESS od. CX_PO_BOX_ADDRESS) zurückgeliefert welches zahlreiche Attribute, wie City, ZipCode etc. zur Verfügung stellt. | |
personInCharge | Transaktionsverantwortlicher (Sachbearbeiter) |
diese Methode liefert eine Instanz der Klasse CX_PARTNER des Sachbearbeiters zurück. | |
header.mlComment | Betreff (Überschrift) |
diese Methode liefert einen String mit der Betreffzeile zurück | |
main.mlComment | Hauptanschreiben |
Der Inhalt des Anschreibens, welches für jede Transaktion manuell eingegeben werden kann. | |
mlShortName | |
call(OrderItemShortDescription) | Kurzbezeichnung für Artikel |
(Siehe auch: "call") | |
print.counter | Seitenzähler |
Speichert die aktuell zu druckende Seite. Soll z. B. ein Dokumentbaustein nur auf der ersten Seite gedruckt werden, kann der Baustein mit der Bedingung "print.counter=1 " versehen werden. |
IF-Bedingung wird nicht korrekt interpretiert
Bei fast allen Bedingungen wird kontrolliert, ob ein Wert vorhanden ist oder nicht. Die Bedingung hierfür sieht dann wie folg aus:
{ IF { DOCVARIABLE uniqueID } <> " " "Anweisung für wahr“ "Anweisung für falsch“ }
In diesem Beispiel wird kontrolliert, ob das Datenfeld uniqueID ungleich (<>) leer ist. Hierbei ist zu beachten, dass leer in Word durch zwei doppelte Anführungsstriche dargestellt wird, zwischen denen sich ein Leerzeichen befindet. ( " " nicht "" )
Sollte die Bedingung trotzdem nicht erkannt werden, so ist auch die Dokumentvariable, gegen die verglichen werden soll, in doppelte Anführungsstriche gesetzt werden.
Ergebnis: { IF "{ DOCVARIABLE uniqueID }" <> " " "Anweisung für wahr“ "Anweisung für falsch“ }
Ein Dokumentbaustein wird nicht mitgedruckt
Beim Ausdruck wurde ein Dokumentbaustein (z. B. die Kopfzeile) nicht mitgedruckt.
- Überprüfen Sie die Bedingungen des nicht mitgedruckten Dokumentbausteins. Evtl. trifft keine Bedingung zu.
- Dem Dokumentbaustein ist kein oder ein falscher Dokument-Typ zugeordnet (Bsp: Die Kopfzeile hat versehentlich die Zuordnung zu einer Fußzeile bekommen).
Tricks und Kniffe
- Fehler in der "If"-Anweisung
- Formatierung mit Tabellen
- Tricks und Kniffe beim Aufruf externer OLE-Objekte
- IF-Anweisung verursacht eine Leerzeile:
Dieses kann vermieden werden, in dem die Fontgröße für die IF-Anweisung auf 1 gesetzt wird. - Tabellen zur Formatierung:
Tabellen stellen eine gute Möglichkeit dar, eine Spaltenstruktur für die Objektvariablen zu erstellen.
Beispiel:
Der Dokumentbaustein:
{ DOCVARIABLE uniqueID \* MERGEFORMAT } { DOCVARIABLE call(OrderItemDescription) } { DOCVARIABLE quantity.string(NF_DI
MENSIONED,NF_SIG
_PRECISION) \* MERGEFORMAT }
ergibt im Ausdruck:
100.1 Duoblockbrenner SKVG mit mechanischer Verbundsteuerung
zur Verbrennung von Heizöl und Brenngas, im wesentlichen bestehend aus Drehzerstäuber, Ölarmaturen, Gasringbrenner, Mechanische Verbundsteuerung, Zündeinrichtung mit Armaturen, Flammenfühler1 Stück
Tricks und Kniffe beim Aufruf externer OLE-Objekte
- Call(CX_Open)
- Call(CX_Show)
- Call(CX_Close)
- Call(CX_Hide)
- Call(Quit)
- Call(PrintPreview)
- Call(PrintOut)
- Call(ActivePrinter)
- Call(Activate)
- Call(Close)
- Call(Continue)
- Call(Compare)
- Call(Range)
- Call(SaveAs)
Auszug aus Microsoft Visual-Basic Hilfe
Activate-Methode
Aktiviert ein angegebenes Objekt.
Syntax 1
Ausdruck.Activate(Wait)
Syntax 2
Ausdruck.Activate
Ausdruck Erforderlich. Ein Ausdruck, der ein Task-Objekt (Syntax 1) oder ein anderes Objekt (Syntax 2) zurückgibt. Um eine Liste der verfügbaren Objekte zu erhalten, klicken Sie auf Betrifft.
Wait Optional Boolean. Nur Task-Objekt. True, um zu warten, bis der Benutzer Word aktiviert hat, bevor die Aufgabe aktiviert wird. False, um die Aufgabe sofort zu aktivieren, auch wenn Word nicht aktiviert ist.
Auszug aus Microsoft Visual-Basic Hilfe
Range-Eigenschaft
Gibt ein Range-Objekt zurück, das den Teil eines Dokuments darstellt, der in dem angegebenen Objekt enthalten ist. Nur-Lese-Zugriff.
Weitere Informationen darüber, wie ein Bereich aus einem Dokument oder ein Formbereich aus einer Auflistung von Formen zurückgegeben wird, finden Sie bei der Range-Methode.
Verwandte Themen
- technische Doku: "OLE-Automation"
- CX_COM_OBJECT
- DrawOle
- SetParameter
- Übersicht der Dokumentvariablen