SAPUI5 XML views

Hi Experts,
In SAPUI5 SDK demo kit, the same codes are in XML view. I tried to search the API or library for XML view i could not find. The data binding in XML views are not clear.
e.g. Table.view.xml
<mvc:View
  controllerName="sap.m.sample.Table.Table"
  xmlns:l="sap.ui.layout"
  xmlns:mvc="sap.ui.core.mvc"
  xmlns="sap.m">
  <Table id="idProductsTable"
  inset="false"
  items="{
  path: '/ProductCollection',
  sorter: {
  path: 'Name'
  }">
  <headerToolbar>
  <Toolbar>
  <Label text="Products"></Label>
  </Toolbar>
  </headerToolbar>
  <columns>
  <Column
  width="12em">
  <Text text="Product" />
  </Column>
  <Column
  minScreenWidth="Tablet"
  demandPopin="true">
  <Text text="Supplier" />
  </Column>
  <Column
  minScreenWidth="Tablet"
  demandPopin="true"
  hAlign="Right">
  <Text text="Dimensions" />
  </Column>
  <Column
  minScreenWidth="Tablet"
  demandPopin="true"
  hAlign="Center">
  <Text text="Weight" />
  </Column>
  <Column
  hAlign="Right">
  <Text text="Price" />
  </Column>
  </columns>
  <items>
  <ColumnListItem>
  <cells>
  <ObjectIdentifier
  title="{Name}"
  text="{ProductId}"
  class="sapMTableContentMargin" />
  <Text
  text="{SupplierName}" />
  <Text
  text="{Width} x {Depth} x {Height} {DimUnit}" />
  <ObjectNumber
  number="{WeightMeasure}"
  unit="{WeightUnit}"
  state="{
  path: 'WeightMeasure',
  formatter: 'sap.m.sample.Table.Formatter.weightState'
  }" />
  <ObjectNumber
  number="{Price}"
  unit="{CurrencyCode}" />
  </cells>
  </ColumnListItem>
  </items>
  </Table>
</mvc:View>
jQuery.sap.require("sap.m.sample.Table.Formatter");
sap.ui.controller("sap.m.sample.Table.Table", {
  onInit: function () {
  // set explored app's demo model on this sample
  var oModel = new sap.ui.model.json.JSONModel("test-resources/sap/ui/demokit/explored/products.json");
  this.getView().setModel(oModel);
How can we bind multiple data sources in xml
SAPUI5 Explored
Thank You
Regards
Senthil Bala

Hi Sethil,
Have you tried loading a second model (datasource) and set to the view. Something like this:
var oModel = new sap.ui.model.json.JSONModel("test-resources/sap/ui/demokit/explored/products.json");
this.getView().setModel(oModel,"firstmodel");
var oModel2 = new sap.ui.model.json.JSONModel("whatever url to your second data");
this.getView().setModel(oModel2,"secondmodel");
And then have your controls binding to the source of your choice like this:
text="{firstmodel>/ProductId}"
regards
Sven

Similar Messages

  • Alert is not working for mutiple times for list "select" function in sapui5 XML view

    Hello All,
    I am trying to open an alert for multiple times for list "select" function. But it's opening for only one time .
    Please find code below.
    View Part
    <List id="contactedit" select="somefunction">
        <CustomListItem id="custom1" type="Inactive" >
    <content>
    <Label text="this is label" />
    </content>
    </CustomListItem>
    </List>
    Controller Part
    somefunction: function(oEvent){
    alert("this is an alert");
    Thanks in Advance
    D.Mohanbabu

    I think I saw this question in stack overflow. And I answered it :-)
    I believe that it is because you can only one item in the list and once the item is selected, re-selecting it will not fire the event.
    Try adding more items to the list and select different items.
    Thanks
    -D

  • Data Modeling for controls using XML views(SAPUI5)

    Hello ,
    I am trying to create Table control using XML view and binding data to it through controller onInit method.
    XML View Code is as follows :
    <core:View xmlns="sap.m" xmlns:l="sap.ui.layout" xmlns:core="sap.ui.core">
        <l:VerticalLayout width="100%">
            <l:content>
                <Text id="description" class="marginAll" />
                <Table id="idProductsTable" items="{       
                    path:'/businessData'
                }">
                    <headerToolbar>
                        <Toolbar>
                            <Label text="Products"></Label>
                        </Toolbar>
                    </headerToolbar>
                    <columns>
                        <Column>
                            <Label text="Product" />
                        </Column>
                        <Column>
                            <Label text="Supplier" />
                        </Column>
                        <Column>
                            <Label text="Dimensions" />
                        </Column>
                    </columns>
                    <items>
                        <ColumnListItem>
                            <cells>
                                <ObjectIdentifier title="{COUNTRY}" text="{COUNTRY}" />
                            </cells>
                            <Text text="{REGION}"></Text>
                            <Text text="{CITY}"></Text>
                        </ColumnListItem>
                    </items>
                </Table>
            </l:content>
        </l:VerticalLayout>
    </core:View>
    Controller onInit method Code is as follows :
    var oData = {
                businessData : [ {
                    'COUNTRY' : "Canada",
                    'CITY' : "Toronto",
                    'REGION' : "US",
                    'LANGUAGE' : "English"
                    'COUNTRY' : "China",
                    'CITY' : "Bejeing",
                    'REGION' : "Ashia",
                    'LANGUAGE' : "Chinese"
            var demoJSONModel = new sap.ui.model.json.JSONModel();
            demoJSONModel.setData(oData);
            sap.ui.getCore().getElementById("idProductsTable").setModel(
                    demoJSONModel);
    Same thing when i tried with JS views , it worked however through XML view , I am getting empty table.
    Is the data modeling correct for XML views?
    Thanks,
    Mahesh.

    I've got it ! The reason for that is you bind items as below,
         <Table id="idProductsTable" items="{    
                    path:'/businessData'
                }">
    This pattern is followed if you wanna add a formatter/sorter/grouping.
    As you don't do any of those you can bind items as below &  it doesn't require  data-sap-ui-xx-bindingSyntax="complex".
    <Table id="idProductsTable" items="{/businessData}">

  • Dynamic binding of items in sap.m.Table using XML views

    Dear SAPUI5 guru's,
    Let's start by saying I'm an ABAP developer who's exploring SAPUI5, so I'm still a rookie at the time of writing. I challenged myself by developing a simple UI5 app that shows information about my colleagues like name, a pic, address data and their skills. The app uses the sap.m library and most of the views are XML based which I prefer.
    The data is stored on an ABAP system and exposed via a gateway service. This service has 2 entities: Employee and Skill. Each employee can have 0..n skills and association/navigation between these 2 entities is set up correctly in the service. The data of this service is fetched from within the app using a sap.ui.model.odata.ODataModel model.
    The app uses the splitApp control which shows the list of employees on the left side (master view). If a user taps an employee, the corresponding details of the employee entity are shown on the right (detail view).
    Up till here everything is fine but I've been struggling with my latest requirement which is: show the skills of the selected employee in a separate XML view when the user performs an action (for the time being, I just created a button on the detail view to perform the action). After some hours I actually got it working but I doubt if my solution is the right way to go. And that's why I'm asking for your opinion here.
    Let's explain how I got things working. First of all I created a new XML view called 'Skills'. The content on this view is currently just a Table with 2 columns:
    <core:View xmlns:core="sap.ui.core" xmlns:mvc="sap.ui.core.mvc" xmlns="sap.m"
      controllerName="com.pyramid.Skills" xmlns:html="http://www.w3.org/1999/xhtml">
      <Page title="Skills"
           showNavButton="true"
           navButtonPress="handleNavButtonPress">
      <content>
      <Table
       id="skillsTable">
      <columns>
      <Column>
      <Label text="Name"/>
      </Column>
      <Column>
      <Label text="Rating"/>
      </Column>
      </columns>
      </Table>
      </content>
      </Page>
    </core:View>
    The button on the Detail view calls function showSkills:
    showSkills: function(evt) {
      var context = evt.getSource().getBindingContext();
      this.nav.to("Skills", context);
      var skillsController = this.nav.getView().app.getPage("Skills").getController();
      skillsController.updateTableBinding();
    Within 'this.nav.to("Skills", context);' I add the Skills view to the splitApp and set its bindingContext to the current binding context (e.g. "EmployeeSet('000001')"). Then I call function updateTableBinding in the controller of the Skills view which dynamically binds the items in the table based on the selected employee. So, when the ID of the selected employee is '000001', the path of the table's item binding should be "/EmployeeSet('000001')/Skills"
    updateTableBinding: function(){
      var oTemplate = new sap.m.ColumnListItem(
      {cells: [
              new sap.m.Text({text : "{Name}"}),
              new sap.m.Text({text : "{Rating}"})
      var oView = this.getView();
      var oTable = oView.byId("skillsTable");
      var oContext = oView.getBindingContext();
      var path = oContext.sPath + "/Skills";
      oTable.bindItems(path, oTemplate);
    Allthough it works fine, this is where I have my first doubt. Is this the correct way to bind the items? I tried to change the context that is passed to this.nav.to and wanted it to 'drill-down' one level, from Employee to Skills, but I couldn't manage to do that.
    I also tried to bind using the items aggregation of the table within the XML declaration (<Table id="skillsTable" items="{/EmployeeSet('000001')/Skills}">). This works fine if I hard-code the employee ID but off course this ID needs to be dynamic.
    Any better suggestions?
    The second doubt is about the template parameter passed to the bindItems method. This template is declared in the controller via javascript. But I'm using XML views! So why should I declare any content in javascript?? I tried to declare the template in the XML view itself by adding an items tag with a ColumnListItem that has an ID:
                    <items>
                        <ColumnListItem
                        id="defaultItem">
                        <cells>
                            <Text text="{Name}"/>
                            </cells>
                            <cells>
                            <Text text="{Rating}"/>
                            </cells>
                        </ColumnListItem>
                    </items>
    Then, in the updateTableBinding function, I fetched this control (by ID), and passed it as the template parameter to the bindItems method. In this case the table shows a few lines but they don't contain any data and their height is only like 1 mm! Does anyone know where this strange behaviour comes from or what I'm doing wrong?
    I hope I explained my doubts clearly enough. If not, let me know which additional info is required.
    Looking forward to your opinions/suggestions,
    Rudy Clement.

    Hi everybody,
    I found this post by searching for a dynamic binding for well acutally not the same situation but it's similar to it. I'm trying to do the following. I'm having a list where you can create an order. On the bottom of the page you'll find a button with which you're able to create another order. All the fields are set to the same data binding ... so the problem is if you've filled in the values for the first order and you'll press the button you'll get the same values in the second order. Is it possible to generate a dynamic binding?
    I'm going to post you a short code of what I'm meaning:
    <Input type="Text" value="{path: 'MyModel>/Order/0/Field1'}" id="field1">
         <layoutData>
                    <l:GridData span="L11 M7 S3"></l:GridData>
               </layoutData>
    </Input>
    As you can see I need to set the point of "0" to a dynamic number. Is there any possibility to reach this???
    Hope you can help
    Greetings
    Stef

  • In XML view, how to set sap.ui.core.CSSSize array for property "widths" of MatrixLayout Control?

    As SAPUI5 prefer XML views, I'm rewriting JS view into XML views.
    When I translate the statements below, I can not set sap.ui.core.CSSSize array for property "widths" of Control MatrixLayout.
    JS version:
    var oLayout = new sap.ui.commons.layout.MatrixLayout({
        id : 'matrix3'
        columns : 3,
        width : '600px',
        widths : ['100px', '200px', '300px']
    XML version:
    <l:MatrixLayout
        id="matrix3"
        columns="3"
        width="600px"
        widths="['100px', '200px', '300px']">
    <l:MatrixLayout>
    The error says: Uncaught Error: "[100px, 200px, 300px]" is of type object, expected sap.ui.core.CSSSize[] for property "widths" of Element sap.ui.commons.layout.MatrixLayout.
    Same problem with property `backgroundDesign` of MatrixLayoutCell, I can only use a workaround to use String "Fill1" not the Class "sap.ui.commons.layout.BackgroundDesign.Fill1".
    When we meet a property which need a Class object as value, we can not set it in String Format for XML views. That's a pity or I did not find the right way to set NON-String values as property for XML Controls.

    Hi,
    any settings that are not possible in the XML, need to be set in the controller instead.
    Using the string value of an enum is fine, though.
    Regards
    Andreas

  • SAPUI5 XML vs JS example gist

    Hello,
    I created a gist where you can see a simple app-page example created with JavaScript and at the bottom the corresponding XML if it would be a view (without controller.
    Maybe this helps how to understand and "switch" mentally between the JavaScript syntax examples (for example here for a button SAPUI5 SDK - Demo Kit) and the now preferred XML notation of the views (SAPUI5 Explored).
    Here is the gist:
    https://gist.github.com/denisenepraunig/5a2049f13f8342f5608f
    The example on jsbin is here:
    JS Bin - Collaborative JavaScript Debugging
    How do I get from JavaScript code...
    var oSimpleForm = new sap.ui.layout.form.SimpleForm({ ...
    to a XML view notation:
    <mvc:View xmlns:f="sap.ui.layout.form" ...
    <f:SimpleForm ...
    or vice versa.
    Hope this helps someone, at the beginning it was a mind-challenging exercise to switch between those two notations.
    BR, Denise

    exactly what I searched for
    Working with XML views is simpler when you are not a native javascript developer !
    <mvc:View xmlns:f="sap.ui.layout.form"
    was my missing link - for defining all f: as linked to library sap.ui.layout.form
    Thanks for sharing

  • SAPUI - XML View - complex type information

    Hi,
    I have some issues to express my type information in XML views.
    The JS view would look like:
    new sap.m.Text({
         text: {
              path:"/number",
              type: new sap.ui.model.type.Integer({groupingEnabled: true, groupingSeparator: '.'})
    My current XML view looks like this:
    <Text text="{path:'/number', type:'sap.ui.model.type.Integer', constraints:{groupingEnabled: true, groupingSeparator: '.'}}" />
    or
    <Text text="{path:'/number', type:'sap.ui.model.type.Integer({groupingEnabled: true, groupingSeparator: '.'})'}" />
    or several other ideas, e.g. escpaing of the additional '.
    But nothing worked. And I could not find any documentation of how it might work.
    The diagnostic tool translates JS to XML, yes, but it ignores the complicated case. :-(
    I could use a formatter to group myself, but there are several cases, where I need such complicated XML views.
    E.g. if I want to use multiply paths as an array.
    In my index.html I added data-sap-ui-xx-bindingSyntax="complex".
    Hope you can help me out.
    Thanks and bests
    -Ben

    Hi Ben,
              This should work
    <!DOCTYPE html>
    <html><head>
      <meta http-equiv='X-UA-Compatible' content='IE=edge' />
      <meta http-equiv='Content-Type' content='text/html;charset=UTF-8'/>
      <title>Mobile App with XML View with JSON Data</title>
    <script id='sap-ui-bootstrap' type='text/javascript'
       src='/sapui5-internal/resources/sap-ui-core.js'
       data-sap-ui-theme='sap_bluecrystal'
       data-sap-ui-libs='sap.m'
       data-sap-ui-xx-bindingSyntax='complex'></script>
      <script id="myXml" type="text/xmldata">
       <mvc:View xmlns:core="sap.ui.core" xmlns:mvc="sap.ui.core.mvc" xmlns="sap.m" controllerName="myController" displayBlock="true">
       <App>
      <Page title="Hello">
      <Text text="{path:'/1/r', type:'sap.ui.model.type.Integer', formatOptions:{groupingEnabled: true , groupingSeperator : '.'}}" />
      <Button text="{/1/name}" press= "doSomething"/>
      </Page>
       </App>
       </mvc:View>
      </script>
    <script>
      sap.ui.controller("myController", {
      onInit: function() {
      var model = new sap.ui.model.json.JSONModel();
      model.setData([
      {lastName: "Dente", name: "Al", r  : 1232323.221212,checked: true, linkText: "www.sap.com", href: "http://www.sap.com", rating: 4},
      {lastName: "Friese", name: "Andy", r  : 111222.221212, checked: true, linkText: "www.spiegel.de", href: "http://www.spiegel.de", rating: 2},
      {lastName: "Mann", name: "Anita",  r  : 1.221212,checked: false, linkText: "www.kicker.de", href: "http://www.kicker.de", rating: 3}
      this.getView().setModel(model);
      doSomething: function() {
      alert("Hello World!");
      sap.ui.view({ viewContent: jQuery('#myXml').html(), type:sap.ui.core.mvc.ViewType.XML }).placeAt("content")
    </script>
    </head>
       <body class='sapUiBody'>
       <div id='content'></div>
    </body>
    </html>
    Thank you.
    Regards,
                   Pruthvi.

  • BI Publisher Report Build - XML view

    Hi Experts,
    I am trying to build the BI publisher report. During the process, I am defining the SQL query structure in the 'Query Builder' once after that I have saved the report.
    As part of the next step , I have clicked on 'view' link to view the report structure as mentioned in the OBE.
    I could only see the 'Data' view but not the 'XML' view. Is there any way I can see the 'XML' view.
    Any help would be appreciated
    Siva

    Data means look at the xml data that you have created.

  • Binding Data from OfflineStore to List in XML view

    Hi Experts,
    I am developing an application using SAP WebIDE. While loading a page, I want to read some data from an offlineStore and show it in a listview.
    Following is my code for xml view:
    <sap.ui.core.mvc:View xmlns="sap.m" xmlns:sap.ui.core="sap.ui.core" xmlns:sap.ui.core.mvc="sap.ui.core.mvc" controllerName="com.arteria.view.CustomerList">
        <Page title="Customers" showNavButton="true">
       </Page>
    </sap.ui.core.mvc:View>
    And my js code is as follows:
    onInit: function() {
      this.getView().addEventDelegate({
       onBeforeShow: function(evt) {
        sap.ui.getCore().byId("idCustomerList").getController().read();
    read:function() {
                    oList = new sap.m.List();
                    oList.removeAllItems();
                    var uri = window.localStorage.getItem("ApplicationEndpointURL");
                    var user = window.localStorage.getItem("User");
                    var password = window.localStorage.getItem("Password");
                    var headers = { "X-SMP-APPCID" : window.localStorage.getItem("ApplicationConnectionId") };
                    // Create OData model from URL
                    var oModel = new sap.ui.model.odata.ODataModel(uri, true, user, password, headers);
                    var iOS = (navigator.userAgent.match(/(iPad|iPhone|iPod)/g) ? true : false );
                    if (iOS) {
                        oModel = new sap.ui.model.odata.ODataModel(uri, true, user, password, headers);
                    var oTemplate = new sap.m.StandardListItem({
                                                               title: "{CustomerNumber}", description: "{CustomerName}", tap:"handleProductListItemPress", type:"Navigation"    
                    oList.setModel(oModel);
                    oList.bindItems("/Customers", oTemplate, null, null);
                    var custListPage = sap.ui.getCore().byId("idCustomerList");
                    custListPage.addCustomData(oList);
       handleProductListItemPress: function(oEvent) {
            sap.ui.getCore().getEventBus().publish("nav", "to", {
                id : "idCustomerDetail",
                context: oEvent.getSource().getBindingContext()
    The problem is I am getting a blank page. The list is not getting attached to the page.
    Waiting for your reply.
    Regards,
    Dhani

    why not move List definitiaon to XML 
    <sap.ui.core.mvc:View xmlns="sap.m" xmlns:sap.ui.core="sap.ui.core" xmlns:sap.ui.core.mvc="sap.ui.core.mvc" controllerName="com.arteria.view.CustomerList"> 
        <Page title="Customers" showNavButton="true"> 
    <List id="CustomerList"/>
       </Page> 
    </sap.ui.core.mvc:View> 
    so
    oList = this.byId("CustomerList");
    oList.setModel(oModel); 
                    oList.bindItems("/Customers", oTemplate, null, null); 
                    var custListPage = sap.ui.getCore().byId("idCustomerList"); 
                    custListPage.addCustomData(oList); 

  • Passing parameter to the i18n text from xml view in fiori app

    Hi,
    Could somebody let me know how to pass parameter to get the i18n text inside xml view of a Fiori app.
    For e.g. inside my i18n properties file i have a entry like:
    PEC_ISSUE={0}issues of total{1}
    inside xml i use it like {i18n>PEC_ISSUE}
    but now how do i pass those 2 parameters to this ??
    i know in javascript it works with , (comma) but does not work in xml. Any help...
    Thanks,
    Ashish

    Hi Michele,
    I found it. Below is the example from my coding.
    <Text      text="{parts: [{path: 'i18n>PEC_to'}, {path: 'promoprocsteps>RetailPromotionSalesFromDate_E'},
                                                           {path:'promoprocsteps>RetailPromotionSalesToDate_E'}],
                                                           formatter: 'retail.promn.promotioncockpit.utils.Formatter.formatDatesString'}"  />
    So you have to create a formatter and pass all the strings to the formatter and then do it inside JS.
    In JS you do it in this way:
    i18n.getText(i18String, [newString, string2]);
    i hope this helps.
    Regards,
    Ashish

  • XML View & Model, Tree & binding

    Hi there,
    i'm trying to do some stuff with XML models, XML Views and Trees.
    Here is my xml model file :
    <objectSet version="1.2.3.4">
        <aRoot code="testCode" reference="0123456789" description="TestDescription" owner="Tester">
                <component name="MyCompo1" type="MyCompo1Type">
                  <component name="MyCompo2" type="MyCompo2Type">
                   <property name="myProperty2-1" type="string" value="null"/>
                  </component>
                  <component name="MyCompo3" type="MyCompo3Type">
                   <property name="myProperty3-1" type="string" value="null"/>
                  </component>
                </component>
        </aRoot>
    </objectSet>
    My XML View file :
    <core:View xmlns:core="sap.ui.core" xmlns:mvc="sap.ui.core.mvc" xmlns="sap.m" xmlns:cmn="sap.ui.commons"
            controllerName="cleanproject.TreeTest" xmlns:html="http://www.w3.org/1999/xhtml">
                    <cmn:Tree nodes="{/aRoot}">
                    <cmn:TreeNode text="{@name} TagNameHere?"></cmn:TreeNode>
                    </cmn:Tree>
    </core:View>
    My Js Controller file :
    sap.ui.controller("cleanproject.TreeTest", {
    onInit: function() {
    var xmlModel =  new sap.ui.model.xml.XMLModel("cleanproject/"+xmlPath3);
    xmlModel.setXML("the full xml document here"); // bad trick
    this.getView'().setModel(xmlModel);
    I have multiples questions :
    What is the way to wait the xml file to be loaded, because when i'm not using setXML function in my controller, the view is instantiated too fast  and an error is raised as the model is not accessible ( Error message : "N is null" )
    Is it possible to display in a TreeNode the tagName of an element? ( e.g : "component", "property" )
    Is it possible to build the tree only with "component" TreeNodes ?
    4. Is it possible to bind a part of the datas , eg : bind with a deepth of 1,2,...n ?
    Thanks for helping,
    Regards,
    Marc
    Edit :
    1. In the onInit function, use attachRequestCompleted method. In my case :
    var thus= this;
            xmlModel.attachRequestCompleted(function(event){
                thus.getView().setModel(xmlModel);
    2.
    tree.bindNodes("/",function(sId, oContext){
                    var tagName = oContext.getObject().tagName;
                    var name = oContext.getObject().getAttribute("name");
                    var sText = tagName;
                    if(name){
                        sText+=" "+name;
                    return new cleanproject.custom.ComplexTreeNode({text:sText});
                },null,[oFilter]);
    3. It does not seem possible even with filters
    4. Can be done using javascript and a custom method

    Hi all,
    I just tested again and now it's working...
    <Label xmlns="sap.m" design="Standard" text="{/MAIN_OBJECTSet('1')/PROPERTY_NAME}"
      visible="true" textAlign="Begin" textDirection="Inherit" width="200px"
      required="false" labelFor="">
      </Label>
    The relative path syntax depends on the used model!
    Strange - but ok.
    Thanks.
    Best regards,
    Christoph

  • Setting valueAxis for makit chart in XML view

    Dear Experts,
    I am trying to set a valueAxis limit on value 0,5.
    My XML looks like this. I couldnt add valueAxis in ma:Chart successfully.
    <ma:Chart id="idChart" height="100%" width="100%" type="Line"
      rows="{/entries}" showRangeSelector="true" showTableView="false"
      showTotalValue="false">
      <ma:category>
      <ma:Category column="date" displayName="Date" />
      </ma:category>
      <ma:values>
      <ma:Value expression="value" displayName="Value" type="number"/>
      </ma:values>
      <ma:rows>
      <ma:Row>
      <ma:cells>
      <ma:Column name="date" value="{date}" />
      <ma:Column name="value" value="{value}"
      type="number" />
      </ma:cells>
      </ma:Row>
      </ma:rows>
      <ma:columns>
      <ma:Column name="date" value="{date}" />
      <ma:Column name="value" value="{value}" type="number"  />
      </ma:columns>
      </ma:Chart>
    The error was: Uncaught Error: valueAxis property must be of type sap.makit.ValueAxis
    Basically I cant create a new instance of ValueAxis in XML.
    I tried in the controller js something like this:
    var oChart = this.getView().byId("idChart");
    oChart.valueAxis =  new sap.makit.ValueAxis({min : "0.5"});
    This also didnt work.
    So I  have two questions:
    1.) How can I set valueAxis in XML view staticly?
    2.) How can I set valueAxis in controller dynamicly according to the values I get from my json service.
    Thanks for any help!
    Regards,
    Koray

    Try doing,
    oChart.setValueAxis(new sap.makit.ValueAxis({min : "0.5"}));

  • Read value of DateTimeInput XML View in YYYYMMDD format

    Dear Experts,
    I am using DateTimeInput in my XML view as:
    <DateTimeInput id="FromDate" type= "Date" placeholder="Enter Date ..."  />
    And reading the value in the controller as:
    var oParameters = { "fdate" : sap.ui.getCore().getElementById('FromDate').getValue() };
    Now,  the date value I get is 8/7/14 from iPhone and 07/08/2014 for Android devices for date 07, Aug 2014.
    I want the date value in YYYYMMDD format like 20140807.  I have tried using the parameter displayFormat and locale, but the display format changes and the value remains the same.
    Request you to please suggest on how can I get the date value in YYYYMMDD format.
    Warm regards,
    Upendra Agrawal

    So, the display value is ok, but you want the actual value to be YYYYMMDD as well (i.e. regardless of the display value)?
    Have you tried using both valueFormat="yyyyMMdd" displayFormat="yyyyMMdd" ?
    First convert your dates to yyyyMMdd format, and then using both valueFormat and displayFormat it then correctly expects the date to be supplied in format yyyyMMdd

  • Schema Based XML View Question

    Hi,
    Is there a way to use the OBJECT ID value in the view's WHERE clause?
    For example:
    create or replace view xml_view of XMLTYPE
    XMLSCHEMA "http://yo.orf/sample.xsd" ELEMENT "el"
    WITH OBJECT ID ( extract('/el/@id').getNumberVal())
    FROM columns( l.id)
    AS
    SELECT XMLElement( "el", ....)
    FROM liner_tbl l
    WHERE l.id = ?? extracted object id value ??
    Can I replace ?? extracted object id value ?? with a some sort of xmldata qualifier?
    Ciao
    Stefano

    Mark,
    Basically we have an XML view that generates undesirable query execution plans for queries on the object id:
    select value(x) from xml_view x
    where existsNode( value(x), '/el[@id="4"') = 1;
    Whereas if I just take the query statement that defines the view alone, and add to it a simple where clause with the value of the object id, the execution plans it generates become optimal.
    select XMLElement( ...)
    from liner_tbl l
    where l.id = 4;
    Ciao
    Stefano

  • How to add .xml, .js and .css files to a xml viewer?

    Hi,
    I have a xml viewer in a web part to display a moving txt message. 
    I created a doc. library called XmlWebParts and in it 3 files with the same name. I am referring the xml file in the doc library with no issues. 
     WarningMessage.xml
    <script type="text/javascript" src="http://icare/sites/IT/tst/XmlWebParts/WarningMessage/WarningMessage.js"></script>
    <div class="marquee">jQuery marquee is the best marquee plugin in the world</div>
    <br/>
    <a class='p' href='#'>Pause</a> | <a class='r' href='#'>Resume</a>
    <link rel="stylesheet" type="text/css" href="http://icare/sites/IT/tst/XmlWebParts/WarningMessage/WarningMessage.css"/>
    WarningMessage.js
    var $mq = $('.marquee').marquee();
    //Pause
    $('.p').click(function(){
      $mq.marquee('pause');
    //Resume
    $('.r').click(function(){
      $mq.marquee('resume');
    and 
    WarningMessage.css
    .marquee {
      width: 300px;
      border: 1px solid #ccc;
      background: #ccc;
    The issue I am having is that the txt display with the formatting but is not moving, is just display the txt.
    I followed this: http://social.technet.microsoft.com/wiki/contents/articles/20764.sharepoint-2013-build-a-webpart-using-html-javascript-and-the-xml-viewer-web-part.aspx
    What I am doing wrong?

    Is not working for me.
    I have the
    WarningMessage.xml
    <script type="text/javascript" src="http://icare/sites/IT/tst/XmlWebParts/WarningMessage/WarningMessage.js"></script>
    WarningMessage.js
    <script type="text/javascript">
    <
    //set the marquee parameters
    function init() { rtl_marquee.start(); }
    var rtl_marquee_Text = 'JavaScript scrolling text';
    var rtl_marquee_Direction = 'left';
    var rtl_marquee_Contents='<span style="font-family:Comic Sans MS;font-size:12pt;white-space:nowrap;">' + rtl_marquee_Text + '</span>';
    rtl_marquee = new xbMarquee('rtl_marquee', '19px', '90%', 6, 100, rtl_marquee_Direction, 'scroll', rtl_marquee_Contents);
    window.setTimeout( init, 200);
    </script>
    xbMarquee.js
    document.writeln('<style type="text/css">');
    document.writeln(' div.marqueecenter1 { text-align: center; }');
    document.writeln(' div.marqueecenter2 { margin- margin-right: auto; }');
    document.writeln(' div.marqueeleft1 { text-align: left; }');
    document.writeln(' div.marqueeleft2 { margin- margin-right: auto; }');
    document.writeln(' div.marqueeright1 { text-align: right; }');
    document.writeln(' div.marqueeright2 { margin- margin-right: 0; }');
    document.writeln('</style>');
    function xbMarquee(id, height, width, scrollAmount, scrollDelay, direction, behavior, html)
      this.id            = id;
      this.scrollAmount  = scrollAmount ? scrollAmount : 6;
      this.scrollDelay   = scrollDelay ? scrollDelay : 85;
      this.direction     = direction ? direction.toLowerCase() : 'left';  
      this.behavior      = behavior ? behavior.toLowerCase() : 'scroll';  
    //  this.name          = 'xbMarquee_' + (++xbMarquee._name);
      this.name          = id;
      this.runId         = null;
      this.html          = html;
      this.isHorizontal = ('up,down'.indexOf(this.direction) == -1);
      if (typeof(height) == 'number')
        this.height = height;
        this.heightUnit = 'px';
      else if (typeof(height) == 'string')
        this.height = parseInt('0' + height, 10);
        this.heightUnit = height.toLowerCase().replace(/^[0-9]+/, '');
      else
        this.height = 100;
        this.heightUnit = 'px';
      if (typeof(width) == 'number')
        this.width = width;
        this.widthUnit = 'px';
      else if (typeof(width) == 'string')
        this.width = parseInt('0' + width, 10);
        this.widthUnit = width.toLowerCase().replace(/^[0-9]+/, '');
      else
        this.width = 100;
        this.widthUnit = 'px';
      // xbMarquee UI events
      this.onmouseover   = null;
      this.onmouseout    = null;
      this.onclick       = null;
      // xbMarquee state events
      this.onstart       = null;
      this.onbounce      = null;
      var markup = '';
      if (document.layers)
        markup = '<ilayer id="' + this.id + 'container" name="' + this.id + 'container" ' +
                 'height="' + height + '" ' +
                 'width="' + width + '"  ' +
                 'clip="' + width + ', ' + height + '" ' +
                 '>' + 
                 '<\/ilayer>';            
      else if (document.body && typeof(document.body.innerHTML) != 'string')
        markup = '<div id="' + this.id + 'container" name="' + this.id + 'container" ' +
                 'style=" ' + 
                 'height: ' + this.height + this.heightUnit + '; ' +
                 'width: ' + this.width + this.widthUnit + '; ' +
                 'clip: rect(0px, ' + this.width + this.widthUnit + ', ' + this.height + this.heightUnit + ', 0px); ' +
                 '">' + 
                 '<div id="' + this.id + '" style="' + 
                 (this.isHorizontal ? 'width:0px;' : '') + // if we scroll horizontally, make the text container as small as possible
                 '">' +
                 (this.isHorizontal ? '<nobr>' : '') +
                 this.html +
                 (this.isHorizontal ? '<\/nobr>' : '') +
                 '<\/div>' +
                 '<\/div>';             
      else 
        markup = '<div id="' + this.id + 'container" name="' + 
                 this.id + 'container" ' +
                 'style=" overflowY: visible; ' + 
                 'height: ' + this.height + this.heightUnit + '; ' +
                 'width: ' + this.width + this.widthUnit + '; ' +
                 'clip: rect(0px, ' + this.width + this.widthUnit + ', ' + this.height + this.heightUnit + ', 0px); ' +
                '">' + 
                 '<\/div>';             
      document.write(markup);  
      window[this.name] = this;
    // Class Properties/Methods
    xbMarquee._name = -1;
    xbMarquee._getInnerSize = function(elm, propName)
      var val = 0;
      if (document.layers)
        // navigator 4
        val = elm.document[propName];    
      else if (elm.style && typeof(elm.style[propName]) == 'number')
        // opera
        // bug in Opera 6 width/offsetWidth. Use clientWidth
        if (propName == 'width' && typeof(elm.clientWidth) == 'number')
          val = elm.clientWidth;
        else
          val =  elm.style[propName];
      else
        //mozilla and IE
        switch (propName)
        case 'height':
           if (typeof(elm.offsetHeight) == 'number')
             val =  elm.offsetHeight;
           break;
        case 'width':
           if (typeof(elm.offsetWidth) == 'number')
             val = elm.offsetWidth;                  
           break;
      return val;
    xbMarquee.getElm = function(id)
      var elm = null;
      if (document.getElementById)
        elm = document.getElementById(id);
      else
        elm = document.all[id];
      return elm;
    xbMarquee.dispatchUIEvent = function (event, marqueeName, eventName)
      var marquee = window[marqueeName];
      var eventAttr = 'on' + eventName;
      if (!marquee)
        return false;
      if (!event && window.event)
        event = window.event;
      switch (eventName)
      case 'mouseover':
      case 'mouseout':
      case 'click':
        if (marquee[eventAttr])
          return marquee['on' + eventName](event);
      return false;
    xbMarquee.createDispatchEventAttr = function (marqueeName, eventName)
      return 'on' + eventName + '="xbMarquee.dispatchUIEvent(event, \'' + marqueeName + '\', \'' + eventName + '\')" ';
    // Instance properties/methods
    xbMarquee.prototype.start = function ()
      var markup = '';
      this.stop();
      if (!this.dirsign)
        if (!document.layers)
          this.containerDiv = xbMarquee.getElm(this.id + 'container')
          if (typeof(this.containerDiv.innerHTML) != 'string')
            return;
          // adjust the container size before inner div is filled in
          // so IE will not hork the size of percentage units 
          var parentNode    = null;
          if (this.containerDiv.parentNode)
            parentNode = this.containerDiv.parentNode;
          else if (this.containerDiv.parentElement)
            parentNode = this.containerDiv.parentElement;
          if (parentNode && 
              typeof(parentNode.offsetHeight) == 'number' && 
              typeof(parentNode.offsetWidth) == 'number')
            if (this.heightUnit == '%')
              this.containerDiv.style.height = 
              parentNode.offsetHeight * (this.height/100) + 'px';
            if (this.widthUnit == '%')
              this.containerDiv.style.width = 
              parentNode.offsetWidth * (this.width/100) + 'px';
          markup += '<div id="' + this.id + '" name="' + this.id + '" ' +
            'style=" ' +
            //(this.isHorizontal ? 'width:0px;' : '') + // if we scroll horizontally, make the text container as small as possible
            '" ' +
            xbMarquee.createDispatchEventAttr(this.name, 'mouseover') +
            xbMarquee.createDispatchEventAttr(this.name, 'mouseout') +
            xbMarquee.createDispatchEventAttr(this.name, 'click') +
            '>' +
            (this.isHorizontal ? '<nobr>' : '') +
            this.html +
            (this.isHorizontal ? '<\/nobr>' : '') +
            '<\/div>';
          this.containerDiv.innerHTML = markup;
          this.div                    = xbMarquee.getElm(this.id);
          this.styleObj     = this.div.style;      
        else /* if (document.layers) */
          this.containerDiv = document.layers[this.id + 'container'];
          markup = 
            '<layer id="' + this.id + '" name="' + this.id + '" top="0" left="0" ' +
            xbMarquee.createDispatchEventAttr(this.name, 'mouseover') +
            xbMarquee.createDispatchEventAttr(this.name, 'mouseout') +
            xbMarquee.createDispatchEventAttr(this.name, 'click') +
            '>' +
            (this.isHorizontal ? '<nobr>' : '') + 
            this.html +
            (this.isHorizontal ? '<\/nobr>' : '') +
            '<\/layer>';
          this.containerDiv.document.write(markup);
          this.containerDiv.document.close();
          this.div          = this.containerDiv.document.layers[this.id];
          this.styleObj     = this.div;
        if (this.isHorizontal && this.height < xbMarquee._getInnerSize(this.div, 'height') )
          this.height = xbMarquee._getInnerSize(this.div, 'height')
          this.containerDiv.style.height = this.height + this.heightUnit;
          this.containerDiv.style.clip = 'rect(0px, ' + this.width + this.widthUnit + ', ' + this.height + this.heightUnit + ', 0px)';
        // Start must not run until the page load event has fired
        // due to Internet Explorer not setting the height and width of 
        // the dynamically written content until then
        switch (this.direction)
        case 'down':
          this.dirsign = 1;
          this.startAt = -xbMarquee._getInnerSize(this.div, 'height');
          this._setTop(this.startAt);
          if (this.heightUnit == '%')
            this.stopAt = this.height * xbMarquee._getInnerSize(this.containerDiv, 'height') / 100;
          else
            this.stopAt  = this.height;
          break;
        case 'up':
          this.dirsign = -1;
          if (this.heightUnit == '%')
            this.startAt = this.height * xbMarquee._getInnerSize(this.containerDiv, 'height') / 100;
          else     
            this.startAt = this.height;
          this._setTop(this.startAt);
          this.stopAt  = -xbMarquee._getInnerSize(this.div, 'height');      
          break;
        case 'right':
          this.dirsign = 1;
          this.startAt = -xbMarquee._getInnerSize(this.div, 'width');
          this._setLeft(this.startAt);
          if (this.widthUnit == '%')
            this.stopAt = this.width * xbMarquee._getInnerSize(this.containerDiv, 'width') / 100;
          else    
            this.stopAt  = this.width;
          break;
        case 'left':
        default:
          this.dirsign = -1;
    if (this.widthUnit == '%')
    this.startAt = this.width * xbMarquee._getInnerSize(this.containerDiv, 'width') / 100;
    else  
    this.startAt = this.width        
    this._setLeft(this.startAt);
    // this.stopAt  = -xbMarquee._getInnerSize(this.div,'width')*2;
    // this method does not work very well with FireFox.  offsetWidth property used in this function returns the absolute width of the div container
    // instead of the new offsetWidth when innerHTML is added or when the div becomes wider. To overcome this a new span element is added to 
    // the document body to measure the new offsetwidth and then it is removed.
    var temp_span = document.createElement('span');     
    temp_span.id = 'span_' + this.div.id;
    temp_span.innerHTML = this.html;
    document.body.appendChild(temp_span);                
    this.stopAt = - temp_span.firstChild.firstChild.offsetWidth;
    document.body.removeChild(temp_span);            
          break;
        this.newPosition          = this.startAt;
        this.styleObj.visibility = 'visible'; 
      this.newPosition += this.dirsign * this.scrollAmount;
      if ( (this.dirsign == 1  && this.newPosition > this.stopAt) ||
           (this.dirsign == -1 && this.newPosition < this.stopAt) )
        if (this.behavior == 'alternate')
          if (this.onbounce)
            // fire bounce when alternate changes directions
            this.onbounce();
          this.dirsign = -this.dirsign;
          var temp     = this.stopAt;
          this.stopAt  = this.startAt;
          this.startAt = temp;
        else
          // fire start when position is a start
          if (this.onstart)
            this.onstart();
          this.newPosition = this.startAt;
      switch(this.direction)
        case 'up': 
        case 'down':
          this._setTop(this.newPosition);
          break;
        case 'left': 
        case 'right':
        default:
          this._setLeft(this.newPosition);
          break;
      this.runId = setTimeout(this.name + '.start()', this.scrollDelay);
    xbMarquee.prototype.stop = function ()
      if (this.runId)
        clearTimeout(this.runId);
      this.runId = null;
    xbMarquee.prototype.setInnerHTML = function (html)
      if (typeof(this.div.innerHTML) != 'string')
        return;
      var running = false;
      if (this.runId)
        running = true;
        this.stop();
      this.html = html;
      this.dirsign = null;
      if (running)
        this.start();
    // fixes standards mode in gecko
    // since units are required
    if (document.layers)
      xbMarquee.prototype._setLeft = function (left)
        this.styleObj.left = left;    
      xbMarquee.prototype._setTop = function (top)
        this.styleObj.top = top;    
    else
      xbMarquee.prototype._setLeft = function (left)
        this.styleObj.left = left + 'px';    
      xbMarquee.prototype._setTop = function (top)
        this.styleObj.top = top + 'px';    
    Still not working. Nothing will display on my web part xml viewer.

Maybe you are looking for

  • How do I add metadata in Pages 5.2?

    I can't seem to find any Information tab in the Inspector like there used to be, where you can add metadata to your document -- Author, Title, Description, Keywords. Has this function disappeared?

  • How to use SNRO to create daily number range?

    Dear all, I would like to know how to use SNRO to create a daily number range. We would like to have the following sequence. The first 8 digits are date and the last 2 digits are number sequence. Each day, the last 2 digits will start from 01 again.

  • TextCleanup script in IndyCS2 gives error

    Hi, I'm running IndyCS2 ver. 4.0.5 on Mac OS X 10.4.10. I've loaded the "TextCleanup" script, along with its companion text file, "ASFindChangeList.txt". (have not tampered with either file.) The script starts out normally, but towards the end (20 li

  • Translation of sapscript Form language

    Hi Experts, I have smart form in En language i have requirement to translate the form from EN language to combodian KHMER language, I know the txn SE76 and SE63, The language KHMER is not appearing in target language, can some tell me how add the lan

  • TransMemory_Secure3.exe won't load

    Earlier today I purchased a 16GB USB 2.0 Flash Drive. The outside of the packaging says "Includes downloadable security software with password protection to safeguard your files." Sounds pretty nifty so I decided to get said software. That's where my