Outlook цепляется к Террасофт (3.4.0) только при условии, что Outlook был запущен после Террасофт .
Из-за этого, а также из-за случайных событий из категории «человеческий фактор» интеграция бывает не включена, из-за чего некоторые письма не цепляются в Террасофт.

Дело в том, что свойство «Автоматическое соединение с активной Terrasoft» дает возможность соединяться только с активной Terrasoft. Если Террасофт не был запущен перед Outlook соединения не будет. Меня в идеале интересует вариант, когда при запуске Outlook происходит имитация нажатия кнопки «Соединить» во вкладке «Надстройки» с автоматическим вводом логина-пароля (которые где-нибудь хранятся – файл, реестр, файл конфига Террасофт) и соединением с базой. Причем, не важно включен сам Террасофт или нет.

Вопрос: возможно ли автоматизировать со стороны Outlook’а – например, при его запуске – процесс соединения с базой (ведь интеграцию можно включить, не запуская Террасофт)

Нравится

4 комментария

Дмитрий, добрый день!

Дело в том, что как наверное Вы заметили, при запуске Outlook и неактивной Terrasoft, для включения интеграции нужно вводить логин и пароль, а также, при существовании нескольких конфигураций - еще выбирать конфигурацию.

Таким образом, вся трудность заключается в том, что бы Outlook-у дать понять, что нужно при запуске сразу запускать событие включение интеграции, вводить нужный логин и пароль, выбирать нужную конфигурацию.

Насколько я уточнял у наших разработчиков, то такую реализацию мы не выполняли.

Также, поймите, что нам интересно, что бы клиент работал в первую очередь с Terrasoft, а потом уже с Outlook :wink: .

Если бы в Террасофт был почтовый клиент наши пользователи там бы уже давно и работали, "однако но".

Кроме вышеуказанной проблемы не-100% подключения интеграции, есть еще такая: у нас существует часть пользователей, которым совершенно нечего делать в террасофт - пока. Однако почта им нужна)

Логин, пароль, название конфигурации можно хранить где угодно, куда дотянется Outlook или плагин Террасофта - не вижу здесь принципиальной проблемы.

Чисто логически вижу два решения:
1. Изменения в плагине для Outlook
2. Навешенный сверху макрос, который бы запускал соединение.

нашел вот
msdn.microsoft.com/en-us/library/office/ff869298(v=office.14).aspx

как мне из VBA вызвать методы плагина Террасофт?)

Здравствуйте, Дмитрий!

Запускать макрос можно путем обращения к COM-объекту Outlook.

Обработка событий от плагина Outlook происходит в скрипте scr_MSOutlookLibrary.

Сессия также устанавливается по ряду событий из конфигурации функцией GetMAPISession.

Примеры взаимодействия можно посмотреть в скриптах конфигурации scr_OutlookUtils и scr_MSOutlookLibrary.

Показать все комментарии

Добрый день! Подскажите пожалуйста у клиента есть автоматически запускаемая интеграция по шаблону из текстового файла. После обновления перестала запускаться автоматом, в ручном режиме все запускается и работает. Кто знает, как CRM запускает автоматом интеграцию и откуда?
У клиента CRM 3.4.*

Нравится

2 комментария

Андрей, возможно, после обновления слетели (перезаписались) настройки для Планировщика заданий. Если все работает вручную, а автоматом не работает -- значит, что-то с ним не так.
посмотреть, как его настраивать, можно здесь либо по ключевому слову поиском по комюнити.
проверьте, запускается ли служка ДжобМенеджер, прописан ли верно путь в файле RunSettings.xml и т.д., исходя из алгоритма настройки Планировщика.
если не поможет -- значит, дело в чем-то другом.

Спасибо, настройки для Планировщика заданий, нас спасла. :biggrin:

Показать все комментарии

В Террасофт реализован очень удобный механизм привязки и хранения e-mail сообщений - есть в базе такой адрес - подтягивается, отсутствует - не подтягивается. Но не дай Бог вам поставить галочки "игнорировать адрес отправителя\получателя" в настройках пользователя или добавить адрес рабочего мейла в карточку контакта пользователя, а потом проинтегрировать все письма в автоматическом режиме...
В нашей компании объем и количество внутренней почты такие же, а то и больше, чем почты внешней.
И периодически то настройки у кого-нибудь слетят, то новый офис-менеджер добавит всем пользователям их рабочие е-мейлы.... В результате база разом увеличивается на всю внутренную переписку пользователя (с вложениями!).
И хотя подчистить не так и сложно (отправитель like %@your_domain.zone AND получатель like %@your_domain.zone), но, во-первых, за этим надо следить, а во-вторых, бывают сложные случаи, когда письмо отправляется (или получается) не только кому-то внутри, но и одновременно наружу:
send to vasya@company.ru, client@somewhere.com
Такие письма приходится искать вручную... Или сделать вид, что их и не было, что не очень хорошо ))

Мне все это немного надоело еще на 2й раз и я, получив несколько левелапов :wink:, избавил себя от этой проблемы раз и навсегда.

Для этого я долго скакал по скриптам интеграции в попытке найти оптимальную точку для проверки, поближе познакомился с регэкспами, проникся проблемой валидации е-мейлов и разродился вот такой маленькой доработкой.

Логика:
При автоинтеграции (но не вручную ) письма проверяются на наличие хотя бы одного из отправителя\получателей (отправитель один, получателей - сколько влезет) не из одного и того же домена. Основой для проверки служит адрес отправителя - т.к. он один.
Например:
send from petya@company.ru to vasya@company.ru, client@somewhere.com пройдет
send from petya@company.ru to vasya@company.ru, masha@company.ru не пройдет

Скрипт:
в функцию function SyncronizeMailItem(MailItem, Options) вставить после
var MessageID = MapiMessage.GetSMTPHeader('X-TS' + MessageIDUserPropertyName);

        if (CheckIsSameDomain(MapiMessage)){    // проверяем не внутренняя ли почта, если да - выход
                return;
        }

сама функция

function CheckIsSameDomain(MapiMessage) {
        var SenderAddress = MapiMessage.SenderAddress;

// избавляемся от " в адресах
        var RecipientAddress =
                MapiMessage.GetRecipientList().CommaText.substr(0, 249).replace(/"/g, '');  //";

// избавляемся от конструкций типа Имя Фамилия> в получателях - услужливый Outlook ставит это ко всем известным ему контактам
        RecipientAddress = RecipientAddress.replace(/[^>]+>,?/g, '');

// находим домен отправителя (от @ до конца строки)
        var SenderDomain = /@.+$/.exec(SenderAddress);

// находим домены получателей (регексп может быть странноватый, но работает)
        var RecipientDomainAr = RecipientAddress.match(/@\S+(?:(?:\.(?:\S{2,})){1,10})/g);
        if (!Assigned(RecipientDomainAr)) {
                return false;
        }
        for (var i = 0; i = RecipientDomainAr.length; i++) {
                if (RecipientDomainAr[i] != SenderDomain) { \\ если отличается выходим из функции
                        return false;
                }
        }
        return true;
}

ПС. И да - ущерб производительности имеет место, но не сильный

Нравится

Поделиться

3 комментария

косяк :redface:
var SenderDomain = /@.+$/.exec(SenderAddress)[0]

for (var i = 0; i <= RecipientDomainAr.length - 1; i++)

// избавляемся от " в адресах
        var RecipientAddress = 
                MapiMessage.GetRecipientList().CommaText.substr(0, 249).replace(/"/g, '');  //";
 
// избавляемся от конструкций типа <Имя Фамилия> в получателях - услужливый Outlook ставит это ко всем известным ему контактам
        RecipientAddress = RecipientAddress.replace(/<[^>]+>,?/g, '');

заменить на

var RecipientAddress = MapiMessage.GetRecipientList(true).CommaText
Показать все комментарии