добавить столбец с именем клиента(С)

Обсуждение вопросов и решений

Модератор: ykolesnikov

Ответить
mukexa
OTRS Новобранец
Сообщения: 148
Зарегистрирован: 30 апр 2013, 19:08
Откуда: Украина, Киев.
Поблагодарили: 1 раз

добавить столбец с именем клиента(С)

Сообщение mukexa » 25 май 2013, 17:21

Собственно это лишь небольшое дополнение к теме(сообщениям пользователя "lelikflegma"): http://forums.otterhub.org/viewtopic.ph ... d2e#p55313
Тут описано как добавить имя компании в таблицу списка клиентов и в поиск.
1. $Data{UserCompanyName} = $Row[17]; 17 - это номер столбца в запросе, считаем с нуля. Почему акцентирую внимание, он(номер) сдвинется если будем добавлять в МАР масив новые поля.
2. Касается поиска. Автор строк оставил формат "по-умолчанию" результат поиска в заявке(всплывающее окно):
Остался один минус - при автопоиске выдаются результаты в виде:
"Иван Иванов 00000001" <email@email.com> (ivan.ivanov)
Т.е. название компании не отображается. Не могу расковырять где форматируется результат запроса (я подозреваю что это делается уже яваскриптами и AJAX-ом...). Запрос используется тот же самый, из Kernel/System/CustomerUser/DB.pm подпрограмма CustomerSearch, можно в запросе в SELECT добавить название компании и подставить в результат автопоиска...
Немножко раскрутил это дело, так как для меня актуально.
Парсер строки частично(а может и весь) находится в файле "Core.Agent.CustomerSearch.js", по крайней мере строка

Код: Выделить всё

label: this.CustomerValue [b]+ " (" + this.CustomerKey + ")"[/b],
формирует вид "Иван Иванов 00000001" <email@email.com> + (login)
Хотя для меня логин в результатах и не нужен, но этот файл трогать не стал(особо не мешает).
Далее разбираем первую часть "Иван Иванов 00000001" <email@email.com>.
Разделим строку еще на две части "Иван Иванов 00000001" и <email@email.com>.
Смотрим строку CustomerUserListFields => ['login', 'first_name', 'last_name', 'customer_id', 'email'], в Defaults.pm(правим тут или в Config.pm, кто как читает документацию :) ). Изменяя названия полей изменяем отображение результата.
"email" есть разделителем на две части.
Рассмотрим два варианта размещения айдишки(customer_id):
CustomerUserListFields => ['login', 'first_name', 'last_name', 'customer_id', 'email' ] - "Иван Иванов 00000001" <email@email.com> (login)
CustomerUserListFields => ['login', 'first_name', 'last_name', 'email', 'customer_id' ] - "Иван Иванов" <email@email.com 00000001> (login)
Убираем "email" из строки:
CustomerUserListFields => ['login', 'first_name', 'last_name', 'customer_id'] - Иван Иванов 00000001 (login)
Подбираем информацию которая Вам нужна, мне актуальна строка "Имя компании - Заголовок клиента (login)". Логин, как уже говорил остался потому как не охота править ява скрипты.
Но у нас остаётся вопрос с именем компании в результате.
файл Kernel/System/CustomerUser/DB.pm
подпрограмма CustomerSearch
строка
my $SQL = "SELECT $Self->{CustomerKey} ";
заменяем на
my $SQL = "SELECT $Self->{CustomerTable}.$Self->{CustomerKey} ";
только заменяем на:

Код: Выделить всё

my $SQL = "SELECT $Self->{CustomerTable}.$Self->{CustomerKey}, CONCAT('', ".$Self->{ConfigObject}->Get('CustomerCompany')->{Params}->{Table}.".name, ' - ' )";
В итоге получил то что хотел:
Снимок.PNG
Снимок.PNG (9.48 КБ) 7248 просмотров
Удачи!
OTRS 5s, Ubuntu 12.04

alexus
OTRS Гуру
Сообщения: 5192
Зарегистрирован: 20 сен 2010, 18:17
Откуда: Москва
Благодарил (а): 92 раза
Поблагодарили: 82 раза

Re: добавить столбец с именем клиента(С)

Сообщение alexus » 26 май 2013, 00:31

С поправкой на то, что кастомный DB.pm следует поместить в Custom/Kernel/System/CustomerUser, в HOWTO однозначно!!!
С уважением,
Алексей Юсов

Prod: OTRS CE ITSM 6.0.28 on CentOS 7 Apache 2.4 MariaDB 10.4.13 + Radiant Customer Portal

Radiant System OTRS Intergrator RU
Группа OTRS Community в Teleram
Хотите внедрить OTRS? Спросите меня как!

mukexa
OTRS Новобранец
Сообщения: 148
Зарегистрирован: 30 апр 2013, 19:08
Откуда: Украина, Киев.
Поблагодарили: 1 раз

Re: добавить столбец с именем клиента(С)

Сообщение mukexa » 26 май 2013, 09:25

Я, честно признаться, по поводу "Custom"-ности не очень то еще понял :oops: . В "Custom/Kernel/..." переносить весь файл или можно только ф-ции которые изменяем?
Если не сложно, поясните. То же самое с ".dtl", весь? Дело в том, что ворочаю на тестовой инсталляции, пока админы будут разворачивать на сервере. И вот боюсь накручу, а потом непонятно будет, что и где правил )
OTRS 5s, Ubuntu 12.04

alexus
OTRS Гуру
Сообщения: 5192
Зарегистрирован: 20 сен 2010, 18:17
Откуда: Москва
Благодарил (а): 92 раза
Поблагодарили: 82 раза

Re: добавить столбец с именем клиента(С)

Сообщение alexus » 26 май 2013, 15:58

Все очень просто. Измененный модуль помещаете в папку Custom с повторением пути, включая Kernel, т.е. например /opt/otrs/Custom/Kernel/System/CustomerUser/DB.pm. OTRS сначала просматривает папку Custom, и если находит в ней модуль, аналогичный "родному", принимает во внимание его. При этом родной файл /Kernel/System/CustomerUser/DB.pm не задействуется. Соответственно для каждого кастомного модуля создается свой "родной" путь папок. ВНИМАНИЕ! Необходимо перезапустить Apache после размещения нового файла, чтобы он "узнал", что в кастомной папке лежит новый файл. Потом после изменения апач перезапускать не надо. Кэш чистить в любом случае.
С dtl-файлами та же история, только их надо помещать в кастомную тему. Подробнее тут - http://doc.otrs.org/3.2/en/html/themes.html.

2 огромных плюса при таком правильном подходе:
1. При обновлении папки Custom и новых тем не затрагиваются.
2. Вы четко контролируете все изменения.
С уважением,
Алексей Юсов

Prod: OTRS CE ITSM 6.0.28 on CentOS 7 Apache 2.4 MariaDB 10.4.13 + Radiant Customer Portal

Radiant System OTRS Intergrator RU
Группа OTRS Community в Teleram
Хотите внедрить OTRS? Спросите меня как!

mukexa
OTRS Новобранец
Сообщения: 148
Зарегистрирован: 30 апр 2013, 19:08
Откуда: Украина, Киев.
Поблагодарили: 1 раз

Re: добавить столбец с именем клиента(С)

Сообщение mukexa » 27 май 2013, 10:51

Спасибо за пояснения. Часть этого читал, но не понятен был(да и сейчас так) вариант когда при обновлении должен поменяться родной DB.pm. А у меня же останется скопирован старый. Или этого быть не может?
У нас в ПО берутся системные настройки и если есть, то перекрываются пользовательскими. Наверное привык к такому подходу ) Хотя ведь и тут настройки так же читаются из двух файлов.
В общем будем посмотреть, еще раз спасибо!
OTRS 5s, Ubuntu 12.04

vovab
OTRS Новобранец
Сообщения: 17
Зарегистрирован: 27 фев 2013, 21:16

Re: добавить столбец с именем клиента(С)

Сообщение vovab » 22 июл 2013, 19:28

mukexa писал(а):Собственно это лишь небольшое дополнение к теме(сообщениям пользователя "lelikflegma"): http://forums.otterhub.org/viewtopic.ph ... d2e#p55313
Тут описано как добавить имя компании в таблицу списка клиентов и в поиск.
1. $Data{UserCompanyName} = $Row[17]; 17 - это номер столбца в запросе, считаем с нуля. Почему акцентирую внимание, он(номер) сдвинется если будем добавлять в МАР масив новые поля.
Удачи!
попробовал эту настройку - не получилось.
выполнил по инструкции по ссылке, номера строк не совсем совпадают, но вроде все правильно нашел. падает на строке $Data{UserCompanyName} = $Row[17]; - если ее закомментить - все ок.

Есть какие-то нюансы или у всех сразу получилось?
Алексей Шульгин
SoftServe Business Systems
OTRS 3.3.12 + ITSM 3.3.12

mukexa
OTRS Новобранец
Сообщения: 148
Зарегистрирован: 30 апр 2013, 19:08
Откуда: Украина, Киев.
Поблагодарили: 1 раз

Re: добавить столбец с именем клиента(С)

Сообщение mukexa » 22 июл 2013, 20:58

$Data{UserCompanyName} = $Row[17]; 17 - это номер столбца в запросе, считаем с нуля. Почему акцентирую внимание, он(номер) сдвинется если будем добавлять в МАР масив новые поля.
Смотрим лог SQL и видим запрос(в моём случае):
7 Query SELECT customer_user.title, customer_user.first_name, customer_user.last_name, customer_user.login, customer_user.pw, customer_user.email, customer_user.customer_id, customer_user.f_printer, customer_user.phone, customer_user.fax, customer_user.mobile, customer_user.street, customer_user.zip, customer_user.city, customer_user.country, customer_user.comments, customer_user.valid_id, customer_user.login, customer_company.name FROM customer_user left join customer_company on customer_company.customer_ID=customer_user.customer_ID WHERE LOWER(login) = LOWER('2')
У меня добавлялось поле фискального регистратора(принтера) потому в DB.pm:

Код: Выделить всё

$Data{UserCompanyName} =  $Row[18];  
Так же не забываем чистить "кеш".
OTRS 5s, Ubuntu 12.04

vovab
OTRS Новобранец
Сообщения: 17
Зарегистрирован: 27 фев 2013, 21:16

Re: добавить столбец с именем клиента(С)

Сообщение vovab » 23 июл 2013, 14:53

Да, таки промахнулся со вставкой строки.
Все работает, в том числе и данное дополнение.
Спасибо.
Алексей Шульгин
SoftServe Business Systems
OTRS 3.3.12 + ITSM 3.3.12

mukexa
OTRS Новобранец
Сообщения: 148
Зарегистрирован: 30 апр 2013, 19:08
Откуда: Украина, Киев.
Поблагодарили: 1 раз

Re: добавить столбец с именем клиента(С)

Сообщение mukexa » 19 авг 2013, 12:24

Пересмотрел еще раз процедуру и пришел к выводу, что лучше использовать вот такой формат записи:
$Data{UserCompanyName} = $Row[$MapCounter+1];
в таком случае МАР масив можно менять как угодно и сколько угодно, без вреда.
OTRS 5s, Ubuntu 12.04

Ответить