Mithilfe der Funktionen für Business Objects lassen sich beliebige Business Objects aus der Datenbank öffnen und auswerten. Zu den Funktionen für Business Objects gehören:
Grundlegende Informationen zu den allgemeinen Funktionen der System-Skriptsprache erhalten Sie im Dokument System-Skriptsprache: Allgemeine Funktionen.
getAttribute
Name | getAttribute |
Beschreibung | getAttribute gibt den Wert eines Attributs eines Business Objects oder einer Objektsicht zurück. |
Signaturen | Unknown getAttribute(CisObject object, String path)
|
Parameter | object ist ein Business Object.
view ist eine Objektsicht. attribute ist der Name des Attributs. |
Ergebnis | Die Funktion gibt den Wert des Attributs des Business Objects bzw. der Objektsicht mit dem Datentyp Unknown zurück. |
Fehlerquellen | Wenn das Attribut mit dem Pfad path nicht existiert, dann entsteht ein Laufzeitfehler. |
Beispiele | loadCurrency(getCorporateCurrency(cast(Guid, getAttribute(parameters.object, "_organization")))):isoCode gibt den ISO-Code der Leitwährung der Organization zurück, in dessen Kontext das von parameters.object referenzierte Business Object erfasst wurde. |
Kontext | ALL |
Hinweise | Verwenden Sie diese Funktion, um Attribute, die mit einem Unterstrich anfangen, auszuwerten.
Bevor Sie das Attribut verwenden, sollten Sie es in einen zum Attribut passenden Datentyp umwandeln. |
Siehe auch |
Folgendes Beispiel aus der Aktivitätsdefinition help.getAttribute zeigt die Werte der internen Attribute des Business Objectsr für Artikelwerte (com.cisag.app.inventory.obj.ItemValuationData) an:
- Zeitzone (Attribut _timeZoneGuid)
- Organization (Attribut _organization)
- Wechselkursdatum (Attibut _conversionDate)
- Hauswährungskombination (Attribut _currencyCombo)
function create() { var p_organization := parameters.ORGANIZATION; var p_item := parameters.ORGANIZATION; var r_timeZoneId := ""; var r_organization := ""; var r_conversionDate := ""; var r_currencyCombination := ""; var itemValuationData := getByPrimaryKey(CisObject(com.cisag.app.inventory.obj.ItemValuationData), loadOrganization(p_organization):guid, loadItem(p_item):guid, ZERO_GUID, ZERO_GUID, ZERO_GUID); if (not isNull(itemValuationData)) { r_timeZoneId := getByPrimaryKey("REPOSITORY", CisObject(com.cisag.sys.kernel.obj.TimeZone), (cast(Guid, getAttribute(itemValuationData, "_timeZoneGuid")))):id; r_organization := loadOrganization(cast(Guid, getAttribute(itemValuationData, "_organization"))):code; r_conversionDate := cast(Timestamp, getAttribute(itemValuationData, "_conversionDate")); var currencyCombination := getByPrimaryKey(CisObject(com.cisag.app.multiorg.obj.DomesticCurrencyCombination), cast(Number, getAttribute(itemValuationData, "_currencyCombo"))); r_currencyCombination := loadCurrency(currencyCombination:currency1):isoCode; if (not isNull(currencyCombination:currency2)) r_currencyCombination := r_currencyCombination + " " + loadCurrency(currencyCombination:currency2):isoCode; if (not isNull(currencyCombination:currency3)) r_currencyCombination := r_currencyCombination + " " + loadCurrency(currencyCombination:currency3):isoCode; } result.VALUE1 := r_timeZoneId; result.VALUE2 := r_organization; result.VALUE3 := r_conversionDate; result.VALUE4 := r_currencyCombination; }
getByBusinessKey
Name | getByBusinessKey |
Beschreibung | getByBusinessKey öffnet ein Business Object über dessen Business Key. |
Signaturen | CisObject(X) getByBusinessKey(CisObject(X), A1, A2, … , An)
|
Parameter | X ist der vollqualizierte technische Name eines Business Objects.
A1, A2, …, An sind Werte für die Attribute im Business Key des Business Objects. database ist der Name der Datenbank, auf der sich das Business Object befindet. Wenn sich das Business Object nicht auf der Datenbank befindet, auf der die Aktivität gespeichert ist, muss zusätzlich die Datenbank angegeben werden. Mögliche Werte sind: |
Ergebnis | Die Funktion gibt das Business Object als typisiertes CisObject zurück. |
Fehlerquellen | Existiert kein Business Object mit den angegebenen Attributwerten, so wird der Wert null zurückgegeben.
Achten Sie auch darauf, dass Sie die Attributwerte in der korrekten Reihenfolge des Business Keys angeben. |
Beispiele | getByBusinessKey(CisObject(com.cisag.app.general.obj.Partner), "10010") hat das gleiche Ergebnis wie loadPartner("10010") .
|
Kontext | ALL |
Hinweise | Da das Business Object über den Persistenzdienst geöffnet wird, verursacht die Funktion ggf. keinen Datenbankzugriff. Daher ist getByBusinessKey vor der Funktion getCisObjectList zu bevorzugen, wenn nur eine Instanz eines Business Objects geöffnet werden soll.
Bei versionierten Business Objects können Sie mit der Funktion getByBusinessKey nur die aktuell gültige Version öffnen. Möchten Sie eine vergangene oder künftige Version öffnen, dann können Sie z. B. die Funktion getCisObjectList unter Angabe der Attribute validFrom und validUntil verwenden. Die Attribute des Business Keys eines Business Objects werden in der Anwendung Entwicklungsobjekte angezeigt. |
Siehe auch | getByPrimaryKey |
Folgendes Beispiel aus der Aktivitätsdefinition help.getByBusinessKey öffnet einen Vertriebsauftrag über dessen Typ und Nummer und ermittelt den Kunden:
function create() { var p_type := parameters.TYPE; var p_number := parameters.NUMBER; var r_customer := ""; var salesOrder := getByBusinessKey(CisObject(com.cisag.app.sales.obj.SalesOrder), getByBusinessKey(CisObject(com.cisag.app.sales.obj.SalesOrderType), p_type):guid, p_number); if (not isNull(salesOrder)) { r_customer := salesOrder->CustomerData->CustomerPartner:number + " " + salesOrder->CustomerData->CustomerPartner:searchString; } result.IS_NULL := isNull(salesOrder); result.CUSTOMER := r_customer; }
getByPrimaryKey
Name | getByPrimaryKey |
Beschreibung | getByPrimaryKey öffnet ein Business Object über dessen Primärschlüssel. |
Signaturen | CisObject(X) getByPrimaryKey(CisObject(X), A1, A2, … , An)
|
Parameter | X ist der vollqualifizierte technische Name eines Business Objects.
A1, A2, …, An sind Werte für die Attribute im Primärschlüssel des Business Objects. database ist der Name der Datenbank, auf der sich das Business Object befindet. Wenn sich das Business Object nicht auf der Datenbank befindet, auf der die Aktivität gespeichert ist, muss zusätzlich die Datenbank angegeben werden. Mögliche Werte sind: |
Ergebnis | Die Funktion gibt das Business Object als typisiertes CisObject zurück. |
Fehlerquellen | Existiert kein Business Object mit den angegebenen Attributwerten, so wird der Wert null zurückgegeben.
Achten Sie auch darauf, dass Sie die Attributwerte in der korrekten Reihenfolge des Primärschlüssels angeben. |
Beispiele | getByPrimaryKey(CisObject(com.cisag.app.general.obj.Employee), loadPartner("70010"):guid) öffnet die Mitarbeiterdaten des Partners 70010.
|
Kontext | ALL |
Hinweise | Da das Business Object über den Persistenzdienst geöffnet wird, verursacht die Funktion ggf. keinen Datenbankzugriff. Daher ist getByPrimaryKey vor der Funktion getCisObjectList zu bevorzugen, wenn nur eine Instanz eines Business Objects geöffnet werden soll.
Bei versionierten Business Objects können Sie mit der Funktion getByPrimaryKey nur die aktuell gültige Version öffnen. Möchten Sie eine vergangene oder künftige Version öffnen, dann können Sie z. B. die Funktion getCisObjectList unter Angabe der Attribute validFrom und validUntil verwenden. Die Attribute des Primärschlüssels eines Business Objects werden in der Anwendung Entwicklungsobjekte angezeigt. |
Siehe auch | getByBusinessKey |
Folgendes Beispiel aus der Aktivitätsdefinition help.getByPrimaryKey öffnet die Mitarbeiterdaten eines Partners und gibt die Personalnummer zurück:
function create() { var p_partner := parameters.PARTNER; var r_employeeNumber := ""; var employee := getByPrimaryKey(CisObject(com.cisag.app.general.obj.Employee), loadPartner(p_partner):guid); if (not isNull(employee)) { r_employeeNumber := employee:employeeNumber; } result.IS_NULL := isNull(employee); result.EMPLOYEE_NUMBER := r_employeeNumber; }
getCisObjectList
Name | getCisObjectList |
Beschreibung | getCisObjectList gibt eine Liste von Business-Object-Instanzen zurück, die mithilfe einer OQL-Anweisung ermittelt werden. |
Signaturen | CisObject[] getCisObjectList(String oql, Unknown[] parameters)
|
Parameter | oql ist eine OQL-Anweisung. Sie muss nach dem Muster SELECT FROM… erfasst sein. Weitere Informationen finden Sie im Dokument OQL-Syntax, Abschnitt Einfache Abfrage über getObjectIterator.
database ist der Name der Datenbank, auf der sich das Business Object befindet. Wenn sich das Business Object nicht auf der Datenbank befindet, auf der die Aktivität gespeichert ist, muss zusätzlich die Datenbank angegeben werden. Mögliche Werte sind: parameters ist eine Liste mit Parameterwerten für die OQL-Anweisung. Unterstützt werden die Datentypen count ist die maximale Anzahl von Business-Object-Instanzen, die zurückgegeben werden. Wird count nicht spezifiziert, so wird maximal eine CisObject-Instanz zurückgegeben. Geben Sie einen möglichst kleinen Wert an, da ein zu groß gewählter Wert die Leistung des Systems negativ beeinflussen kann. Der Maximalwert ist beschränkt. Weitere Informationen finden Sie im Kapitel Komplexität von Ausdrücken beschränken des Hilfedokuments Einführung: System-Skriptsprache. |
Ergebnis | Die Funktion gibt bei einer fehlerfreien Ausführung eine Liste von CisObjects zurück. Wurden keine Datensätze gefunden, wird eine leere Liste zurückgeben. |
Fehlerquellen | Im Fehlerfall wird der Wert null zurückgeben. |
Beispiele | cast(CisObject(com.cisag.app.general.obj.Partner), getCisObjectList("SELECT FROM com.cisag.app.general.obj.Partner p ORDER BY p:updateInfo.createTime ASC", list(), 1)[0]):number gibt die Identifikation des zuerst erfassten Partners zurück.
|
Kontext | ALL |
Hinweise | Parameter für die OQL-Anweisung sollen nicht in der OQL-Anweisung fest vorgegeben werden, sondern über Parameter mit ? als Platzhalter an die Funktion übergeben werden. Wenn Parameter in der OQL-Anweisung als Konstanten statt mit Platzhaltern kodiert werden, kann die Leistung des Systems negativ beeinflusst werden.
Beim Erzeugen einer Liste mithilfe der Funktion list übernehmen die Listenelemente den Datentyp des ersten Elements. Besitzt die OQL-Anweisung Parameter von Datentypen, die nicht in einander umgewandelt werden können, dann können Sie eine leere Liste vom Datentyp Beispiel var parameterList := new(Unknown[]); add(parameterList, now()); add(parameterList, 10); add(parameterList, "100"); Da getCisObjectList einen Datenbankzugriff verursacht, ist die Funktion getByBusinessKey zu bevorzugen, wenn nur eine Instanz eines Business Objects geöffnet werden soll. |
Siehe auch | getResultList |
Folgendes Beispiel aus der Aktivitätsdefinition help.getCisObjectList gibt die 10 zuletzt erfassten Vertriebsaufträge eines Kunden zurück:
function create() { var p_customer := parameters.CUSTOMER; var r_salesOrders := ""; var customer := loadPartner(p_customer); if (not isNull(customer)) { var oql := "SELECT FROM com.cisag.app.sales.obj.SalesOrder so " + "WHERE so:customerData IN " + " (SELECT ocdi:guid " + " FROM com.cisag.app.sales.obj.OrderCustomerDataInfo ocdi " + " WHERE ocdi:customer = ?) " + "ORDER BY so:date DESC"; var soList := getCisObjectList(oql, list(customer:guid), 10); for (so as CisObject(com.cisag.app.sales.obj.SalesOrder) : soList) { r_salesOrders := r_salesOrders + " " + so->Type:code + "-" + so:number; } } result.SALES_ORDERS := trim(r_salesOrders); }
Beispiel: Interne Personen abfragen
Folgendes Beispiel ermittelt alle internen Personen in der Datenbank. Da die Funktion getCisObjectList nicht beliebig viele Instanzen zurückgeben kann, werden die Personen nach dem indizierten Attribut number blockweise abgefragt und der Liste partnerList hinzugefügt. Erst wenn die Abfrage weniger Instanzen als die Blockgröße zurückgibt, ist die Ermittlung aller internen Personen abgeschlossen.
const PartnerType as valueSet(com.cisag.app.general.PartnerType); const BlockSize := 100; function create() { var partnerList as CisObject(com.cisag.app.general.obj.Partner)[]; var lastPartnerNumber := ""; var allPartnersSearched := false; var params as Unknown[]; while (not allPartnersSearched) { var OQL := "SELECT FROM com.cisag.app.general.obj.Partner p " + " WHERE p:type = ? AND p:human = ? AND p:number > ? " + " ORDER BY p:number"; params := new(Unknown[]); add(params, PartnerType.INTERNAL); add(params, true); add(params, lastPartnerNumber); var cisObjectList := getCisObjectList(OQL, params, BlockSize); for (p as CisObject(com.cisag.app.general.obj.Partner) : cisObjectList) add(partnerList, p); lastPartnerNumber := partnerList[size(partnerList)-1]:number; allPartnersSearched := size(cisObjectList) < BlockSize; } }
Beispiel: Dynamische OQL-Anweisung
Folgendes Beispiel baut eine dynamische OQL-Anweisung für den Export von Partnern auf, die gestern erfasst oder geändert wurden. Da die Aktivitätsdefinition die Hintergrundanwendung com.cisag.pgm.bi.Export ausführt, muss die Variable dynSQL außerhalb der Funktion create deklariert und der Wert über den Parameter SearchName an die Hintergrundanwendung übergeben werden.
var dynOQL as String; function create() { /* Get begin and end times for dynamic OQL*/ var endTime := startOfDay(now()); var beginTime := addDays(endTime, -1); /* Create time particles for dynamic OQL */ var beginYear := format(year(beginTime), "0000"); var beginMonth := format(month(beginTime), "00"); var beginDay := format(day(beginTime), "00"); var endYear := format(year(endTime), "0000"); var endMonth := format(month(endTime), "00"); var endDay := format(day(endTime), "00"); /* Get default time zone ID of the system */ var timeZoneId := timeZoneId(today()); /* Create dynamic OQL */ var dynOQL := "DynOQL:SELECT DISTINCT o:guid, o:number " + "FROM com.cisag.app.general.obj.Partner o " + "WHERE (o:updateInfo.updateTime >= " + "toTimestamp(„" + timeZoneId + "„, " + beginYear + ", " + beginMonth + ", " + beginDay + ", 00, 00, 00, 000) " + "AND o:updateInfo.updateTime < " + "toTimestamp(„" + timeZoneId + "„, " + endYear + ", " + endMonth + ", " + endDay + ", 00, 00, 00, 000)) " + "OR (o:updateInfo.createTime >= " + "toTimestamp(„" + timeZoneId + "„, " + beginYear + ", " + beginMonth + ", " + beginDay + ", 00, 00, 00, 000) " + "AND o:updateInfo.createTime < " + "toTimestamp(„" + timeZoneId + "„, " + endYear + ", " + endMonth + ", " + endDay + ", 00, 00, 00, 000) " + "AND o:updateInfo.updateTime = UNDEFINED_TIME_STAMP) " + "ORDER BY o:number"; }
getURL
Name | getURL |
Beschreibung | getURL erzeugt eine URL für ein Business Object. |
Signaturen | String getURL(CisObject object)
|
Parameter | object ist das Business Object, für das die URL erzeugt werden soll.
serverName ist der Name eines Application Servers, auf den die URL zeigen soll. Wenn der Servername nicht angegeben wird, wird der aktuelle Application-Server verwendet. databaseGuid ist die Datenbank, auf die die URL zeigen soll. Wenn keine Datenbank-Guid angegeben wird, so wird bei OLTP-Aktivitäten die aktuelle OLTP-Datenbank und bei Repository-Aktivitäten die Repository-Datenbank für die URL verwendet. |
Ergebnis | Eine URL für das Business Object als Zeichenkette. |
Fehlerquellen | Keine. |
Beispiele | getURL(loadPartner("10010")) gibt eine URL für den Partner 10010 zurück.
|
Kontext | ALL |
Hinweise | Sie können die URL z. B. für HTML-Tags in der Bezeichnung von Aktivitäten verwenden. |
Siehe auch |
Folgendes Beispiel aus der Aktivitätsdefinition help.getURL erzeugt eine URL für einen Partner:
function create() { var p_partner := parameters.PARTNER; var p_server := parameters.SERVER; var p_database := parameters.DATABASE; var r_URL := ""; var partner := loadPartner(p_partner); if (not isNull(partner)) { if (p_server = "" and p_database = "") r_URL := getURL(partner); else if (p_server = "" and p_database <> "") r_URL := getURL(cast(Guid, p_database), partner); else if (p_server <> "" and p_database = "") r_URL := getURL(p_server, partner); else r_URL := getURL(p_server, cast(Guid, p_database), partner); } result.URL := r_URL; }