<!DOCTYPE HTML>
<html>

<head>
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta http-equiv='Content-Type' content='text/html;charset=UTF-8' />

  <script src="https://openui5.hana.ondemand.com/resources/sap-ui-core.js" id="sap-ui-bootstrap" data-sap-ui-libs="sap.m,sap.ui.commons" data-sap-ui-resourceroots='{"view": "./"}' data-sap-ui-theme="sap_bluecrystal" data-sap-ui-xx-bindingSyntax="complex">
  </script>
  <!-- only load the mobile lib "sap.m" and the "sap_bluecrystal" theme -->

  <!-- by Denise Nepraunig @denisenepraunig -->

  <!-- example for a SAPUI5 MVC XML view with JSON data from a file
       and data binding based on the demokit example from sapui5:
       https://sapui5.netweaver.ondemand.com/sdk/explored.html#/entity/sap.m.Table/samples
       -->

  <script>
    // Best practice would be to set this stuff up in an Component.js
     // but let's not over-complicate stuff for demonstration purposes

     // http://scn.sap.com/community/developer-center/front-end/blog/2014/12/10/sap-ui5-with-local-json-model

    /*
    var oModel = new sap.ui.model.json.JSONModel();
     // Load JSON in model
    oModel.loadData("products.json");
    sap.ui.getCore().setModel(oModel);
    */
    var oImage = new sap.m.Image({ src : "http://25.media.tumblr.com/tumblr_llahls2IeS1qjmniro1_250.gif",
      size: "250px"
    });
     //create test data
    var dataObject = {
      data: [{
        index: 0,
        level: "Warning",
        description: "HAL: I'm sorry, Dave. I'm afraid I can't do that.",
        url: "http://27.media.tumblr.com/tumblr_lobqsnXKco1qjmniro1_400.gif"
      }, {
        index: 1,
        level: "Warning",
        description: "Windows Boot Manager has encountered a problem.",
        url: "http://27.media.tumblr.com/tumblr_lll2s3W9LN1qjmniro1_400.gif"
      }, {
        index: 2,
        level: "Error",
        description: "Failwhale: Twitter is over capacity",
        url: "http://25.media.tumblr.com/tumblr_llahls2IeS1qjmniro1_250.gif"
      }, {
        index: 3,
        level: "Success",
        description: "Jun 25 12:20:47 pc1h kernel: lp0 on fire",
        url: "http://27.media.tumblr.com/tumblr_lkxhavuhiV1qjmniro1_250.gif"
      }, {
        index: 4,
        level: "Error",
        description: "Software failure. Press left mouse button to continue. Guru Meditation #00000004,#0000AACB.",
        url: "http://27.media.tumblr.com/tumblr_lmkslx2czx1qjmniro1_400.gif"
      }, {
        index: 5,
        level: "Error",
        description: "[root@localhost root]# Kernel Panic",
        url: "http://27.media.tumblr.com/tumblr_lmxkoiR6ow1qjmniro1_400.gif"
      }, {
        index: 6,
        level: "Error",
        description: "That does not compute.",
        url: "http://28.media.tumblr.com/tumblr_lmf4f3MnY21qjmniro1_r1_250.gif"
      }, {
        index: 7,
        level: "Warning",
        description: "404 File not found. Stop messing with the URL.",
        url: "http://25.media.tumblr.com/tumblr_llj16u1XOf1qjmniro1_400.gif"
      }, {
        index: 8,
        level: "Success",
        description: "Blue Screen of Death.",
        url: "http://25.media.tumblr.com/tumblr_lkxgupC1mf1qjmniro1_400.gif"
      }]
    };

     //create JSON model
    var oModel = new sap.ui.model.json.JSONModel();
    oModel.setData(dataObject);
    sap.ui.getCore().setModel(oModel);

     //create the template control that will be repeated and will display the data
    var oRowTemplate = new sap.ui.commons.Message("rowTemplate", {
      text: "{description}",
      type: "{level}"
    });
    
    var oRowTemplate2 = new sap.m.Image("rowTemplate2", {
      src: "{url}",
      width: "250px"
    });

    var oTitle = new sap.ui.core.Title();
    oTitle.setText = "Hello World!";

     //create the RowRepeater control
    var oRowRepeater = new sap.ui.commons.RowRepeater("rowRepeater", {
      design: "Standard",
      numberOfRows: 5,
      currentPage: 1,
      title: oTitle,
      // bind row aggregation
      rows: {
        path: "/data",
        template: oRowTemplate
      }
    });
    
         //create the RowRepeater control
    var oRowRepeater2 = new sap.ui.commons.RowRepeater("rowRepeater2", {
      design: "Standard",
      numberOfRows: 5,
      currentPage: 1,
      title: oTitle,
      // bind row aggregation
      rows: {
        path: "/data",
        template: oRowTemplate2
      }
    });
    
    var oCarousel = new sap.m.Carousel();
    oCarousel.addPage(oRowRepeater2);

     // at the end of the page there is the corresponding xml view as a comment
    var app = new sap.m.App("helloWorldApp", {
      initialPage: "page1"
    });

     // --- create page 1 ---
    var oPage1 = new sap.m.Page("page1", {
      title: "Simple Form page"
    });

    //oPage1.addContent(oRowRepeater);
    //oPage1.addContent(oRowRepeater2);
    //oPage1.addContent(oImage);
    oPage1.addContent(oCarousel);
    app.addPage(oPage1);

    /*
    sap.ui.localResources("view");
    var app = new sap.m.App({
      initialPage: "idMain"
    });
    var page = sap.ui.view({
      id: "idMain",
      viewName: "view.Main",
      type: sap.ui.core.mvc.ViewType.XML
    });
    
    */
     //app.addPage(page);
    app.placeAt("content");
  </script>

</head>

<body class="sapUiBody" role="application">
  <div id="content"></div>
</body>

</html>
# SAPUI5 MVC example with JSON file databinding

This is a simple MVC example where we load JSON data from an external file
and then bind this data against a table.

This example is based on:
[SAPUI5 Demokit Tables](https://sapui5.netweaver.ondemand.com/sdk/explored.html#/entity/sap.m.Table/sample)
{
	"ProductCollection": [
		{
			"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": "EUR",
			"Status": "Available",
			"Quantity": 3,
			"UoM": "PC",
			"Width": 51,
			"Depth": 42,
			"Height": 18,
			"DimUnit": "cm",
			"ProductPicUrl": "test-resources/sap/ui/demokit/explored/img/large_HT-6100.jpg"
		},
		{
			"ProductId": "2212-121-828",
			"Name": "Gladiator MX",
			"Category": "Graphics Card",
			"SupplierName": "Technocom",
			"Description": "Gladiator MX: DDR2 RoHS 128MB Supporting 512MB Clock rate: 350 MHz Memory Clock: 533 MHz, Bus Type: PCI-Express, Memory Type: DDR2 Memory Bus: 32-bit Highlighted Features: DVI Out, TV Out , HDTV",
			"WeightMeasure": 321,
			"WeightUnit": "g",
			"Price": 81.7,
			"CurrencyCode": "EUR",
			"Status": "Discontinued",
			"Quantity": 10,
			"UoM": "PC",
			"Width": 34,
			"Depth": 14,
			"Height": 2,
			"DimUnit": "cm",
			"ProductPicUrl": "test-resources/sap/ui/demokit/explored/img/HT-1071.jpg"
		},
		{
			"ProductId": "K47322.1",
			"Name": "Hurricane GX",
			"Category": "Graphics Card",
			"SupplierName": "Red Point Stores",
			"Description": "Hurricane GX: DDR2 RoHS 512MB Supporting 1024MB Clock rate: 550 MHz Memory Clock: 933 MHz, Bus Type: PCI-Express, Memory Type: DDR2 Memory Bus: 64-bit Highlighted Features: DVI Out, TV-In, TV-Out, HDTV",
			"WeightMeasure": 588,
			"WeightUnit": "g",
			"Price": 219,
			"CurrencyCode": "EUR",
			"Status": "Out of Stock",
			"Quantity": 25,
			"UoM": "PC",
			"Width": 34,
			"Depth": 14,
			"Height": 2,
			"DimUnit": "cm",
			"ProductPicUrl": "test-resources/sap/ui/demokit/explored/img/HT-1072.jpg"
		},
		{
			"ProductId": "22134T",
			"Name": "Webcam",
			"Category": "Accessory",
			"SupplierName": "Technocom",
			"Description": "Web camera, color, High-Speed USB",
			"WeightMeasure": 700,
			"WeightUnit": "g",
			"Price": 59,
			"CurrencyCode": "EUR",
			"Status": "Available",
			"Quantity": 22,
			"UoM": "PC",
			"Width": 18,
			"Depth": 19,
			"Height": 21,
			"DimUnit": "cm",
			"ProductPicUrl": "test-resources/sap/ui/demokit/explored/img/HT-1112.jpg"
		},
		{
			"ProductId": "P1239823",
			"Name": "Monitor Locking Cable",
			"Category": "Accessory",
			"SupplierName": "Technocom",
			"Description": "Lock for Monitor",
			"WeightMeasure": 40,
			"WeightUnit": "g",
			"Price": 13.49,
			"CurrencyCode": "EUR",
			"Status": "Available",
			"Quantity": 30,
			"UoM": "PC",
			"Width": 11,
			"Depth": 11,
			"Height": 3,
			"DimUnit": "cm",
			"ProductPicUrl": "test-resources/sap/ui/demokit/explored/img/HT-1111.jpg"
		},
		{
			"ProductId": "214-121-828",
			"Name": "Laptop Case",
			"Category": "Accessory",
			"SupplierName": "Red Point Stores",
			"Description": "Laptop Case with room for pencils and other items",
			"WeightMeasure": 1289,
			"WeightUnit": "g",
			"Price": 78.99,
			"CurrencyCode": "EUR",
			"Status": "Discontinued",
			"Quantity": 15,
			"UoM": "PC",
			"Width": 53,
			"Depth": 34,
			"Height": 7,
			"DimUnit": "cm",
			"ProductPicUrl": "test-resources/sap/ui/demokit/explored/img/HT-1114.jpg"
		},
		{
			"ProductId": "XKP-312548",
			"Name": "USB Stick 16 GByte",
			"Category": "Accessory",
			"SupplierName": "Red Point Stores",
			"Description": "USB 2.0 HighSpeed 16GB",
			"WeightMeasure": 11,
			"WeightUnit": "g",
			"Price": 17.19,
			"CurrencyCode": "EUR",
			"Status": "Out of Stock",
			"Quantity": 45,
			"UoM": "PC",
			"Width": 6,
			"Depth": 2,
			"Height": 0.5,
			"DimUnit": "cm",
			"ProductPicUrl": "test-resources/sap/ui/demokit/explored/img/HT-6120.jpg"
		},
		{
			"ProductId": "KTZ-12012.V2",
			"Name": "Deskjet Super Highspeed",
			"Category": "Printer",
			"SupplierName": "Red Point Stores",
			"Description": "1200 dpi x 1200 dpi - up to 25 ppm (mono) / up to 24 ppm (colour) - capacity: 100 sheets - Hi-Speed USB2.0, Ethernet",
			"WeightMeasure": 100,
			"WeightUnit": "g",
			"Price": 117.19,
			"CurrencyCode": "EUR",
			"Status": "Available",
			"Quantity": 10,
			"UoM": "PC",
			"Width": 87,
			"Depth": 45,
			"Height": 39,
			"DimUnit": "cm",
			"ProductPicUrl": "test-resources/sap/ui/demokit/explored/img/HT-1052.jpg"
		},
		{
			"ProductId": "89932-922",
			"Name": "Laser Allround Pro",
			"Category": "Printer",
			"SupplierName": "Red Point Stores",
			"Description": "Print up to 25 ppm letter and 24 ppm A4 color or monochrome, with a first-page-out-time of less than 13 seconds for monochrome and less than 15 seconds for color",
			"WeightMeasure": 2134,
			"WeightUnit": "g",
			"Price": 39.99,
			"CurrencyCode": "EUR",
			"Status": "Available",
			"Quantity": 12,
			"UoM": "PC",
			"Width": 42,
			"Depth": 29,
			"Height": 31,
			"DimUnit": "cm",
			"ProductPicUrl": "test-resources/sap/ui/demokit/explored/img/HT-1040.jpg"
		},
		{
			"ProductId": "38094020.1",
			"Name": "Flat S",
			"Category": "Monitor",
			"SupplierName": "Very Best Screens",
			"Description": "19 inches Optimum Resolution 1600 x 1200 @ 85Hz, Max resolution 1984 x 1488 @ 75Hz, Dot Pitch: 0.24mm",
			"WeightMeasure": 1401,
			"WeightUnit": "g",
			"Price": 339,
			"CurrencyCode": "EUR",
			"Status": "Out of Stock",
			"Quantity": 12,
			"UoM": "PC",
			"Width": 88,
			"Depth": 13,
			"Height": 49,
			"DimUnit": "cm",
			"ProductPicUrl": "test-resources/sap/ui/demokit/explored/img/HT-1030.jpg"
		},
		{
			"ProductId": "870394932",
			"Name": "Flat Medium",
			"Category": "Monitor",
			"SupplierName": "Very Best Screens",
			"Description": "21 inches Optimum Resolution 1984 x 1488 @ 85Hz, Max resolution 1720 x 1280 @ 75Hz, Dot Pitch: 0.24mm",
			"WeightMeasure": 1800,
			"WeightUnit": "g",
			"Price": 639,
			"CurrencyCode": "EUR",
			"Status": "Out of Stock",
			"Quantity": 16,
			"UoM": "PC",
			"Width": 102,
			"Depth": 13,
			"Height": 54,
			"DimUnit": "cm",
			"ProductPicUrl": "test-resources/sap/ui/demokit/explored/img/HT-1032.jpg"
		},
		{
			"ProductId": "282948303-02",
			"Name": "Flat X-large II",
			"Category": "Monitor",
			"SupplierName": "Very Best Screens",
			"Description": "23 inches Optimum Resolution 2048 × 1536 @ 85Hz, Max resolution 2080 × 1560 @ 75Hz, Dot Pitch: 0.24mm",
			"WeightMeasure": 2100,
			"WeightUnit": "g",
			"Price": 1239,
			"CurrencyCode": "EUR",
			"Status": "Available",
			"Quantity": 5,
			"UoM": "PC",
			"Width": 112,
			"Depth": 13,
			"Height": 60,
			"DimUnit": "cm",
			"ProductPicUrl": "test-resources/sap/ui/demokit/explored/img/HT-1138.jpg"
		},
		{
			"ProductId": "OP-38800002",
			"Name": "High End Laptop 2b",
			"Category": "Laptop",
			"SupplierName": "Titanium",
			"Description": "Notebook Professional 17 with 2,3GHz - 17 inches XGA - 2048MB DDR2 SDRAM - 40GB Hard Disc - DVD-Writer (DVD-R/+R/-RW/-RAM)",
			"WeightMeasure": 1190,
			"WeightUnit": "g",
			"Price": 939,
			"CurrencyCode": "EUR",
			"Status": "Out of Stock",
			"Quantity": 18,
			"UoM": "PC",
			"Width": 64,
			"Depth": 34,
			"Height": 4,
			"DimUnit": "cm",
			"ProductPicUrl": "test-resources/sap/ui/demokit/explored/img/HT-1010.jpg"
		},
		{
			"ProductId": "977700-11",
			"Name": "Hardcore Hacker",
			"Category": "Keyboard",
			"SupplierName": "Titanium",
			"Description": "Corded Keyboard with special keys for media control, USB",
			"WeightMeasure": 651,
			"WeightUnit": "g",
			"Price": 89,
			"CurrencyCode": "EUR",
			"Status": "Available",
			"Quantity": 20,
			"UoM": "PC",
			"Width": 53,
			"Depth": 24,
			"Height": 6,
			"DimUnit": "cm",
			"ProductPicUrl": "test-resources/sap/ui/demokit/explored/img/HT-1063.jpg"
		}
	],
	"ProductCollectionStats": {
		"Counts": {
			"Total": 14,
			"Weight": {
				"Ok": 7,
				"Heavy": 5,
				"Overweight": 2
			}
		},
		"Groups": {
			"Category": {
				"Projector": 1,
				"Graphics Card": 2,
				"Accessory": 4,
				"Printer": 2,
				"Monitor": 3,
				"Laptop": 1,
				"Keyboard": 1
			},
			"SupplierName": {
				"Titanium": 3,
				"Technocom": 3,
				"Red Point Stores": 5,
				"Very Best Screens": 3
			}
		},
		"Filters": [
			{
				"type": "Category",
				"values": [
					{
						"text": "Projector",
						"data": 1
					},
					{
						"text": "Graphics Card",
						"data": 2
					},
					{
						"text": "Accessory",
						"data": 4
					},
					{
						"text": "Printer",
						"data": 2
					},
					{
						"text": "Monitor",
						"data": 3
					},
					{
						"text": "Laptop",
						"data": 1
					},
					{
						"text": "Keyboard",
						"data": 1
					}
				]
			},
			{
				"type": "SupplierName",
				"values": [
					{
						"text": "Titanium",
						"data": 3
					},
					{
						"text": "Technocom",
						"data": 3
					},
					{
						"text": "Red Point Stores",
						"data": 5
					},
					{
						"text": "Very Best Screens",
						"data": 3
					}
				]
			}
		]
	}
}
<sap.ui.core.mvc:View controllerName="view.Main"
    xmlns="sap.m"
    xmlns:sap.ui.core.mvc="sap.ui.core.mvc" >
    <Page title="This is a SAPUI5 MVC example">
        <content>

            <Table id="idProductsTable" noDataText="No Data" items="{/ProductCollection}">
                <items>
                    <ColumnListItem counter="0">
                        <cells>
                            <ObjectIdentifier title="{Name}" text="{ProductId}" 
                            badgeNotes="false" badgePeople="false" badgeAttachments="false"></ObjectIdentifier>
                            <Text text="{SupplierName}" maxLines="0"></Text>
                            <Text text="{Width} x {Depth} x {Height} {DimUnit}" maxLines="0"></Text>
                            <ObjectNumber number="{WeightMeasure}" />
                            <ObjectNumber number="{Price}" unit="{CurrencyCode}"></ObjectNumber>
                        </cells>
                    </ColumnListItem>
                </items>
                <headerToolbar>
                    <Toolbar>
                        <content>
                            <Label text="Products"></Label>
                        </content>
                    </Toolbar>
                </headerToolbar>
                <columns>
                    <Column width="12em">
                        <header>
                            <Text text="Product" maxLines="0"></Text>
                        </header>
                    </Column>
                    <Column minScreenWidth="tablet" demandPopin="true">
                        <header>
                            <Text text="Supplier" maxLines="0"></Text>
                        </header>
                    </Column>
                    <Column hAlign="Right" minScreenWidth="tablet" demandPopin="true">
   
                        <header>
                            <Text text="Dimensions" maxLines="0"></Text>
                        </header>
                    </Column>
                    <Column hAlign="Center" minScreenWidth="tablet" demandPopin="true">
                        <header>
                            <Text text="Weight" maxLines="0"></Text>
                        </header>
                    </Column>
                    <Column hAlign="Right">
                        <header>
                            <Text text="Price" textAlign="Right" maxLines="0"></Text>
                        </header>
                    </Column>
                </columns>
            </Table>
        </content>
    </Page>
</sap.ui.core.mvc:View>
sap.ui.controller("view.Main", {

// We don't need any controller code in our simple example
// but I left the code here for MVC-demonstration purposes

/**
* Called when a controller is instantiated and its View controls (if available) are already created.
* Can be used to modify the View before it is displayed, to bind event handlers and do other one-time initialization.
* @memberOf view.Main
*/
// onInit: function () {
//   
//  },

/**
* Similar to onAfterRendering, but this hook is invoked before the controller's View is re-rendered
* (NOT before the first rendering! onInit() is used for that one!).
* @memberOf view.Main
*/
//	onBeforeRendering: function() {
//    
//	},

/**
* Called when the View has been rendered (so its HTML is part of the document). Post-rendering manipulations of the HTML could be done here.
* This hook is the same one that SAPUI5 controls get after being rendered.
* @memberOf view.Main
*/
//	onAfterRendering: function() {
//
//	},

/**
* Called when the Controller is destroyed. Use this one to free resources and finalize activities.
* @memberOf view.Main
*/
//	onExit: function() {
//
//	}

});