○ enableAutoBinding을 사용해 controller가 아닌 view에서 데이터를 자동으로 바인딩 해보자.
- [ SmartTable.view.xml ]
<mvc:View
xmlns="sap.m"
xmlns:mvc="sap.ui.core.mvc"
controllerName="sap.ui.demo.smartControls.SmartTable"
xmlns:smartFilterBar="sap.ui.comp.smartfilterbar"
xmlns:smartTable="sap.ui.comp.smarttable">
<smartFilterBar:SmartFilterBar
id="smartFilterBar"
entitySet="Products">
<smartFilterBar:controlConfiguration>
<smartFilterBar:ControlConfiguration
key="Category" visibleInAdvancedArea="true"
preventInitialDataFetchInValueHelpDialog="false">
</smartFilterBar:ControlConfiguration>
</smartFilterBar:controlConfiguration>
</smartFilterBar:SmartFilterBar>
<smartTable:SmartTable
id="smartTable_ResponsiveTable"
smartFilterId="smartFilterBar"
tableType="ResponsiveTable"
editable="false"
entitySet="Products"
useVariantManagement="false"
useTablePersonalisation="false"
header="Products"
showRowCount="true"
useExportToExcel="false"
enableAutoBinding="true">
</smartTable:SmartTable>
</mvc:View>
1) 'smartFilterBar'에서 'ControlConfiguration' 컨트롤을 추가한다.
* [ metadata.xml ]에 있는 데이터 값을 화면에서 보기 위해 설정한 ''entityType'을 참조하도록 한다.
* 'ControlConfiguration' 요소를 사용해 필터가 표시돼 있는 표시줄에 'Category' 필드를 포함시킨다.
* 필터 기능을 하는 바를 숨길 수 있는 도구를 사용해 숨기거나 표시할 수 있는 영역을 구현할 수 있다.
2) 'SmartTable'의 설정 값을 환인해보자.
* smartFilterId : 'smartFilterBar'로 정해 SmartTable이 FilterBar와 이에 정의된 필터 값이 사용가능한 지 확인한다.
* tableType : 'ResponsiveTable'로 지정해 기본테이블을반응형으로 정의해 놓는다.
* useVariantManagement : 'false' 값으로 설정한다.
* useTablePersonalization : 'false' 값으로 설정한다.
* header : 'Products'로 테이블의 제목을 지정한다.
* showRowCount : 'true'로 지정해 제목 뒤에 제품 수가 표시되도록 한다.
* useExportToExcel : 'false'로 설정한다.
이는 Microsoft Excel로 내보내기를 제공하는 요소이다.
현재 파트에서는 mock server에서 기능을 구현하므로 해당 요소의 형식을 지원하지 않는다.
서버가 이를 지원하기 위해서는 sap:supported-formats="xlsx"가 포함된
메타데이터 문서를 반환해야 한다.
* enableAutoBinding : 'true' 값으로 설정한다.
이는 쿼리가 처음에 자동으로 실행되는지 여부를 정의하므로
'false'로 설정하면 사용자가 테이블에서 결과를 보기 위해 Go를 눌러야 하게 된다.
- [ SmartTable.controller.js ]
sap.ui.define([
"sap/ui/core/mvc/Controller"
], function(Controller) {
"use strict";
return Controller.extend("sap.ui.demo.smartControls.SmartTable");
});
1) view에서 'enableAutoBinding'을 'true'로 반환했기 때문에 controller에서 바인딩할 필요가 없다.
2) 이는 코드의 간편화에 기여한다고 볼 수 있다!
- [ metadata.xml ]
<?xml version="1.0" encoding="utf-8"?>
<edmx:Edmx Version="1.0"
xmlns:edmx="http://schemas.microsoft.com/ado/2007/06/edmx"
xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"
xmlns:sap="http://www.sap.com/Protocols/SAPData">
<edmx:DataServices m:DataServiceVersion="2.0">
<Schema Namespace="com.sap.wt05"
sap:schema-version="1" xmlns="http://schemas.microsoft.com/ado/2008/09/edm">
<EntityType Name="Product">
<Key>
<PropertyRef Name="ProductId" />
</Key>
<Property Name="ProductId" Type="Edm.String"
sap:filterable="false" />
<Property Name="Name" Type="Edm.String" MaxLength="30"
sap:label="Name" sap:filterable="false" />
<Property Name="Category" Type="Edm.String" sap:label="Category"
sap:filterable="true" />
<Property Name="Price" Type="Edm.String" sap:unit="CurrencyCode"
MaxLength="3" sap:label="Price" sap:filterable="false" />
<Property Name="CurrencyCode" Type="Edm.String" MaxLength="3"
sap:label="Currency" sap:semantics="currency-code" sap:filterable="true" />
</EntityType>
<EntityType Name="Currency">
<Key>
<PropertyRef Name="CURR" />
</Key>
<Property Name="CURR" Type="Edm.String" MaxLength="4"
sap:display-format="UpperCase" sap:text="DESCR" sap:label="Currency Code"
sap:filterable="false" />
<Property Name="DESCR" Type="Edm.String" MaxLength="25"
sap:label="Description" />
</EntityType>
<EntityType Name="Category">
<Key>
<PropertyRef Name="CAT" />
</Key>
<Property Name="CAT" Type="Edm.String" MaxLength="4"
sap:display-format="UpperCase" sap:text="DESCR" sap:label="Category"
sap:filterable="false" />
<Property Name="DESCR" Type="Edm.String" MaxLength="25"
sap:label="Description" />
</EntityType>
<EntityContainer m:IsDefaultEntityContainer="true"
sap:supported-formats="atom json">
<EntitySet Name="Products" EntityType="com.sap.wt05.Product" />
<EntitySet Name="Currency" EntityType="com.sap.wt05.Currency" />
<EntitySet Name="Category" EntityType="com.sap.wt05.Category" />
</EntityContainer>
<Annotations Target="com.sap.wt05.Product/CurrencyCode"
xmlns="http://docs.oasis-open.org/odata/ns/edm">
<Annotation Term="com.sap.vocabularies.Common.v1.ValueList">
<Record>
<PropertyValue Property="Label" String="Currency" />
<PropertyValue Property="CollectionPath" String="Currency" />
<PropertyValue Property="SearchSupported" Bool="true" />
<PropertyValue Property="Parameters">
<Collection>
<Record Type="com.sap.vocabularies.Common.v1.ValueListParameterOut">
<PropertyValue Property="LocalDataProperty"
PropertyPath="CurrencyCode" />
<PropertyValue Property="ValueListProperty"
String="CURR" />
</Record>
<Record
Type="com.sap.vocabularies.Common.v1.ValueListParameterDisplayOnly">
<PropertyValue Property="ValueListProperty"
String="DESCR" />
</Record>
</Collection>
</PropertyValue>
</Record>
</Annotation>
</Annotations>
<Annotations Target="com.sap.wt05.Product/Category"
xmlns="http://docs.oasis-open.org/odata/ns/edm">
<Annotation Term="com.sap.vocabularies.Common.v1.ValueList">
<Record>
<PropertyValue Property="Label" String="Category" />
<PropertyValue Property="CollectionPath" String="Category" />
<PropertyValue Property="SearchSupported" Bool="true" />
<PropertyValue Property="Parameters">
<Collection>
<Record Type="com.sap.vocabularies.Common.v1.ValueListParameterOut">
<PropertyValue Property="LocalDataProperty"
PropertyPath="Category" />
<PropertyValue Property="ValueListProperty"
String="CAT" />
</Record>
<Record
Type="com.sap.vocabularies.Common.v1.ValueListParameterDisplayOnly">
<PropertyValue Property="ValueListProperty"
String="DESCR" />
</Record>
</Collection>
</PropertyValue>
</Record>
</Annotation>
</Annotations>
<Annotations Target="com.sap.wt05.Product"
xmlns="http://docs.oasis-open.org/odata/ns/edm">
<Annotation Term="com.sap.vocabularies.UI.v1.LineItem">
<Collection>
<Record Type="com.sap.vocabularies.UI.v1.DataField">
<PropertyValue Property="Value" Path="ProductId" />
</Record>
<Record Type="com.sap.vocabularies.UI.v1.DataField">
<PropertyValue Property="Value" Path="Price" />
</Record>
<Record Type="com.sap.vocabularies.UI.v1.DataField">
<PropertyValue Property="Value" Path="Name" />
</Record>
<Record Type="com.sap.vocabularies.UI.v1.DataField">
<PropertyValue Property="Value" Path="Category" />
</Record>
</Collection>
</Annotation>
</Annotations>
</Schema>
</edmx:DataServices>
</edmx:Edmx>
1) 'Annotation' 중에 'LineItem'은 테이블에 생성되는열을 정의한다.
* 이 어노테이션에 정의된레코드만 테이블 열로 생성된다.
2) 'Annotation' 'ValueList'는 연결된 필드에 대해 생성할 값에 대한 도움말을 실행시킨다.
3) 'EntityType' 'Name'을 'Currency'로 설정한다.
* 'description' 필드만 검색 필드로 표시되도록 한다.
* 'CurrencyCode' 필드는 표시되지 않게 필터링되도록 'description'만 정의한다.
- [ Category.json ]
[{
"CAT": "PRO",
"DESCR": "Projector"
},
{
"CAT": "GCD",
"DESCR": "Graphics Card"
},
{
"CAT": "ACC",
"DESCR": "Accessory"
},
{
"CAT": "PRI",
"DESCR": "Printer"
},
{
"CAT": "MON",
"DESCR": "Monitor"
},
{
"CAT": "LAP",
"DESCR": "Laptop"
},
{
"CAT": "KBD",
"DESCR": "Keyboard"
}]
- [ Currency.json ]
[{
"CURR": "EUR",
"DESCR": "European Euro"
},
{
"CURR": "USD",
"DESCR": "United States Dollar"
},
{
"CURR": "GBP",
"DESCR": "British Pound"
},
{
"CURR": "DKK",
"DESCR": "Danish Krone"
},
{
"CURR": "INR",
"DESCR": "Indian Rupee"
},
{
"CURR": "NOK",
"DESCR": "Norwegian Krone"
},
{
"CURR": "SEK",
"DESCR": "Swedish Krona"
},
{
"CURR": "CHF",
"DESCR": "Swiss Franc"
}]
- [ Products.json ]
[
{
"ProductId": "1239102",
"Name": "Power Projector 4713",
"Category": "Projector",
"SupplierName": "Titanium",
"Description": "A very powerful projector with special features for Internet usability, USB",
"WeightMeasure": 1467,
"WeightUnit": "g",
"Price": 856.49,
"CurrencyCode": "INR",
"Status": "Available",
"Quantity": 3,
"UoM": "PC",
"Width": 51,
"Depth": 42,
"Height": 18,
"DimUnit": "cm"
},
.
.
.
]
Next Stage : [ SAPUI5 ] Table Personalization
'SAP > UI5' 카테고리의 다른 글
[ SAPUI5 ] View Management (4) | 2023.03.10 |
---|---|
[ SAPUI5 ] Table Personalization (16) | 2023.03.09 |
[ SAPUI5 ] Smart Form (10) | 2023.03.09 |
[ SAPUI5 ] Smart Field with Smart Link (4) | 2023.03.09 |