Introduction
Il existe de nombreuses façons d'extraire des données d'Acumatica. Vous pouvez par exemple créer une enquête ou un rapport générique. La plupart des formulaires d'Acumatica contiennent une grille et offrent la possibilité d'exporter des colonnes de données vers Excel en cliquant simplement sur l'icône disponible sur l'écran d'Acumatica. Souvent, cependant, les utilisateurs peuvent avoir besoin d'une exportation personnalisée vers Excel directement à partir d'un écran. Dans ce billet, je vous montrerai comment construire un processus d'exportation Excel simple et personnalisé et vous fournirai un exemple de code pour commencer.
Considérons le modèle de conception suivant. Dans notre exemple, nous allons créer un bouton sur l'écran des notes de frais afin d'exporter certaines informations de l'en-tête et de remplir des colonnes spécifiques de la grille vers Excel.
Résultat souhaité :
La première étape consiste à inclure PX.Export comme référence dans votre projet Visual Studio, comme suit :
Vous devez maintenant inclure les espaces nominatifs 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 mentionné ci-dessus devrait fournir suffisamment de bases pour vous aider à concevoir vos propres exportations personnalisées. Cette méthode vous permettra de disposer d'une plus grande liberté dans la mise en page et de contrôler les 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.