Technische Aspekte
Beispiel plugin code
Der folgende Code enthält alle notwendigen Schritte für die Erstellung einer Schnittstelle, die Daten in eine Protokolldatei einträgt.
Hinweis: Das zu verwendende .NET-Framework muss dasselbe sein wie das, das auf dem Server verwendet wird (oder niedriger).
Zur Verbesserung des Verständnisses wurden vor jedem Code-Abschnitt Erklärungen eingefügt:
publicclassSelligentLOG:
IChannelModule, IChannelOutput
{
IChannelModule
Vier Methoden müssen darin definiert werden:
#regionIChannelModule
IChannelHost
m_Host;
publicboolCreate(IChannelHost
Host,outString ErrorStr)
{
ErrorStr
="";
m_Host
= Host;
Host.WriteLog("SelligentLOG
plugin v1.0 created",false);
returntrue;
}
Parameter haben die folgenden Attribute:
- ADDINSTALL: Wenn auf „true" eingestellt, ermöglicht dies dem Plugin den Empfang von Kundenschlüssel, Instanznamen und MailAgent.
- ADDENCRYPTEDINSTALL: Wenn auf „true" eingestellt, empfängt Ihr Plugin den verschlüsselten Kundenschlüssel, Instanznamen und MailAgent.
PARAMETERS hat einen untergeordneten Knoten <PARAMETER> mit den folgenden Attributen. (Hinweis: Diese Einstellungen können im Dialogfeld „Schnittstelleneigenschaften/Konfigurieren" eingestellt werden.
- Required: Wenn auf „true" eingestellt, muss der Benutzer diesen Wert beim Erstellen der Schnittstelle eingeben.
- Type: INTEGER, LONG, BOOL, FLOAT, TIME, DATE, DATETIME, TEXT, NTEXT
- MAXLEN: für Texttyp, die maximale Länge
- NAME: als Identifizierer verwendet
- LABEL: in der GUI dargestelltes Label
Untergeordnete Elemente:
-
OPTIONS: Statt eines Eingabebedienelements erhalten Sie eine Dropdown-Liste mit diesen Optionen (z. B. <OPTIONS EXHAUSTIVE=""FALSE"">
-
-
Untergeordnete Elemente: OPTION mit Attribut VALUE, um ID und Inhalt in CDATA für das Label anzugeben (z.B. <OPTION VALUE=""8""><![CDATA[Information]]></OPTION>
-
Die Eigenschaften eines Schnittstellenereignisdatensatzes werden im Knoten FIELDS XML definiert. Dies enthält FIELD-Knoten. (Hinweis: Die FIELD-Knoten werden in der Registerkarte „Felder" der Schnittstelle angezeigt.)
Enthält die folgenden Attribute:
- REQUIRED: Wenn auf „true" eingestellt, muss der Benutzer diesen Wert beim Erstellen der Schnittstelle eingeben.
- TYPE: INTEGER, LONG, BOOL, FLOAT, TIME, DATE, DATETIME, TEXT, NTEXT
- MAXLEN: für TEXT-Typ, die maximale Länge
- NAME: als Identifizierer verwendet
- LABEL: in der GUI dargestelltes Label
- DIRECTION: IN oder OUT. Wird verwendet, um zu erklären, ob ein Feld zur Eingabe (von der Kampagne zu Plugin) oder Ausgabe (Feedback von Plugin) verwendet wird.
- VALUE: der Standardwert für das Feld (optional)
Untergeordnete Elemente:
-
OPTIONS: Statt eines Eingabebedienelements erhalten Sie eine Dropdown-Liste mit diesen Optionen. Verfügbare Attribute sind:
-
- OPTIONTABLE: Abfrage dieser Tabelle für Optionen (optional)
- KEYFIELD: Wird verwendet, um die Optionen zu identifizieren (erforderlich, wenn OPTIONTABLE verwendet wird)
- VALUEFIELD: Labels für die Optionen (erforderlich, wenn OPTIONTABLE verwendet wird)
Beispiel <OPTIONS KEYFIELD='ID' VALUEFIELD='NAME' OPTIONTABLE='MAIL"/> fügt die Namen der Tabelle MAIL zur Dropdown-Liste hinzu. Die Auswahl eines Elements hat zur Folge, dass die ID als Wert für diese Option verwendet wird. Sie können trotzdem manuelle Optionen hinzufügen, wenn Sie möchten.
Untergeordnete Elemente: OPTION mit Attribut VALUE, um ID und Inhalt in CDATA für das Label anzugeben. (z.B. OPTION VALUE="8"><![CDATA[Information]]></OPTION>)
//
Get Interface Info XML
publicboolGetConfigInterface(outString
Xml,outString ErrorStr)
{
ErrorStr
="";
Xml
="";
Xml +="<XML
GUID='32DD0A34-28B9-4DD2-81F2-3AF765A2F713' NAME='Selligent LOG Module'
VERSION='1.0' DIRECTION='OUT' TYPE='LOG' CAPABILITIES='WRITE'>";
Xml +="<DESCRIPTION>Selligent
Log module</DESCRIPTION>";
Xml
+="<PARAMETERS>";
Xml +="</PARAMETERS>";
Xml
+="<INTERFACE
CONFIGURABLE='TRUE' DYNAMIC='FALSE'>";
Xml
+="<FIELDS>";
Xml
+="</FIELDS>";
Xml
+="</INTERFACE>";
Xml
+="</XML>";
Xml
= Xml.Replace("'","\"");
returntrue;
}
-
GetDataInterface: Ermöglicht den Abruf der Plugin-Definition (Felder und Typen), basierend auf einem festgelegten Satz konfigurierbarer Variablen
//
Get Data Interface based on a certain configuration
publicboolGetDataInterface(String
Config,outString Xml,outString
ErrorStr)
{
ErrorStr
="Not
implemented";
Xml
="";
returnfalse;
}
//validate
the config.
publicboolValidateConfig(refString
Config,outstringErrorStr)
{
ErrorStr
="Not
ed";
returntrue;
}
#endregion
IChanneltOutputreferenziert das Ausgabegerät.
Darin werden zwei Methoden definiert:
Beide Methoden müssen immer definiert werden. Jedoch können Sie, wenn Daten nicht asynchron zurückgegeben werden müssen, auch die Methode WriteDate zum Zurückgeben des Feedbacks verwenden. Für die Methode ReadDatekönnen Sie in diesem Fall ErrorSTR auf leer einstellen und einfach „true" zurückgeben.
WriteData: Sendet die Daten zum Plugin. Sie werden als XML-Dokument gesendet und können mehrere Datensätze enthalten.
#regionIChannelOutput
//
Write data towards the interface
publicboolWriteData(String
Config,refString Xml,outString
ErrorStr)
{
ErrorStr
="";
NetXmlDoc
iConfigDoc =newNetXmlDoc();
NetXmlDoc
iDataDoc =newNetXmlDoc();
if(iConfigDoc.LoadXml(Config)
==false)
{
ErrorStr
="Unable
to parse Config XML";
returnfalse;
}
if(iDataDoc.LoadXml(Xml)
==false)
{
ErrorStr
="Unable
to parse Data XML";
returnfalse;
}
Stream
iStream = File.Open("c:\\temp\\myfile.txt",
FileMode.Append);
StreamWriter
iWriter =newStreamWriter(iStream);
if(iStream
==null)
{
ErrorStr
="Unable
to open file";
returnfalse;
}
for(inti
= 0; i < iDataDoc.GetRootNode().GetChildCount(); i++)
{
iWriter.WriteLine("RECORD");
NetXmlNode
iNode = iDataDoc.GetRootNode().GetChild(i);
for(intc
= 0; c < iNode.GetChildCount(); c++)
{
NetXmlNode
Field = iNode.GetChild(c);
String
Name = Field.GetAttribute("NAME");
String
Content = Field.GetContent();
Content
= Content.Replace("\n","
");
iWriter.WriteLine(Name
+":"+
Content);
iNode.SetAttribute("EXTID","P_"+
DateTime.Now.ToString("yyyyMMdd_HHmmss"));
}
}
iWriter.Flush();
iStream.Close();
Xml
= iDataDoc.GetXml();
returntrue;
}
- ReadData: Fragt zur Überprüfung auf Verfügbarkeit neuer Daten das Plugin ab. Diese Daten werden als XML-Dokument gesendet und können mehrere Datensätze enthalten.
//
Read data from the interface
publicboolReadData(String
Config,refString Xml,outString
ErrorStr)
{
ErrorStr
="Not
ed";
returnfalse;
}
#endregion
}
