Публикация

Хакинг BPMonline:Добавление молнии(SmartTag) и Menu в LookUp контрол

1) Сначала в контрол типа LookUp добавляем кнопку (обычный Button) как дочерний элемент
2) Далее в нужном месте добавляем в её меню элементы (на примере молнии ConfigurationItemToolButton)

var menuItem = CreateMenuItem(configurationItemName, configurationItemId.ToString(), "ItemClick_Yw", Page.ConfigurationItemToolButton.ClientID);
Page.ConfigurationItemToolButton.Menu.AddCaptionItem(menuItem);
Page.AddScript(string.Format("{0}.init_ev()", menuItem.ClientID));

ConfigurationItemToolButton - сама кнопка SmartTag
configurationItemName - будет Caption нашего пункта, например, название элемента
configurationItemId - GUID выбираемого элемета, который присвоим нашему LookUp-полю в случае его выбора, кладём в Tag пункта меню

3) На событии Init создаём подписку по нажатию пункта меню этой кнопки, где сами определяем, какая должна быть логика, логично, что должна быть установка значения в Lookup , но это надо написать самим, так как логика может быть любой:

Page.ConfigurationItemToolButton.AjaxEvents.MenuItemClick.Event += delegate(object sender, Terrasoft.UI.WebControls.Controls.AjaxEventArgs e) {
string ConfigurationItemIdString = e.ExtraParameters[2].Value.ToString();
int LocUnderChar = ConfigurationItemIdString.LastIndexOf("_");
if (LocUnderChar > 0)
ConfigurationItemIdString = ConfigurationItemIdString.Remove(0,LocUnderChar+1);
var clickedMenuItemCode = new Guid(ConfigurationItemIdString);                        
Page.DataSource.ActiveRow.SetColumnValue("ConfigurationItemId", clickedMenuItemCode);
Page.DataSource.ActiveRow.LoadLookupDisplayValues("ConfigurationItem");
};

Тут e.ExtraParameters[2].Value передаётся не совсем GUID, поэтому пришлось немного обрезать.
Ниже код метода CreateMeniItem и CreateSeparatorMenuItem

protected virtual Terrasoft.UI.WebControls.Controls.MenuItem CreateMenuItem(string caption, string tag, string signalName, string targetControlID) {
                        var menuItem = new Terrasoft.UI.WebControls.Controls.MenuItem(caption);
menuItem.Tag = tag;
menuItem.AjaxEvents.Click.SignalName = signalName;
menuItem.Name = "menuItem_" + Guid.NewGuid().ToString("N");
menuItem.CreatedByAjax = true;
menuItem.AjaxEvents.Click.AjaxEventTargetControlID = targetControlID;
return menuItem;
                }

                protected virtual MenuSeparator CreateSeparatorMenuItem(string caption) {
                        return new MenuSeparator {
        Name = "menuItem_" + Guid.NewGuid().ToString("N"),
        Caption = caption,
        CreatedByAjax = true
};
}

Нравится

Поделиться

0 комментариев
Показать все комментарии