Asociar Notas a otros registros
Internal Notes cuenta con la posibilidad de extenderse a otros elementos de Bussines Central permitiendo implementar su funcionalidad de notas a otras páginas. En este ejemplo veremos como añadir la funcionalidad de Internal Notes a la tabla Productos para que aparezcan las notas de un producto al seleccionarlo en un documento de oferta de compra.
Para empezar tenemos que añadir el nuevo tipo al enumerado IDPINO Source Type.
enumextension 50100 "Source Type" extends "IDPINO Source Type"
{
value(2; "Item")
{
Caption = 'Item';
}
}
Es necesario que añadamos a la tabla IDPINO Cust./Vend. Int. Note la relación con el nuevo Source Type.
tableextension 50102 "Cust./Vend. Int. Note" extends "IDPINO Cust./Vend. Int. Note"
{
fields
{
modify("Source No.")
{
TableRelation = IF ("Source Type" = CONST(Item)) Item;
}
}
}
Para controlar la aparición de las notas se han implementado dos funciones en IDPINO Internal Note Helper. Ambas son llamadas ShowInternalNotes pero tienen una diferencia de uso significativa. Mientras que la primera de ellas nos permite gestionar las notas que contengan un parámetro de notificación que necesite controlar ID, la segunda nos permite gestionar cualquier otra que no requiera del uso de notificaciones.
En este caso vamos a llamar a la función para que muestre una alerta para un producto y que se muestre en el documento de oferta de venta.
procedure ShowItemInternalNotes(SalesDocumentType: Enum "Sales Document Type"; ItemNo: Code[20]; ItemDescription: Text)
var
InternalNotes: Record "IDPINO Cust./Vend. Int. Note";
DocumentType: Enum "IDPINO Document Type";
begin
InternalNotes.SetRange("Source Type", InternalNotes."Source Type"::Item);
InternalNotes.SetRange("Source No.", ItemNo);
InternalNotes.SetRange("Note Type", InternalNotes."Note Type"::Alert);
case SalesDocumentType of
SalesDocumentType::"Quote":
begin
InternalNotes.SetRange("Sales Quote", true);
DocumentType := DocumentType::"Sales Quote";
end;
end;
if not InternalNotes.IsEmpty() then
InternalNotesHelper.ShowInternalNotes(InternalNotes, ItemDescription, DocumentType);
end;
En el caso de que queramos trabajar con algun tipo de notificación, es necesario especificarlo como último parámetro en la llamada de la función.
Para que muestre dichas notas al seleccionar un producto en el documento de oferta de ventas debemos extender la página Sales Line y llamar a nuestra función desde la codeunit. Es de vital importancia que al manejar notificaciones asignemos individualmente las ID para cada producto por separado.
tableextension 50100 "Sales Line" extends "Sales Line"
{
fields
{
modify("No.")
{
trigger OnAfterValidate()
var
InternalNotes: Record "IDPINO Cust./Vend. Int. Note";
InternalNotesHelper: Codeunit "IDPINO Internal Note Helper";
Notification: Notification;
DocumentType: Enum "IDPINO Document Type";
begin
//Para evitar que nos salgan las notas de todos los productos hemos de filtrar por "Source Type"
// y por el número del cliente/proveedor.
InternalNotes.SetRange("Source Type", InternalNotes."Source Type"::Item);
InternalNotes.SetRange("Source No.", Rec."No.");
//En este caso queremos que solo nos aparezcan estas notas en "oferta de compra".
case Rec."Document Type" of
Rec."Document Type"::Quote:
begin
InternalNotes.SetRange("Sales Quote", true);
DocumentType := DocumentType::"Sales Quote";
end;
end;
//Es necesario asignar un ID a cada producto para que muestre la notificación correctamente
if not InternalNotes.IsEmpty() then begin
Notification.Id('86CFD062-D996-4B30-9C8A-01AD50CB9C90');
InternalNotesHelper.ShowInternalNotes(InternalNotes, 'Descripción de producto', DocumentType, Notification);
end;
end;
}
}
}
Para finalizar, implementamos la acción que nos obrirá la página IDPINO Cust/Vend Int. Nt. List que nos permitirá añadir y editar notas desde la ficha del producto.
pageextension 50100 "Item Card" extends "Item Card"
{
actions
{
addlast("ItemActionGroup")
{
action("Internal Notes")
{
ApplicationArea = All;
Caption = 'Internal Notes';
Promoted = true;
PromotedCategory = Category4;
PromotedOnly = true;
Image = Alerts;
ToolTip = 'Configure notes that will be shown to the user when the item is selected for a sales document.';
RunObject = Page "IDPINO Cust/Vend Int. Nt. List";
RunPageLink = "Source Type" = FILTER(Item),
"Source No." = FIELD("No.");
}
}
}
}