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.
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.
Résultat souhaité :
La première étape consiste à inclure PX. Exportez en tant que référence pour votre projet visual studio comme suit:
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.