Kontextvariablen bei Scripting in C#

In C#-Skripten muss es die Möglichkeit geben mit dem aktuellen Teil des cmdbcores zu kommunizieren. Dies ist über Kontextvariablen geschafft.

Wo werden welche Kontextvariablen benutzt

HTTP-Endpoint => <entry point>

Kontextvariable Typ Beschreibung
cmdb rimacon.cmdb.IPublicCMDB Über dieses Interface wird einen Teil der omniSuite zur Verfügung gestellt.
db rimacon.cmdb.scripting.IDBConnection Ermöglicht direkten Zugriff auf die Datenbank.
Request rimacon.cmdb.CUSTHTTPRESP.IRequest Abfrage.
Response rimacon.cmdb.CUSTHTTPRESP.IResponse Antwort.

E-Mail-Eingang => <entry point>

Kontextvariable Typ Beschreibung
cmdb rimacon.cmdb.IPublicCMDB Über dieses Interface wird einen Teil der omniSuite zur Verfügung gestellt.
db rimacon.cmdb.scripting.IDBConnection Ermöglicht direkten Zugriff auf die Datenbank.
ServerLogin string E-Mail-Kontologin
mail rimacon.cmdb.EMAILIN.EmailContext Informationne über den angekomennen E-Mail.

Import => C# => <entry point>

Kontextvariable Typ Beschreibung
cmdb rimacon.cmdb.IPublicCMDB Über dieses Interface wird einen Teil der omniSuite zur Verfügung gestellt.
db rimacon.cmdb.scripting.IDBConnection Ermöglicht direkten Zugriff auf die Datenbank.
ctx rimacon.cmdb.ImportScript.ImportContext Datenaustauschkontext.

interface  rimacon.cmdb.CUSTHTTPRESP.IRequest

Dieses Objekt enthält die Abfrage.

Hashtable CloneHeader()

Gibt alle Header-Variablen und Werte als Hashtable zurück (Kopie)

string Content {get;}

Enthält dens HTTP-Protokoll-Inhalt als Zeichenfolge. Bei Web-Seiten sind dies z.B. die POST-Daten (Formular-Objekte). Bei Web-Diensten ist dies die ganze Web-Nachricht.
Beispiel:

<?xml version="1.0" encoding="utf-8"?>
<methodCall>
  <methodName>getCatalog</methodName>
  <params>
    <param>
      <value><string>catalog1</string></value>
    </param>
  </params>
</methodCall>

byte[] FileContent(string varname)

Diese Funktion gibt den Inhalt der hochgeladener Datei als byte[] zurück.

bool FileExists(string varname)

Diese Funktion prüft, ob eine Datei unter angegebene Variable vorhanden ist (d.h. wurde uploadet).

string FileOriginalName(string varname)

Diese Funktion gibt den Originalname der hochgeladener Datei zurück (z.B. "Dsc00814.jpg").

string FileStringContent(string varname)

Diese Funktion gibt den Inhalt der hochgeladener Datei als Zeichenfolge zurück.

string Header(string name)

Gibt die Header-Variable zurück, zum Beispiel "User-Agent", "Keep-Alive", ...

string Page {get;}

Enthält den geforderten Seitennamen, z.B. "/meine_auswertung"

bool QueryExists(string name)
bool QueryExists(string name,int index)

Diese zwei Funktionen prüfen, ob angegebene Variablen (POST oder GET) vorhanden sind.

int QueryInt(string name)
int QueryInt(string name,int index)
string QueryString(string name)
string QueryString(string name,int index)

Diese vier Funktionen geben den Wert der POST- oder GET-Variable zurück.
Beispiele:

http://server/meine_seite?summe=123
QueryInt("summe")

http://server/meine_seite?vorname=meyer
QueryString("vorname")

http://server/meine_seite?alter[0]=20&alter[1]=30
QueryInt("alter[1]") oder QueryInt("alter",1)

interface  rimacon.cmdb.CUSTHTTPRESP.IResponse

Das IResponse-Interface beinhaltet Eigenschaften und Methoden, die zur Steuerung der Ausgabe an den Clienten dienen.

void AddHeader(string name, string val)

Die AddHeader-Methode fügt einen HTTP-Header an den response an. Als Parameter werden dazu der Headername sowie der Headerwert erwartet.

string ContentType{set;}

Die ContentType-Eigenschaft setzt den gleichnamigen HTTP-Header und gibt damit an, um welchen Typ von Dokument es sich handelt.
Beispiel:

Response.ContentType="text/xml";

void Redirect(string new_url)

Die Redirect-Methode weist den Clienten per HTTP-Header an, eine andere Adresse aufzusuchen. Hierzu wird als Parameter die Zieladresse benötigt.
Beispiel:

Response.Redirect("http://www.google.de");

int ReturnCode{get;set;}

Die ReturnCode-Eigenschaft gibt die Statuscode des response an (erste Zeile der HTTP-Meldung). Standardwert ist 200.

void SetRawContent(byte[] bytes)

Die SetRawContent-Methode setzt der Ausgabe als Binärdaten. Als Parameter werden dazu die zu schreibenden Daten erwartet.

void Write(string tx)

Die Write-Methode schreibt einen beliebigen Text in die Ausgabe. Als Parameter wird der zu schreibende Text erwartet.
Beispiel:

Response.Write("ich bin http-endpoint");

class  rimacon.cmdb.EMAILIN.EmailAddress

public string FullName

public string Name

public string Email

class  rimacon.cmdb.EMAILIN.EmailAttachment

public string Filename

public string ContentType

public byte[] BinaryBody

class  rimacon.cmdb.EMAILIN.EmailContext

Diese Klasse enthält Informationne über den angekomennen E-Mail.

public int EMAIL_ID

EMAIL.EMAIL_ID in Datenbank.

public string PlainTextBody

Inhalt als Klartext.

public string HtmlBody

Inhalt als HTML.

public string Subject

Betreff.

public EmailAttachment[] Attachment

Änhänge. Mehr unter rimacon.cmdb.EMAILIN.EmailAttachment

public EmailAddress From

Sender. Mehr unter rimacon.cmdb.EMAILIN.EmailAddress

interface  rimacon.cmdb.ImportScript.Data

Über dieses Interface werden die Ergebnisse von Import-Routine an das allgemeines import-Alghoritmus gesendet. Das Ergebnis ist ein 2D-Array.

void setColumns(int count)
void setColumns(string[] names)

Legt die Spaltenanzahl und evtl. die Spaltenname fest.

void setColumnName(int index, string name)

Legt eine Spaltename fest.

int appendDataRow()

Fügt eine neue leere Zeile hinzu.

string this[int ColumnIndex, int RowIndex] { set; }
string this[int ColumnIndex] { set; }
string this[string ColumnName, int RowIndex] { set; }
string this[string ColumnName] { set; }

Legt Inhalt einer Zelle in der 2D-Array fest. In den Varianten ohne RowIndex wird die letzte Zeile benutzt.

class  rimacon.cmdb.ImportScript.ImportContext

Diese Klasse dient für Datenaustausch zwischen dem allgemeinen import-Alghoritmus und dem Skript das die Daten generiert.

public Data data

In dieses Objekt werden die eingelesene Daten geschrieben. Mehr unter rimacon.cmdb.ImportScript.Data

public int maxrows

Definiert, wieviel maximal Zeilen sollte zurückgegeben werden. Negative Wert bedeutet "alle Zeilen".

interface  rimacon.cmdb.IPublicCMDB

Über dieses Interface wird einen Teil der omniSuite zur Verfügung gestellt.

int LastErrorNumber { get; }

Diese Eigenschaft ist für Zukunft reserviert.

string LastErrorText { get; }

Gibt die letzte Fehlermeldung zurück.

IPublicWeb web { get; }

Mehr unter rimacon.cmdb.IPublicWeb

IPublicDiscovery discovery { get; }

Mehr unter rimacon.cmdb.IPublicDiscovery

interface  rimacon.cmdb.IPublicDiscovery

IUpdateSDFor1HWMResult UpdateSDFor1HWM(string xml, int mdtid, int caller_anwid, string caller, bool can_create_new_hwm, bool use_serialnumber)

Diese Funktion übernimmt Scanangaben in die Datenbank.

Variable Beschreibung
Rückgabewert rimacon.cmdb.IUpdateSDFor1HWMResult
xml Inhalt wie in einer HWM-Datei
mdtid Mandant-ID (normalerweise 1)
caller_anwid Webbenutzer-ID (ANW.ANW_ID) für Logging. Wenn unbekannt, benutzen Sie 0.
caller Anrufer für Logging. Z.B. "aus E-Mail-Eingang".
can_create_new_hwm Legt fest, ob ein neuer Rechner erstellt werden darf.
use_serialnumber Wenn gleich "true", für die Identifizierung wird die BIOS=>SerialNumber-Eigenschaft benutzt.
Wenn gleich "false", wird Rechnername benutzt.

interface  rimacon.cmdb.IPublicReport

int ID { get; }

Gibt die Sicht-ID (Report.ReportID) zurück.

void hideAllColumns()

Versteckt alle Spalten.

void showColumn(string columnname,bool show)

Zeigt oder versteckt eine konkrete Spalte.

void setTitle(string title)

Legt die Überschrift fest.

void setShowOrder(string[] columns)

Legt die Sortierungsreihenfolge fest.

string generPathForShow(string sessionkey)

Gibt das Pfad für Anzeige der Sicht zurück.

interface  rimacon.cmdb.IPublicWeb

int LastErrorNumber {get;}

Reserviert für Zukunft.

string LastErrorText {get;}

Die letzte Fehlermeldung.

string login(string user, string password, Hashtable htMisc)
string login(string user, Hashtable htMisc)

In der Variante mit password wird user/password geprüft und wenn ok sind, gibt die Funktion ein neues SessionKey zurück, sonst gibt eine leere Zeichenfolge zurück.

In der Variante ohne password wird ein neues SessionKey ohne Prüfung (user muss natürlich einem Webbenutzer entsprechen) generiert. Dies ermöglicht über HTTP-Endpoint eigene Anmeldeseite mit eigenem Authentifizierungsalghoritmus programmieren.

Die Variable htMisc (kann auch null sein) enthält zusätzliche Information zu der Anmeldung. Zur Zeit sind zwei Informationen unterstützt:
IP: IP-Addresse des Webbenutzer
LANG: Sprache. Zur Zeit "EN" oder "DE". Alle andere Werte werden als "DE" interpretiert.

Beispiel:

Hashtable misc = new Hashtable();
misc["IP"]="192.168.1.50";
misc["LANG"]="EN";
string sessionkey=cmdb.web.login("admin","admin",misc);
if (sessionkey=="")
{
	// Fehler => cmdb.web.LastErrorText
}
else
{
	// OK
}

bool logout(string sessionkey)

Führt eine Abmeldung für das angegebenes SessionKey aus. Üblicherweise werden alle temporären Report gelöscht.

int getANWforSessionKey(string sessionkey)

Gibt die Webbenutzer-ID (ANW.ANW_ID) für das angegebenes SessionKey zurück.

string generPathForUserFormular(string sk,int userformid,int objid,bool is_readonly)

Gibt das Pfad für die über userformid-angegebene individuelle Maske zurück.

IPublicReport createReport(string table, string sesionkey)

Erstellt einen Standardsicht und gibt ein Interface zurück. Mehr unter rimacon.cmdb.IPublicReport.

interface  rimacon.cmdb.IUpdateSDFor1HWMResult

string ErrMsg { get; }

Fehlermeldung.

int HwmID { get; }

Rechner-ID (HWM.HWM_ID).

string CompName { get; }

Rechnername (HWM.HWM_COMPNAME)

StringCollection ErrorLog { get; }

Fehlerliste.

StringCollection DetailLog { get; }

Details beim Übernahme.

int CountNew { get; }

Wieviele Zeilen in Scantabellen wurden erstellt.

int CountUpdated { get; }

Wieviele Zeilen in Scantabellen wurden aktualisiert.

int CountDeleted { get; }

Wieviele Zeilen in Scantabellen wurden gelöscht.

interface  rimacon.cmdb.scripting.IDBConnection

Ermöglicht den direkten Zugriff auf die Datenbank.

string ExecuteInto1Var(string sql,string field_value,out string errmsg)
string ExecuteInto1Var(string sql,string field_value, OleDbParameter prm, out string errmsg)
string ExecuteInto1Var(string sql,string field_value, OleDbParameter[] prms, out string errmsg)

Führt eine SQL-Anweisung aus und gibt den Wert der ersten Zeile und der angegebenen Spalte zurück. Wenn "field_value" leer ist, wird die erste Spalte genommen.
Beispiel:

string errmsg;
Response.Write( db.ExecuteInto1Var("select top 1 HWM_COMPNAME from HWM","",out errmsg) );

Hashtable ExecuteIntoHashtable(string sql, out string errmsg)

Unter "Usings" muss System.Collections definiert werden.
Führt eine SQL-Anweisung aus und gibt das Ergebnis als Hashtable zurück.
Beispiel:

string errmsg;
string ret="<table cellspacing=0 cellpadding=2 border=1><tr style='font-weight:bold'><td>Name</td><td>RAM</td></tr>";
Hashtable ht= db.ExecuteIntoHashtable("select top 10 HWM_COMPNAME, HWM_RAM from HWM",out errmsg);
for (int i=0; i<ht.Count; i++)
{
	Hashtable row=(Hashtable)ht[i];
	ret+="<tr>";
	ret+="<td>" + row["HWM_COMPNAME"].ToString() + "</td>";
	ret+="<td>" + row["HWM_RAM"].ToString() + "</td>";
	ret+="</tr>";
}
ret+="</table>"; Response.Write(ret);

Hashtable ExecuteIntoHashtable1xNperID(string sql, string field_id, string field_value, out string errmsg)

Unter "Usings" muss System.Collections definiert werden.
Führt eine SQL-Anweisung aus und gibt das Ergebnis als Hashtable zurück.
Beispiel:

string errmsg;
Hashtable ht = db.ExecuteIntoHashtable1xNperID("select HWM_ID, HWM_COMPNAME from HWM","","", out errmsg);
Response.Write("ID 20 ist " + ht["20"] + "<br>");
Response.Write("ID 30 ist " + ht["30"] + "<br>");

int[] ExecuteIntoIntArray(string sql, string field_value, out string errmsg)

Führt eine SQL-Anweisung aus und gibt die angegebene Spalte als int-Field zurück.
Beispiel:

string errmsg;
int[] ids = db.ExecuteIntoIntArray("select top 10 HWM_ID from HWM", "", out errmsg);
for (int i=0; i<ids.Length; i++) Response.Write(ids[i].ToString() + "<br>");

string[] ExecuteIntoStringArray(string sql, string field_value, out string errmsg)

Führt eine SQL-Anweisung aus und gibt die angegebe Spalte als string-Field zurück.
Beispiel:

string errmsg;
string[] rechner = db.ExecuteIntoStringArray("select top 10 HWM_COMPNAME from HWM order by HWM_COMPNAME", "", out errmsg);
Response.Write( string.Join("<br>",rechner) );

void ExecuteNonQuery(string sql, out string errmsg)
void ExecuteNonQuery(string sql, OleDbParameter prm, out string errmsg)
void ExecuteNonQuery(string sql, OleDbParameter[] prms, out string errmsg)

Führt eine SQL-Anweisung aus und gibt kein Ergebnis zurück. Wird üblicherweise bei UPDATE-, INSERT- oder DELETE-Anweisungen genutzt.