Ajout de contenu à des pages existantes à l'aide de points d'extension
Chaque composant qui constitue une page contient 2 points d'extension (en haut et en bas) pour l'insertion de code personnalisé dans une page existante. Utilisez l'approche de la personnalisation différentielle pour ajouter du contenu aux pages existantes de Order Hub à l'aide de ces points d'extension.
Envisagez d'utiliser cette approche de personnalisation différentielle pour vos personnalisations via l'approche de personnalisation par substitutions , car vos mises à jour sont conservées lorsque Order Hub publie des mises à jour sur les mêmes pages que celles que vous avez personnalisées. Aucune fusion de code n'est requise ; recompilez simplement avec le code DTK mensuel.
Avant de commencer
- Accédez à la page Order Hub à laquelle vous souhaitez ajouter du contenu.Par exemple, la page des détails de la commande:

- Afficher les points d'extension disponibles auxquels vous pouvez ajouter du contenu sur la page.
- Appuyez sur Ctrl + D pour afficher les points d'extension disponibles sur la page.Chaque composant de page contient des points d'extension désignés par le libellé et la convention de dénomination suivants:
Optional custom component can be placd here. Component name: ComponentName Identifier: IDPar exemple, les points d'extension de la page des détails de la commande:
- Notez les identificateurs des points d'extension auxquels vous souhaitez ajouter du contenu.
- Appuyez sur Ctrl + Maj + D pour masquer les points d'extension disponibles sur la page.
- Appuyez sur Ctrl + D pour afficher les points d'extension disponibles sur la page.
Ensuite, effectuez vos mises à jour pour ajouter du contenu à des pages existantes à l'aide de points d'extension:
Procédure
Résultats
A titre de référence, le tutoriel suivant ajoute du contenu à des pages existantes à l'aide de points d'extension: Tutoriel: Personnalisation de l'action Planifier une commande.
Exemple
- Identifiez la directive d'extension qui sera utilisée pour insérer vos personnalisations. Chaque composant Angular par défaut aura des directives d'extension au début et à la fin du composant. Par exemple :
<ng-template bucExtension [componentName]="componentName" [placement]="'top'" [id]="id" [parent]="this"> </ng-template>Chacun de ces modèles aura des ID uniques définis dans le fichier packages/order-details/src/app/features/order/order-details/order-details.component.ts :EXTENSION = { TOP: ExtensionConstants.ORDER_DETAILS_TOP, BOTTOM: ExtensionConstants.ORDER_DETAILS_BOTTOM };Ces constantes sont définies dans le fichier packages/order-details/src/app/features/order/extension.constants.ts :export class ExtensionConstants { static readonly ORDER_DETAILS_TOP = 'order_details_extension_top'; static readonly ORDER_DETAILS_BOTTOM = 'order_details_extension_bottom'; } - Créez un nouveau composant qui doit être injecté. Par exemple :
import { Component, EventEmitter, Input, Output } from '@angular/core'; @Component({ selector: 'custom-orderdetails-extension', template: '' }) export class CustomOrderDetailsExtensionComponent{ }Mettez à jour le tableau de déclarations dans le fichier packages/order-details/src-custom/app/app-customization.impl.ts :import { CustomOrderDetailsExtensionComponent } from "./features/order/custom-order-details-extension/custom-order-details-extension.component" ... static readonly components = [CustomOrderDetailsExtensionComponent]; - Créez un service pour gérer la communication parent-enfant:
import { Injectable, OnDestroy } from "@angular/core"; import { BucNotificationModel, BucNotificationService } from '@buc/common-components'; import { ExtensionService } from "./extension.service"; @Injectable() export class CustomOrderDetailsExtensionService extends ExtensionService implements OnDestroy { userInputs = { name: ''} constructor( public bucNotificationService: BucNotificationService) { super(); } createInput() { // check only the necessary properties for update if (this.parentContext.name !== this.userInputs.name) { this.userInputs.name = this.parentContext.name; } this.userInputObs$.next(this.userInputs); } handleOutput() { this.userOutputs = { changesEmitted: this.onChangesEmitted.bind(this) } this.userOutputObs$.next(this.userOutputs); } onChangesEmitted(event: any) { this.bucNotificationService.send([ new BucNotificationModel({ statusType: 'success', statusContent: `Message emitted from dynamic component: ${event.message}` }) ]); } } - Mettez à jour le fichier app-customization.impl.ts comme suit:
... import { CustomOrderDetailsExtensionService } from "./services/custom-order-details-extension-service" import { ExtensionConstants } from "./features/order/extension.constants"; import { ExtensionModule } from "@buc/common-components"; ... static readonly imports = [ ExtensionModule.forRoot( [{ id: ExtensionConstants.DETAILS_TAB_BOTTOM, component: CustomOrderDetailsExtensionComponent, service: CustomOrderDetailsExtensionService }]) ]; ...