25.09.2006, 10:08 | #1 |
Участник
|
Необходимо реализовать механизм постановки задач из 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 |
Участник
|
Еще вопрос: возможно ли поставить задачу в Outlook удаленному пользователю без использования Exchenge Server? Возможно ли обойтись без использования RPC DCOM вообще? Здесь есть мысли по отправки задачи с письмом. Тогда можно, якобы ограничиться только MAPI протоколом?
http://www.sql.ru/forum/actualthread.aspx?...4&tid=279984&hl |
|
25.09.2006, 11:06 | #3 |
Moderator
|
Вообще-то для этого обычно используют CDO. Через него доступны все объекты Outlook.
Все описание есть в MSDN. |
|
25.09.2006, 11:21 | #4 |
Участник
|
Имеется ввиду примерно такая функция? (правда это для отправки почты, а не для постановки задач)
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 |
Moderator
|
Так, определитесь, Задачи ставить или Почту рассылать?
Почту полюбому обрабатывает почтовый сервер и без него ничего не получится. Соответственно, Навижин д.б. клиентом этого сервера, а сервер может быть Эхчейндж, СМТП и т.д. Блягодаря настройке профиля аутлука вы можете использовать ЛЮБОЙ сервер. Если вы не будете использовать Эхчейндж, то значит СМТП сервер? Т.е. нужны библиотеки, которые работаеют с таким сервером. |
|
25.09.2006, 12:25 | #6 |
Участник
|
Все очень просто: На одном конце есть Navision, на другом Outlook, между ними Exchenge (или SMTP - если его можно использовать в данном случае) сервер. Как поставить задачу Outlook непосредственно из Navision в этой связке? При этом известно что Otlook использует для постановки задач взаимодействие с Exchenge через RPC DCOM протокол... Возможно обойтись и без RPC DCOM и вообще без Exchenge сервера, но как настроить для этого Outlook (или как это сделать из Navision без использования DCOM) не понятно (например для постановки задач через SMTP)... Вот собственно и вопрос...
|
|
25.09.2006, 17:56 | #7 |
Участник
|
Вот, кстати, функция создание задачи в 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 |
Участник
|
Вот отправка задачи по 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 параметров в функцию! |
|