SOG-Helpcenter Logo SOG Business - Software

Scriptverarbeitung


Um die Scriptverarbeitung zu aktivieren, müssen Sie in der Kopfzeile der XmlInfo-Ausgabedefinition eine Script-Datei und eine ScriptClass vereinbaren:

  <XmlDefinition Version="1.05" ScriptFile="${PROJ}\config.Proj\Test6.cs" ScriptClass="Script.Test6">

Diese Scriptdatei wird zur Laufzeit übersetzt, und ein Objekt des unter "ScriptClass" angegebenen Datentyps für jeden Durchlauf eines GetInfo-Aufrufes erzeugt.
Das Objekt trägt den Objektnamen "Script".
In einer Felddefinition kann nun über das benannte Objekt "Script" eine beliebige Script-Funktion aufgerufen werden, die die Ermittlung, Berechnung oder Formatierung eines Datenwertes durchführen kann:

    <RefObjList Fkt="Liste" Name="Auftrag" >
      <Class Name="AuftragsLeitsatz" />
      <Feld NameIntern="FIX:1" NameExtern="Satzart" />
      <Feld NameExtern="Konto1" NameIntern="#obj:Script.#obj::KontoDisplay(#obj:AuftragsLeitsatz.m_konto)" />
      <Feld NameExtern="Konto2" NameIntern="#obj:Script.#obj::KontoDisplay(#obj:AuftragsLeitsatz)" />
      <Feld NameExtern="Konto3" NameIntern="#obj:Script.#obj::KontoDisplay()" />

Beispiel für ein entsprechendes Script:

// *REF*SOG.Base.Extension.SqlDB.dll

// *REF*END*

using System;

using System.Xml;

using System.Collections;

using System.Drawing;

using SOG.Base;

using SOG.Base.Helper;

using SOG.ERP.Entity;

using SOG.ERP.Entity.Helper;

using SOG.ERP.Entity.Bewegungsdaten;

 

namespace Script

{

  public class Test7 : GetInfoScript

  {

  public Test7()

  {

  }

 

  public string KontoDisplay(int Konto)

  {

  string xkonto = string.Format("{0:D8}", Konto);

  return string.Format("{0}-{1}-{2}", xkonto.Substring(0, 2), xkonto.Substring(2, 3), xkonto.Substring(5, 3));

  }

 

  public string KontoDisplay(AuftragsLeitsatz ls)

  {

  return KontoDisplay(ls.m_konto);

  }

 

  public string KontoDisplay()

  {

  AuftragsLeitsatz ls = (AuftragsLeitsatz)ObjectRetriever.GetSourceObject("AuftragsLeitsatz");

  return KontoDisplay(ls);

  }

 

 

  public IEnumerable Reverse(IList Liste)

  {

  ArrayList rc = new ArrayList();

  for (int i = Liste.Count - 1; i >= 0; i--)

  {

  rc.Add(Liste[i]);

  }

  return rc;

  }

 

  public IEnumerable PosFilter(IList Liste)

  {

  ArrayList rc = new ArrayList();

  foreach (AuftragsPosition pos in Liste)

  {

  if (pos.m_art == 22009)

  rc.Add(pos);

  }

  return rc;

  }

  }

}

 

Dem Script steht das Standardobjekt "ObjectRetriever" zur Verfügung, über welches die benannten Objekte abgerufen werden können.
Die ScriptFunktion liefert im allgemeinen einen Datenwert als Returnwert zurück, der anschließend noch von den Standardfunktionen zur Wertaufbereitung aufbereitet werden kann.

Scriptverarbeitung RefObjekte


Auch bei der Ermittlung von RefObj und RefObjList Elementen können Script-Funktionen aufgerufen werden:

  <RefObj Name="Leitsatz" Fkt="#obj:AuftragsLeitsatz">
  <Class Name="AuftragsLeitsatz" />

Hier wird das benannte Objekt "AuftragsLeitsatz" als Referenzobjekt der folgenden Verarbeitung verwendet.

  <RefObjList Fkt="#obj:Script:Liste()" Name="PositionScript" >
  <Class Name="AuftragsPosition" />

In diesem "RefObjList" Beispiel wird die Scriptfunktion "Liste" aufgerufen, die eine Liste von Positionen liefern soll.

PIPE-Verarbeitung bei RefObjList



  <RefObjList Fkt="rellist:Auftragspositionen:#AuftragsPosition.#obj:Script:Reverse(#obj:PIPE).#obj:Script:PosFilter(#obj:PIPE)" Name="PositionScript" >
  <Class Name="AuftragsPosition" />

In diesem "RefObjList" Beispiel wird erst einer normalen Relation zur Ermittlung der Datensätze gefolgt, und anschließend werden die Script-Funktionen "Reverse" und "PosFilter" aufgerufen, und jeweils die bis dahin ermittelte Datenmenge über das interne, bennante Datenobjekt "PIPE" übergeben.

Es entsteht eine Verarbeitungskette (Pipe) bei der die Funktionen in einzelne Aufgaben aufgeteilt werden können. Eine solche "Pipe" kann dann also vom XmlInfo-Designer beliebig kombiniert werden, um unterschiedliche Effekte zu erreichen. Dazu gehören Ermittlung, Filterung und Sortierung von Daten.
Hier könnte auch der Objekttyp gewandelt werden, um z.B. weitere Ergebnisse zu berechnen, und für die Ausgabe bereit zu stellen.

Beispiel für diese Scripte:

// *REF*SOG.Base.Extension.SqlDB.dll

// *REF*END*

using System;

using System.Xml;

using System.Collections;

using System.Drawing;

using SOG.Base;

using SOG.Base.Helper;

using SOG.ERP.Entity;

using SOG.ERP.Entity.Helper;

using SOG.ERP.Entity.Bewegungsdaten;

 

namespace Script

{

  public class Test7 : GetInfoScript

  {

  public Test7()

  {

  }

 

  public object PosFilter(GetInfoScriptParameter Para)

  {

  AuftragsPositionDataSet liste = (AuftragsPositionDataSet)Para.CurrentValue;

  AuftragsPositionDataSet rc = new AuftragsPositionDataSet();

 

  if (liste != null)

  {

  for (int i = liste.Count - 1; i >= 0; i--)

  rc.Add(liste[i]);

  }

 

  return rc;

  }

 

  public object Leitsatz(GetInfoScriptParameter Para)

  {

  AuftragsPosition pos = (AuftragsPosition)Para.Parent;

  return pos.SOGRefObject_leitsatz();

  }

  }

}