After reading the title of this post, you might have got some idea
what the scenario I am going to talk about today. This is the scenario where I
have two buttons exposed on the UI and both having the same Method Invoked =
"ShowPopup".
1.
Create SR : this
button is being used for displaying “Create SR Popup Applet”.
2. Create Order : this
button is being used for displaying “Create Order Popup Applet”.
For
configuring this simple requirement, you can have the following configuration:
“Create SR”
Button
|
“Create
Order” Button
|
Method
Invoked = ShowPopup
Control
User Properties
o
Popup =
Create SR Popup Applet
o
Mode = Edit
|
Method
Invoked = ShowPopup
Control
User Properties
o
Popup =
Create Order Popup Applet
o
Mode = Edit
|
No
Issue till now. This pretty simple configuration would work fine!
But
the problem comes in when there is a need to execute few lines of server script
when each button is clicked, something like:
If “Create SR” button clicked then
Set the Profile
Attribute “NewEntityCreated” to “Service
Request”
Call the web service “X” to retrieve some values from other
system.
After that display the
popup applet : “Create SR Popup Applet”
If “Create Order” button clicked then
Set the Profile
Attribute “NewEntityCreated” to “Order
Entry - Orders”
Call the web service “Y” to retrieve some values from other
system.
After that display the
popup applet : “Create Order Popup Applet”
So,
now the problem is, both button clicked will invoke the method “ShowPopup” and
there is no way to identify which button is actually clicked.
Solution:
To
overcome this, we have to have the different “Method Invoked” on each button.
1.
Instead of using
“ShowPopup”, invoke the custom method for each button i.e.
a.
Method Invoke
for “Create SR” button would be “CreateSR”.
b.
Method Invoke
for “Create Order” button would be “CreateOrder”.
2.
Put the server script in PreInvokeMethod of
the applet:
if(MethodName == "CreateSR")
{
TheApplication().SetProfileAttr(“NewEntityCreated”, “Service
Request”);
// Code for calling
the Web Service X
// ……………………………………………………
// ……………………………………………………
PopupApplet(“Create SR Popup Applet”);
return
(CancelOperation);
}
if(MethodName ==
"CreateOrder")
{
TheApplication().SetProfileAttr(“NewEntityCreated”, “Order Entry -
Orders”);
// Code for calling
the Web Service Y
// ……………………………………………………
// ……………………………………………………
PopupApplet(“Create Order Popup Applet”);
return
(CancelOperation);
}
3.
Create a new
Function as per below script:
function PopupApplet(strAppletName)
{
var oBSSLM = TheApplication().GetService("SLM Save List
Service");
var psInp = TheApplication().NewPropertySet();
var psOut = TheApplication().NewPropertySet();
psInp.SetProperty("Applet Height", "400");
psInp.SetProperty("Applet Mode", "2");
psInp.SetProperty("Applet Name", strAppletName);
psInp.SetProperty("Applet Width", "800");
oBSSLM.InvokeMethod("LoadPopupApplet", psInp , psOut);
}
Limitation of “SLM Save List Service” business service
If
there is a requirement to display another popup applet from a button click on a
Popup applet, then this business service doesn’t work and you might see the
error:
View: <?> does not contain applet: <?>.(SBL-UIF-00401)
So,
in this case the only choice is to either use “ShowPopup” method or if you can’t
use it because of the scenario explained above (having two buttons with same
Method Invoke i.e. ShowPopup) then other option is to use hijack the custom
method invoked and invoke the Browser Script (for displaying popup applet) as
explained here in earlier post.
Good Work !!
ReplyDeleteWonderful blog post, thanks as because i found it very informative one.
ReplyDeleteHi Gaurav,
ReplyDeleteI tried the exact steps mentioned by you but still I could not get the pop up window. Just for testing I made it simple and wanted to get the pop up when certain field value changes to what I have defined in my variable but no luck.
Also tell me when i create this control what should be the HTML Type??
Thanks for any help in advance!!
Hi Gaurav,
ReplyDeleteyour articles are really so helpfull and good technical for newbiees.
Thanks
Sekhar
Same scenario was encountered. too helpful, But had an error actually the class is not CSSFrameListPopup
ReplyDeletei use this method but the second time i press the button my siebel crashes !! What wrong ???
ReplyDeleteplease check if you see the same behaviour for other applet?
DeleteThanks man!! is so usefull
ReplyDelete