Accueil Blog (en) Comment créer un processus d’exportation Excel personnalisé

Comment créer un processus d’exportation Excel personnalisé

Joe Jacob | 8 janvier 2020

Introduction

Il existe de nombreuses façons d’extraire des données d’Acumatica. Vous pouvez créer une enquête ou un rapport générique par exemple.  La plupart des formulaires d’Acumatica contiennent une grille et ont la possibilité d’exporter des colonnes de données vers Excel en cliquant simplement sur l’icône disponible sur l’écran Acumatica.  Souvent, cependant, les utilisateurs peuvent avoir besoin d’une exportation personnalisée sur mesure vers Excel directement à partir d’un écran lui-même.  Dans cet article, je vais vous montrer comment créer un processus d’exportation Excel personnalisé simple et vous fournir un exemple de code pour aller de l’avant.

ExcelExportProcess

Considérez le modèle de conception suivant. Dans notre exemple, nous allons créer un bouton sur l’écran Demande de remboursement de dépenses pour exporter certaines informations de titre et remplir des colonnes de grille spécifiques dans Excel.

Comment créer un processus d’exportation Excel personnalisé

Résultat souhaité :

Comment créer un processus d’exportation Excel personnalisé

La première étape consiste à inclure PX. Exportez en tant que référence pour votre projet visual studio comme suit:

Comment créer un processus d’exportation Excel personnalisé

Vous devrez maintenant inclure les espaces de noms suivants :

public class ExpenseClaimEntry_Extension : PXGraphExtension<ExpenseClaimEntry>
    {
        #region Event Handlers

        #region Button 
        public PXAction<EPExpenseClaim> exportGridToExcel;
        
        [PXUIField(DisplayName = "Export to Excel", MapEnableRights = PXCacheRights.Select)]
        [PXButton(Tooltip = "Export to Excel")]

        protected virtual void ExportGridToExcel()
        {
EPExpenseClaimDetails details = Base.ExpenseClaimDetails.Current as EPExpenseClaimDetails;
            if (details == null) return;

            PXLongOperation.StartOperation(Base, delegate ()
            {
                var excel = new PX.Export.Excel.Core.Package();
                var sheet = excel.Workbook.Sheets[1];

                string fileNumber = GetUniqueFileNumber();
                int headingRow = 1;
                int titleRow = 4;
                int gridRow = 5;

                // Heading Information
                sheet.Add(headingRow, 1, "Reference Number:");
                sheet.Add(headingRow, 2, Base.ExpenseClaim.Current.RefNbr);

                sheet.Add(headingRow + 1, 1, "Description:");
                sheet.Add(headingRow + 1, 2, Base.ExpenseClaim.Current.DocDesc ?? string.Empty);

                // Create Excel column titles
                // adjust column width
                sheet.SetColumnWidth(1, 20);
                sheet.SetColumnWidth(2, 20);
                sheet.SetColumnWidth(3, 40);
                sheet.SetColumnWidth(4, 40);

                sheet.Add(titleRow, 1, "Expense Date");
                sheet.Add(titleRow, 2, "Expense Item");
                sheet.Add(titleRow, 3, "Description");
                sheet.Add(titleRow, 4, "Claim Amount");

                foreach (EPExpenseClaimDetails row in Base.ExpenseClaimDetails.Select())
                {
                    // get inventory CD for display
                    InventoryItem inventoryItem = PXSelect<InventoryItem,
                        Where<InventoryItem.inventoryID, 
                        Equal<Required<InventoryItem.inventoryID>>>>.Select(Base, row.InventoryID);

                    sheet.Add(gridRow, 1, Convert.ToString(row.ExpenseDate));
                    sheet.Add(gridRow, 2, Convert.ToString(inventoryItem?.InventoryCD ?? string.Empty));
                    sheet.Add(gridRow, 3, row.TranDesc);
                    sheet.Add(gridRow, 4, Convert.ToString(row.ClaimCuryTranAmtWithTaxes));

                    gridRow++;
                }

                using (MemoryStream stream = new MemoryStream())
                {
                    excel.Write(stream);
                    string path = String.Format("ExpenseClaimExport-{0}.xlsx", fileNumber);
                    var info = new PX.SM.FileInfo(path, null, stream.ToArray());
                    throw new PXRedirectToFileException(info, true);
                }
            });

        }
        #endregion

        public static string GetUniqueFileNumber()
        {
            string dTime = DateTime.Now.ToString("yyMMddHHmmssff");
            return $"{dTime}";
        }

        #endregion

 

Le code répertorié ci-dessus devrait fournir suffisamment de bases pour vous aider à concevoir vos propres exportations personnalisées. Cette méthode offrira beaucoup plus de liberté de mise en page et de contrôle des points de données spécifiques que vous et vos clients souhaitez voir - au lieu d’utiliser les scénarios d’exportation plus limités.

 

 

Auteur du blog

Joe est développeur senior chez Crestwood Associates. Il conçoit et construit des projets de logiciels liés à l’ERP depuis plus de 14 ans, à l’origine avec SSYH, Inc. qui est maintenant Crestwood Associates. L’expérience de Joe comprend plus de 30 ans d’expérience dans la programmation dans divers anguages. Il maîtrise le développement de VB.NET, C# et SQL Server ainsi que plusieurs technologies Web. Depuis que Joe a commencé sa carrière en tant que contrôleur d’entreprise, il fournit des informations précieuses lorsqu’il travaille avec des clients. Au cours de la dernière année, Joe a adopté de manière agressive la plate-forme et le cadre D’Acumatica. Il gère maintenant plusieurs projets allant de simples projets de personnalisation au développement de solutions intégrées plus spécifiques au client. Joe a également été un artiste clé dans la migration des personnalisations Dynamics SL vers Acumatica pour les clients Crestwood existants. C’est la première année de Joe en tant que MVP développeur Acumatica et il se réjouit de la croissance continue de la plate-forme Acumatica.

Recevez des mises à jour de blog dans votre boîte de réception.