Показать сообщение отдельно
Старый 06.11.2007, 15:30   #12  
c_makarov is offline
c_makarov
Участник
 
2 / 15 (1) ++
Регистрация: 14.03.2007
Это делается так:


X++:
static void oo_4(Args _args)
{

    COM OpenOffice;
    COM DeskTop;
    COM Document;
    COM MyStruct;
    str filepath;

    // аргумент для вызова методов через диспатч
    COMVariant varArg1 = new COMVariant();
    // аргумент для массива свойств
    COMVariant var = new COMVariant();

    // Это для того, чтобы вызывать диспатчевые методы
    // а конкретно - аксапта часто не умеет ставить значения пропертям
    // и приходится вот так.
    ComDispFunction Func;

    // аргумент для всяких методов
    COMVariant arg;

    // иногда нужен массив свойств
    Array arr = new Array(Types::Class);

    // Создание экземпляра OpenOffice.org
    OpenOffice = new Com("com.sun.star.ServiceManager");
    DeskTop = OpenOffice.CreateInstance("com.sun.star.frame.Desktop");


    // получаем объект, в котором хранится свойство (для передачи в функцию)
    MyStruct = OpenOffice.Bridge_GetStruct("com.sun.star.beans.PropertyValue");

    Func = new COMDispFunction(MyStruct, "Name",  COMDispContext::PropertyPut);
    varArg1.bStr("AsTemplate");
    Func.call(varArg1);

    Func = new COMDispFunction(MyStruct, "Value",  COMDispContext::PropertyPut);
    varArg1.boolean(true);
    Func.call(varArg1);

    var = COMVariant::createFromCOM(MyStruct);
    arr.value(1,var);
    
    // Создание документа

    // create and initialize a COMVariant object
    arg = COMVariant::createFromArray(arr);

       
    filepath = "file://///Axapta-aos/Шаблоны/Претензии.xlt";

    Document = DeskTop.LoadComponentFromURL(filepath, "_blank", 0, arg);


}
За это сообщение автора поблагодарили: NeveB (1), Lucky13 (2).