Хакинг BPMonline:Добавление молнии(SmartTag) и Menu в LookUp контрол
1) Сначала в контрол типа LookUp добавляем кнопку (обычный Button) как дочерний элемент
2) Далее в нужном месте добавляем в её меню элементы (на примере молнии ConfigurationItemToolButton)
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 , но это надо написать самим, так как логика может быть любой:
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
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
};
}