====== TradeItemManager ====== Verbucht übergebene TradeItems im Articlepool.\\ ^Name ^Bedeutung | |//AddEANs ://|True oder False, bei nicht hinterlegter EAN, die übergeben EAN zum anlegen verwenden wenn auf True gesetzt.| |//AutoCreateLocations ://|True oder False, bei nicht hinterlegter Location, die übergeben Location zum anlegen verwenden wenn auf True gesetzt.| |//DeleteMethod ://|Methode die zum Löschen von TradeItmes, aus dem Articlepool verwendet werden soll, nach Zeitraum z.B. für alle TradeItems die älter als 3 Monate sind etc.| |//Description ://|Hier kann ggf. eine Beschreibung der konkreten Aufgabe des Jobsteps in diesem Job eingetragen werden.| |//FieldHanlding ://|Override oder Merge, bei Override werden bereits befüllte Felder überschrieben und bei Merge beide Werte (alt und neu) beibehalten.| |//Name ://|Name des SalesReportItemManagers. Hier sollte nach Möglichkeit ein aussagekräftiger Name gewählt werden.| |//OnlyBookLanguageTextByEAN ://|True oder False, bei True wird nur der LangueText zur EAN verbucht.| |//OnlyBookPricelistpriceByEAN ://|True oder False, bei True wird nur der PriceListPrice zur EAN verbucht.| |//OverrideArticleNumberByEAN ://|True oder False, bei True wird bei gleicher EAN aber unterschiedlicher ArtikelNummer die alter ArtikelNummer mit einer neuen überspeichert.| |//OverridePrimaryArticleIds ://|True oder False, standardmäßig False, falls ein neues Dokument eingelesen wird, wird eine Fehlermeldung erzeut, sobald eine EAN bereits für einen anderen Arikel vergeben wurde. True, nur bei Ausnahmefällen, sollte gut überlegt sein, da die Fehlermeldung bei gleicher EAN mit abweichenden Artikel untedrückt wird| |//PartnerToBook ://|Angabe für welchen Partner, das TradeItem eignebucht werden soll.| ====== Supplier.TradeItemManager / Supplier.TradeItemServices ====== ==== Aufgabe / Funktion ==== Der //Supplier.TradeItemManager// verbucht Artikel mit Hilfe der //Supplier.TradeItemSevices-Klasse// in die //Article-// und //ArticleDetail-Tabellen// der eBiss-Datenbank. Die //Article//-Tabelle hat über einen //Fremdschlüssel (Article_Oid)// eine Relationale //1:N-Verbindung// mit der //ArticleDetail//-Tabelle. Den eigentlichen Verbuchungs-Prozess verrichtet die //Supplier.TradeItemServices-Klasse//. ====== Supplier.TradeItemServices ====== ==== Kurzbeschreibun der Funktionsweise ==== === 1) TradeItemPulk-Bildung === Eingehender Artikelkatalog (Document-Object //tradeItemDoc//)((Siehe auch [[transformation:mappings:standardmappings#:supplierarticlepool: Mappings]])) wird dem //Supplier.TradeItemServices// im Konstruktor geliefert, daraus werden kleine Artikel-Pulks (Batches) in ArrayLists zusammengestellt.\\ \\ **2) Load Cache (Caches beladen)**\\ Es werden drei HashTabellen ((Dictionary-Objekte)) gebildet: * ArtikelHash (Key ist die Artikelnummer, Value ist das Article-Objekt) * EanHash (Key ist die EAN(([[wp>EAN]])), Value ist die EAN) * ArticleDetailHash (speichert alle Articledetails, der Key setzt sich aus der Kombination **Artikelnummer_Tab_Farbe_Tab_Größe** zusammen, Value ist das ArticleDetail-Objekt) Der //ArtikelHash// und der //EanHash// werden //Key-Seitig// mit den Informationen aus dem //Pulk des Artikelkatalogs// befüllt. Danach erfolgt mit diesen Informationen eine Datenbankabfrage, welche alle bereits in der //Datenbank gespeicherten ArticleDetails zu den im Pulk vorhandenen Artikel zurückgeliefert// und falls //nicht// vorhanden, in die drei Hash-Tabellen //einträgt//. === 3) BookMode-Check (Status des betreffenden ArticleDetails ermitteln) === Der BookMode wird aus den Informationen im EanHash und ArticleDetailHash ermittelt. === Folgende BookModes werden vergeben: === * **Add:** ArticleDetail ist nicht im ArticleDetailHash vorhanden, ==> Das ArticleDetail wird in der Datenbank angelegt. * **Update:** Das ArticleDetail ist imArticleDetailHash vorhanden und es hat sich etwas (außer Artikelnummer, Farbe, Preis) geändert. ==> betroffene Felder des ArticleDetails werden geändert. * **Delete:** Das ArticleDetail ist im ArticleDetailHash vorhanden und die Positionsaktion des ArticleDetails im Artikelkatalog steht auf löschen, ==> Posaction des ArticleDetails in der Datenbank wird auf gelöscht gesetzt. * **Ignore:** Das ArticleDetail ist im ArticleDetailHash vorhanden (wurde anhand der Kombination Artikelnummer_Farbe_Größe ermittelt) und die EAN im ArtikelKatalog ist anders, ==> es wird nichts in der Datenbank verbucht und Ignore wird ins Log geschrieben. * **Deny:** ArticleDetail ist nicht im ArticleDetailHash vorhanden, aber dazu steht im EanHash eine EAN, ==> Das Verbuchen in der Datenbank wird verweigert (zwei ArticleDetails mit den gleichen Ausprägungen aber unterschieldliche EAN's) ==>Deny-Eintrag in die LogDatei. * **DoubleArticleDetail:** Das ArticleDetail ist im ArticleDetailHash vorhanden aber die EAN ist eine andere als die der Artikel-Position im Artikel-Katalog, ==> (zwei ArticleDetails mit den gleichen Ausprägungen aber unterschiedliche EAN's) ==>DoubleArticleDetail-Eintrag in die LogDatei. === 4) Verbuchungsprozess === Der Verbuchungsprozess verläuft anahand der Ergebnisse und des daraus resultierenden //BookModes// ab, d.h. es wird entweder ein //neues ArticleDetail in der Datenbank angelegt//, ist dessen Artikel //nicht im ArticleHash// vorhanden, wird auch ein neuer //Artikel in der Article-Tabelle eingetragen//, oder es werden Felder eines //ArticleDetails in der Datenbank aktualisiert//, oder das //Verbuchen wird verweigert//. Bei allen Löschvorgängen wird nur die //Positionsaktion auf gelöscht gesetzt//, es werden keine ArticleDetails und Artikel aus der Datenbank gelöscht. Bei allen Änderungen eines ArticleDetails und Artikel wird die ModificationTime eingetragen.