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
{

IChannelModulemuss in jedes Plugin eingebettet werden, da dieses Modul für die Registrierung und Konfiguration des Plugins innerhalb des Campaign Agent zuständig ist..

Vier Methoden müssen darin definiert werden:

 

 

  • Create:Diese Methode wird vom Hosting-Prozess zur Erstellung des Plugins aufgerufen.

#regionIChannelModule
    IChannelHost m_Host;
    publicboolCreate(IChannelHost Host,outString ErrorStr)
    {
        ErrorStr ="";
        m_Host = Host;
        Host.WriteLog("SelligentLOG plugin v1.0 created",false);
        returntrue;
    }

 

 

  • GetConfigInterface: Stellt den Hosting-Prozess mit Konfiguration des Plugin zur Verfügung

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;
    }

  • ValidateConfig:Methode zur Validierung des aktuellen Satzes konfigurierbarer Variablen.

//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
}

 

 

 

Zurück zu Schnittstelle