fnSetTransports = function(aChanges, iChangeIdx, oControl, sTransport, bFromDialog) {
			if (iChangeIdx >= 0) {
				var oCurrentChange = aChanges[iChangeIdx];

				if (bFromDialog === true) {
					// if the request has been set by the transport dialog already,
					// do not bring up the transport dialog a second time, but use this transport instead
					// if the change is locked on another transport, this will be resolved in the back end when the DELETE request is send
					if (oCurrentChange.getFlexObjectMetadata().packageName !== "$TMP") {
						oCurrentChange.setRequest(sTransport);
					}
					iChangeIdx--;
					// set the transport for the next request
					return fnSetTransports(aChanges, iChangeIdx, oControl, sTransport, bFromDialog);
				}
				// bring up the transport dialog to get the transport information for a change
				if (oCurrentChange.getFlexObjectMetadata().packageName !== "$TMP") {
					var oTransportInfo = {
						name: oCurrentChange.getId(),
						type: oCurrentChange.getFileType(),
						"package": oCurrentChange.getFlexObjectMetadata().packageName,
						namespace: oCurrentChange.getNamespace()
					};
					return that.openTransportSelection(oTransportInfo, oControl).then(function(oTransportInfo) {
						if (oTransportInfo === "cancel") {
							return Promise.reject("cancel");
						}
						oCurrentChange.setRequest(oTransportInfo.transport);

						if (oTransportInfo.fromDialog === true) {
							sTransport = oTransportInfo.transport;
							bFromDialog = true;
						}

						iChangeIdx--;
						// set the transport for the next request
						return fnSetTransports(aChanges, iChangeIdx, oControl, sTransport, bFromDialog);
					}, function() {
						return null;
					});
				}

				iChangeIdx--;
				// set the transport for the next request
				return fnSetTransports(aChanges, iChangeIdx, oControl, sTransport, bFromDialog);
			}

			return Promise.resolve(); // last change has been processed, continue with discarding the changes
		}
Sets the transports for all changes.

@param {sap.ui.fl.apply._internal.flexObjects.FlexObject[]} aChanges - Array of change instances
@param {object} oControl - Object of the root control for the transport
@returns {Promise} Promise that resolves without parameters or rejects with "cancel" value in case escape/cancel is triggered from the transport dialog
@public