Wie schreibt man einen VBScript-Code für M-Files Zwecke?

Hinweis: Wenn Sie neue Erweiterungen entwickeln oder bestehende bearbeiten, empfehlen wir, VBScript-Inhalte für zukünftige Kompatibilität durch Vault Application Framework (VAF)-kompatiblen Code zu ersetzen. Weitere Informationen zu den Vorteilen der VAF-Entwicklung gegenüber VBScript finden Sie unter The Vault Application Framework in M-Files Developer Portal.

Siehe die oben genannten Links für Anweisungen hinsichtlich dem Hinzufügen von VBScript-Code in jeder Instanz.

Sie können über M-Files API und VBScript auf Objekte zugreifen, die in der Dokumentenverwaltung vorhanden sind und diese verwalten, sofern die oben genannten Bedingungen gegeben sind.

VBScript Grundlagen

Nachfolgend finden einige elementare Grundlagen von VBScript, um Ihnen den Einstieg zu erleichtern. Beachten Sie, dass wir das Thema dabei nur sehr oberflächlich behandeln. Siehe Nützliche Ressourcen für weitere Informationen. Falls Sie ein Neuling sind auf dem Gebiet des Skriptens oder nicht vertraut sind mit den Konzepten von Variablen und Funktionen, kann es hilfreich sein, dass Sie zuerst eine Anleitung für Anfänger, wie beispielsweise Learn Beginning Scripting, lesen.

Anweisungen

In VBScript beendet ein Zeilensprung eine Anweisung und es gibt deshalb kein bestimmtes Zeichen zur Beendigung einer Anweisung. Das nachfolgende Beispiel enthält zwei Anweisungen:
Dim szPropertyName
szPropertyName = PropertyDef.Name
Falls Sie eine Anweisung in zwei Linien darstellen wollen, müssen Sie einen Unterstrich verwenden (_), um anzugeben, das die Anweisung auf der folgenden Zeile fortgesetzt wird:
Err.Raise MFScriptCancel, _
    "The document vault already contains an object with the same title. Please choose another title."

Kommentare

Sie sollten immer alles kommentieren, was im Code ausgeführt wird, damit Außenstehende, die Ihren Code lesen, verstehen, welchen Zweck er verfolgt. Sie können dabei Ihrem Code einen Kommentar hinzufügen, indem Sie das ' Zeichen verwenden:
' Get the title of the object.
Dim szCurrentTitle
szCurrentTitle = oCurrentTitleProp.GetValueAsUnlocalizedText
Es ist dabei ratsam, einen Kommentar über der Codezeile anzubringen, die Ihres Erachtens für den Leser nicht unmittelbar verständlich ist.

Variablen

Variablen werden durch Verwendung des Dim Schlüsselworts deklariert:
Dim szCurrentTitleProp
Werte werden Variablen durch Verwendung des Gleichheitszeichens (=) zugewiesen. Sie sollten Ihre Variablen immer festlegen, bevor Sie ihnen neue Werte zuweisen:
Dim szCurrentTitleProp
szCurrentTitleProp = PropertyValues.SearchForProperty( iTitleProperty ).GetValueAsUnlocalizedText
Sie können dazu die Option Explicit Anweisung verwenden, um eine ausdrückliche Festlegung von allen Variablen zu erzwingen. Falls Sie versuchen, eine nicht deklarierte Variable zu verwenden, wenn Option Explicit in Ihrem Skript aktiviert ist, funktioniert das Skript nicht. Das folgende Script funktioniert beispielsweise nicht, wenn die Variable szValue nicht festgelegt wurde, bevor ihr ein Wert zugewiesen wird:
Option Explicit
szValue = PropertyValue.GetValueAsUnlocalizedText
Falls Sie in M-Files skripten, steht Ihnen eine Anzahl von vordefinierten Variablen zur Verfügung. Die Variablen PropertyValue können zum Beispiel dazu verwendet werden, um den Wert einer Eigenschaft festzulegen. Siehe Verfügbare VBScript-Variablen für eine vollständige Liste von vordefinierten Variablen.
Hinweis: Wir empfehlen Ihnen, die sogenannte ungarische Notation zu verwenden, wenn Sie Variablen benennen. Dadurch haben Sie oder wer auch immer Ihren Code ließt eine klares Verständnis vom Datentyp des Werts, der in der Variable gespeichert ist. Sie können beispielsweise folgende Notation verwenden:
  • „sz“ für Zeichenfolgen
  • „o“ für Objekte
  • „i“ für Integer
  • „b“ für Boole‘sch
  • "f" for Gleitkomma-Zahlen
  • „d“ für Daten

Konstanten

Sie können Konstanten verwenden, um Werte zu speichern, die im Skript konstant eingehalten werden müssen.
Const iMaxNumberOfItems = 50
Beachten Sie, dass Sie einer Konstante einen Buchstabenwert zuweisen müssen. Sie können keine Variable, andere Konstante oder Funktion verwenden, um eine Konstante zu initialisieren.

Objekte

Objekte werden Variablen durch Verwendung der Set Anweisung zugewiesen. Sie können eine neue Instanz eines M-Files API-Objekts erstellen und dieses auf folgende Art und Weise einer Variablen zuweisen:
Dim oTitleSearch
Set oTitleSearch = CreateObject( "MFilesAPI.SearchCondition" )
Objekte sind Komponenten, die ihre eigenen Eigenschaften und Methoden aufweisen. Methoden sind Funktionen, die zu einem spezifischen Objekt gehören und im Kontext mit diesem Objekt verwendet werden können. Andererseits dienen die Eigenschaften dazu, die Werte eines Objekts anzuzeigen oder festzulegen. Sie können auf die Eigenschaften und Methoden eines Objekts zugreifen, indem Sie die Punktnotation verwenden:
oTitleSearch.Set oTitleExpression, MFConditionTypeEqual, oTitleTypedValue
Methodenargumente wie oTitleExpression, MFConditionTypeEqual, und oTitleTypedValue im oben genannten Beispiel werden nach der Methode aufgelistet und durch Komma getrennt. Parameter werden entweder durch Wert oder Referenz weitergegeben. Falls eine Methode einen Parameter anhand eines Werts übernimmt, kopiert die Methode den Wert als Argument, weshalb der Originalwert unverändert bleibt. Falls andererseits eine Methode einen Parameter durch Referenz übernimmt, schlagen sich alle Änderungen, die die Methode auf das Argument ausüben kann auch in der Originalreferenz nieder. Der Wert Nothing sollte verwendet werden, wenn der standardmäßige Parameterwert nicht benutzt werden kann.

Wenn Sie in M-Files skripten, können Sie einen Vorteil aus den verfügbaren Objekten ziehen, die in VBScript und insbesondere in M-Files API verfügbar sind. Siehe die M-Files API-Dokumentation für weitere Einzelheiten.

Verknüpfung von Zeichenfolgen

Sie können zwei oder mehre Zeichenfolgen zu einer verknüpfen, indem Sie den & Operator verwenden:
' Get proposal number.
Dim szNumber
szNumber = PropertyValues.SearchForProperty( 1156 ).TypedValue.DisplayValue

' Get customer.
Dim szCustomer
szCustomer = PropertyValues.SearchForProperty( 1288 ).TypedValue.DisplayValue

' Create proposal title.
Dim szName
szName = "Proposal #" & szNumber & " / " & szCustomer
In den oben genannten Beispielen, ist der vorgeschlagene Titel, der in der Variable szName gespeichert wird, das Resultat einer Verknüpfung der folgenden Zeichenfolgen:
  • Zeichenfolge aus Buchstaben Proposal #
  • die vorgeschlagene Nummer, die in der szNumber Variablen gespeichert ist
  • eine andere Zeichenfolge aus Buchstaben /
  • den in der szCustomer Variablen gespeicherten Kundennamen
Der resultierende Angebotstitel könnte beispielsweise Proposal #5577 / ESTT lauten.
Sie können der Zeichenfolge einen Zeilenumbruch hinzufügen, indem Sie die VbCrLF Konstante mit Ihren Zeichenfolgen verknüpfen:
Err.Raise MFScriptCancel, _
    "The document vault already contains an object with the same title." & VbCrLF & "Please choose another title."

Fehlermeldung ausgeben

Falls Sie einen Eigenschaftswert mit VBScript validieren müssen, ist es notwendig, dass dem Benutzer eine Fehlermeldung angezeigt wird, wenn der Wert, den der Endbenutzer eingibt, ungültig ist. Sie können eine Fehlermeldung in VBScript ausgeben, indem Sie die Raise Methode des Err Objekts verwenden:
Err.Raise MFScriptCancel, "The property """ & szPropertyName & """ must have a value of at least 10 characters."
Die Methode übernimmt die Fehlernummer und Beschreibung als Parameter. Für M-Files Skriptzwecke wird die MFScriptCancel Variable verwendet, da sie die M-Files Fehlernummer speichert.

„If“ Anweisungen

If Anweisungen werden dazu verwendet, eine Gruppe von Anweisungen auszuführen, falls die Bedingung, die in der If Anweisung festgelegt wurde, wahr ist:
If Len( szValue ) < 10 Then

    Err.Raise MFScriptCancel, "The property """ & szPropertyName & """ must have a value of at least 10 characters."

End If
Der „If“ Block muss mit einer End If Anweisung beendet werden. Alle Anweisungen zwischen If und End If werden ausgeführt falls die Bedingung, die zwischen If und Then festgelegt ist, als wahr gilt. Sie können den And Operator verwenden, um zahlreiche Bedingungen festzulegen, die alle erfüllt sein müssen, damit der Block ausgeführt werden kann oder den Or Operator verwenden, um zahlreiche Operatoren festzulegen, von denen einer wahr sein muss, damit der Block ausgeführt werden kann. Sie können folgende Vergleichsoperatoren benutzen, um die Bedingung festzulegen:
  • == prüft, ob der Wert der zwei Operanden gleich ist oder nicht. Falls ja, ist die Bedingung wahr.
  • <> prüft, ob der Wert der zwei Operanden gleich ist oder nicht. Falls nein, ist die Bedingung wahr.
  • > prüft, ob der Wert des linken Operanden größer ist als der Wert des rechten Operanden. Falls ja, ist die Bedingung wahr.
  • < prüft, ob der Wert des linken Operanden kleiner ist wie der Wert des rechten Operanden. Falls ja, ist die Bedingung wahr.
  • >= prüft, ob der Wert des linken Operanden größer oder gleich ist wie der Wert des rechten Operanden. Falls ja, ist die Bedingung "wahr"
  • <= prüft, ob der Wert des linken Operanden kleiner oder gleich ist wie der Wert des rechten Operanden. Falls ja, dann ist die Bedingung "wahr"
Sie können auch eine If Anweisung innerhalb einer anderen If, sagen wir einer Else Anweisung verschachteln, oder die ElseIf Anweisung benutzen, um eine tiefere logische Verzweigung in Ihrem Skript zu erreichen.

Funktionen und Unterroutinen

Sie können eine Unterroutine dazu verwenden, um einen Codeabschnitt zu definieren, der in Ihrem Code durch Referenz mehrmals verwendet wird:
Sub CloseFile()
    oMyFile.Close
    Set oMyFile = Nothing
End Sub
Oder Sie können eine Funktion definieren, um mehrmals einen Codeabschnitt zu verwenden, der einen bestimmten Wert ausgeben soll:
Function IsOdd( iValue )
    If iValue MOD 2 = 0 Then ' Even value.
        IsOdd = False
    Else ' Odd value.
        IsOdd = True
    End If
End Function
Um eine Unterroutine oder Funktion in Ihrem Skript aufzurufen, einfach den Namen bezeichnen:
Closefile()
IsOdd( 5 )

Nützliche Ressourcen

Ihre wertvollsten Informationsquellen über Skripting innerhalb von M-Files sind folgende:

Die M-Files API-Dokumentation beinhaltet umfassendes Referenzmaterial für M-Files API-Objekte, Methoden, Schnittstellen, Eigenschaften und Aufzählungen, dass Sie diese vorteilhaft in VBScript-Codes verwenden können. Die genannte Ressource listet und erläutert andererseits alle Variablen mit zuvor festgelegten Werten auf, die sie direkt in Ihrem VBScript-Code übernehmen können.

Zusätzlich zu den bereits erwähnten Ressourcen können sich folgende externen Webseiten als hilfreich erweisen:

Beispiel

Beim nachfolgenden Beispiel handelt es sich um ein Skript, das zur Validierung einer Eigenschaft verwendet werden kann, wenn der Benutzer versucht, Änderungen von Metadaten im Metadatenformular zu speichern. Das Skript garantiert, dass der eingegebene Eigenschaftswert mindestens 10 Zeichen aufweisen muss. Lassen Sie uns das Skript nun näher betrachten:
Option Explicit

Dim szPropertyName, szValue

szPropertyName = PropertyDef.Name

szValue = PropertyValue.GetValueAsUnlocalizedText

If Len( szValue ) < 10 Then

    Err.Raise MFScriptCancel, "The property """ & szPropertyName & """ must have a value of at least 10 characters."

End If
Zuerst werden die Variablen szPropertyName und szValue deklariert, anschließend wird der Name der Eigenschaft und dessen Wert, den wir validieren, in den Variablen gespeichert, die wir soeben deklariert haben. Wir verwenden die GetValueAsUnlocalizedText Methode (siehe die M-Files API-Dokumentation für weitere Informationen), um den Eigenschaftswert als nicht lokalisierten Text zu erhalten.

Unsere Bedingung zur Validierung des Eigenschaftswerts hängt davon ab, dass der Wert mindestens 10 Zeichen aufweisen muss. Wir evaluieren diese Bedingung nun anhand einer If Anweisung. Wir haben in der Bedingung der If-Anweisung festgehalten, dass die Länge der Eigenschaft weniger als 10 Zeichen betragen soll, damit die Anweisung innerhalb der If-Anweisung ausgeführt wird. Falls ein Eigenschaftswert 10 Zeichen oder mehr aufweist, wird der If Codeblock nicht ausgeführt und die Ausführung des Skripts ist damit beendet.

Im „If“ Block senden wir eine Fehlermeldung an den Benutzer, in der wir angeben, dass der Eigenschaftswert, den der Benutzer eingegeben hat, mindestens 10 Zeichen aufweisen muss, so dass der Benutzer deshalb dazu angehalten wird, einen längeren Wert einzugeben. Nach der Anzeige der Fehlermeldung, wird das Metadatenformular erneut eingeblendet und ermöglicht es dem Benutzer, die ungültigen Eigenschaftswerte zu ändern.

Für eine vollständige Anleitung zur Validierung von Eigenschaftswerten mit VBScript siehe Automatische Validierung der Eigenschaftswerte.