Purpose Using a CDS view Core Data Services (CDS) were introduced in ABAP with Rel. 7.40 SP08. They extend the concept of a database view by allowing more logic and computations, code pushdown to the HANA database, access control and automatic generation of OData services. S/4HANA Fiori apps often use CDS views for data retrieval. In GuiXT it can make sense to use CDS views due to these additional features and due to the increasing number of standard CDS views in S/4HANA. |
Solution In addition to the 'where' condition CDS views allow us to pass parameters. This is supported in guixt/dbselect as of version 2018-11-15.
Example We read the data via the CDS view "V_SD_CI". For the maintenance of CDS views you need the ABAP Development Tools in Eclipse but the display of the view definition, with parameters and field names, is possible in SE11:
The CDS view defines a mandatory parameter
P_LANGUAGE which is used to read texts such as the payment description from table
TVZBT. We need to set this parameter when we call up the CDS view in our InputScript (see below). In our GuiXT script we define two date input fields and the invoice table: GuiXT Script
InputField
(1,1)
"Invoice date between"
(1,24)
name="date1"
-date Pushbutton (1,59) "Display invoices" process="read_invoices.txt"if not V[invoicecount]Set V[invoicecount] 0 endif Table (3,1) (32,151) name="invoices" rows="&V[invoicecount]" _title="&V[invoicecount] invoices." fixedColumns=10 Column "No" size=5 name="No" -readOnlyColumn "Date" size=12 name="Invoice_Date" -readOnly Column "Type" size=4 name="Invoice_Type" -readOnly Column "DocNumber" size=12 name="Document_ID" -readOnly Column "Customer" size=10 name="Customer_ID" -readOnly Column "Name" size=30 name="Customer_Name" -readOnly Column "Terms" size=6 name="Payment_Terms" -readOnly Column "Payment Terms" size=20 name="Payment_Terms_Text" -readOnly Column "Status" size=20 name="Lifecycle_Status_Text" -readOnly Column "Currency" size=8 name="Currency" -readOnly Column "Net value" size=14 name="Net_Value" -alignRight -readOnly
The InputScript "read_invoices.txt" calls up the CDS view and then fills the table cells with the invoice data read. e
As you see the CDS parameter P_LANGUAGE is passed in parentheses just
behind the CDS view name (no space character between is allowed). If
there are two or more parameters, separate them by a comma. InputScript "read_invoices.txt" // clear result table
in.table="V_SD_CI( P_LANGUAGE = 'E' )" _ in.fields="Invoice_Date,Invoice_Type,Document_ID,Customer_Id,Customer_Name, Payment_Terms,Payment_Terms_Text,Lifecycle_Status_Text,Net_Value,Currency" _ in.condition="Invoice_Date between @DATUM.1 and @DATUM.2 " _ in.domname1="DATUM.1" _ in.domvalue1="&V[date1]" _ in.domname2="DATUM.2" _ in.domvalue2="&V[date2]" _ in.orderBy="Invoice_Date,Document_ID" _ table.values="r" // put result into table cell variables Set V[k] 1 Set V[n] 1 label nextrowCopyText fromText="r" toString="invoices.cell.Invoice_Date.&V[n]" line="&V[k]"if Q[ok] // row number for table display Set V[invoices.cell.No.&V[n]] "&V[n]" // cell values from CDS view Set V[k] &V[k] + 1 CopyText fromText="r" toString="invoices.cell.Invoice_Type.&V[n]" line="&V[k]" Set V[k] &V[k] + 1 CopyText fromText="r" toString="invoices.cell.Document_ID.&V[n]" line="&V[k]" Set V[k] &V[k] + 1 CopyText fromText="r" toString="invoices.cell.Customer_ID.&V[n]" line="&V[k]" Set V[k] &V[k] + 1 CopyText fromText="r" toString="invoices.cell.Customer_Name.&V[n]" line="&V[k]" Set V[k] &V[k] + 1 CopyText fromText="r" toString="invoices.cell.Payment_Terms.&V[n]" line="&V[k]" Set V[k] &V[k] + 1 CopyText fromText="r" toString="invoices.cell.Payment_Terms_Text.&V[n]" line="&V[k]" Set V[k] &V[k] + 1 CopyText fromText="r" toString="invoices.cell.Lifecycle_Status_Text.&V[n]" line="&V[k]" Set V[k] &V[k] + 1 CopyText fromText="r" toString="invoices.cell.Net_Value.&V[n]" line="&V[k]" Set V[k] &V[k] + 1 CopyText fromText="r" toString="invoices.cell.Currency.&V[n]" line="&V[k]" Set
V[k]
&V[k] + 1 goto nextrow endif // invoice row count Return |
Components |