SAPUI5 Advanced

OData V2 SmartControls Übungen

Übung 1 - Generieren der UI5 Freestyle Applikation

Übung 2 - Diverse View & Manifest Anpassungen

Übung 3 - SmartForms mit Inhalten befüllen

Brandeis Consulting & Cadao

OData SmartControl Übung 1: Aufgabe 1.1 - Generieren der UI5 Freestyle Applikation

In dieser Übung wird erneut eine Freestyle App mit dem Template Generator angelegt und wir werden verschiedene Anpassungen vornehmen.

  • Starten Template Wizard mit STRG + SHIFT + P
  • Generator SAP Fiori application auswählen
  • Template Basic auswählen
  • Data Source, System (K1X) entsprechend auswählen
  • Service ZI_UI5_CUSTOMER_UI_00
  • Module: demosmartv2##
  • Application namespace: de.ui5ws.demos
  • ACHTUNG auf den Project Folder: /home/user/projects (Vorschlag ändern!!!!!)
  • Keine Deployment Config, kein FLP, kein Advanced Options
  • Starten -> Warten -> Testen
    • Popup "Add project ot workspace" auswählen
Brandeis Consulting & Cadao

OData SmartControl Übung 2 - Aufgabe 2.1 - Erste Viewanpassungen

Jetzt machen wir erste View Anpassungen und machen aus der Seite eine dynamisch Page.

Um die dynamic Page verwenden zu können, benötigen wir sap.f:

xmlns:f="sap.f"

Und dann können wir im View die dynamic Page aufnehmen:

<f:DynamicPage id="dynamicPageId">
    <f:header>
        <f:DynamicPageHeader pinnable="true">
            <Text text="Test Header"/>
        </f:DynamicPageHeader>
    </f:header>
    <f:content >
        <Text text="Test Content"/>
    </f:content>
</f:DynamicPage>

Fragestellungen

  • Ist nun eine Dynamic Page (Header und Content getrennt) sichtbar?
Brandeis Consulting & Cadao

OData SmartControl Übung 2 - Aufgabe 2.2 - Filterbar hinzufügen

Im oberen Bereich soll nun eine Filterbar hinzugefügt werden. Dafür ersetzen wir den header Bereich. Ganz oben müssen wir aber noch die Filterbar bekannt geben.

xmlns:smartFilterBar="sap.ui.comp.smartfilterbar"
<f:header>
    <f:DynamicPageHeader pinnable="true">
        <smartFilterBar:SmartFilterBar
            id="smartFilterBarID"
            entitySet="Customer"
            enableBasicSearch="true">
        </smartFilterBar:SmartFilterBar>
    </f:DynamicPageHeader>
</f:header>

Fragestellungen

  • Ist die Filterbar ersichtlich?
  • Können Felder in der Filterbar eingeblendet werden?
Brandeis Consulting & Cadao

OData SmartControl Übung 2 - Aufgabe 2.3 - Tabelle einblenden

In diesem Schritt wollen wir eine Smart Table für die Anzeige der Daten einblenden. Dafür müssen wir im content Bereich durch nachfolgendes Coding ersetzen:

<smartTable:SmartTable
    id="smartTableID"
    smartFilterId="smartFilterBarID"
    tableType="Table"
    editable="false"
    entitySet="Customer"
    fitContainer="true"
    useVariantManagement="true"
    useTablePersonalisation="true"
    header="Customer"
    showRowCount="true"
    enableAutoBinding="true">
</smartTable:SmartTable>

Nicht vergessen, ob muss auch noch folgendes angegeben werden:

xmlns:smartTable="sap.ui.comp.smarttable"

Fragestellungen

  • Ist nun auch die Tabelle ersichtlich?
  • Funktionieren Filter und Tabellenfelder?
Brandeis Consulting & Cadao

OData SmartControl Übung 2 - Aufgabe 2.4 - Annotations anpassen

Obwohl im Backend Annotations eingestellt sind, werden diese ja bisher nicht berücksichtigt. Das wollen wir jetzt ändern.

Dazu Ändern bzw. Erstetzen wir die dataSource Einstellungen. Dadurch werden die Annotations aus dem Backend gezogen.


    "dataSources": {
        "mainService": {
            "uri": "/sap/opu/odata/sap/ZI_UI5_CUSTOMER_UI_00/",
            "type": "OData",
            "settings": {
            "annotations": [
                "ZI_UI5_CUSTOMER_UI_00_VAN",
                "annotation"
            ],
            "localUri": "localService/metadata.xml",
            "odataVersion": "2.0"
            }
        },
        "ZI_UI5_CUSTOMER_UI_00_VAN": {
            "uri": "/sap/opu/odata/IWFND/CATALOGSERVICE;v=2/Annotations(TechnicalName='ZI_UI5_CUSTOMER_UI_00_VAN',Version='0001')/$value/",
            "type": "ODataAnnotation",
            "settings": {
            "localUri": "localService/ZI_UI5_CUSTOMER_UI_00_VAN.xml"
            }
        },
        "annotation": {
            "type": "ODataAnnotation",
            "uri": "annotations/annotation.xml",
            "settings": {
            "localUri": "annotations/annotation.xml"
            }
        }
    }
     



     
Brandeis Consulting & Cadao

OData SmartControl Übung 2 - Aufgabe 2.4 - Annotations anpassen

Fragestellungen

  • Sind nun die Felder bereits initial eingeblendet? Suche und Liste?
  • Funktionieren alle Filter und die generische Suche (auf Nachname und Vorname)?
Brandeis Consulting & Cadao

OData SmartControl Übung 2 - Aufgabe 2.5 - Splitter Control ergänzen

Jetzt werden wir ein Splitter Control ergänzen, damit wir Filter, Liste und Detailpage auf einer Seite darstellen können

Wir ersetzen die derzeitige smartTable im View durch nachfolgendes Coding:

    <l:Splitter orientation="Vertical" height="100%">
        <l:Splitter>
            <smartTable:SmartTable
                id="smartTableID"
                smartFilterId="smartFilterBarID"
                tableType="Table"
                editable="false"
                entitySet="Customer"
                fitContainer="true"
                useVariantManagement="true"
                useTablePersonalisation="true"
                header="Customer"
                showRowCount="true"
                enableAutoBinding="true">
            </smartTable:SmartTable>
        </l:Splitter>
        <l:Splitter orientation="Horizontal">
        </l:Splitter>   
    </l:Splitter>

Wichtig, oben: xmlns:l="sap.ui.layout"

Brandeis Consulting & Cadao

OData SmartControl Übung 2 - Aufgabe 2.5 - Splitter Control ergänzen

Fragestellungen

  • Ist nun ein "Splitter" ersichtlich? Zuerst Filter, dann Liste, dann ein leerer Bereich
  • Funktionieren alle Interaktionen wie bisher?
Brandeis Consulting & Cadao

OData SmartForms Übung 2 - Aufgabe 2.6 - SmartForms ergänzen

Jetzt wollen wir noch eine SmartForm mit ein paar ausgewählten Feldern ergänzen. Dazu ersetzen wir den zweiten Splitter mit folgendem Coding:

<l:Splitter id="splitterId" orientation="Horizontal">
   <smartForm:SmartForm id="smartForm" class="editableForm" editTogglable="true"  editable="true">
       <smartForm:Group id="formGroupCustomer" title="Customer">
           <smartForm:GroupElement>
           <smartField:SmartField textLabel="Customer Id" value="{CustomerId}" />
           </smartForm:GroupElement>
           <smartForm:GroupElement>
           <smartField:SmartField textLabel="Last Name" value="{LastName}" />
           </smartForm:GroupElement>
           <smartForm:GroupElement>
           <smartField:SmartField textLabel="First Name" value="{FirstName}" />
           </smartForm:GroupElement>
           <smartForm:GroupElement>
           <smartField:SmartField textLabel="Country" value="{CountryCode}" />
           </smartForm:GroupElement>
       </smartForm:Group>
   </smartForm:SmartForm>
</l:Splitter>

Fragestellungen

  • Sind nun im unteren Bereich 3 Felder ersichtlich?
  • Was passiert wenn man eine Zeile in der List auswählt?
Brandeis Consulting & Cadao

OData SmartForms Übung 3 - Aufgabe 3.1 - SmartForms mit Inhalten füllen

Damit die Felder im SmartForms auch gefüllt werden, müssen wir noch ein paar kleine Erweiterungen im View Controller vornehmen.

  • SmartTable wird angepasst, dass nur mehr eine Zeile gewählt werden kann
  • Wenn eine Zeile ausgewählt wird, "binden" wir den Eintrag an das SmartForm
      onInit: function () {
          this._smarttable = this.getView().byId("smartTableID");
          this._smartform = this.getView().byId("smartForm");

          this._smarttable.getTable().setSelectionMode( "Single" );
          this._smarttable.getTable().attachRowSelectionChange( this.onSelectionChanged, this );
      },

      onSelectionChanged: function( oEvent ) {	 
          this._smartform.bindElement( oEvent.mParameters.rowContext.getPath() );
      }

Fragestellungen

  • Werden die Felder je nach Zeilenselektion aktualisiert?
Brandeis Consulting & Cadao