Table of Contents

Extensibilité

Cette section s'adresse aux développeurs qui souhaitent étendre la personnalisation des états et plus particulièrement la partie dédiée à la personnalisation des colonnes.

Comment fournir davantage de champs de substitution dans les documents ?

Abonnez-vous à l'événement OnBeforeGetCustomFields. Ajoutez les variables de substitution supplémentaires dans le dictionnaire fournit.

[EventSubscriber(ObjectType::Codeunit, Codeunit::"Print Document Helper RCCAP", 'OnBeforeGetCustomFields', '', false, false)]
local procedure OnBeforeGetCustomFields(Rec: Variant; ReportCustomization: Record "Report Customization RCCAP"; CustomReplacementFields: Dictionary of [Text, Text]; var CustomFields: Dictionary of [Text, Text])
begin
    CustomReplacementFields.Add('MyVar', 'Hello World');
end;

Si vous ajoutez une variable nommée MyVar comme ci-dessus, vous l'adressez ainsi dans l'en-tête : {"$MyVar"}.

Comment fournir des champs de substitution dans les en-têtes de colonnes ?

Les en-têtes de colonnes supportent les variables sur la base des champs présents dans l'en-tête de document.

Si vous souhaitez fournir des variables supplémentaires, vous devez les ajouter dans le dictionnaire fournit par l'événement OnBeforeBuildCustomLineHeaders.

Comment fournir davantage de champs de substitution dans les lignes ?

Abonnez-vous à l'événement OnBeforeBuildCustomLineDataItem. Ajoutez les variables de substitution supplémentaires dans le dictionnaire fournit.

[EventSubscriber(ObjectType::Codeunit, Codeunit::"Print Document Helper RCCAP", 'OnBeforeBuildCustomLineDataItem', '', false, false)]
local procedure OnBeforeBuildCustomLineDataItem(Rec: Variant; DataItemName: Text; var CustomFields: Dictionary of [Text, Text]);
begin
    CustomFields.Add('MyVar', 'Hello World');
end;

Si vous ajoutez une variable nommée MyVar comme ci-dessus, vous l'adressez ainsi dans l'en-tête : {"$MyVar"}.

Ajouter un élément d'extension dans une édition

Un élément d'extension est un élément de données (dataitem) supplémentaire dans les lignes d'un état. Vous pouvez proposer des éléments d'extensions aux états pour afficher des détails supplémentaires liées à une ligne. Par exemple : ajouter les détails d'une nomenclature, une liste d'ingrédients, etc.

L'exemple ci-dessous illuste comment ajouter un élément d'extensibilité qui va imprimer l'ensemble des attributs articles liés à une ligne d'article dans la confirmation de commande.

  1. Créez un objet enumextension étendant l'énumeration Dep.Inv. Feature Impl. UTCAP.
  2. Ajoutez deux nouvelles valeurs implémentant l'interface Dep.Inv. Feature Impl. UTCAP. L'une (ici ItemAttributesDI.PTE) sert à la personnalisation des colonnes à obtenir au moment de la conception à quel élément de données existant est attaché votre élément d'extensibilité. Le second (ici ItemAttributesRecords.PTE) sert au moment de l'exécution de l'état à récupérer les enregistrements à imprimer.
enumextension 50000 "Dep.Inv. Feature Impl. PTE" extends "Dep.Inv. Feature Impl. UTCAP"
{
    value(50000; "ItemAttributesDI.PTE")
    {
        Caption = 'Fetch Report Customization Extensibility Data Items (Item Attributes)';
        Implementation = "Dep.Inv. Feature Impl. UTCAP" = "ItemAttributesDIPTE";
    }
    value(50001; "ItemAttributesRecords.PTE")
    {
        Caption = 'Fetch Report Customization Extensibility Data Item Records (Item Attributes)';
        Implementation = "Dep.Inv. Feature Impl. UTCAP" = "ItemAttributesRecordsPTE";
    }
}
  1. Implémentez dans un nouveau codeunit pour la première option créée dans l'énumération. Ici le nous supportons uniquement la confirmation de commande de CAP Businness et attachons notre élément à l'élément Extension de Sales Line.
codeunit 50000 "ItemAttributesDIPTE" implements "Dep.Inv. Feature Impl. UTCAP"
{
    Access = Internal;
    SingleInstance = true;

    var
        ItemAttributesDataItemLbl: Label 'Item Attributes PTE', Locked = true;

    procedure Execute(Parameters: JsonObject) Results: JsonObject;
    var
        JsonHelper: Codeunit "Json Helper UTCAP";
        ReportId: Integer;
        Payload: JsonObject;
    begin
        ReportId := JsonHelper.GetInteger(Parameters, 'reportId');

        case ReportId of
            70344612 /*Sales - Order Conf.*/:
                begin
                    Payload.Add('Data Item Table ID', Database::"Sales Line");
                    Payload.Add('Name', 'Extension');
                    Payload.Add('Extension Name', ItemAttributesDataItemLbl);
                    Results.Add('groupDefinition', Payload);
                end;
        end;
    end;

    procedure GetSupportedFeatures() SupportedFeature: List of [Text];
    begin
        SupportedFeature.Add('Report.FetchExtDataItems.RCCAP');
    end;
}
  1. Implémentez dans un nouveau codeunit pour la seconde option créée dans l'énumération. Dans ce codeunit, vous récupérez l'enregistrement Sales Line sérialisé dans le champ record de Parameters. On utilise la fonction DeserializeJsonToRecord pour réobtenir l'enregistrement et ainsi récupérer l'article qui s'y trouve. La routine consiste ensuite à ajouter tous les attributs articles dans la variable Result.
codeunit 50001 "ItemAttributesRecordsPTE" implements "Dep.Inv. Feature Impl. UTCAP"
{
    Access = Internal;
    SingleInstance = true;

    var
        ItemAttributesDataItemLbl: Label 'Item Attributes PTE', Locked = true;

    procedure Execute(Parameters: JsonObject) Results: JsonObject;
    var
        SalesLine: Record "Sales Line";
        Item: Record Item;
        ItemAttribute: Record "Item Attribute";
        ItemAttributeValue: Record "Item Attribute Value";
        ItemAttributeValueMapping: Record "Item Attribute Value Mapping";
        Utilities: Codeunit "Utilities UTCAP";
        JsonHelper: Codeunit "Json Helper UTCAP";
        TableId : Integer;
        ItemNo: Code[20];
        FromRecordPayloadTok: JsonToken;
        ItemAttributePayload, FromRecordPayload : JsonObject;
        VarRec: Variant;
    begin
        if JsonHelper.GetText(Parameters, 'extensionName') <> ItemAttributesDataItemLbl then
            exit;

        TableId := JsonHelper.GetInteger(Parameters, 'tableId');
        Parameters.Get('record', FromRecordPayloadTok);
        FromRecordPayload := FromRecordPayloadTok.AsObject();

        case TableId of
            Database::"Sales Line":
                begin
                    VarRec := SalesLine;
                    Utilities.DeserializeJsonToRecord(FromRecordPayload, VarRec);
                    SalesLine := VarRec;

                    if SalesLine.Type <> SalesLine.Type::Item then
                        exit;
                    ItemNo := SalesLine."No.";
                end;
            else
                exit;
        end;

        ItemAttributeValueMapping.SetRange("Table ID", Database::Item);
        ItemAttributeValueMapping.SetRange("No.", ItemNo);

        if ItemAttributeValueMapping.FindSet() then
            repeat
                ItemAttribute.Get(ItemAttributeValueMapping."Item Attribute ID");
                ItemAttributeValue.Get(ItemAttributeValueMapping."Item Attribute ID", ItemAttributeValueMapping."Item Attribute Value ID");

                Clear(ItemAttributePayload);
                ItemAttributePayload.Add('Attribute ID', ItemAttributeValueMapping."Item Attribute ID");
                ItemAttributePayload.Add('Attribute Value ID', ItemAttributeValueMapping."Item Attribute Value ID");
                ItemAttributePayload.Add('Name', ItemAttribute.GetNameInCurrentLanguage());
                ItemAttributePayload.Add('Value', ItemAttributeValue.GetValueInCurrentLanguage());

                Results.Add(ItemAttributeValueMapping.SystemId, ItemAttributePayload);
            until ItemAttributeValueMapping.Next() = 0;
    end;

    procedure GetSupportedFeatures() SupportedFeature: List of [Text];
    begin
        SupportedFeature.Add('Report.FetchDataItemExtRec.RCCAP');
    end;
}

Vous pouvez à présent déployer votre extension. Rendez-vous dans la personnalisation des colonnes de la confirmation de commande et sélectionnez l'action Obtenir les éléments d'extension. Sélectionnez votre nouvelle extension.

Pour faire référence à vos champs, par exemple pour imprimer le nom suivi de la valeur de l'attribut, inscrivez une expression comme celle-ci :

{"$Name"} : {"$Value"}

Les noms sont toujours préfixés par le symbole $ car l'enregistrement principal reste la table Sales Line.