Clientseitige Skripte
Aus Action oder JavaScript ausführen
Ein clientseitiges Skript kann sowohl über ein Action-Element, als auch aus einem HTML-JS-Element aufgerufen werden Die Parameter für die Action und den Aufruf von XP.ExecAction() finden Sie in den mitgelieferten Action-Beispielen im Designer, sowie hier: Actions und Plugins.
Option 1: Action
Option 2: JavaScript
<!-- Dump all from JS -->
<script>
function MyDump()
{
XP.ExecAction('BATCH', 'RUN', 'Name=SkriptDumpAll.bat|Params=MyAppLinkParam');
}
</script>
<div>
<a id="myLink" href="#" onclick="MyDump();">DumpAll als JS</a>
</div>
Datenübergabe in Umgebungsvariablen
Der Datenkontext eines Dashboards wird beim Aufruf einer Batch-Datei bzw. eines Skripts in die Umgebungsvariablen des Prozesses kopiert. Die Notation der Daten entspricht dabei derjenigen der Datenfelder, die unter Variablenbenzeichnungen der Datenfelder beschrieben sind. Die Umgebungsvariablen besitzen zusätzlich den Präfix
XP.Contact
XP.Call
XP.User
Die Rufnummer eines Gesprächspartnes finden Sie z.B. in der Umgebungsvariablen XP.Call.CALLNO
.
Beachten Sie, dass Groß- und Kleinschreibung bei Umgebungsvariablen (im Gegensatz zu JavaScript) keine Rolle spielt.
Zusätzlich zu den Daten für Contact, User und Call können verwendet werden:
XP.Data
XP.Action
Diese Objekte sind für die Übermittlung von Formulardaten und Action-Parametern vorgesehen.
Hinweis
Die Inhalte entsprechen den JS-Variablen unter JavaScript-Library und Datenobjekte.
Batch-File mit eingebettetem Skript
In vielen Fällen ist es sinnvoll, die eingeschränkte Funktionalität von Batch-Dateien über Skripting zu erweitern. Das Beispiel zeigt, wie man eine „hybride“ Datei erstellt. Die Kommandos der Batchdatei sind dabei in eine nur für das Skripting gültige Kommentar-Sektion verlagert. Die Datei wird bei einer Kommandoausführung zweimal ausgeführt: Einmal, über den Kommandozeilen-Interpreter (CMD) und zum zweiten Mal aus der Batch-Sektion über den Skripting-Host. Der Vorteil liegt also ausschließlich darin, dass nicht zwei Dateien gepflegt werden müssen. Das Beispiel ruft das Notepad-Programm auf und übergibt den ersten Kommandozeilenparameter als Dateinamen. Eine Besonderheit ist das Einschließen des Skript-Übergabeparameters in Anführungszeichen, die über das Karat-Symbol „escaped“ sind (^“). Diese Syntax erlaubt es, dass Parameter mit Leerzeichen übergeben werden können. Die Übergabe von Parametern über die Kommandozeile ist nur noch aus Kompatibilitätsgründen zu älteren XPhone Connect-Versionen vorhanden. Das Beispiel-Skript zeigt die aktuelle Variante der Parameterübergabe per Umgebungsvariable.
<!-- : Begin batch script
@echo off
cscript //nologo "%~f0?.wsf" ^""%1"^"
rem cscript //nologo //D //x "%~f0?.wsf" ^""%1"^" 'debug version
exit /b
----- Begin wsf script --->
<job><script language="VBScript">
rem get access to data context
set wshShell = wscript.CreateObject( "wscript.Shell" )
Set wshProcEnv = wshShell.Environment( "PROCESS" )
rem get command line parameter
Params = wshProcEnv( "xp.action.params" )
rem Params contains data from Link-URL "Params=..."
</script></job>
Der im Beispiel auskommentierte Aufruf (rem) des Skripting-Hosts (cscript) mit den Parametern //D //x
ruft das Skript im Debug-Modus auf.
Damit kann eine Kontrolle der Variablen und der Skript-Ausführung auf dem Arbeitsplatz stattfinden, wenn ein funktionsfähiger Skript-Debugger (z.B. Visual Studio) installiert ist.
Siehe hierzu auch Microsoft Support - Script Debugging.
Vorsicht
Beachten Sie, dass das Skript (bzw. der Debugger) nur aufgerufen wird, wenn das Skript keine Syntax-Fehler enthält. Da die Ausgabe des Kommandozeilen-Interpreters unterdrückt wird, werden Syntax-Fehlermeldungen nicht sichtbar. Prüfen Sie das Skript daher über einen manuellen Aufruf der Batch-Datei aus der Kommandozeile.
Beispiele Client-Skripte
Datenausgabe (Dump)
Der Code zeigt eine Schaltfläche, die zur Bildschirmanzeige der Dashboard-Kontextdaten führt. Zusätzlich werden zwei eigene Parameter an den Datenkontext angehängt.
HTML/JS-Element
<!-- Dump all from JS -->
<script>
function MyDump()
{
XP.Call.MyNewCallParam1="NewCallParam1";
XP.Data.MyNewParam1 = "NewParam1";
XP.ExecAction('BATCH', 'RUN', "Name=SkriptDumpAll.bat");
}
</script>
<div>
<a id="myLink" href="#" onclick="MyDump();">DumpAll als JS</a>
</div>
Alternativ kann ein Action, statt des HTML/JS-Elements verwendet werden:
Batch-Skript
Das Skript SkriptDumpAll.bat
muss im Verzeichnis <Drive>:\Program Files (x86)\Common Files\C4B\AppLink
stehen und folgenden Inhalt haben:
<!-- : Begin batch script SkriptDumpAll.bat
@echo off
cscript //nologo "%~f0?.wsf"
rem cscript //nologo //D //x "%~f0?.wsf" ^""%1"^" 'debug version
exit /b
----- Begin wsf script --->
<job><script language="VBScript">
set wshShell = wscript.CreateObject( "wscript.Shell" )
Set wshSystemEnv = wshShell.Environment( "PROCESS" )
For Each strItem In wshSystemEnv
rem data contexts are: xp.contact, xp.call, xp.user, xp.data, xp.action
pos = InStr( 1, strItem, "XP.", vbTextCompare )
if pos <> 0 then
xpEnv = xpEnv + vbCrlf + strItem
end if
Next
wshShell.Popup xpEnv, AUTO_DISMISS, "Dump output", OK_BUTTON
</script></job>
Outlook Aufgabe erzeugen
<!-- : Begin batch script SkriptOlTask.bat
@echo off
cscript //nologo "%~f0?.wsf" ^""%1"^"
rem debug version: cscript //nologo //D //x "%~f0?.wsf" ^""%1"^"
exit /b
----- Begin wsf script --->
<job><script language="VBScript">
Dim olApp, myTask, name
set wshShell = wscript.CreateObject( "wscript.Shell" )
Set wshSystemEnv = wshShell.Environment( "PROCESS" )
Set olApp = GetObject(, "Outlook.Application")
Set myTask = olApp.CreateItem(3) ' olTaskItem
name = wshSystemEnv( "xp.contact.NAME" )
myTask.Subject = "Anruf von - " & name
myTask.Display false
</script></job>
Anrufstatus prüfen
Das Skript prüft anhand der Variablen XP.Call.STATE
den Status eines Anrufs:
<!-- : Begin batch script
@echo off
cscript //nologo "%~f0?.wsf"
rem cscript //nologo //D //x "%~f0?.wsf" ^""%1"^" 'debug version
exit /b
----- Begin wsf script --->
<job><script language="VBScript">
set wshShell = wscript.CreateObject( "wscript.Shell" )
Set wshSystemEnv = wshShell.Environment( "PROCESS" )
state = wshSystemEnv( "XP.Call.STATE" )
if (state and 2) <> 0 then
xpEnv = xpEnv + vbCrlf + "State: Ringing"
end if
if (state and 4) <> 0 then
xpEnv = xpEnv + vbCrlf + "State: Connected"
end if
if (state and 1) <> 0 then
xpEnv = xpEnv + vbCrlf + "State: Outgoing"
end if
For Each strItem In wshSystemEnv
rem WScript.Echo strItem
pos = InStr( 1, strItem, "XP.", vbTextCompare )
if pos <> 0 then
xpEnv = xpEnv + vbCrlf + strItem
end if
Next
wshShell.Popup xpEnv, AUTO_DISMISS, "Dump output", OK_BUTTON
</script></job>
Parameter an Batch-File in Action übergeben
Das Skript liest die Rufnummer des Gesprächspartners aus der Umgebungsvariable xp.call.callno
.
Falls in Action ein Wert für Params übergeben wurde, steht er in der Skript-Variablen params
zur Verfügung:
<!-- : Begin batch script dumpcallno.bat
@echo off
cscript //nologo "%~f0?.wsf"
rem cscript //nologo //D //x "%~f0?.wsf" ^""%1"^" 'debug version
exit /b
----- Begin wsf script --->
<job><script language="VBScript">
set wshShell = wscript.CreateObject( "wscript.Shell" )
Set wshSystemEnv = wshShell.Environment( "PROCESS" )
params = wshProcEnv( "xp.action.params" ) rem if the Applink has a Params-value, it is delivered here
callno = wshSystemEnv( "xp.call.callno" )
wshShell.Popup callno, AUTO_DISMISS, "Dump output", OK_BUTTON
REM ***** process content of "callno" here *********
</script></job>
Neues Word-Dokument erzeugen
Das Beispiel zeigt, wie ein Word-Dokument über eine Action erzeugt wird, das nach dem Öffnen mit Daten aus dem Dashboard versorgt wird, um beisielsweise einen personalisierten Brief zu erzeugen.
Das Beispiel besteht aus eine Action, einem Skript und einer Word-Dokumentenvorlage. Die Action ruft das Skript auf und übergibt Name und Pfad einer Dokumentenvorlage.
Aus der Dokumentvorlage wird ein neues Dokument erzeugt. Das Skript kopiert die Elemente des Datenkontexts in Dokumentvariable ( der Name wird beibehalten). Um die Daten an bestimmten Stellen im Dokument anzuzeigen, sind Word-Feldfunktionen an diesen Stellen einzufügen. Diese Feldfunktionen müssen die entsprechenden Dokumentvariablen referenzieren.
Action
Der Params-Parameter enthält einen UNC-Pfad. Aufgrund von Einschränkungen der aktuellen Version von XPhone Connect können keine doppelten Backslash-Zeichen übergeben werden. Aus diesem Grund stellt das Skript einen weiteren Backslash vor den Pfad.
Batch-Datei
Für das Ersetzen der Dokumentvariablen durch den Datenkontext aus dem Dashboard:
<!-- : Begin batch script SkriptNewWordDoc.bat
@echo off
cscript //nologo "%~f0?.wsf" ^""%1"^"
rem debug version: cscript //nologo //D //x "%~f0?.wsf" ^""%1"^"
exit /b
----- Begin wsf script --->
<job><script language="VBScript">
Dim pos, wdApp, wdVar, wdDocName, wdDoc, wdField, wshEnv, key, value
On Error Resume Next
rem get access to data context
set wshShell = wscript.CreateObject( "wscript.Shell" )
Set wshProcEnv = wshShell.Environment( "PROCESS" )
rem get dot-file name
wdDocName = wshProcEnv( "xp.action.params" ) rem this is, where the Params section is transferred in
if len( wdDocName ) = 0 then
MsgBox "Add file name to 'Params' parameter in your Link-URL: Name=OpenDoc.bat|Params=myfile.dotx"
WScript.Quit
end if
wdDocName = "\" + wdDocName rem quick fix for parameter coding error
rem open word app and document
Set wdApp = GetObject(, "Word.Application")
if wdApp is nothing then Set wdApp = CreateObject("Word.Application")
wdApp.Visible = True
rem Set wdDoc = wdApp.Documents.Open( wdDocName )
set wdDoc = wdApp.Documents.Add( wdDocName )
if IsEmpty( wdDoc ) then
MsgBox "Unable to generate Document (" & wdDocName & ")"
WScript.Quit
end if
On Error goto 0
rem delete all doc variables
For Each wdVar In wdDoc.Variables
wdVar.Delete
next
rem copy environment variables to doc variables
For Each strItem In wshProcEnv
pos = InStr( 1, strItem, "XP.", vbTextCompare )
if pos <> 0 then
pos = InStr( 1, strItem, "=", vbTextCompare )
key = Left( strItem, pos )
key = Replace( key, "=", "")
value = Mid( strItem, pos )
value = Replace( value, "=", "")
wdDoc.Variables.Add key, value
end if
Next
wdDoc.Fields.Update
rem delete unassigned doc variable fields
For Each wdField in wdDoc.Fields
if wdField.Type = 64 then
pos = InStr( 1, wdField.result.text, "Fehler", vbTextCompare )
rem "Fehler" must be localized to your MS-word language
if pos > 0 then
wdField.Delete
end if
end if
next
wdDoc.Fields.Update
</script></job>
Word Dokument
Die anzuzeigenden Daten werden als Feldfunktionen im Dokument hinterlegt. Die Felder referenzieren Dokumentvariable. Das Hinterlegen der Feldfunktionen in Microsoft Word geschieht über den Befehl Einfügen/Schnellbausteine/Feld. Die Variabvennamen folgen der bekannten Notation (XP…). Einfügen eines Felds, das eine Dokumentvariable referenziert:
Ansicht der Dokumentvorlage mit aktivierten Feldfunktionen (Tastenkombination ALT-F9)
Beim Erzeugen des Dokuments werden die Umgebunsgvariablen mit den Kontaktdaten an Stelle der Feldfunktionen geschrieben.
Haben Sie einen Fehler auf dieser Seite gefunden?
Oder ist etwas nicht gut oder zu ungenau formuliert? Dann freuen wir uns über eine E-Mail, am besten mit einem Verbesserungsvorschlag, an doku@c4b.de. Vielen Dank!