In Python Scripts definierbare Dialoge
Produktlinie
Standard
|Expert
Betriebsart
CLOUD ABO
|ON-PREMISES
Module
Leistung & CRM
Budget & Teilprojekt
Fremdkosten
Ressourcenplanung
Business Intelligence
Ab Version 6.1 gibt es eine Dialog-Funktion, mit welcher in Python Scripts Dialoge definiert und vom Script angezeigt werden können. Der Dialogaufruf erfolgt über die API Funktion
vtcapp.showcustomdialog(Dialogdefinition, Initialwerte)
Für die Erstellung des Dialogs gibt es ein Element namens Dialog mit folgenden Eigenschaften:
Title | Setzt den Titel des Dialogs |
Width |
Legt die Breite des Dialogs fest. Der Dialog im Beispiel weiter unten hat z.B. Width="500" gesetzt. Die Höhe des Dialogs ergibt sich aus der Anzahl der Controls, die darauf platziert werden. |
InitialFocus |
Hier kann festgelegt werden, wo sich der Fokus befindet, wenn der Dialog geöffnet wird. Zur Auswahl stehen die Optionen First, Last und None. Wenn nichts gesetzt wird, gilt First. |
Buttons |
Es können Buttons auf dem Dialog platziert werden, an welche Dialog-Kommandos gebunden werden können. Der Dialog bietet folgende Kommandos an:
OkCommand und CancelCommand werden in der Regel in den Dialog.Buttons geführt. CloseCommand kann genutzt werden, um den Dialog durch einen eigenen Button zu schliessen. Das Dialog-Ergebnis ist 'Ok' und im Values-Dictionary hat der entsprechende Button den Wert 'True'. |
Auf dem Dialog werden wie beim Customizing die benötigten Controls platziert. Grundsätzlich können die gleichen Controls wie im UI Customizing verwendet werden. Jedes Control, für welches Werte gesetzt oder abgefragt werden soll, braucht einen eindeutigen Namen innerhalb des Dialogs.
Bei Controls, welche mehr als eine Property haben, sind sekundäre Properties mit dem Punkt abgetrennt, z.B. ListBox.Items, AuswahlBox.Items.
Es gelten folgende Anmerkungen:
Die Initial-Werte der Funktion werden als Argument mitgegeben und die Resultat-Werte als Resultat zurückgeliefert. Sowohl die Initial-Werte wie auch die Return-Werte werden jeweils als Python Dictionary übergeben. Die Keys im Dictionary entsprechen den Control-Namen, z.B.
initValues = {} initValues["AuswahlBox.Items"] = ("Option 1", "Option 2", "Option 3") initValues["Value1"] = "Default 1"
Es kann auch ein Defaultwert zugewiesen werden (wenn das Form z.B. nicht vollständig ausgefüllt ist und man es nochmal aufrufen muss mit bereits erfassten Daten), z.B.
initValues["Projekt.SelectedValue"] = Projekt.eval("boldid")
SelectedValue ist eine Eigenschaft des verwendeten UI Controls.
Dieser Dialogaufruf sieht in Python so aus:
# Python Script für Custom Dialog dlgDefinition=""" <Dialog Title="Test Dialog" Width="500"> <TextBlock Text="Bitte geben Sie folgende Werte ein:" Appearance="Info"/> <Group Label="Auswahl" ShowLabel="True"> <ListBox Name="AuswahlBox" Lines="6"/> </Group> <ProjectComboBox Name="Projekt" Label="Projekt"/> <TextBox Name="Value1" Label="Wert 1"/> <CheckBox Name="Check1" Label="Option 1"/> <Group Appearance="NoSpacing" FlexWidth="0" Width="300" HorizontalAlignment="Left"> <Button Name="Option21" FlexWidth="0" Width="100" Text="Option21" Command="{Binding CloseCommand}" /> <Button Name="Option22" FlexWidth="0" Width="100" Text="Option22" Command="{Binding CloseCommand}" /> <Button Name="Option23" FlexWidth="0" Width="100" Text="Option23" Command="{Binding CloseCommand}" /> </Group> <Dialog.Buttons> <Button Text="OK" IsAccept="True" Command="{Binding OkCommand}" /> <Button Text="Cancel" IsCancel="True" Command="{Binding CancelCommand}" /> </Dialog.Buttons> </Dialog> """ initValues = {} initValues["AuswahlBox.Items"] = ("Option 1", "Option 2", "Option 3") initValues["Value1"] = "Default 1" ok, values = vtcapp.showcustomdialog(dlgDefinition, initValues) if ok: vtcapp.msgbox('Dialog OK, Werte: %s' % values)
Die showcustomdialog Funktion gibt ein Tuple aus Return-Value und Values-Dictionary zurück. Return-Value ist true für OK und false für Cancel. Für jedes Control mit einem Namen besteht ein Eintrag (Name/Wert) im Values-Dictionary. Die Controls liefern folgende Werte:
Gewisse Input-Controls (z.B. ComboBox, ReferenceBox usw.) liefern nicht das Objekt, sondern dessen interne ID.
Beispiel für einen Rückgabewert aus obigem Beispiel:
Das Auslesen der einzelnen Werte aus dem Values-Dictionary geschieht wie folgt, z.B.:
ProjektID = values["Projekt"]