forum.bitel.ru http://forum.bitel.ru/ |
|
Список шаблонов http://forum.bitel.ru/viewtopic.php?f=19&t=7984 |
Страница 1 из 1 |
Автор: | Phricker [ 22 апр 2013, 17:04 ] |
Заголовок сообщения: | Список шаблонов |
Где-то была тема в которой спрашивалось как можно редактировать список шаблонов договоров, доступный при создании договоров. Собственно ее я не нашел - поэтому пишу тут (запилю в вики, как потрачу на это чуть более чем 5 минут. Т.е. когда доберусь всерьез. Где будут сортировка в зависимости от групп пользователя и т.п. А сейчас просто отвлекся от работы, вспомнил про это и решил попробовать ![]() В 5.2 версии можно писать свои экшны и заменять ими встроенные. На вики есть статья По ней и будем делать. Для примера напишем вот такое (признаюсь содрал из стандартного экшна) Код: package ru.xxx.test; import java.sql.*; import org.w3c.dom.Element; import ru.bitel.bgbilling.common.BGException; public class GetPatternList extends bitel.billing.server.contract.action.ActionGetPatternList { @Override public void doAction() throws SQLException, BGException { Element patterns = createElement(rootNode, "patterns"); if(request.getParameter("nondef") == null) addListItem(patterns, "0", "\u041F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E"); String query = "SELECT id, title FROM contract_pattern WHERE title NOT LIKE '!%' ORDER BY title"; Statement st = con.createStatement(); ResultSet rs; for(rs = st.executeQuery(query); rs.next(); addListItem(patterns, rs.getString(1), rs.getString(2))); rs.close(); st.close(); } } В конфиге сервера добавляем строку Код: dynaction:contract.ActionGetPatternList=ru.xxx.test.GetPatternList И все. При создании договора в список шаблонов доступных для выбора не попадут все шаблоны которые начинаются со знака !. Вообще можно написать проверку на группу прав пользователя, или же что-нибудь подобное, и если будет попадать под условие - выводить определенный список. Иначе - отдавать управление встроенному экшну. О чем и написано в статье на вики. |
Автор: | Phricker [ 22 апр 2013, 17:10 ] |
Заголовок сообщения: | Re: Список шаблонов |
И кстати, по-моему, в той теме был вопрос как убрать шаблон "По умолчанию". Достаточно просто удалить или закомментировать строки Код: // if(request.getParameter("nondef") == null)
// addListItem(patterns, "0", "\u041F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E"); |
Автор: | Phricker [ 22 апр 2013, 17:13 ] |
Заголовок сообщения: | Re: Список шаблонов |
А во. Нашел тему как раз по этому "По умолчанию" ![]() |
Автор: | nik247 [ 21 май 2013, 18:43 ] |
Заголовок сообщения: | Re: Список шаблонов |
Спасибо за направление, как делать. Вот допилил показывать список шаблонов на основе фильтров, которые указываются в конфигах сервера и пользователя. 1) в конфигурации сервера увказываем список фильтров с id шаблонов, которые нужно показывать: Код: user.template.filter.1=1 Важно: id шаблонов указывать через "," - так как потом используется прямо в SQL (пока сделал так)user.template.filter.2=2 user.template.filter.3=1,2,3 2) в конфигурации пользователя указываем нужный фильтр: Код: user.template.filterId=1 Важно: если фильтр не указать, то выведется пустой список шаблонов.Мне так нужно было, для явного указания шаблонов для пользователей. Кому нужно - измените код. Если указан user.template.filterId=0, то фильтр вообще не используется - выводит все шаблоны, включая шаблон "По умолчанию" Ну и сам код: Код: package ru.bitel.bgbilling.modules.contract.action; import java.sql.*; import org.w3c.dom.Element; import ru.bitel.bgbilling.common.BGException; import ru.bitel.bgbilling.kernel.module.common.bean.User; import ru.bitel.bgbilling.kernel.module.server.bean.UserManager; import ru.bitel.bgbilling.server.util.UserMap; import ru.bitel.common.Preferences; import java.security.AccessController; import javax.security.auth.Subject; import bitel.billing.server.admin.bgsecure.bean.UserLoginModule.UserPrincipal; import ru.bitel.bgbilling.server.util.Setup; public class GetPatternList extends bitel.billing.server.contract.action.ActionGetPatternList { @Override public void doAction() throws SQLException, BGException { //получаем id текущего пользователя Integer currentUserId = getCurrentUserId(); //получаем ID фильтра шаблонов с конфигурации пользователя. int filterId = getTemplateFilterId( currentUserId ); String SqlTemplateFilter = ""; switch ( filterId ) { case -1: { //вывод пустого списка шаблонов, если в конфиге не указан фильтр. log.debug("Custom TEMPLATES: filterId not set:" + filterId ); SqlTemplateFilter = " WHERE id = -1 "; break; } case 0: { //вывод всех шаблонов - для администраторов. log.debug("Custom TEMPLATES: admin filterId=" + filterId ); SqlTemplateFilter = " "; break; } default: { log.debug("Custom TEMPLATES: iserId=" + currentUserId + " filterId=" + filterId ); //считывание фильтров шаблонов с конфигурации от 1 до 99 String tmplIds = ""; for (int t = 1; t < 100; t++) { tmplIds = this.setup.get("user.template.filter." + t, null); //вывод пустого списка шаблонов по умолчанию SqlTemplateFilter = " WHERE id = -1 "; //поиск IDs шаблонов договоров if ( t == filterId ) { log.debug("Custom TEMPLATES: found tmplIds=" + tmplIds ); SqlTemplateFilter = " WHERE id IN (" + tmplIds + ") "; break; } } } } //формирование списка шаблона договоров Element patterns = createElement(rootNode, "patterns"); //вывод шаблона "по умолчанию" - включаем для Админов if ( filterId == 0 ) { if(request.getParameter("nondef") == null) addListItem(patterns, "0", "\u041F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E"); } String query = "SELECT id, title FROM contract_pattern " + SqlTemplateFilter + " ORDER BY title"; //log.debug("Custom TEMPLATES: sql=" + query ); Statement st = con.createStatement(); ResultSet rs; for(rs = st.executeQuery(query); rs.next(); addListItem(patterns, rs.getString(1), rs.getString(2))); rs.close(); st.close(); } public int getTemplateFilterId (int userId) throws BGException { User user = UserMap.getUser(Integer.valueOf(userId)); String user_config = user.getConfig(); Preferences userConfig = new Preferences(user_config, "\r\n"); int TemplateFilterId = userConfig.getInt("user.template.filterId", -1); return TemplateFilterId; } public Integer getCurrentUserId() { Subject subject = Subject.getSubject( AccessController.getContext() ); if( subject != null ) { for( UserPrincipal userPrincipal : subject.getPrincipals( UserPrincipal.class ) ) { return userPrincipal.getUser().getId(); } } return null; } } Ну и не забываем в конфиге сервера переопределить action: Код: dynaction:contract.ActionGetPatternList=ru.bitel.bgbilling.modules.contract.action.GetPatternList
|
Автор: | Phricker [ 21 май 2013, 19:23 ] |
Заголовок сообщения: | Re: Список шаблонов |
Спасибо ![]() |
Автор: | nik247 [ 21 май 2013, 19:39 ] |
Заголовок сообщения: | Re: Список шаблонов |
Спасибо за розмещение на wiki. Я внес одно изменение. Если номера фильтров не попорядку, то не все фильтры обрабатывались - ограничил от 1 до 99: Было: Код: //считывание фильтров шаблонов с конфигурации Стало:String tmplIds = ""; for (int t = 1; tmplIds != null; t++) Код: //считывание фильтров шаблонов с конфигурации от 1 до 99 String tmplIds = ""; for (int t = 1; t < 100; t++) Можете на wiki изменить? |
Автор: | Phricker [ 21 май 2013, 19:48 ] |
Заголовок сообщения: | Re: Список шаблонов |
Готово |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |