AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
DAX
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.04.2007, 11:40   #1  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
А что сделать-то надо? Преобразовать процедуру на VBA в джоб на X++ ? Или загрузить номенклатуру из Аксапты в Лотус?
Старый 04.04.2007, 11:46   #2  
VKUR is offline
VKUR
Участник
Аватар для VKUR
 
12 / 10 (1) +
Регистрация: 19.03.2007
Цитата:
Сообщение от Gustav Посмотреть сообщение
А что сделать-то надо? Преобразовать процедуру на VBA в джоб на X++ ? Или загрузить номенклатуру из Аксапты в Лотус?
Для начала хотя бы преобразовать в джоб
Стоит задача настроить внесение изменений в Lotus (в реальном времени) при создании/корректировке номенклатуры в АХ

Последний раз редактировалось VKUR; 04.04.2007 в 11:49.
Старый 04.04.2007, 12:36   #3  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от VKUR Посмотреть сообщение
Для начала хотя бы преобразовать в джоб
ну, подход примерно такой:

1. описываем переменные как str
str recid;
str imtetype;
и остальные тоже

2. описываем вот эти объектные переменные как COM
Dim s As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim doc As NotesDocument

т.е заменяем на
COM s;
COM db;
и т.д.

3. Далее для воплощения оператора New NotesSession нужно знать строковый идентификатор этого COM-объекта.

например, для Excel это "Excel.Application" и строка создания выглядит так:
xlApp = new COM("Excel.Application");

а вам нужно аналогичное для NotesSession (вместо многоточия):
s = new COM("...");

4. В конце каждого оператора - точка с запятой : s.Initialize(Password);

5. Для объектов слово Set не надо, просто присваивание: db = s.GetDatabase(Server, Path);

6. Если у метода нет параметров, то все равно круглые скобки в конце: doc = db.CreateDocument();

7. Конструкцию "If doc Is Nothing Then" заменяем на "if (!doc)"

8. Select Case => switch

9. Ключевое слово Call не надо.

ну и т.д. Начинайте!

P.S. 10. Оператор Path$ = "dev\po2.nsf" , содержащий обратный слэш можно преобразовать либо так c удвоением: path = 'dev\\po2.nsf'; либо так с собакой: path = @'dev\po2.nsf';
За это сообщение автора поблагодарили: VKUR (1).
Старый 04.04.2007, 15:43   #4  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Как вариант с минимальными усилиями: можете попробовать запускать из Аксапты вашу VBA-процедуру в первозданном эксельном виде на невидимом эксельном хосте при помощи следующего джоба:
X++:
static void Job_CreateNomenclature(Args _args)
{
    COM xlApp, wbks, wbk;
    ;
    xlApp = new COM('Excel.Application');

    wbks = xlApp.Workbooks();
    wbk  = wbks.Open(@'C:\YourExcelFile.xls');

    xlApp.Run('CreateNomenclature');
}
За это сообщение автора поблагодарили: VKUR (1).
Старый 17.04.2007, 10:18   #5  
VKUR is offline
VKUR
Участник
Аватар для VKUR
 
12 / 10 (1) +
Регистрация: 19.03.2007
Цитата:
Сообщение от Gustav Посмотреть сообщение
ну, подход примерно такой:
Снова здорова

Проект = doc.GetItemValue("fldProject")(0)

То есть получение первого элемента массива. Не могу понять как это будет выглядеть в Х++
Старый 17.04.2007, 10:33   #6  
kvg6 is offline
kvg6
program-ёр
Аватар для kvg6
1C
 
160 / 81 (3) ++++
Регистрация: 27.09.2005
Адрес: Moscow forever
Цитата:
Сообщение от VKUR Посмотреть сообщение
Проект = doc.GetItemValue("fldProject")(0)
Видимо так
X++:
array  = Doc.GetItemValue("fldProject");
         = array.value(1);
__________________
Становись лучше
За это сообщение автора поблагодарили: VKUR (1).
Старый 18.04.2007, 11:10   #7  
VKUR is offline
VKUR
Участник
Аватар для VKUR
 
12 / 10 (1) +
Регистрация: 19.03.2007
Цитата:
Сообщение от VKUR Посмотреть сообщение
То есть получение первого элемента массива. Не могу понять как это будет выглядеть в Х++
Разобрался
Вот так работает:
X++:
COMArray = COMDoc.GetFirstItem("fldProject");
 = COMArray.text();
Старый 19.04.2007, 12:39   #8  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Наверное, даже можно сэкономить на одной строчке и на промежуточной переменной:
X++:
 = COM::createFromObject( COMDoc.GetFirstItem("fldProject") ).text();
За это сообщение автора поблагодарили: VKUR (1).
Старый 05.04.2007, 09:42   #9  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1853 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от VKUR Посмотреть сообщение
Может кто знает?
Простите, Вы предыдущие сообщения внимательно прочитали?
__________________
-ТСЯ или -ТЬСЯ ?
Старый 05.04.2007, 10:02   #10  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от VKUR Посмотреть сообщение
Может кто знает?
Честно говоря, обычно получал подобную информацию как бы уже в готовом виде (например, из книжек). Знаю, что строка "Excel.Application" прописана во многих местах реестра Windows. Из какого именно узла реестра читается эта строка в операторе new COM("...") - не знаю. Попробуйте поискать в реестре по словам: Lotus, Notes, Session. Можно полистать вручную ветку реестра Мой компьютер\HKEY_CLASSES_ROOT с целью визуального обнаружения этих же слов. Скорее всего, у вас что-то типа "Notes.Session" и будет, хотя и не обязательно.

Коллеги, если кто-то владеет для подобных случаев процедурой четкого выхода сразу на нужный идентификатор без эвристических метаний по реестру - поделитесь, буду тоже премного благодарен.
Старый 05.04.2007, 10:07   #11  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1853 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от VKUR Посмотреть сообщение
Может кто знает?
ищите Lotus Notes COM toolkit
правда, сейчас его вендор с сайта почему-то не дает
__________________
-ТСЯ или -ТЬСЯ ?
Теги
lotus, vba, axapta

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Доступ к меню "Работа с документами" Kuat DAX: Администрирование 4 16.11.2007 17:07
Работа с Lotus через COM madproger DAX: Программирование 2 03.04.2007 15:47
VBA konopello DAX: Программирование 13 05.05.2006 14:46
Axapta программирует Excel на VBA Gustav DAX: База знаний и проекты 10 13.03.2006 11:42
Axapta и Lotus Domino ani DAX: Администрирование 0 28.08.2003 17:03
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 19:48.