acumatica
Popolazione di report con dati tramite codice
Ricerca…
Questo articolo illustra un esempio di come creare un report utilizzando i record di memoria:
Questo esempio mostra come popolare il report con i dati restituiti da un delegato di visualizzazione dati. Durante l'esercizio, svilupperemo una schermata di richiesta che mostra l'elenco degli ordini di vendita tra due date. Il delegato della vista dati verrà utilizzato per popolare le informazioni dell'ordine di vendita.
Prerequisiti:
Iniziamo con la dichiarazione del DAC SOOrderFilter:
[Serializable] public class SOOrderFilter : IBqlTable { public abstract class dateFrom : IBqlField { } [PXDate()] [PXUIField(DisplayName = "Date From")] public DateTime? DateFrom { get; set; } public abstract class dateTo : IBqlField { } [PXDate()] [PXUIField(DisplayName = "Date To")] public DateTime? DateTo { get; set; } }
Continuare con la dichiarazione del DAC SOOrderData:
[Serializable] public class SOOrderData : IBqlTable { #region OrderType public abstract class orderType : PX.Data.IBqlField { } [PXString(2, IsKey = true, IsFixed = true)] [PXUIField(DisplayName = "Type")] public virtual string OrderType { get; set; } #endregion #region OrderNbr public abstract class orderNbr : PX.Data.IBqlField { } [PXString(15, IsKey = true, IsUnicode = true, InputMask = ">CCCCCCCCCCCCCCC")] [PXUIField(DisplayName = "Order Nbr.")] public virtual string OrderNbr { get; set; } #endregion #region OrderDate public abstract class orderDate : PX.Data.IBqlField { } [PXDate] [PXUIField(DisplayName = "Date")] public virtual DateTime? OrderDate { get; set; } #endregion #region Status public abstract class status : PX.Data.IBqlField { } [PXString(1, IsFixed = true)] [PXUIField(DisplayName = "Status")] [SOOrderStatus.List()] public virtual string Status { get; set; } #endregion #region OrderDesc public abstract class orderDesc : PX.Data.IBqlField { } [PXString(60, IsUnicode = true)] [PXUIField(DisplayName = "Description", Visibility = PXUIVisibility.SelectorVisible)] public virtual string OrderDesc { get; set; } #endregion #region OrderTotal public abstract class orderTotal : PX.Data.IBqlField { } [PXDecimal(4)] [PXDefault(TypeCode.Decimal, "0.0")] public virtual decimal? OrderTotal { get; set; } #endregion #region DueDate public abstract class dueDate : PX.Data.IBqlField { } [PXDate] [PXUIField(DisplayName = "Due Date")] public virtual DateTime? DueDate { get; set; } #endregion }
Nel namespace PX.Documentation puoi sviluppare il tuo BLC SOOrderInq utilizzando lo snippet di codice seguente per dichiarare il delegato della visualizzazione dei dati dei risultati, che verrà successivamente utilizzato per popolare il report con i dati:
public class SOOrderInq : PXGraph<SOOrderInq> { public PXCancel<SOOrderFilter> Cancel; public PXFilter<SOOrderFilter> Filter; [PXFilterable] public PXSelectOrderBy<SOOrderData, OrderBy<Desc<SOOrderData.orderNbr>>> Result; protected virtual IEnumerable result() { BqlCommand cmd = PXSelect<SOOrder, Where<SOOrder.orderDate, Between<Current<SOOrderFilter.dateFrom>, Current<SOOrderFilter.dateTo>>>>.GetCommand(); PXView inView = new PXView(this, true, cmd); int startRow = PXView.StartRow; int totalRows = 0; foreach (SOOrder order in inView.Select(PXView.Currents, PXView.Parameters, PXView.Searches, PXView.SortColumns, PXView.Descendings, PXView.Filters, ref startRow, PXView.MaximumRows, ref totalRows)) { yield return new SOOrderData { OrderType = order.OrderType, OrderNbr = order.OrderNbr, OrderDate = order.OrderDate, Status = order.Status, OrderDesc = order.OrderDesc, OrderTotal = order.OrderTotal, DueDate = order.DueDate, }; } PXView.StartRow = 0; } public SOOrderInq() { Result.Cache.AllowInsert = false; Result.Cache.AllowUpdate = false; Result.Cache.AllowDelete = false; } public PXAction<SOOrderFilter> Report; [PXButton] [PXUIField(DisplayName = "View As Report", MapEnableRights = PXCacheRights.Select, MapViewRights = PXCacheRights.Select)] protected virtual void report() { PXReportResultset reportData = new PXReportResultset(typeof(SOOrderData)); foreach (SOOrderData row in Result.Select()) { reportData.Add(row); } throw new PXReportRequiredException(reportData, "SO610501", PXBaseRedirectException.WindowMode.NewWindow, "Report"); } }
- Creare la pagina SO401090.aspx selezionando il modello FormDetail e impostare le seguenti proprietà per PXDataSource:
PrimaryView: filtro
TypeName: PX.Documentation.SOOrderInq
Successivamente aggiungi il controllo di input sul modulo di intestazione del filtro:
<px:PXFormView ID="form" runat="server" DataSourceID="ds" Style="z-index: 100" Width="100%" DataMember="Filter"> <Template> <px:PXLayoutRule runat="server" StartRow="True" Merge="True" LabelsWidth="XS" ControlSize="S" /> <px:PXDateTimeEdit ID="edDateFrom" runat="server" CommitChanges="True" DataField="DateFrom" /> <px:PXDateTimeEdit ID="edDateTo" runat="server" CommitChanges="True" DataField="DateTo" /> <px:PXLayoutRule runat="server" /> </Template> </px:PXFormView>
E crea le seguenti colonne per la griglia Dettagli:
<px:PXGrid ID="grid" runat="server" DataSourceID="ds" Style="z-index: 100" Width="100%" Height="150px" SkinID="Inquire" AllowPaging="True" AdjustPageSize="Auto"> <Levels> <px:PXGridLevel DataMember="Result"> <Columns> <px:PXGridColumn DataField="OrderType" /> <px:PXGridColumn DataField="OrderNbr" Width="90px" /> <px:PXGridColumn DataField="OrderDate" Width="90px" /> <px:PXGridColumn DataField="Status" /> <px:PXGridColumn DataField="OrderDesc" Width="200px" /> <px:PXGridColumn DataField="DueDate" Width="90px" /> </Columns> </px:PXGridLevel> </Levels> <AutoSize Container="Window" Enabled="True" MinHeight="150" /> </px:PXGrid>
- Aggiungi la schermata creata alla mappa del sito
Per popolare il report con i dati restituiti da un delegato di visualizzazione dati:
- Incollare il file di report SO610501.rpx nella cartella ReportsCustomized del sito Web di Acumatica, quindi aggiungere il report Ordini di vendita nella cartella Hidden Map Map
Dichiarare l' azione Visualizza come report in SOOrderInq BLC per generare e visualizzare il report Ordini di vendita. PXReportRequiredException accetta PXReportResultset preparato all'interno dell'azione per popolare il report con i dati restituiti dal delegato della visualizzazione dati del risultato :
public class SOOrderInq : PXGraph<SOOrderInq> { ... public PXAction<SOOrderFilter> Report; [PXButton] [PXUIField(DisplayName = "View as Report", MapEnableRights = PXCacheRights.Select, MapViewRights = PXCacheRights.Select)] protected virtual void report() { PXReportResultset reportData = new PXReportResultset(typeof(SOOrderData)); foreach (SOOrderData row in Result.Select()) { reportData.Add(row); } throw new PXReportRequiredException(reportData, "SO610501", PXBaseRedirectException.WindowMode.NewWindow, "Report"); } }