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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.09.2006, 10:08   #1  
andrw is offline
andrw
Участник
 
22 / 10 (1) +
Регистрация: 23.09.2007
Необходимо реализовать механизм постановки задач из Navision в Outlook. Стандартные почтовые протоколы не работают. Модуль задач Outlook работает только в связке с Exchenge сервером, и применяет при этом RPC DCOM. Возможно, ли реализовать подобный механизм для Navision? И если да, то в каком направлении рыть? Здесь видимо две проблемы будут стоять:

1. Найти способ вызова RPC DCOM из навика, аналогично тому, как это сделано с OCX и с automation.
2. Разобраться с протоколом взаимодействия Exchenge Server и Outlook.

P.S.

Может быть, кто нибудь знает можно ли использовать стандартные протоколы в данном случае: SMTP, MAPI, HTML?

Вот пока что удалось нарыть:
http://www.networkdoc.ru/files/insop/excha...change2003.html
http://www.microsoft.com/msj/0398/dcom.aspx
http://www.sql.ru/forum/actualthread.aspx?...createcomobject
Старый 25.09.2006, 10:48   #2  
andrw is offline
andrw
Участник
 
22 / 10 (1) +
Регистрация: 23.09.2007
Еще вопрос: возможно ли поставить задачу в Outlook удаленному пользователю без использования Exchenge Server? Возможно ли обойтись без использования RPC DCOM вообще? Здесь есть мысли по отправки задачи с письмом. Тогда можно, якобы ограничиться только MAPI протоколом?

http://www.sql.ru/forum/actualthread.aspx?...4&tid=279984&hl
Старый 25.09.2006, 11:06   #3  
Dzemon is offline
Dzemon
Moderator
 
1,247 / 12 (3) ++
Регистрация: 09.09.2004
Вообще-то для этого обычно используют CDO. Через него доступны все объекты Outlook.
Все описание есть в MSDN.
Старый 25.09.2006, 11:21   #4  
andrw is offline
andrw
Участник
 
22 / 10 (1) +
Регистрация: 23.09.2007
Имеется ввиду примерно такая функция? (правда это для отправки почты, а не для постановки задач)

SendingMailWin2000CDO(Port : Integer;SMTPServer : Text[120];Body : Text[1024];To : Text[120];From : Text[120];Subject : Text[120]) : Bo
CREATE(CDOMessage);
CREATE(CDOConfig);

ActivXFields := CDOConfig.Fields;
ActivXField := ActivXFields.Item('http://schemas.microsoft.com/cdo/configuration/sendusing');
ActivXField.Value := 2;
ActivXField := ActivXFields.Item('http://schemas.microsoft.com/cdo/configuration/smtpserverport');
ActivXField.Value := Port;
ActivXField := ActivXFields.Item('http://schemas.microsoft.com/cdo/configuration/smtpserver');
ActivXField.Value := SMTPServer;
ActivXField := ActivXFields.Item('http://schemas.microsoft.com/cdo/configuration/smtpauthenticate');
ActivXField.Value := 0;
ActivXFields.Update;

CDOMessage.Configuration := CDOConfig;
CDOMessage.HTMLBody := Body;
CDOMessage."To" := "To";
CDOMessage.From := From;
CDOMessage.Subject := Subject;
CDOMessage.Send;

Но мне желательно использовать другой режим: когда Navision сам работает как клиент, т.е. надо реализовать функцию рассылки задач из самого Navision, а не через Outlook. В идеале это должно происходить без использования Exchenge Server. Пока я примерно представляю как поставить задачу через Outlook средстами automaion (CDO). Но полной реализации клиента пока не вижу... Пожалуйста, помогите кто знает...
Старый 25.09.2006, 12:16   #5  
Dzemon is offline
Dzemon
Moderator
 
1,247 / 12 (3) ++
Регистрация: 09.09.2004
Так, определитесь, Задачи ставить или Почту рассылать?
Почту полюбому обрабатывает почтовый сервер и без него ничего не получится. Соответственно, Навижин д.б. клиентом этого сервера, а сервер может быть Эхчейндж, СМТП и т.д. Блягодаря настройке профиля аутлука вы можете использовать ЛЮБОЙ сервер. Если вы не будете использовать Эхчейндж, то значит СМТП сервер? Т.е. нужны библиотеки, которые работаеют с таким сервером.
Старый 25.09.2006, 12:25   #6  
andrw is offline
andrw
Участник
 
22 / 10 (1) +
Регистрация: 23.09.2007
Все очень просто: На одном конце есть Navision, на другом Outlook, между ними Exchenge (или SMTP - если его можно использовать в данном случае) сервер. Как поставить задачу Outlook непосредственно из Navision в этой связке? При этом известно что Otlook использует для постановки задач взаимодействие с Exchenge через RPC DCOM протокол... Возможно обойтись и без RPC DCOM и вообще без Exchenge сервера, но как настроить для этого Outlook (или как это сделать из Navision без использования DCOM) не понятно (например для постановки задач через SMTP)... Вот собственно и вопрос...
Старый 25.09.2006, 17:56   #7  
andrw is offline
andrw
Участник
 
22 / 10 (1) +
Регистрация: 23.09.2007
Вот, кстати, функция создание задачи в Outlook на локальном компьютере с помощью automation:

OnRun()
IF ISCLEAR(OutlookApp) THEN
CREATE(OutlookApp,TRUE);
TaskItem := OutlookApp.CreateItem(3);

TaskItem.BillingInformation := '7'; //Расходы:

TaskItem.Body := '8'; //Тело
TaskItem.Categories := '9'; //Категории: Важные клиенты, мысли и пр.
TaskItem.Companies := '10'; //Организации:

TaskItem.ActualWork := 4; //Реально затрачено (4 мин)


TaskItem.Complete := TRUE; //Завершена, не завершена
TaskItem.Contacts := '35'; //Контакты

TaskItem.ContactNames := '36'; //Имя контакта

//TaskItem.Owner := '43'; //Text:=Integer

TaskItem.PercentComplete := 45; //TaskItem.PercentComplete := 20; //Готово % !!! только при TaskItem.Status=1

TaskItem.ReminderOverrideDefault := TRUE;
TaskItem.ReminderPlaySound := TRUE;
TaskItem.ReminderSet := TRUE;
TaskItem.ReminderSoundFile := 'c:\'; //Путь для звука

TaskItem.Role := '53'; //Text:=Integer
TaskItem.SchedulePlusPriority := '54'; //Text:=Integer

//TaskItem.TeamTask := TRUE; //Boolean:=Integer
TaskItem.TotalWork := 5; //Объем работ (5 мин)


TaskItem.Subject := 'This is the subject of a task'; //Тема
TaskItem.DueDate := 270206D; //Срок (27.02.06)
TaskItem.StartDate := 260106D; //Дата начала (26.01.06)
TaskItem.Status := 0; // 1 - выполняется, 2 - завершена
TaskItem.Importance := 2; //Важность: низкая 0-3 (Низкая - Высокая)
TaskItem.PercentComplete := 20; //Готово % !!!
TaskItem.ReminderTime := 300506D; //Оповещение
//TaskItem.Recipients := 'Ант';
TaskItem.Body := 'This is the body of a task'; //Тело

//Закладка Подробно
TaskItem.DateCompleted := 280206D; //Дата завершения
TaskItem.TotalWork := 5; //Объем работ (5 мин)
TaskItem.ActualWork :=4; //Реально затрачено (4 мин)

TaskItem.Save;
TaskFolder := OutlookApp.GetNamespace('MAPI').GetDefaultFolder(13);
TaskFolder.Display;

CLEAR(OutlookApp);
Старый 26.09.2006, 11:34   #8  
andrw is offline
andrw
Участник
 
22 / 10 (1) +
Регистрация: 23.09.2007
Вот отправка задачи по E-Mail:


SetTaskForOutlook(Body : Text[1024];Subject : Text[1024];Categories : Text[1024];Companies : Text[1024];ActualWork : Integer;Complete :
IF ISCLEAR(OutlookApp) THEN
CREATE(OutlookApp,TRUE);
TaskItem := OutlookApp.CreateItem(3);
TaskItem.Assign;
//Закладка задача

TaskItem.BillingInformation := BillingInformation; //Расходы:

TaskItem.Body := Body; //Тело
TaskItem.Categories := Categories; //Категории: Важные клиенты, мысли и пр.
TaskItem.Companies := Companies; //Организации:
TaskItem.ActualWork := ActualWork; //Реально затрачено (4 мин)
TaskItem.Complete := Complete; //Завершена, не завершена
TaskItem.Contacts := Contacts; //Контакты
TaskItem.ContactNames := ContactNames; //Имя контакта ???
//TaskItem.Owner := '43'; //Text:=Integer
TaskItem.PercentComplete := PercentComplete; //Готово % !!! только при TaskItem.Status=1
//TaskItem.ReminderOverrideDefault := TRUE;
TaskItem.ReminderPlaySound := ReminderPlaySound;
TaskItem.ReminderSet := ReminderSet;
TaskItem.ReminderSoundFile := ReminderSoundFile; //Путь для звука

//TaskItem.Role := Role; //Text:=Integer
//TaskItem.SchedulePlusPriority := '54'; //Text:=Integer
////TaskItem.Status := 1; //TaskItem.Status := 0; // !!! 1 - выполняется, 2 - завершена
//TaskItem.TeamTask := TRUE; //Boolean:=Integer
TaskItem.TotalWork := TotalWork; //Объем работ (5 мин)
TaskItem.Subject := Subject; //Тема
TaskItem.DueDate := DueDate; //Срок (27.02.06)
TaskItem.StartDate := StartDate; //Дата начала (26.01.06)
//TaskItem.Status := Status; // 1 - выполняется, 2 - завершена
TaskItem.Importance := Importance; //Важность: низкая 0-3 (Низкая - Высокая)
TaskItem.PercentComplete := PercentComplete; //Готово % !!!
TaskItem.ReminderTime := ReminderTime; //Оповещение
TaskItem.Recipients.Add("E-mail");

TaskItem.Body := Body; //Тело

//Закладка Подробно
TaskItem.DateCompleted := DateCompleted; //Дата завершения
TaskItem.TotalWork := TotalWork; //Объем работ (5 мин)
TaskItem.ActualWork := ActualWork; //Реально затрачено (4 мин)
{
TaskItem.Contacts := '35'; //Контакты

TaskItem.ContactNames := '36'; //Имя контакта
TaskItem.Owner := '43'; //Text:=Integer
TaskItem.Role := '53'; //Text:=Integer
TaskItem.Contacts := '35'; //Контакты
}
//TaskItem.Save;

TaskItem.Send;
TaskFolder := OutlookApp.GetNamespace('MAPI').GetDefaultFolder(13);
TaskFolder.Display;

CLEAR(OutlookApp);

Есть правда одно но: последний параметр надо удалить. Оказалось что навик не передает более 19 параметров в функцию!
 


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

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

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