Wenn es ein Preismodul in ERP gibt, das den Preis auf Echtzeitbasis für jeden Benutzer berechnet, gibt es eine Möglichkeit, ohne Performance-Kompromiss zu kommen?Wie entwerfen Sie eine Pricing-Integration für Hybris mit SAP ERP für B2B-Anwendung
Antwort
Sie können Cache pflegen, um mehrere Aufrufe an das ERP-System zu vermeiden.
Hier ist ein Beispielcode, die Sie versuchen können, Cache zu implementieren -
CustomCache.java
public class CustomCache
{
@Resource(name = customCacheRegion)
protected CacheAccess customCacheAccess;
//Fetch result from cache
public ResultData readCachedData(final B2BUnitModel customer, final Date date)
{
return (ResultData) customCacheAccess.get(createCacheKey(customer, date));
}
//Update result to cache
public void cacheResult(final B2BUnitModel customer, final Date date,
final ResultData resultData)
{
try
{
customCacheAccess.put(createCacheKey(customer, date), resultData);
}
catch (final SAPHybrisCacheException e)
{
//error
}
}
protected CustomCacheKey createCacheKey(final B2BUnitModel customer, final Date date)
{
return new CustomCacheKey(customer, date);
}
}
Cache KEY -
public class CustomCacheKey extends AbstractCacheKey
{
private final B2BUnitModel customer;
private final Date date;
@Override
public int hashCode()
{
final int prime = 31;
int result = super.hashCode();
result = prime * result + ((customer == null) ? 0 : customer.hashCode());
return result;
}
@Override
public boolean equals(final Object obj)
{
if (obj == null)
{
return false;
}
if (!super.equals(obj))
{
return false;
}
final CustomCacheKey customCacheKey = (CustomCacheKey) obj;
if (customer == null)
{
if (customCacheKey.customer != null)
{
return false;
}
}
else if (!customer.equals(customCacheKey.customer))
{
return false;
}
if (date == null)
{
if (customCacheKey.date != null)
{
return false;
}
}
else if (!DateUtils.isSameDay(date, customCacheKey.date))
{
return false;
}
return true;
}
}
* -spring.xml -
<bean id="customCacheRegion" parent="sapCoreCacheRegion">
<constructor-arg name="name"
value="customCacheRegion" />
<constructor-arg name="maxEntries" value="10000" />
<constructor-arg name="evictionPolicy" value="FIFO" />
<constructor-arg name="statsEnabled" value="true" />
<constructor-arg name="exclusiveComputation" value="false" />
<constructor-arg name="ttlSeconds" value="300" />
</bean>
<bean
class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetObject" ref="cacheRegionsList" />
<property name="targetMethod" value="add" />
<property name="arguments">
<ref bean="customCacheRegion" />
</property>
</bean>
So Cache ist eine Art Karte, wo Sie Schlüsselwertpaar und holen den zwischengespeicherten Wert aus dem Schlüssel selbst definieren können.
Schließlich in Ihrer Service-Schicht, bevor Sie ERP-System aufrufen, nur überprüfen, ob für bestimmte Kunden (oder eine andere Bedingung in Ihrem Fall) Daten im Cache verfügbar sind oder nicht. Wenn es verfügbar ist, holen Sie es einfach direkt aus dem Cache, ansonsten rufen Sie das ERP-System auf und aktualisieren Sie das Ergebnis in den Cache.
Danke Shreshtt Bhatt. Es hilft mir wirklich. – racha11
@ racha11 Würden Sie bitte diese Antwort akzeptieren, wenn es funktioniert :) –
Was wäre, wenn der gleiche Benutzer die Einträge/Produkt ändern würde, wie würde unterscheiden, ob es die letzten im Cache gespeicherten Preise zurückgeben soll oder ERP aufrufen soll? –
- 1. Hybris Sap CPQ erhält Beispieldaten
- 2. Freie und rechtliche SAP ERP und ABAP IDE für SAP ERP auf lokalen Computer
- 3. Ermitteln Sie die Verwendungsstelle für ein Feld der SAP-ERP-Transaktion
- 4. SAP Hybris basierte ECommerce Plattform Konfiguration
- 5. Apache Konfiguration für Hybris
- 6. Wie können Produktbewertungen & Bewertungen in SAP Hybris durchgeführt werden?
- 7. Wie eine Tabellenhierarchie für Aufträge mit verschiedenen Produkten entwerfen Parameter
- 8. Entwerfen einer GUI für eine J2ME-App
- 9. So entwerfen Sie eine Datenbank für eine E-Commerce-Site
- 10. Entwerfen Sie ein besseres Layout für Android?
- 11. So entwerfen Sie DynamoDB für Nachrichtenartikel Tabelle
- 12. CUBA Plattform: Entwerfen Bildschirme für eine Klassenhierarchie
- 13. Entwerfen für EWGI-Kompatibilität
- 14. So entwerfen Sie die Firebase-Datenbank für eine Angebotsanwendung?
- 15. Entwerfen einer Testklasse für eine benutzerdefinierte Barriere
- 16. So entwerfen Sie Vorlagen für geclustertes Nifi
- 17. So entwerfen Sie eine Restful-API für Masseneinfügungen und -updates?
- 18. Wie eine "Postgreql-like" -Tabelle für eine Website entwerfen?
- 19. Entwerfen Sie eine Mini-Skriptsprache
- 20. Entwerfen Sie eine Tabelle mit benutzerdefinierten Zellen
- 21. Wie würden Sie JSON Schema für einen beliebigen Schlüssel entwerfen?
- 22. Wie Log-Struktur für eine Java-Anwendung zu entwerfen
- 23. Entwerfen für sich wiederholende Daten
- 24. SAP-Erweiterung für PHP 5.6
- 25. TLS 1.2-Konfiguration für Hybris-Server
- 26. Entwerfen Sie eine Überschrift mit Pseudo-Elementen
- 27. Entwerfen eines Datenmodells für MongoDB
- 28. Entwerfen Sie eine RecyclerView mit verschiedenen Layouts
- 29. Sie haben keine ausreichende Berechtigung für den Typ: Produkt. Hybris
- 30. Wie kann ich Hybris 6.0 für alle Klassendateien anmelden?
Ich würde sagen, nur einige Cache implementieren, um zu viele Anrufe gegen Ihr ERP zu vermeiden. –