Великолепно! Спасибо!
Остался один ньюанс - loopServ не учитывает периоды активности дочерних сервисов. Можно всё же сделать чтобы учитывал? Я пока реализовал так:
Код:
else if( "loopServ".equals( macros ) )
{
String macr = AbstractTerminalServiceActivator.this.config.get( getString( args, 0, "n_2356" ), null );
if( Utils.isEmptyString( macr ) )
{
return "";
}
boolean needParent = Utils.parseBoolean( getString( args, 1, "false" ) );
boolean exec = Utils.parseBoolean( getString( args, 2, "false" ) );
Date today = new Date();
final InetServ serv = (InetServ)globalArgs[1];
if( exec )
{
if( needParent )
{
try
{
executeCommand0( macr, (ServiceActivatorEvent)globalArgs[0], serv, (InetConnection)globalArgs[2], (Set<Integer>)globalArgs[3] );
}
catch( Exception e )
{
throw new BGRuntimeException( e );
}
}
final List<InetServ> children = serv.getChildren();
if( children != null && children.size() > 0 )
{
for( InetServ child : children )
{
if(!TimeUtils.dateInRange(today, child.getDateFrom(), child.getDateTo()))
continue;
try
{
executeCommand0( macr, (ServiceActivatorEvent)globalArgs[0], child, (InetConnection)globalArgs[2], (Set<Integer>)globalArgs[3] );
}
catch( Exception e )
{
throw new BGRuntimeException( e );
}
}
}
return "";
}
else
{
StringBuilder sb = new StringBuilder();
if( needParent )
{
//getValue( (ServiceActivatorEvent)globalArgs[0], (InetServ)globalArgs[1], (InetConnection)globalArgs[2], (Set<Integer>)globalArgs[3], macros, args, globalArgs );
Object[] globalArgs2 = Arrays.copyOf( globalArgs, globalArgs.length );
globalArgs[1] = serv;
sb.append( this.format( macr, globalArgs ) );
}
final List<InetServ> children = serv.getChildren();
if( children != null && children.size() > 0 )
{
for( InetServ child : children )
{
if(!TimeUtils.dateInRange(today, child.getDateFrom(), child.getDateTo()))
continue;
//getValue( (ServiceActivatorEvent)globalArgs[0], (InetServ)globalArgs[1], (InetConnection)globalArgs[2], (Set<Integer>)globalArgs[3], macros, args, globalArgs );
Object[] globalArgs2 = Arrays.copyOf( globalArgs, globalArgs.length );
globalArgs[1] = child;
sb.append( this.format( macr, globalArgs ) );
}
}
return sb.toString();
}
}
Но вы как-то писали, что есть еще один ньюанс - система самостоятельно не отслеживает начало/конец периода. Но может быть можно это реализовать в задаче "активация/деактивация сервисов"?