Adición de contenido a páginas existentes utilizando puntos de extensión
Cada componente que compone una página contiene 2 puntos de extensión (superior e inferior) para insertar código personalizado en cualquier página existente. Utilice el enfoque de personalización diferencial para añadir contenido a las páginas existentes de Order Hub utilizando estos puntos de extensión.
Considere la posibilidad de utilizar este enfoque de personalización diferencial para las personalizaciones sobre el enfoque de personalización mediante alteraciones temporales , ya que las actualizaciones se conservan cuando Order Hub publica actualizaciones en las mismas páginas que ha personalizado. No se requiere ninguna fusión de código; simplemente vuelva a compilar con el código DTK mensual.
Antes de empezar
- Vaya a la página Order Hub a la que desea añadir contenido.Por ejemplo, la página de detalles del pedido:

- Mostrar los puntos de extensión disponibles para añadir contenido en la página.
- Pulse Ctrl + D para mostrar los puntos de extensión disponibles en la página.Cada componente de página contiene puntos de extensión indicados por la etiqueta y el convenio de denominación siguientes:
Optional custom component can be placd here. Component name: ComponentName Identifier: IDPor ejemplo, los puntos de extensión de la página de detalles de pedido:
- Anote los identificadores de los puntos de extensión a los que desea añadir contenido.
- Pulse Ctrl + Mayús + D para ocultar los puntos de extensión disponibles en la página.
- Pulse Ctrl + D para mostrar los puntos de extensión disponibles en la página.
A continuación, realice las actualizaciones para añadir contenido a las páginas existentes utilizando puntos de extensión:
Procedimiento
Resultados
Como referencia, la siguiente guía de aprendizaje añade contenido a las páginas existentes utilizando puntos de extensión: Guía de aprendizaje: Personalización de la acción Planificar orden.
Ejemplo
- Identifique la directiva de extensión que se utilizará para insertar las personalizaciones. Cada componente Angular predeterminado tendrá directivas de extensión al principio y al final del componente. Por ejemplo:
<ng-template bucExtension [componentName]="componentName" [placement]="'top'" [id]="id" [parent]="this"> </ng-template>Cada una de estas plantillas tendrá ID exclusivos definidos en el archivo packages/order-details/src/app/features/order/order-details/order-details.component.ts :EXTENSION = { TOP: ExtensionConstants.ORDER_DETAILS_TOP, BOTTOM: ExtensionConstants.ORDER_DETAILS_BOTTOM };Estas constantes se definen en el archivo 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'; } - Cree un componente nuevo que se tenga que inyectar. Por ejemplo:
import { Component, EventEmitter, Input, Output } from '@angular/core'; @Component({ selector: 'custom-orderdetails-extension', template: '' }) export class CustomOrderDetailsExtensionComponent{ }Actualice la matriz de declaraciones en el archivo 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]; - Cree un nuevo servicio para manejar la comunicación padre-hijo:
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}` }) ]); } } - Actualice el archivo app-customization.impl.ts como se indica a continuación:
... 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 }]) ]; ...