Search code examples
odatasapui5

XML Calculated binding path


I'm looking for a way to bind a field to some aggregate value, based on the value in another attribute. I know there are several other ways to do this, but if I can make this work, it'll be considerably better than my alternatives.

This is what I have so far, using expression binding:

<Text text="{= ${path:'/ProjectStatus(${key})/status'} }"/>

Purpose: Bind to the ProjectStatus object that matches the key attribute of the current object, and get the status attribute from that.

Thanks in advance!


Solution

  • Sorry, that won't work. You can't use expression binding for this purpose. Expression binding is quite powerful, but meant for formatting and a little bit of math, not for defining bindings.

    It would also not be advisable to solve it this way. If you want to create a key for and entity, you should always use the createKey method of your ODataModel, to make sure that key follows the syntax corresponding with the property type. E.g.: /ProjectStatus('ABC') for a key of type String, or /ProjectStatus(123) for a key of type Int.

    Best is to get your controller to perform a bindElement on the Text control. Something similar to this:

    this.getView().byId("TextId").bindElement(
        oModel.createKey("/ProjectStatus", { Id: sKey })
    );
    

    After that you could just use <Text text="{status}" /> to show the status of the project.