Five New Optimizely Certifications are Here! Validate your expertise and advance your career with our latest certification exams. Click here to find out more
Five New Optimizely Certifications are Here! Validate your expertise and advance your career with our latest certification exams. Click here to find out more
CommandManager is a specific class for handling actions in Commerce Manager.
The following command types are available:
The command types are described in more detail below.
Commends are defined in the View/Commands section of an XML file.
The command description looks like this:
<Command id="Command_Name1">
<CommandType>Navigate</CommandType>
...
</Command>
The example below shows how to bind a command to a toolbar button simply by adding the commandName attribute with the command identifier to Button.
<Button id="Button1" text="button text" commandName="Command_Name1"></Button>
The command parameters are described in more details below.
The navigate-type command can contain the following tags:
The server handler must implement the ICommandEnableHandler interface:
public class CanAdminHandler : ICommandEnableHandler
{
public bool IsEnable(object Sender, object Element)
{
bool retval = false;
return retval;
}
}
Example:
<Command id="MC_ListApp_ManageList">
<CommandType>Navigate</CommandType>
<Url>~/Apps/ListApp/ListInfoView.aspx?class={QueryString:ViewName}</Url>
</Command>
You can use the following templates as dynamic parameters for the Url parameter:
The OpenWindow-type command can contain the following tags:
In WEB we do not have a standard use-case for monitoring closed pop-up windows, so we need to make some additional actions. To update the parent window, we need to run the following code:
CommandManager.RegisterRefreshParentWindowScript(this.Page, param);
Here param – string parameter, which will be sent to the Javascript function; if you do not need any parameters for the client side, you can send String.Empty.
Use the following code to close the current pop-up windows and refresh parent windows:
CommandManager.RegisterCloseOpenedWindowScript(this.Page, param);
For updating UpdatePanels in the parent window (which are defined in the XML description), run the following code:
CommandParameters cp = new CommandParameters(commandId);
CommandManager.RegisterRefreshParentWindowScript(this.Page, cp.ToString());
or
string command = String.Empty;
if (!String.IsNullOrEmpty(CommandName))
{
CommandParameters cp = new CommandParameters(CommandName);
command = cp.ToString();
}
Here commandId – command name, which is mapped from <Commandid=""> in the XML.
Example:
<Command id="MC_TimeTracking_MultipleAdd">
<CommandType>OpenWindow</CommandType>
<Url>~/Apps/MultipleAdd.aspx?ViewName={QueryString:ViewName}</Url>
<Width>500</Width>
<Height>375</Height>
<Resize>False</Resize>
<Scroll>False</Scroll>
<UpdatePanelIds>UpdatePanel1,UpdatePanel2</UpdatePanelIds>
</Command>
CommandParameters cp = new CommandParameters("MC_TimeTracking_MultipleAdd");
CommandManager.RegisterRefreshParentWindowScript(this.Page, cp.ToString());
The OpenFrameModalPopup-type of command can contain these tags:
Example:
<Command id="MC_ListApp_AddMetaField">
<CommandType>OpenModalPopup</CommandType>
<Url>~/Apps/MetaFieldListEdit.ascx</Url>
<Width>600</Width>
<Height>440</Height>
<Left>20</Left>
<Top>20</Top>
<PopupTitle>{IbnFramework.ListInfo:tAddField}</PopupTitle>
</Command>
The .ascx-control, which should be displayed in dialog, must implement the IModalPopupControl interface:
public partial class QuickAddControl : System.Web.UI.UserControl, IModalPopupControl
{
#region IModalPopupControl Members
public void BindData(string p)
{
}
public string ContainerId
{
get
{
if (ViewState["ContainerId"] != null)
return ViewState["ContainerId"].ToString();
else
return String.Empty;
}
set
{
ViewState["ContainerId"] = value;
}
}
public string ScriptHidePopup
{
get
{
if (ViewState["ScriptHidePopup"] != null)
return ViewState["ScriptHidePopup"].ToString();
else
return String.Empty;
}
set
{
ViewState["ScriptHidePopup"] = value;
}
}
#endregion
}
For updating the parent window and closing the ModalPopup, run the following code:
CommandParameters cp = new CommandParameters(commandId);
CommandManager.RegisterCloseOpenedFrameScript(this.Page, cp.ToString());
If the parent window contains UpdatePanels, and we need to run a full update for the window when the button id="Btn1" is pressed, we can run the next code in Page_Load for the .ascx control:
ScriptManager.GetCurrent(this.Page).RegisterPostBackControl(Btn1);
For closing ModalPopup:
CancelButton.OnClientClick =
CommandManager.GetCloseOpenedFrameScript(
this.Page, String.Empty, false, true);
If you need to run another command from ModalPopup:
CommandManager cm = CommandManager.GetCurrent(this.Page);
Dictionary<string, string> prms = new Dictionary<string, string>();
string command = cm.AddCommand(className, viewName, placeName, "MC_TimeTracking_MultipleAdd", prms);
MultipleAddLink.NavigateUrl = String.Format(
CultureInfo.InvariantCulture,
"javascript:{0};{1}", ScriptHidePopup, command);
Example: UI for IFrame ModalPopup:
These are the steps to create an example of a dialog for a custom page "MyPage.aspx".
<?xml version="1.0" encoding="utf-8" ?>
<View xmlns="http://schemas.mediachase.com/ecf/view">
<ListViewUI>
<Commands>
<add>
<Command id="MyCommand">
<CommandType>OpenModalPopup</CommandType>
<Url>~/Apps/MyControl.ascx</Url>
<Width>300</Width>
<Height>200</Height>
<Left>100</Left>
<Top>100</Top>
<Drag>True</Drag>
<PopupTitle>Some Title</PopupTitle>
</Command>
</add>
</Commands>
</ListViewUI>
</View>
Run the following code for MyPage in order to display the dialog:
CommandManager cm = CommandManager.GetCurrent(this.Page);
CommandParameters cp = new CommandParameters("MyCommand");
string command = cm.AddCommand("MyPage ", "", "", cp);
After running the AddCommand method, the variable command will contain Javasctipt code. If you add the "javascript:" prefix, you can then use the NavigateUrl property for the HyperLink control .
The ServerAction-type command can contain the following tags:
Example:
<Command id="MC_ListApp_Selected_Delete">
<CommandType>ServerAction</CommandType>
<ConfirmationText>{IbnFramework.Common:DeleteConfirm}</ConfirmationText>
<Handler>Mediachase.Ibn.DeleteSelectedItemsHandler, Mediachase.UI.Web</Handler>
</Command>
The server handler must implement the ICommand interface. Below is an example of the server handler, with actions for selected elements in the grid:
public class DeleteHandler : ICommand
{
public void Invoke(object Sender, object Element)
{
if (Element is CommandParameters)
{
CommandParameters cp = (CommandParameters)Element;
string[] selectedElements = MetaGrid.GetCheckedCollection(((CommandManager)Sender).Page, cp.CommandArguments["GridId"]);
foreach (string elem in selectedElements)
{
string id = elem.Split(new string[] { "::" }, StringSplitOptions.RemoveEmptyEntries)[0];
// Here some actions for elements
// ...
}
}
}
}
Example showing how to get the primaryKeyId for a grid record:
CommandParameters cp = (CommandParameters)Element;
if (cp.CommandArguments["primaryKeyId"] == null)
throw new ArgumentException();
PrimaryKeyId pk = PrimaryKeyId.Parse(cp.CommandArguments["primaryKeyId"]);
The ClientAction-type command can contain the following tags:
Last updated: May 28, 2015