Hi Expert,
I have created a master detail app. I have button that gives a popover in one of my view fragments. This popover shows a smartform via "get stream" method in the odata service. This popover is a fragment as well. Till i click on the popover, i can see data on my master side and my detail side. When i click on my popover button, the popover works perfectly, but the detail data in my first fragment view disappears. How do i keep the data binding alive. Here is my code :
Popover.fragment.xml:
<core:FragmentDefinition xmlns:core="sap.ui.core" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="sap.m"> <Popover class="sapUiContentPadding" initialFocus="email" placement="Bottom" title="{Name}"> <Panel xmlns="sap.m" id="id" headerText="" width="100%" height="auto" expandable="false" expanded="false" expandAnimation="true" backgroundDesign="Translucent" expand="" > <html:iframe height="700" id="frame" width="700"></html:iframe> <tooltip></tooltip> <!-- sap.ui.core.TooltipBase --> <dependents></dependents> <!-- sap.ui.core.Control, since 1.19 --> <content></content><!-- sap.ui.core.Control --> <headerToolbar></headerToolbar><!-- sap.m.Toolbar --> <infoToolbar></infoToolbar><!-- sap.m.Toolbar --> </Panel> <footer> <Toolbar> <ToolbarSpacer/> </Toolbar> </footer> </Popover></core:FragmentDefinition>
DetailInfoForm.fragment.XML
<core:FragmentDefinition xmlns:l="sap.ui.layout" xmlns:f="sap.ui.layout.form" xmlns:core="sap.ui.core" xmlns="sap.m"> <l:Grid id="detailFragment" defaultSpan="L12 M12 S12" width="auto"> <l:content> <Button text="" press="handlePopoverPress" type="Transparent" icon="sap-icon://display"/> <f:SimpleForm minWidth="1024" maxContainerCols="2" editable="false" layout="ResponsiveGridLayout" title="" labelSpanL="3" labelSpanM="3" emptySpanL="4" emptySpanM="4" columnsL="1" columnsM="1"> <f:content> <Label id="labe21" text="PO number."/> <Text id="text1" text="{Ponumber}"/> <Label id="labe20" text="Po Item"/> <Text id="text2" text="{Poitem}"/> <Label id="labe22" text="Asset No."/> <Text id="text3" text="{Assetno}"/> <Label id="label5" text="Description"/> <Text text="{Itemtext}"/> </f:content> </f:SimpleForm> </l:content> </l:Grid></core:FragmentDefinition>
Detail.controller.js
handlePopoverPress: function (oEvent) {
// create popover
if (! this._oPopover) {
this._oPopover = sap.ui.xmlfragment("com.reg.view.Popover", this);
this.getView().addDependent(this._oPopover);
var oCtx = oEvent.getSource().getBindingContext();
oDetailPage.bindElement(oCtx.getPath());
console.log(oCtx);
this._oPopover.bindElement("/ZMasterSet(Ponumber='0040005636',Poitem='00010',Assetno='000008139914')/Zsmart_nav");
}
// delay because addDependent will do a async rerendering and the actionSheet will immediately close without it.
var oButton = oEvent.getSource();
jQuery.sap.delayedCall(0, this, function () {
this._oPopover.openBy(oButton);
});
var sUrl = "/sap/opu/odata/sap/ZFI_REG_ASSET_V9_SRV";
var oAssetno = sap.ui.core.Fragment.byId(this._fragmentName, "text1").getText();
var oPonumber = sap.ui.core.Fragment.byId(this._fragmentName, "text2").getText();
var oPoitem = sap.ui.core.Fragment.byId(this._fragmentName, "text3").getText();
var oView = this.getView();
var html = new sap.ui.core.HTML();
var opdfmodel = new sap.ui.model.json.JSONModel();
var opdfurl = {};
var oModel = new sap.ui.model.odata.ODataModel(sUrl, true);
var oData = oModel.getData();
var sRead = "/pdfSet(Ponumber='" + oPonumber + "',Poitem='" + oPoitem + "',Assetno='" + oAssetno + "')/$value";
oModel.read(sRead, null, null, true, function(oData, oResponse) {
var pdfurl = oResponse.requestUri;
$("#frame").attr('src', oResponse.requestUri);
opdfmodel.setData({
pdfurl: pdfurl
});
sap.ui.getCore().setModel(opdfmodel);
oView.setModel(opdfmodel);
});
},