Сообщение от
gl00mie
Подводный камень только один: решить, когда создавать SysExcelApplication нужно все-таки именно на клиенте, поскольку один и тот же
серверный код может работать как в пакете, так и интерактивно, и в последнем случае, очевидно, Excel должен запускаться на клиентской машине. Я это решил так:
X++:
public static client server SysExcelApplication_NET construct(ClassRunMode _contructOnTier = ClassRunMode::Client)
{
SysExcelApplication_NET ret;
;
switch (_contructOnTier)
{
case ClassRunMode::Called :
case ClassRunMode::ClientOrServer :
ret = new SysExcelApplication_NET();
break;
case ClassRunMode::Client :
ret = classFactory::makeObjectOnClient( classnum(SysExcelApplication_NET) );
break;
case ClassRunMode::Server :
ret = classFactory::makeObjectOnServer( classnum(SysExcelApplication_NET) );
break;
default :
throw error( Error::unsupportedEnumValue( _contructOnTier ) );
}
return ret;
}
public static client server SysExcelApplication construct()
{
SysExcelApplication ret;
COM excel;
real excelVersion;
;
if (SysExcel::mustInteropViaNET())
{
return SysExcelApplication_NET::construct( clientKind() == ClientType::Server ? ClassRunMode::Server : ClassRunMode::Client );
}
// ...
Запрос всех InteropPermission'ов для взаимодействия с CLR на сервере в модификации реализован, так что вызывающий код об этом может не заботиться.