Hook-Contract-Definitionen: Positionen suchen und hinzufügen

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>
<!– extension: sales proposal detail ==> sales order detail  –>

<hook>

<interface>com.cisag.app.sales.order.ui.insertdetail.hook.SalesProposalConverterExtensionHook</interface>
<implementation>com.ado.ext.app.orders.sales.order.ui.insertdetail.SalesProposalConverterExtensionHookImpl</implementation>
</hook>

</HOOK_IMPLEMENTATION>
</HookContract>

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.

Czy ten artykuł był pomocny?