Hi @Surender Balasundaram
This is an interesting requirement. I've put together a proof of concept for you today - a working solution that I briefly tested in my local DEV RBA environment. To implement it, you'll need to customize two applications: TECHMOBILE and SRMOBILE. Please apply the solution and do some tests in your environment.
a) Changes in TECHMOBILE application:
1.File src/app.xml - page relatedWorkOrder section states
<page id="relatedWorkOrder" title="Follow-up work" controller="RelatedWoController">
<states id="d9gdk">
<state name="forceSyncFollowUP" value="false" type="boolean" id="e2n5d"/>
<!-- IBM Community Customisation [START] -->
<state name="cLoadSRData" value="false" type="boolean" id="cLoadSRDataState"/>
<state name="cLoadingSRTicketId" value="" type="string" id="cLoadingSRTicketIdState"/>
<!-- IBM Community Customisation [END] -->
</states>
(...)
2. File src/app.xml - page relatedWorkOrder section data-list - new button definition and layout
<middle id="g_w9q">
<data-list datasource="relatedrectkt" show-search="false" empty-row-style="false" empty-set-string="No related records." id="d9b8x">
<list-item id="r5dwv">
<adaptive-row id="xzpvq">
(...)
<adaptive-column small-width="100" medium-width="10" large-width="10" small-horizontal-align="start" medium-horizontal-align="end" large-horizontal-align="end" id="ereyy">
<box direction="column" vertical-align="center" children-hide-overflow="true" id="z9w2_">
<label label="{item.relatetypedesc}" padding="default" id="bx9g_"/>
</box>
</adaptive-column>
<!-- IBM Community Customisation [START] -->
<adaptive-column small-width="100" medium-width="10" large-width="10" small-horizontal-align="start" medium-horizontal-align="end" large-horizontal-align="end" id="cSRNavAdaptiveColumn">
<box direction="column" vertical-align="center" id="cSRNavBtn">
<button icon="carbon:chevron--right" kind="ghost" padding="false" loading="{page.state.cLoadSRData && page.state.cLoadingSRTicketId === item.relatedreckey}" on-click="navigateToSRDetails" on-click-arg="{{'item': item}}" id="cSRNavButton"/>
</box>
</adaptive-column>
<!-- IBM Community Customisation [END] -->
</adaptive-row>
</list-item>
</data-list>
</middle>
3. File src/AppCustomizations.js new navigateToSRDetails method definition
// Custom Application Logic
class AppCustomizations {
applicationInitialized(app,page) {
this.app = app;
this.page = page;
}
async navigateToSRDetails(event) {
const item = event.item;
const page = this.app.currentPage;
page.state.cLoadSRData = true;
page.state.cLoadingSRTicketId = item.relatedreckey;
try {
const context = {
page: 'srDetails',
ticketid: item.relatedreckey,
};
this.app.callController('loadApp', {
appName: 'srmobile',
context,
});
} catch (e) {
// navigation failed silently
} finally {
page.state.cLoadSRData = false;
page.state.cLoadingSRTicketId = '';
}
}
}
export default AppCustomizations;
b) Changes in SRMOBILE application:
1.File src/AppCustomizations.js
class AppCustomizations {
applicationInitialized(app) {
this.app = app;
this.setupIncomingContext();
}
setupIncomingContext(){
const incomingContext = this.app?.state?.incomingContext;
if (incomingContext && incomingContext.ticketid) {
this.loadSRAndNavigate(incomingContext.ticketid);
}
}
async loadSRAndNavigate(ticketid) {
try {
// viewSrDS is offline-immediate-download="false" so it always hits the server
const viewSrDS = this.app.findDatasource('viewSrDS');
viewSrDS.clearState();
viewSrDS.resetState();
viewSrDS.lastQuery = {};
viewSrDS.state.currentSearch = '';
await viewSrDS.initializeQbe();
viewSrDS.setQBE('ticketid', '=', ticketid);
await viewSrDS.searchQBE(undefined, true);
if (viewSrDS.items?.length) {
this.app.state.selectedSR = viewSrDS.items[0];
this.app.setCurrentPage({ name: 'srDetails', resetScroll: true });
}
} catch (e) {
// If SR not found or access denied, fall back to main page
}
}
}
export default AppCustomizations;
Good luck!