src/sap.ui.rta/src/sap/ui/rta/plugin/additionalElements/AdditionalElementsAnalyzer.js
function (oElement, mAction) {
			var oDefaultAggregation = oElement.getMetadata().getAggregation();
			var sAggregationName = oDefaultAggregation ? oDefaultAggregation.name : mAction.action.aggregation;
			var oModel = oElement.getModel();

			return Promise.resolve()
				.then(function () {
					return _getODataPropertiesOfModel(oElement, sAggregationName);
				})
				.then(function(mData) {
					var aODataProperties = mData.property;
					var aRelevantElements = _getRelevantElements(oElement, mAction.relevantContainer, sAggregationName);
					var aBindings = [];

					aRelevantElements.forEach(function(oElement){
						aBindings = aBindings.concat(BindingsExtractor.getBindings(oElement, oModel));
					});

					var fnFilter = mAction.action.filter ? mAction.action.filter : function() {return true;};

					aODataProperties = aODataProperties.filter(function(oDataProperty) {
						var bHasBindingPath = false;
						if (aBindings){
							bHasBindingPath = aBindings.some(function(vBinding) {
								return (
									jQuery.isPlainObject(vBinding)
									? vBinding.parts[0].path
									: !!vBinding.getPath && vBinding.getPath()
								) === oDataProperty.bindingPath;
							});
						}
						return !bHasBindingPath && fnFilter(mAction.relevantContainer, oDataProperty);
					});

					aODataProperties = _checkForComplexDuplicates(aODataProperties);

					return aODataProperties;
				})
				.then(function(aUnboundODataProperties) {
					return aUnboundODataProperties.map(_oDataPropertyToAdditionalElementInfo);
				});
		}
function (oElement, mAction) {
			var oDefaultAggregation = oElement.getMetadata().getAggregation();
			var sAggregationName = oDefaultAggregation ? oDefaultAggregation.name : mAction.action.aggregation;
			var oModel = oElement.getModel();

			return Promise.resolve()
				.then(function () {
					return _getODataPropertiesOfModel(oElement, sAggregationName);
				})
				.then(function(mData) {
					var aODataProperties = mData.property;
					var aRelevantElements = _getRelevantElements(oElement, mAction.relevantContainer, sAggregationName);
					var aBindings = [];

					aRelevantElements.forEach(function(oElement){
						aBindings = aBindings.concat(BindingsExtractor.getBindings(oElement, oModel));
					});

					var fnFilter = mAction.action.filter ? mAction.action.filter : function() {return true;};

					aODataProperties = aODataProperties.filter(function(oDataProperty) {
						var bHasBindingPath = false;
						if (aBindings){
							bHasBindingPath = aBindings.some(function(vBinding) {
								return (
									jQuery.isPlainObject(vBinding)
									? vBinding.parts[0].path
									: !!vBinding.getPath && vBinding.getPath()
								) === oDataProperty.bindingPath;
							});
						}
						return !bHasBindingPath && fnFilter(mAction.relevantContainer, oDataProperty);
					});

					aODataProperties = _checkForComplexDuplicates(aODataProperties);

					return aODataProperties;
				})
				.then(function(aUnboundODataProperties) {
					return aUnboundODataProperties.map(_oDataPropertyToAdditionalElementInfo);
				});
		}
function ( oElement , mAction ) { var oDefaultAggregation = oElement . getMetadata ( ) . getAggregation ( ) ; var sAggregationName = oDefaultAggregation ? oDefaultAggregation . name : mAction . action . aggregation ; var oModel = oElement . getModel ( ) ; return Promise . resolve ( ) . then ( function ( ) { return _getODataPropertiesOfModel ( oElement , sAggregationName ) ; } ) . then ( function ( mData ) { var aODataProperties = mData . property ; var aRelevantElements = _getRelevantElements ( oElement , mAction . relevantContainer , sAggregationName ) ; var aBindings = [ ] ; aRelevantElements . forEach ( function ( oElement ) { aBindings = aBindings . concat ( BindingsExtractor . getBindings ( oElement , oModel ) ) ; } ) ; var fnFilter = mAction . action . filter ? mAction . action . filter : function ( ) { return true ; } ; aODataProperties = aODataProperties . filter ( function ( oDataProperty ) { var bHasBindingPath = false ; if ( aBindings ) { bHasBindingPath = aBindings . some ( function ( vBinding ) { return ( jQuery . isPlainObject ( vBinding ) ? vBinding . parts [ 0 ] . path : ! ! vBinding . getPath && vBinding . getPath ( ) ) === oDataProperty . bindingPath ; } ) ; } return ! bHasBindingPath && fnFilter ( mAction . relevantContainer , oDataProperty ) ; } ) ; aODataProperties = _checkForComplexDuplicates ( aODataProperties ) ; return aODataProperties ; } ) . then ( function ( aUnboundODataProperties ) { return aUnboundODataProperties . map ( _oDataPropertyToAdditionalElementInfo ) ; } ) ; }
Retrieves available OData properties from the metadata

@param {sap.ui.core.Control} oElement - Source element of which Model we're looking for additional properties
@param {Object} mAction - Action descriptor

@return {Promise} - returns a Promise which resolves with a list of available to display OData properties
Retrieves available OData properties from the metadata