acumatica
コードを使用したレポートへのデータ入力
サーチ…
この記事では、メモリレコードを使用してレポートを作成する方法を示す例について説明します。
この例は、データビューデリゲートによって返されたデータをレポートに設定する方法を示しています。演習中に、2つの日付間の受注の一覧を表示する照会画面が開かれます。データビューデリゲートは、Sales Order情報の入力に使用されます。
前提条件:
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; } }
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 }
PX.Documentation名前空間で、以下のコードスニペットを使用してSOOrderInq BLCを作成し、結果データビューデリゲートを宣言します。デリゲートは、後でデータをレポートに挿入します。
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"); } }
- FormDetailテンプレートを選択してSO401090.aspxページを作成し、PXDataSourceの次のプロパティを設定します。
PrimaryView:フィルタ
TypeName:PX.Documentation.SOOrderInq
その後、Filterヘッダーフォームに入力コントロールを追加します。
<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>
詳細グリッドの次の列を作成します。
<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>
- 作成した画面をサイトマップに追加する
データビューデリゲートによって返されたデータをレポートに設定するには:
- SO610501.rpxレポートファイルをAcumaticaのWebサイトのReportsCustomizedフォルダに貼り付けて、サイトマップの隠しフォルダにSales Ordersレポートを追加します
SOOrderInq BLCのReport as Reportアクションを宣言して、Sales Ordersレポートを生成および表示します。 PXReportRequiredExceptionは、 Result data view delegateによって返されたデータを使用してレポートにデータを挿入するアクション内に用意されているPXReportResultsetを受け入れます。
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"); } }
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow