Zoeken…


In dit artikel worden voorbeelden gegeven van het maken van rapporten met geheugenrecords:

Dit voorbeeld laat zien hoe een rapport moet worden gevuld met gegevens die zijn geretourneerd door een gegevensweergave-gemachtigde. Tijdens de oefening ontwikkelen we een onderzoeksscherm met een lijst met verkooporders tussen twee datums. Afgevaardigde gegevensweergave wordt gebruikt om verkooporderinformatie te vullen.

Vereisten:

  1. We beginnen met de verklaring van de SOOrderFilter DAC:

    [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; }
    }
    
  2. Ga verder met de verklaring van de SOOrderData DAC:

    [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
    }
    
  3. Maak in PX.Documentation naamruimte uw SOOrderInq BLC met behulp van het onderstaande codefragment om gedelegeerde resultatengegevensweergave aan te geven, die later zal worden gebruikt om het rapport met gegevens te vullen:

    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");
        }
    }
    
  1. Maak de SO401090.aspx-pagina door de FormDetail-sjabloon te selecteren en stel de volgende eigenschappen in voor PXDataSource:
  • Primaire weergave: filter

  • TypeName: PX.Documentation.SOOrderInq

    Voeg daarna invoerbesturingselement toe op het formulier Filterkop:

     <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>
    

    En maak de volgende kolommen voor het detailraster:

     <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>
    
  1. Voeg het gemaakte scherm toe aan de sitemap

Een rapport vullen met gegevens die zijn geretourneerd door een gegevensweergave-gemachtigde:

  1. Plak het SO610501.rpx- rapportbestand in de map ReportsCustomized van uw Acumatica-website en voeg vervolgens het rapport Verkooporders toe aan de map Sitemap Verborgen

voer hier de afbeeldingsbeschrijving in

  1. Verklaren Weergave als rapportactie in de SOOrderInq BLC om verkoopordersrapport te genereren en te tonen. De PXReportRequiredException accepteert PXReportResultset die is voorbereid in de actie om het rapport te vullen met gegevens die zijn geretourneerd door Resultaat gegevensweergave-gemachtigde:

    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");
        }
    }
    

    voer hier de afbeeldingsbeschrijving in



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow