1 Themenübersicht
Mittels der Hook-Contract-Definitionen „Positionen suchen und hinzufügen“ können Sie per Hook-Implementierung in den folgenden Anwendungen die Funktionalität „Positionen suchen und hinzufügen“ beeinflussen:
- Beschaffungsanfragen
- Beschaffungsangebote
- Beschaffungsaufträge
- Vertriebsschnellerfassungsbelege
- Vertriebsanfragen
- Vertriebsangebote
- Vertriebsaufträge
- Verteilaufträge
Hierbei werden für die folgenden Funktionalitäten Hooks angeboten:
- Neue Quelle mit Konvertierung von Quellbeleg in Zielbeleg in einer der aufgezählten Anwendungen. Optional können Schalter für das Suchen der Quelldaten und/oder die Konvertierung vorgesehen werden.
Die Standard-Funktionalität wird auch auf entsprechende Hook-Implementierungen umgestellt und kann daher als Beispiel herangezogen werden.
- Kopieren von eigenen Attributen. Optional können Schalter für die Konvertierung dieser eigenen Attribute vorgesehen werden.
In dieser Dokumentation ist beschrieben, welche Erweiterungen Sie mit den Hook-Contract-Definitionen vornehmen können und welche Einschränkungen und Besonderheiten Sie beachten müssen.
Eine Schnittstellenbeschreibung finden Sie im zugehörigen Entwicklungsobjekt vom Typ Hook Contract. Ausführliche Informationen zu den in den Schnittstellen deklarierten Methoden finden Sie in den zugehörigen Java-Klassen.
Informationen zur Hook-Infrastruktur finden Sie in der Dokumentation „Hook Contracts“.
2 Zielgruppe
- Entwickler
3 Beschreibung
Zunächst wird im ersten Unterkapitel anhand des Beispiels „Vertriebsangebot è Vertriebsauftrag“ beschrieben wie mittels Hook-Implementierung eine vorhandene „Positionen suchen und hinzufügen“-Konvertierung per Hook-Implementierung um das Kopieren eigener Attribut erweitert werden kann; optional können hierbei auch Konvertierungsschalter für diese Attribute eingeführt werden.
Im zweiten Unterkapitel wird dann beschrieben wie eine eigene Quellen bzw. eine eigene Konvertierung in einer Anwendung hinzugefügt werden kann, die einen entsprechenden Hook zur Verfügung stellt.
3.1 Bestehende Konvertierung erweitern
Alle im Standard vorhandenen „Positionen suchen und hinzufügen“-Konvertierungen können per Hook-Implementierung jeweils um das Kopieren eigener Attribute erweitert werden.
Die folgende Tabelle enthält pro Zielbeleg den dazugehörigen Hook Contract und eine Auflistung der Quellbelege im Standard, für die ein eigenes Hook-Interface zur Erweiterung der Konvertierung vorhanden ist:
Beschaffung
Zielbeleg | Hook Contract | Quellbelege |
Beschaffungsanfrage | com.cisag.app.purchasing.request.ui.insertdetail.ConverterExtension | Beschaffungsanfrage
Beschaffungsangebot Beschaffungsauftrag Vertriebsangebot Vertriebsauftrag |
Beschaffungsangebot | com.cisag.app.purchasing.proposal.ui.insertdetail.ConverterExtension | Beschaffungsanfrage
Beschaffungsangebot Beschaffungsauftrag Vertriebsangebot Vertriebsauftrag |
Beschaffungsauftrag | com.cisag.app.purchasing.proposal.ui.insertdetail.ConverterExtension | Beschaffungsanfrage
Beschaffungsangebot Beschaffungsauftrag Vertriebsangebot Vertriebsauftrag |
Vertrieb
Zielbeleg | Hook Contract | Quellbelege |
Schnellerfassungsbeleg | com.cisag.app.sales.rapid.ui.insertdetail.ConverterExtension | Schnellerfassungsbeleg
Vertriebsanfrage Vertriebsangebot Vertriebsauftrag Ausgangsrechnung |
Vertriebsanfrage | com.cisag.app.sales.request.ui.insertdetail.ConverterExtension | Schnellerfassungsbeleg
Vertriebsanfrage Vertriebsangebot Vertriebsauftrag |
Vertriebsangebot | com.cisag.app.sales.proposal.ui.insertdetail.ConverterExtension | Schnellerfassungsbeleg
Vertriebsanfrage Vertriebsangebot Vertriebsauftrag Ausgangsrechnung |
Vertriebsauftrag | com.cisag.app.sales.order.ui.insertdetail.ConverterExtension | Schnellerfassungsbeleg
Vertriebsanfrage Vertriebsangebot Vertriebsauftrag Ausgangsrechnung |
Verteilauftrag | com.cisag.app.multiorg.order.ui.insertdetail.ConverterExtension | Verteilauftrag
Ausgangsrechnung |
Eine konkrete Erweiterung sei anhand des Beispiels „Vertriebsangebot è Vertriebsauftrag“ erläutert.
Eine einfache Hook-Implementierung für das unbedingte zusätzliche Kopieren des Attributes ado_orders_partner könnte z.B. so aussehen:
XML
<?xml version=”1.0″ encoding=”UTF-16″?>
<HookContract xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xsi:noNamespaceSchemaLocation=”HookXMLSchema.xsd”> <!– Don’t change this line and the lines above! –> <HOOK_IMPLEMENTATION> <contract>com.cisag.app.sales.order.ui.insertdetail.ConverterExtension</contract> <hook> <interface>com.cisag.app.sales.order.ui.insertdetail.hook.SalesProposalConverterExtensionHook</interface> </HOOK_IMPLEMENTATION> |
Java
…
/** … */
public class SalesProposalConverterExtensionHookImpl implements SalesProposalConverterExtensionHook {
/** {@inheritDoc} */
@Override
public void convertSalesProposalDetail(CustomerProposalDetailView srcDetailView,
SalesProposalConverterExtensionHook.Context detailConversionContext,
TargetSource<SalesOrderDetailView> trgSource) {
trgSource.setValue(SalesOrderDetailView.Attribute.$ado_orders_partner,
srcDetailView.getAdo_orders_partner());
}
}
Das „setValue“ kann bei Bedarf anhand der Quell-Daten oder des Zielbelegkontextes bedingt werden.
Sofern auch eigene Schalter unterstützt werden sollen, so ist weiteres Coding erforderlich – z.B.:
…
/** … */
public class SalesProposalConverterExtensionHookImpl … {
…
/** {@inheritDoc} */
@Override
public ConverterPropertiesExtensionImpl createConverterPropertiesExtension() {
return new ConverterPropertiesExtensionImpl();
}
private static class ConverterPropertiesExtensionImpl implements
ConverterPropertiesExtension<SalesOrderView> {
private static final String MSG_PATH = ConverterPropertiesExtensionImpl.class.getName();
private static final int MSG_ONE = 1;
private static final int MSG_TWO = 2;
private final TextField fieldOne = new TextField(Guid.AUTOGUID, …);
private final TextField fieldTwo = new TextField(Guid.AUTOGUID, …);
private ConverterPropertiesExtensionImpl() {
fieldOne.registerMessage(MSG_PATH, MSG_ONE);
fieldTwo.registerMessage(MSG_PATH, MSG_TWO);
}
/** {@inheritDoc} */
@Override
public List<VisualElement> getVisualElements() {
return Arrays.<VisualElement> asList(fieldOne, fieldTwo);
}
/** {@inheritDoc} */
@Override
public void init(SalesOrderView header) {
fieldOne.setValue(…);
fieldTwo.setValue(…);
}
/** {@inheritDoc} */
@Override
public void validate() {
CisMessageManager mm = CisEnvironment.getInstance().getMessageManager();
mm.pushProgramMessagePath(MSG_PATH);
try {
if (fieldOne.getValue().trim().isEmpty()) {
mm.setProgramMessageId(MSG_ONE);
mm.sendMessage(…);
}
if (fieldTwo.getValue().trim().isEmpty()) {
mm.setProgramMessageId(MSG_TWO);
mm.sendMessage(…);
}
} finally {
mm.popProgramMessagePath();
}
}
}
…
}
Hinweis:
Hierbei sollte insbesondere das Pattern für die Behandlung der Meldungen mit dem Meldungspfad als Muster verwendet werden.
Sofern insgesamt mehr als vier Konvertierungsschalter vorhanden sind, so wird automatisch ein Shelf für die Konvertierungsschalter verwendet.
Vorhandene Standard-Attribute können mittels des ConverterExtension–Hooks nicht kopiert werden; ebenso können sie nicht das Kopierverhalten im Standard beeinflussen – verwenden Sie bei Bedarf eine eigene Converter–Hook-Implementierung und vergeben Sie zur Unterscheidung einen eindeutigen Namen.
3.2 Quell-Beleg und Hook für Konvertierung
3.2.1 Quell-Beleg
Die Funktionalität „Positionen suchen und hinzufügen“ basiert zunächst auf
der Bereitstellung von einer oder mehreren Quellen, die das Interfaces Source im Namensraum com.cisag.app.general.order.ui.insertdetail.hook erfüllen.
Optional kann eine Quelle per SourcePropertiesRetriever Schalter für die Auswahl zur Verfügung stellen (z.B. „Preise kopieren“ schränkt die Auswahl gemäß der Währung im Zielbeleg ein) – diese stehen dann im Ausführen-Menü der Suche zur Verfügung.
Optional können per SourceActionsRetriever Aktionen für die Vorbelegung der Suchfelder vorgesehen werden (z.B. Auftragsvorlage im Vertriebsauftrag).
Im Standard stehen folgende Quell-Implementierungen zur Verfügung:
Beschaffung
Quellbeleg | Quell-Implementierung | Bemerkung |
Beschaffungsanfrage | com.cisag.app.purchasing.request.ui.insertdetail.PurchaseRequestSource | |
Beschaffungsangebot | com.cisag.app.purchasing.proposal.ui.insertdetail.PurchaseProposalSource | Beispiel für Schalter („Preise kopieren“) |
Beschaffungsauftrag | com.cisag.app.purchasing.order.ui.insertdetail.PurchaseOrderSource | Beispiel für Schalter („Preise kopieren“) und Aktion |
Vertrieb
Quellbeleg | Quell-Implementierung | Bemerkung |
Schnellerfassungsbeleg | com.cisag.app.sales.rapid.ui.insertdetail.SalesRapidSource | Beispiel für Schalter („Preise kopieren“) |
Vertriebsanfrage | com.cisag.app.sales.request.ui.insertdetail.SalesRequestSource | |
Vertriebsangebot | com.cisag.app.sales.proposal.ui.insertdetail.SalesProposalSource | Beispiel für Schalter („Preise kopieren“) |
Vertriebsauftrag | com.cisag.app.sales.order.ui.insertdetail.SalesOrderSource | Beispiel für Schalter („Preise kopieren“) und Aktion |
Verteilauftrag | com.cisag.app.multiorg.order.ui.insertdetail.DistributionOrderSource | Beispiel für Schalter („Preise kopieren“) |
3.2.2 Hook für Konvertierung
Jede der hier beschriebenen Beleganwendungen im Standard stellt einen Hook-Vertrag zur Verfügung, der jeweils die folgenden zwei Hook-Interfaces enthält:
- cisag.app.general.order.ui.insertdetail.hook.ConverterHook
- cisag.app.general.order.ui.insertdetail.hook.ConverterSupportIndicatorHook
Die folgende Tabelle enthält pro Zielbeleg den dazugehörigen Hook-Vertrag:
Beschaffung
Zielbeleg | Hook Contract |
Beschaffungsanfrage | com.cisag.app.purchasing.request.ui.insertdetail.Converter |
Beschaffungsangebot | com.cisag.app.purchasing.proposal.ui.insertdetail.Converter |
Beschaffungsauftrag | com.cisag.app.purchasing.proposal.ui.insertdetail.Converter |
Vertrieb
Zielbeleg | Hook Contract |
Schnellerfassungsbeleg | com.cisag.app.sales.rapid.ui.insertdetail.Converter |
Vertriebsanfrage | com.cisag.app.sales.request.ui.insertdetail.Converter |
Vertriebsangebot | com.cisag.app.sales.proposal.ui.insertdetail.Converter |
Vertriebsauftrag | com.cisag.app.sales.order.ui.insertdetail.Converter |
Verteilauftrag | com.cisag.app.multiorg.order.ui.insertdetail.Converter |
Im Standard gibt es für jeden Hook-Vertrag genau eine Hook-Vertrags-Implementierung, welche für alle unterstützten Quell-Belege eine ConverterHook –Implementierung enthält (z.B. für den Vertriebsauftrag: com.cisag.app.sales.order.ui.insertdetail.ConverterImpl).
In der Regel ist hierbei jeweils die Implementierung des Interfaces ConverterHook hinreichend.
Der ConverterSupportIndicatorHook kann bei Bedarf zur Unterdrückung einer Quelle im Zielbeleg bei bestimmten Voraussetzungen dienen – als Beispiel hierfür kann z.B. die Implementierung für den Verteilauftrag dienen.
Die Standard-Implementierungen können hierbei für eigene ConverterHook–Implementierungen als Muster dienen.
Hinweis:
Da in der Regel für einen eigenen Hook keine ConverterExtension benötigt wird, kann das Coding entsprechend vereinfacht werden.