Показать сообщение отдельно
Старый 08.10.2012, 09:41   #5  
Masel is offline
Masel
Участник
 
39 / 527 (18) +++++++
Регистрация: 19.09.2007
Цитата:
Сообщение от 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 на сервере в модификации реализован, так что вызывающий код об этом может не заботиться.
При создании книги (workbook) из шаблона на сервере аксапта кидает Exception::ClrError. Что я делаю не так? Кстати если создавать книгу не из шаблона, то все отрабатывает корректно.
Права на шаблон у учетки АОСа FullControl.