Création de la Factbox
Cette documentation explique comment créer une Factbox personnalisée pour la Phone Connect Caller Card et comment la lier aux Caller Cards.
Nous commencerons par créer une Factbox personnalisée qui, dans cet exemple, affiche les projets associés au Contact ou au Client respectif.
| AL |
|---|
| page 00002 "SIM_CTI Ma Nouvelle Factbox"
{
ApplicationArea = All;
Caption = 'Ma Nouvelle Factbox';
PageType = Cardpart;
layout
{
area(content)
{
group(Général)
{
Caption = 'Général';
field("NumArticle"; GlobalProjectAmountInteger)
{
Caption = 'Projets';
ToolTip = 'Ici, vous pouvez voir les entrées de projets trouvées';
// Déclenché lorsque l'utilisateur clique sur le champ (action de drill-down)
trigger OnDrillDown()
var
LocalJobListPage: Page "Job List";
begin
// Afficher uniquement les enregistrements marqués dans la liste des tâches
GlobalRecordJob.MarkedOnly;
// Définir la vue de la page de la liste des tâches sur les enregistrements marqués
LocalJobListPage.SetTableView(GlobalRecordJob);
// Exécuter la page de la liste des tâches
LocalJobListPage.RunModal();
CalcEntries();
CurrPage.Update();
end;
}
}
}
}
// Détermine la relation entre un contact ou un client et définit les variables globales en conséquence
procedure CheckRelation(ParamCode: Code[20]; ParamEnumSIMCTIBusinessMappingType: Enum "SIM_CTI Business Mapping Type")
var
LocalRecordContact: Record Contact;
LocalRecordContactBusinessRelation: Record "Contact Business Relation";
begin
// Restreindre les relations commerciales à celles liées aux clients
LocalRecordContactBusinessRelation.SetRange("Link to Table", LocalRecordContactBusinessRelation."Link to Table"::Customer);
// Gérer la logique en fonction du type de mappage (Contact ou Client)
case ParamEnumSIMCTIBusinessMappingType of
ParamEnumSIMCTIBusinessMappingType::Contact:
begin
// Obtenir l'enregistrement du contact
LocalRecordContact.Get(ParamCode);
// Définir le code de contact global selon que le contact fait partie d'une entreprise
if LocalRecordContact."Company No." <> '' then
GlobalContactCode := LocalRecordContact."Company No."
else
GlobalContactCode := ParamCode;
// Trouver le client lié au contact
LocalRecordContactBusinessRelation.SetRange("Contact No.", GlobalContactCode);
if LocalRecordContactBusinessRelation.FindFirst() then
GlobalCustomerCode := LocalRecordContactBusinessRelation."No.";
end;
ParamEnumSIMCTIBusinessMappingType::Customer:
begin
// Si le type de mappage est client, définir le client et trouver le contact lié
GlobalCustomerCode := ParamCode;
LocalRecordContactBusinessRelation.SetRange("No.", ParamCode);
if LocalRecordContactBusinessRelation.FindFirst() then
GlobalContactCode := LocalRecordContactBusinessRelation."Contact No.";
end;
end;
// Après avoir défini les variables globales, calculer les entrées de tâches
CalcEntries();
end;
// Calcule le nombre d'entrées de tâches/projets pertinentes
procedure CalcEntries()
var
LocalRecordContact: Record Contact; // Variable locale pour parcourir les contacts
begin
GlobalProjectAmountInteger := 0; // Réinitialiser le compteur de projets
if GlobalContactCode <> '' then begin
// Filtrer les contacts en fonction du numéro d'entreprise stocké
LocalRecordContact.SetRange("Company No.", GlobalContactCode);
if LocalRecordContact.FindSet() then
repeat
// Appliquer le filtre client si défini
if GlobalCustomerCode <> '' then
GlobalRecordJob.SetRange("Sell-to Customer No.", GlobalCustomerCode);
// Filtrer les tâches par numéro de contact
GlobalRecordJob.SetRange("Sell-to Contact No.", LocalRecordContact."No.");
// Marquer les entrées de tâches correspondantes
if GlobalRecordJob.FindSet() then begin
GlobalRecordJob.Mark();
GlobalRecordJob.Reset(); // Réinitialiser les filtres pour la prochaine itération de la boucle
end;
until LocalRecordContact.Next() = 0;
end;
// Réinitialiser et réappliquer le filtre pour compter les tâches marquées
GlobalRecordJob.Reset();
GlobalRecordJob.SetRange("Sell-to Customer No.", GlobalCustomerCode);
GlobalRecordJob.MarkedOnly;
// Compter les entrées de tâches marquées
GlobalProjectAmountInteger += GlobalRecordJob.Count;
// Actualiser la page pour mettre à jour l'affichage du champ
CurrPage.Update();
end;
var
GlobalRecordJob: Record Job; // Contient les entrées de tâches
GlobalProjectAmountInteger: Integer; // Stocke le nombre de tâches trouvées
GlobalCustomerCode: Code[20]; // Stocke le code du client
GlobalContactCode: Code[20]; // Stocke le code du contact
}
|
Le code d'exemple ci-dessous montre comment la relation entre le Contact et le Client est identifiée, et comment les données correspondantes pour le contact et le client sont ensuite affichées.
Ajouter la Factbox à la Caller Card
Une fois que vous avez créé votre Factbox, elle doit être liée à la Phone Connect Caller Card souhaitée. Pour ce faire, une nouvelle Page Extension de la Caller Card correspondante doit être créée.
Dans l'exemple ci-dessous, la Caller Card "Call In Contact Sales" est étendue. Comme il s'agit d'une Caller Card de Contact, la valeur de l'enum est définie sur Contact en conséquence.
| AL |
|---|
| pageextension 00001 "SIM_CTIDocu CTI" extends "SIM_CTI Call In Cont. - Sales"
{
layout
{
addafter(SIM_CTISalesFB)
{
part(NewFactbox; "SIM_CTI Meine Neue Faktbox")
{
ApplicationArea = all;
}
}
}
trigger OnAfterGetCurrRecord()
var
LocalEnumSIMCTIBusinessMappingType: Enum "SIM_CTI Business Mapping Type";
begin
CurrPage.NewFactbox.Page.CheckRelation(Rec."No.", LocalEnumSIMCTIBusinessMappingType::Contact);
end;
}
|
Après avoir créé votre Factbox personnalisée et l'avoir liée à la Caller Card, la configuration est terminée. Votre Factbox est maintenant prête pour une utilisation fluide.