Automatisierte Aufgaben (Workflow)
Inhalt
Funktionsübersicht
- Führt Aktionen in Abhängigkeit vordefinierter Ereignisse aus
- Dient zur Abbildung von unternehmensspezifischen Workflows
- Möglichkeit für zusätzlich benötigte Eingaben
- Kann E-Mail Verständigungen auslösen
Pflegefenster
Die Anlage und Pflege der automatisierten Aufgaben erfolgt im Fenster „Grundlagen – Automatisierte Aufgaben"
Spaltenbeschreibung
Spaltenname | Beschreibung |
---|---|
Aktiv | In dieser Spalte wird angegeben, ob die gewählte Aufgabe aktiviert ist oder nicht. Nur aktivierte Aufgaben werden tatsächlich ausgeführt. |
Ereignis | Das auslösende Ereignis für die automatisierte Aufgabe. Die Aktion wird aber nur durchgeführt, wenn die Bedingung zutrifft. Beispiele für Ereignisse:
|
Bedingung | Die Bedingung, unter der eine Aktion ausgeführt wird, wenn ein Ereignis eintritt. Hier können alle Spalten abgefragt werden, die auf Basis des jeweiligen Ereignisses selektiert wurden. Beispiele für Bedingungen:
|
Pos. | Gibt die Reihenfolge der Ausführung der Aktionen an. Diese Option ist dann von Bedeutung, wenn bei einem Ereignis mehrere Aktionen durchgeführt werden müssen und diese in einer bestimmten Reihenfolge ausgeführt werden sollen. |
Aktion | Wird ein Ereignis mit einer zutreffenden Bedingung ausgelöst, wird in „Aktion" der durchzuführende Aufgabentyp bestimmt. Für jede Aktion sind zusätzlich „Aktion Werte" anzugeben, wobei je nach Aktion unterschiedliche Aktionswerte verfügbar sind. Beispiele für Aktionen:
|
Aktion Werte | Beinhaltet die Detail-Daten für die auszuführende Aktion. Aktion Werte wird immer mit einem XML Format befüllt. Abhängig von der gewählten Aktion stehen unterschiedliche Möglichkeiten für die Aktion Werte zur Verfügung. |
Pflegefenster - Neu
Über den Grundlagenschalter "Neuen Workflow Manager verwenden" in der Kategorie "Allgemein" kann die Verwendung des neuen Fensters aktiviert werden.
Ereignisse
In der nachfolgenden Tabelle sind sämtliche Ereignisse aufgelistet, die zurzeit implementiert sind. Zusätzlich ist hier auch abgebildet, welcher SQL-Alias für die „SQL-Where-Bedingung" verwendet werden kann und welche Tabelle als „Source"-Tabelle verwendet wird.
Ereignis | Source (Tabelle) | Alias(e) | Beschreibung |
Appointment.FirstInsert | ARS_ZEITPLAN | z | Termin aus dem Terminreservierungssystem (ARS) wurde eingefügt ( wird bei mehrtägigen Einträgen nur 1x beim ersten Eintrag ausgeführt ) |
Appointment.FirstUpdate | ARS_ZEITPLAN | z | Termin aus dem Terminreservierungssystem (ARS) wurde aktualisiert ( wird bei mehrtägigen Einträgen nur 1x beim ersten Eintrag ausgeführt ) |
Appointment.Insert | ARS_ZEITPLAN | z | Termin aus dem Terminreservierungssystem (ARS) wurde eingefügt ( wird pro neuen Datensatz ausgeführt bei mehrtägigen Einträgen ) |
Appointment.Update | ARS_ZEITPLAN | z | Termin aus dem Terminreservierungssystem (ARS) wurde aktualisiert ( wird pro neuen Datensatz ausgeführt bei mehrtägigen Einträgen ) |
AssemblyOrder.Insert | FERTIGUNGSAUFTRAG | f | Fertigungsauftrag wurde eingefügt |
AssemblyOrder.Update | FERTIGUNGSAUFTRAG | f | Fertigungsauftrag wurde aktualisiert |
AssemblyOrder.PrintOptionsLoaded | FERTIGUNGSAUFTRAG | f | Beim Drucken eines Fertigungsauftrags, nachdem die Druck-Daten (Quelldaten) geladen wurden. |
AssemblyOrderPosition.Escalate | FAPOSITIONEN | p | Eskalation einer Fertigungsauftragsposition - der Datensatz der Tabelle FAPOS_ESKALIERUNG steht in den "OriginalValues" zur Verfügung. Beispiel: @GetOriginalValue("GRUND") |
Basket.OrderCreated | ANGEBOTE | a | Auftrag wurde aus Warenkorb erstellt (inkl. Positionen) |
ContactPerson.Insert | ANSPRECHPARTNER | a | Ansprechpartner wurde in die Datenbank eingefügt |
ContactPerson.Update | ANSPRECHPARTNER | a | Ansprechpartner wurde in der Datenbank aktualisiert |
Customer.Insert | KUNDEN | k | Kunde wurde in die Datenbank eingefügt |
Customer.Update | KUNDEN | k | Kunde wurde in der Datenbank aktualisiert |
Customer.Merged | KUNDEN | k | Kunde wurde in der Datenbank zusammengeführt |
DeliveryNote.CreateServicePoint | LIEFERSCHEINE | l | Lieferschein an Servicestelle wurde erstellt |
DeliveryNote.Insert | LIEFERSCHEINE | l | Lieferschein (Kopf) wurde in die Datenbank eingefügt |
DeliveryNote.Update | LIEFERSCHEINE | l | Lieferschein wurde aktualisiert |
DeliveryNote.Print | LIEFERSCHEINE | l | Wird ausgelöst, bevor der Lieferschein gedruckt wird (Klick auf „Drucken" im Druck-Dialogfenster) |
DeliveryNote.ReturnFromServicePoint | LIEFERSCHEINE | l | Retour-Lieferschein von Servicestelle wurde erstellt |
Device.Insert | GERAETE | g | Wird ausgelöst, nachdem ein neues Gerät in die Datenbank eingefügt wurde |
Device.Update | GERAETE | g | Wird ausgelöst, nachdem ein Gerät in der Datenbank aktualisiert wurde |
Inquiry.Insert | ANFRAGE | a | Anfrage (Kopf) wurde in die Datenbank eingefügt |
Inquiry.Update | ANFRAGE | a | Anfrage wurde in der Datenbank aktualisiert |
Invoice.DunningRunDunningBlock | RECHNUNGEN | r | Wird ausgelöst, wenn ein Mahnlauf durchgeführt wird, die Rechnung nicht bezahlt ist und mit einer Mahnsperre gekennzeichnet ist |
Invoice.DunningRunMailSent | RECHNUNGEN | r | Wird ausgelöst, wenn ein automatischer Mahnlauf durchgeführt wird und die Rechnung per Mail versendet wurde |
Invoice.Insert | RECHNUNGEN | r | Rechnung (Kopf) wurde in die Datenbank eingefügt |
Invoice.Update | RECHNUNGEN | r | Rechnung wurde in der Datenbank aktualisiert |
Invoice.Print | RECHNUNGEN | r | Wird ausgelöst, bevor die Rechnung gedruckt wird (Klick auf „Drucken" im Druck-Dialogfenster) |
InvoicePosition.Insert | REPOSITIONEN | p=REPOSITIONEN | Nachdem eine Rechnungsposition in die Datenbank eingefügt wurde |
InvoicePosition.Update | REPOSITIONEN | p=REPOSITIONEN | Nachdem eine Rechnungsposition aktualisiert wurde |
Item.AssemblyChanged | ARTIKELSTAMM | a | Wird ausgelöst, sobald sich die Zusammensetzung einer Baugruppe geändert hat |
Item.Insert | ARTIKELSTAMM | a | Artikel wurde in die Datenbank eingefügt |
Item.Update | ARTIKELSTAMM | a | Artikel wurde aktualisiert |
Item.Copy | ARTIKELSTAMM | a | Nachdem ein Artikel kopiert wurde |
Item.BeforeBasketInsert | ARTIKELSTAMM | a | Bevor ein Artikel in den Warenkorb eingefügt wird |
Item.AfterBasketInsert | ARTIKELSTAMM | a | Nachdem ein Artikel in den Warenkorb eingefügt wurde |
Item.BeforePOSInsert | ARTIKELSTAMM | a | Bevor ein Artikel in die POSKassa eingefügt wird |
Item.AfterPOSInsert | ARTIKELSTAMM | a | Nachdem ein Artikel in die POSKassa eingefügt wurde |
ItemPicture.Insert | BILDER | b | Nachdem zu einem Artikel ein neues Artikelbild hinzugefügt wurde. |
ItemText.Insert | ARTIKELSTAMM_TEXTE | t | Artikelstamm-Text wurde in die Datenbank eingefügt |
ItemText.Update | ARTIKELSTAMM_TEXTE | t | Artikelstamm-Text wurde in der Datenbank aktualisiert |
ItemForeignLanguage.Insert | ARTIKELTEXT | t | Artikeltext ( Fremdsprachentext ) wurde in die Datenbank eingefügt |
ItemForeignLanguage.Update | ARTIKELTEXT | t | Artikeltext ( Fremdsprachentext ) wurde in der Datenbank aktualisiert |
Order.CreatedFromBasket | ANGEBOTE | a | Auftrag wurde aus dem Warenkorb erstellt (Automatisierte Aufgabe wird ausgeführt, nachdem Kopf angelegt UND Positionen eingefügt wurden) Auftrag wurde aus Bestellvorschlag (Bestellung bei anderer oder eigener OE) erstellt (Automatisierte Aufgabe wird ausgeführt, nachdem Kopf angelegt UND Positionen eingefügt wurden) |
Order.CreateDeliveryNote | ANGEBOTE | a | Bevor aus dem Auftrag ein Lieferschein erstellt wird |
Order.CreatePurchaseDeliveryNote | ANGEBOTE | a | Nachdem ein Rücklieferschein an den Lieferanten erstellt wurde (aus Auftrag) |
Order.CreatePurchaseOrder | ANGEBOTE | a | Nachdem eine Bestellung aus dem Auftrag erstellt wurde |
Order.Copy | ANGEBOTE | a | Nachdem ein Auftrag kopiert wurde. |
Order.BeforeInsert | ANGEBOTE | a | Wird ausgelöst, bevor ein Auftrag in die Datenbank eingefügt wird. Mit der Aktion Target.Override kann zum Beispiel die Angebotsnummer frei gesetzt werden (ab Version 5.27). Hier ist darauf zu achten, dass das Feld "Angebotsnummer" im Kopfteil mit einem Wert befüllt ist, damit keine neue Nummer aus dem Nummernkreis gezogen wird. |
Order.BeforeUpdate | ANGEBOTE | a | Wird ausgelöst, bevor ein Auftrag in der Datenbank aktualisiert wird |
Order.Insert | ANGEBOTE | a | Auftrag (Kopf) wurde in die Datenbank eingefügt. Um alle Auftragserstellungen abzudecken ist zusätzlich auch Order.CreatedFromBasket zu verwenden. |
Order.Update | ANGEBOTE | a | Auftrag wurde in der Datenbank aktualisiert |
Order.CreateCallOrder | ANGEBOTE | a | Nachdem ein Abrufauftrag aus Rahmenauftrag in der Datenbank erstellt wurde |
Order | ANGEBOTE | a | Bevor eine Anzahlungsrechnung aus einem Auftrag erstellt wird |
Order | ANGEBOTE | a | Bevor ein Liefervorschlag aus einem Auftrag erstellt wird |
OrderPosition.Insert | ANGEBOTSPOSITIONEN | p=ANGEBOTSPOSITIONEN | Nachdem eine Auftragsposition in die Datenbank eingefügt wurde |
OrderPosition.Update | ANGEBOTSPOSITIONEN | p=ANGEBOTSPOSITIONEN | Nachdem eine Auftragsposition aktualisiert wurde |
OrderPosition.Delete | ANGEBOTSPOSITIONEN | p=ANGEBOTSPOSITIONEN a=ANGEBOTE | Nachdem eine Auftragsposition gelöscht wurde |
OrderPosition | ANGEBOTSPOSITIONEN | p=ANGEBOTSPOSITIONEN | Der mögliche Liefertermin wurde in einer Auftragsposition geändert. Hier steht der zusätzliche DataTable "CHANGED_BY" zur Verfügung. Damit erfolgt die Angabe, welches Dokument die Änderung des Liefertermins verursacht hat. Darin befinden sich folgende Spalten: CHANGED_BY (AssemblyOrderCreated,AssemblyOrderUpdated,PurchaseOrderPositionCreated,PurchaseOrderPositionUpdated) INX (Eindeutiger INX des Fertigungsauftrags oder der Bestellposition) DOK_NR (Fertigungsauftragsnummer oder Bestellnummer) Beispiel für den Zugriff in der WHERE-Bedingung: "where '"+@OriginalValue("CHANGED_BY","CHANGED_BY")+"' not in ('AssemblyOrderCreated') and p.erledigt=0 |
Process.Insert | VORGANG | v | CRM-Vorgang wurde in die Datenbank eingefügt |
Process.Update | VORGANG | v | CRM-Vorgang wurde aktualisiert |
ProductionReport.CreateLotNumber | FERTIGUNGSAUFTRAG | f | Wird ausgelöst, wenn im Fenster "Produktionsausweis" eine neue Chargennummer vergeben wird. Dazu muss die Grundlageneinstellung "Automatische Chargennummernvergabe" aktiviert sein und die Einstellung "Chargennummer aus" auf den Wert "3 - Automatisierte Aufgabe" gestellt sein. Mit der Aktion "Target.Override" kann die Chargennummernvergabe erfolgen: <XML> |
PurchaseOrder.Insert | BESTELLUNGEN | b | Bestellung (Kopf) wurde in die Datenbank eingefügt |
PurchaseOrder.Update | BESTELLUNGEN | b | Bestellung wurde aktualisiert |
PurchaseOrder.Print | BESTELLUNGEN | b | Wird ausgelöst, bevor eine Bestellung gedruckt wird (Klick auf „Drucken" im Druck-Dialogfenster) |
PurchaseOrder.MailSent | BESTELLUNGEN | b | Bestellung wurde gemailt |
PurchaseOrderPosition.Insert | BESTELLPOSITIONEN | p=BESTELLPOSITIONEN | Bestellposition wurde in die Datenbank eingefügt |
PurchaseOrderPosition.Update | BESTELLPOSITIONEN | p=BESTELLPOSITIONEN | Bestellposition wurde aktualisiert |
PurchaseDeliveryNote.Insert | LS_WARENEINGANG | l | Eingangslieferschein (Kopf) wurde in die DB eingefügt |
PurchaseDeliveryNote.Update | LS_WARENEINGANG | l | Eingangslieferschein wurde aktualisiert |
PurchaseDeliveryNotePosition.Insert | LS_WEPOSITIONEN | p=LS_WEPOSITIONEN | Eingangs-Lieferscheinposition wurde in die Datenbank eingefügt |
PurchaseDeliveryNotePosition.Update | LS_WEPOSITIONEN | p=LS_WEPOSITIONEN | Eingangs-Lieferscheinposition wurde in der Datenbank aktualisiert |
PurchaseDeliveryNotePosition | LS_WEPOSITIONEN | p=LS_WEPOSITIONEN | Eingangs-Lieferscheinposition vor technischer Freigabe |
PurchaseInvoice.BeforeCommercialApproval | WARENEINGANG | w | Bei Eingangsrechnungen kann vor der kaufmännischen Freigabe auf bestimmte Werte geprüft werden. |
PurchaseInvoice.Insert | WARENEINGANG | w | Eingangsrechnung (Kopf) wurde in die DB eingefügt |
PurchaseInvoice.Update | WARENEINGANG | w | Eingangsrechnung wurde aktualisiert |
PurchaseInvoicePosition.Insert | WEPOSITIONEN | p=WEPOSITIONEN | Eingangs-Rechnungposition wurde in die DB eingefügt |
PurchaseInvoicePosition.Update | WEPOSITIONEN | p=WEPOSITIONEN | Eingangs-Rechnungposition wurde aktualisiert |
PurchaseInvoicePosition | WEPOSITIONEN | p=WEPOSITIONEN | Eingangs-Rechnungsposition vor technischer Freigabe |
StockPosting.Insert | KARTEI | k | Nachdem eine Kartei-Buchung durchgeführt wurde (je Position) |
StockPosting.BeforeUpdate | KARTEI | k | Bevor eine Kartei-Buchung aktualisiert wird |
StockPosting.BeforeDelete | KARTEI | k | Bevor eine Kartei-Buchung gelöscht wird |
StockTransfer.BeforeStockPosting | SCHNELLUMBUCHUNG | s | Bevor eine Schnellumbuchungs-Position lagergebucht wird |
StockTransfer.StockPosting | SCHNELLUMBUCHUNG | s | Nachdem eine Schnellumbuchungs-Position lagergebucht wurde |
Shipment.Created | VERSENDUNG | v | Nachdem eine Versendung erstellt wurde. |
TaskCenter.FirstStart | Dieses Ereignis wird von dem Benutzer ausgelöst, der TaskCenter das erste Mal am Tag startet. Pro Tag kann dieses Ereignis also nur 1x ausgelöst werden. Beispiel: Benutzer A startet am 27.12.2018 um 07:00h TaskCenter – TaskCenter.FirstStart wird ausgelöst. Benutzer B startet am gleichen Tag um 07:02h TaskCenter – keine erneute Auslösung. Benutzer A beendet TaskCenter und startet dieses neu um 12:00h – keine erneute Auslösung. | ||
Task.BeforeMailNotification | VG_DETAIL | d | Dieses Ereignis wird ausgelöst, bevor eine Verständigung per E-Mail zu einer CRM-Aufgabe gesendet wird. |
Task.Finished | VG_DETAIL | d | Dieses Ereignis wird ausgelöst, wenn eine CRM-Aufgabe auf erledigt gesetzt wurde. |
Task.Update | VG_DETAIL | d | Wird ausgelöst, wenn eine CRM-Aufgabe aktualisiert wurde. |
Supplier.Insert | LIEFERANT | l | Wird ausgelöst, wenn ein Lieferant angelegt wird. |
Supplier.Update | LIEFERANT | l | Wird ausgelöst, wenn ein Lieferant aktualisiert wird. |
InspectionOrder.Insert | QS_AUFTRAG | qs | Wird ausgelöst, wenn ein Prüfauftrag erstellt wird. |
InspectionOrder.Update | QS_AUFTRAG | qs | Wird ausgelöst, wenn ein Prüfauftrag aktualisiert wird. |
PackageData.PackageDataImportInserted | BEX_NVE | b | Wird ausgelöst, wenn in der PackageDataImport Schnittstelle ein neuer Eintrag eingefügt wird |
Aktionen
- Basket.Create (Aktion, Automatisierte Aufgaben)
- Basket.Open (Aktion, Automatisierte Aufgaben)
- ContactPerson.Update (Aktion, Automatisierte Aufgaben)
- Customer.Update (Aktion, Automatisierte Aufgaben)
- Deny (Aktion, Automatisierte Aufgaben)
- Item.Add (Aktion, Automatisierte Aufgaben)
- Item.Delete (Aktion, Automatisierte Aufgaben)
- ItemCriterion.AddOrUpdate (Aktion, Automatisierte Aufgaben)
- Mail.Send (Aktion, Automatisierte Aufgaben)
- Order.Create (Aktion, Automatisierte Aufgaben)
- Order.Open (Aktion, Automatisierte Aufgaben)
- Process.Add (Aktion, Automatisierte Aufgaben)
- Process.AddWithoutTask (Aktion, Automatisierte Aufgaben)
- Process.FinishAll (Aktion, Automatisierte Aufgaben)
- Process.Update (Aktion, Automatisierte Aufgaben)
- Show.Info (Aktion, Automatisierte Aufgaben)
- Show.Warning (Aktion, Automatisierte Aufgaben)
- Source.Update (Aktion, Automatisierte Aufgaben)
- SQL.ExecuteScript (Aktion, Automatisierte Aufgaben)
- Supplier.Update (Aktion, Automatisierte Aufgaben)
- Target.Override (Aktion, Automatisierte Aufgaben)
- Task.Add (Aktion, Automatisierte Aufgaben)
- Task.Update (Aktion, Automatisierte Aufgaben)
Funktionen und Platzhalter
Oftmals werden statt konstanten Werten variable Werte benötigt. Diese können über Funktionen und Platzhalter in der Bedingung oder den Aktion Werten ermittelt und verwendet werden.
Funktionen werden über StringFunctions realisiert siehe Allgemeine StringFunctions.
Spezifische StringFunctions für automatisierte Aufgaben
Einzelnen Wert aus der Datenbank selektieren (@ExecuteScalar)
@ExecuteScalar(Sqltext)
= Führt eine Datenbankabfrage durch und gibt den ersten Wert zurück
Beispiele:
@ExecuteScalar("select nummer from angebote where angebotsnummer="+@GetSourceValue("ANGEBOTSNUMMER"))
Mehrfachwerte aus der Datenbank selektieren (@FillTable)
@FillTable(SqlText)
= Führt eine Abfrage auf die Datenbank aus und liefert eine Tabelle
Beispiel:
@Join(", ", @FillTable("select deutsch from vorgabewerte where code=1 order by deutsch") )
Ergebnis:
Direkte Kosten, Fremdleistung, Lohn, Material, Provision, SET-Artikel, Variantenartikel
Sachbearbeiter Name
@GetCrmPersonInCharge(INX)
= Liefert den Namen des CRM-Sachbearbeiters aus dem Personalstamm. Der INX ist der eindeutige Index des Mitarbeiters aus dem Personalstamm.
Beispiele:
GetSourceValue("MITARBEITERINX"))
ExecuteScalar("select inx from personalstamm where mitarbeiternummer="+@GetSourceValue("MNR")))
Datenbankbenutzer
@GETDBUSER() ... Liefert den Datenbank-Benutzer der aktuellen Sitzung
Zugriff auf Werte vor Änderung
@GetOriginalValue(Spaltenname)
@GetOriginalValue(Tabellenname,Spaltenname) ... Zugriff auf die "Original-Tabelle" vor der Änderung eines Datensatzes (ähnlich GetSourceValue)
Beispiele:
Möchte man in der Bedingung einen Wert vor der Änderung mit dem neuen Wert vergleichen, so könnte die Bedingung so aussehen:
"where to_char(ende,'YYYY-MM-DD HH24:MI:SS') != '" +@ToDate(@GetOriginalValue("ENDE"),"yyyy-MM-dd HH:mm:ss")+ "'"
Zugriff auf Werte nach Änderung
@GetSourceValue(Spaltenname)
@GetSourceValue(Tabellenname,Spaltenname) ... Zugriff auf die "Tabelle(n)" der veränderten/neuen Werte.
Die Source wird immer aufgrund des Ereignisses in der automatisierten Aufgabe gesehen.
zB. Ereignis "Order.Insert" ... somit ist die Source-Tabelle die "Order"-Tabelle ... also "ANGEBOTE"
zB. Ereignis "Customer.Update" ... Source-Tabelle="Customer"="KUNDEN"
zB. Ereignis "Task.Add" ... Source-Tabelle="Task"="VG_DETAIL"
je nach Art des Datensatzes werden mehrere Tabellen dazu selektiert.
zB. gibt es bei "Order.Insert" immer einen Kunden. Der Zugriff erfolgt dann zB. mit @GetSourceValue("KUNDEN","NAME1")
Neuer Index
@GetNewIndex("ARTPROFKRIT")
Es kann ein neuer Index (INX) angelegt werden.
Praxisbeispiele
Anpassung der Kundennummer für bestimmte Anwendungsfälle
Ereignis: Customer.Insert
Bedingung: where OENR=15 and AP=310
Aktion: Sql.ExecuteScript
Aktion Werte:
<XML>
<STATEMENT Id="1">"delete from ansprechpartner where kundennummer="+@SourceValue("NUMMER")</STATEMENT>
<STATEMENT Id="2">"update kunden set nummer = (select max(nummer)+1 from kunden where nummer >= 80000 and nummer < 88887) where inx="+@SourceValue("INX") </STATEMENT>
<STATEMENT Id="3">"update kunden set fibu_nr=nummer, versandart='1 DPD', zahlungsbed='87', lieferbed = '1', mdtnr=1, vertreternr= 99,vertreterinx = 51, srkz = 1, srzk =0, ustpflicht = 1, pk= 2 where inx="+@SourceValue("INX") </STATEMENT>
<STATEMENT Id="4">"insert into ansprechpartner (inx,kundennummer,csi_eigene_aufgaben,fibu_kontakt,ad,au,md,mu) select "+@GetNewIndex("ANSPINX")+",nummer,0,0,sysdate,'"+@GetDbUser()+"',sysdate,'"+@GetDbUser()+"' from kunden where inx="+@SourceValue("INX")</STATEMENT>
<STATEMENT Id="5" Var="KNR">"select max(nummer) from kunden where nummer < 80000"</STATEMENT>
<STATEMENT Id="6" NoTrans="True">"update indizes set kundennr = {KNR} where kundennr="+@SourceValue("NUMMER")</STATEMENT>
</XML>
Automatische Chargenvergabe im Produktionsausweis
Hier wird ein Muster für neue Chargennummern erzeugt und mit einer fortlaufenden Nummer aus den bereits im FA zugebuchten Chargen ergänzt.
FA-Nummer ohne erste Stelle / Positionsnummer – laufende Nummer je Auftrag (ohne führende 0en)
A190021/7 = 190021/7-1
L700023 = 700023/1-1
Ereignis: ProductionReport.CreateLotNumber
Bedingung: where 1=1
Aktion: Target.Override
Aktion Werte: <XML>
<LotNumber Id="47">
<Lotnumber>
@ExecuteScalar("
select (case when fanr like 'A%' then substr(fanr,2,len(fanr)-1)
else substr(fanr,2,len(fanr)-1)+'/1'
end)+'-'+to_char(max_nr+1) from
(
select
f.fanr, max(case when isnumeric(right(chargennummer, len(chargennummer)-charindex('-',chargennummer)))=1
then to_number(right(chargennummer, len(chargennummer)-charindex('-',chargennummer)))
else 0 end) as max_nr
from fertigungsauftrag f left join chargennummer c on f.nummer=c.dok_nr and c.eingang > 0 where f.fanr='"+@SourceValue("FANR")+"' group by f.fanr
) t
")
</Lotnumber>
</LotNumber>
</XML>
Validierung E-Mail Adresse
Ereignis: Customer.Update
Bedingung: where einvoice_email is not null
Aktion: Sql.ExecuteScript
Aktion Werte: <XML>
<STATEMENT Id="1">
"update kunden
set einvoice_email = trim(einvoice_email)
where INX="+@SourceValue("INX")
</STATEMENT>
</XML>
Ereignis: Customer.Update
Bedingung: where einvoice_email is not null and not regexp_like(einvoice_email,'^[a-zA-Z0-9._%-]+\\+?[a-zA-Z0-9._%-]*@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,7}$')
Aktion: Deny
Aktion Werte: <XML><MESSAGE Id="1">
<DefaultText>"E-Mail Adresse "+@SourceValue("einvoice_email")+" im Feld eInvoice ist ungültig!"</DefaultText>
</MESSAGE> </XML>
Fehlerbehebung
Fehlermeldung | Lösung |
---|---|
Bei der Ausführung einer automatisierten Aufgabe ist ein unvorhergesehener Fehler aufgetreten: Conversion failed when converting the varchar value '10031876A' to data type int. | Die Bestellnummer ist ein String Feld und muss unter Hochkomma ‘ ‘ gesetzt werden. |