forum.bitel.ru
http://forum.bitel.ru/

Использование объектов в макросах
http://forum.bitel.ru/viewtopic.php?f=44&t=12112
Страница 1 из 1

Автор:  skyb [ 22 ноя 2016, 07:50 ]
Заголовок сообщения:  Использование объектов в макросах

Подскажите, как можно использовать параметры из объектов в макросах подстановок
Код:
Также в командах можно задавать переменные. Переменные обозначаются через значок $. Примеры $ip, $vlan и т.п. Список переменных
host - ip адрес устройства из поля Хост/порт
ip - ip адрес сервиса или сессии (192.168.1.1)
net - сеть сервиса (192.168.1.1/32)
mask,bitmask - битовая маска сервиса (32)
netmask - маска сервиса в виде (255.255.255.255)
netmaskWild - маска wildcard сервиса (0.0.0.0)
vlan - vlan сервиса
iface, port - интерфейс сервиса
ifaceTitle - наименование интерфейса сервиса
mac - MAC-адрес сервиса (00:14:fd:11:dd:79)
macBytes - MAC-адрес сервиса (0014fd11dd79)
macBytesDoted - MAC-адрес сервиса (abcd.ef12.3456)
servId - код сервиса
servTitle - наименование сервиса
contractId - код договора
contractTitle - название договора
translit($contractTitle) - транслитерация аргумента
ipGate - значение поля Gate из IP-ресурса
ipDns - значение поля DNS из IP-ресурса
ipSubnetMask - значение поля Маска подсети из IP-ресурса
ipParam(myParam) - значение параметра конфигурации myParam из IP-ресурса
deviceAttr(1) - значение атрибута 1 устройства
deviceAttr(1,2,default) - значение атрибута 2 устройства 1
ifaceTitleBeforeColon - название интерфейса из тайтла до : . Например EPON0/1:2 = EPON0/1
ifaceTitleAfterColon - название интерфейса из тайтла после : . Например EPON0/1:2 = 2
servParam - параметр сервиса из вкладки Дополнительно (параметры хранятся с индексами .1/.2 в ключах, поэтому до 7.0 нужно указывать ключ.1)
$deviceIP($servDeviceId) - IP устройства, привязанного к сервису
$deviceIdentifier($servDeviceId) - идентификатор устройства, привязанного к сервису
$iface($servDeviceId) - порт сервиса

Автор:  barguzin2 [ 22 ноя 2016, 14:57 ]
Заголовок сообщения:  Re: Использование объектов в макросах

видимо, придумать макрос самому, т.к. таковых сейчас нет и дописать код SA. Или попросить об этом разработчиков.
или как обычно, helpdesk=>доработка=>профит

Автор:  skyb [ 22 ноя 2016, 16:55 ]
Заголовок сообщения:  Re: Использование объектов в макросах

А примера нет случаем?

Автор:  Amir [ 22 ноя 2016, 17:06 ]
Заголовок сообщения:  Re: Использование объектов в макросах

В самом AbstractTerminalServiceActivator:
Код:
      else if( "contractTitle".equals( macros ) )
      {
         final DefaultContext context = DefaultContext.get();
         final ContractRuntime contractRuntime = ContractRuntimeMap.getInstance().getContractRuntime( context.getConnectionSet(), serv.getContractId() );
         if( contractRuntime == null )
         {
            return "null";
         }

         return contractRuntime.getContractTitle();
      }

Автор:  skyb [ 23 ноя 2016, 12:13 ]
Заголовок сообщения:  Re: Использование объектов в макросах

А как то можно сделать так, чтобы при обновлении этот класс не перетирался? А то не вспомню что менял )
и подскажите как номер супердоговора получить?
Код:
      else if( "contractTitleParent".equals( macros ) )
      {
         final DefaultContext context = DefaultContext.get();
         final ContractRuntime contractRuntime = ContractRuntimeMap.getInstance().getContractRuntime( context.getConnectionSet(), serv.getContractId() );
         if( contractRuntime == null )
         {
            return "null";
         }

         return ContractRuntimeMap.getInstance().getContractRuntime( context.getConnectionSet(), contractRuntime.getSuperContractId()).getContractTitle();
      }

так говорит что id договора = 0

Автор:  Amir [ 23 ноя 2016, 18:16 ]
Заголовок сообщения:  Re: Использование объектов в макросах

Никак, только расширять своим классом в другом пакете.

contractRuntime.getSuperContractId()

Автор:  skyb [ 24 ноя 2016, 11:58 ]
Заголовок сообщения:  Re: Использование объектов в макросах

Amir писал(а):
Никак, только расширять своим классом в другом пакете.

contractRuntime.getSuperContractId()

Код:
else if( "contractParentTitle".equals( macros ) )
      {
         final DefaultContext context = DefaultContext.get();
         final ContractManager cm = new ContractManager(context.getConnectionSet().getConnection());
         final Contract c = cm.getContractById(serv.getContractId());
         if( c == null )
         {
            return "null";
         }
         return cm.getContractById(c.getSuperId()).getTitle();
      }

если я так сделаю, ничего не поломается? ))))

Автор:  Amir [ 24 ноя 2016, 17:15 ]
Заголовок сообщения:  Re: Использование объектов в макросах

Ну если договор не найдент с superId - то упадет.
Лучше через ContractRuntime использовать - там title кэшируется, не будет базу нагружать лишними запросами.

Автор:  skyb [ 25 ноя 2016, 08:11 ]
Заголовок сообщения:  Re: Использование объектов в макросах

Amir писал(а):
Ну если договор не найдент с superId - то упадет.
Лучше через ContractRuntime использовать - там title кэшируется, не будет базу нагружать лишними запросами.

а я не особо понял как это сделать :-(

Автор:  Amir [ 25 ноя 2016, 13:09 ]
Заголовок сообщения:  Re: Использование объектов в макросах

Код:
      else if( "contractTitleParent".equals( macros ) )
      {
         final DefaultContext context = DefaultContext.get();
         ContractRuntime contractRuntime = ContractRuntimeMap.getInstance().getContractRuntime( context.getConnectionSet(), serv.getContractId() );
         if( contractRuntime == null )
         {
            return "null";
         }

         contractRuntime = ContractRuntimeMap.getInstance().getContractRuntime( context.getConnectionSet(), contractRuntime.getSuperContractId() );
         if( contractRuntime == null )
         {
            return "null";
         }

         return contractRuntime.getContractTitle();
      }

Автор:  skyb [ 02 дек 2016, 06:58 ]
Заголовок сообщения:  Re: Использование объектов в макросах

Amir писал(а):
Код:
      else if( "contractTitleParent".equals( macros ) )
      {
         final DefaultContext context = DefaultContext.get();
         ContractRuntime contractRuntime = ContractRuntimeMap.getInstance().getContractRuntime( context.getConnectionSet(), serv.getContractId() );
         if( contractRuntime == null )
         {
            return "null";
         }

         contractRuntime = ContractRuntimeMap.getInstance().getContractRuntime( context.getConnectionSet(), contractRuntime.getSuperContractId() );
         if( contractRuntime == null )
         {
            return "null";
         }

         return contractRuntime.getContractTitle();
      }

Так null прилетает

Автор:  Amir [ 02 дек 2016, 17:08 ]
Заголовок сообщения:  Re: Использование объектов в макросах

null когда у договора этого сервиса есть родительский?

Автор:  skyb [ 02 дек 2016, 17:21 ]
Заголовок сообщения:  Re: Использование объектов в макросах

не, идея то какая была, на субдоговоре передать название супердоговора, везде сервисы родительские, без дочерних

Автор:  Amir [ 02 дек 2016, 18:21 ]
Заголовок сообщения:  Re: Использование объектов в макросах

Добавить логирования, посмотреть кто из них null.
По идее null сейчас вернет, если супер договора нет у текущего договора.

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/