Проблемы с интеграцией в Outlook

Здравствуйте.

Проблема такая: не заносятся некоторые письма в Террасофт из Аутлука, в чем причина, непонятно. Закономерность определить не удалось. Из-за чего такое может происходить? У меня на сохранение письма стоит запуск БП в функции SaveMailItem, но метод запуска БП стоит уже после сохранения письма.

Вот код функции на всякий случай:

//-----------------------------------------------------------------------------
// scr_MSOutlookLibrary
//-----------------------------------------------------------------------------

function SaveMailItem(MailItem, Options) {
        var CanSaveInDB = true;
        var Bindings = null;
        /* MODULE INCIDENTS */
        var Incident;
        /* ENDMODULE INCIDENTS */

        var IsInsertMode = MSOutlookLibrary.MailDataset.IsEmptyPage;
       
        if (Options.AutoBinding) {
                // AutoBinding mode
               
                // Check if message allready integrated
                if (!IsInsertMode) {
                        if (Options.IsManual) {
                                if (!Options.Silent) {
                                        ShowInformationDialog("Сообщение уже интегрировано в Terrasoft");
                                }
                        }
                        return;
                }
               
                Bindings = GetBindingMailLinks(MailItem, Options.IsReceiving);
                CanSaveInDB = (Bindings.Count > 0);
                /* MODULE INCIDENTS */
                if (Options.IsReceiving) {
                        Incident = GetIncidentDataBySubject(MailItem.Subject);
                        CanSaveInDB = (Bindings.Count > 0) || (Incident != null);
                        if (Incident) {
                                Options.AddLinks = [];
                                var Link = GetMessageLink('tbl_Incident', Incident.ID);
                                if (Link) {
                                        Options.AddLinks.push(Link);
                                } else {
                                        Incident = null;
                                }
                        }
                }
                /* ENDMODULE INCIDENTS */
        } else {
                // Manual integrate mode
                if (!Options.Links) {
                        Options.Links = [];
                }
                if (!Options.AllLinks) {
                        Options.AllLinks = [];
                }
                CanSaveInDB = (Options.Links.length > 0) ||
                        (Options.AllLinks.length > 0);
                /* MODULE INCIDENTS */
                var Incident = HasLink(Options.AllLinks, 'tbl_IncidentMessage');
                /* ENDMODULE INCIDENTS */
        }
       
        if (!CanSaveInDB) {
                if (Options.IsManual) {
                        RemoveOutlookMessageProperties(MailItem, false);
                        try {
                                MailItem.Subject = MailItem.Subject;
                                MailItem.Save();
                        } catch (e) {
                        }
                }
                return;
        }
        MSOutlookLibrary.IsChangeMessageFileSize = false;
        var MaxFileSize = GetSystemParameterValueEx('MSOutlookMaxFileSize', false);    
        if (MailItem.Size/1048576 > MaxFileSize) {
                RemoveAllMailEmbeddedAttachment(MailItem);
                MSOutlookLibrary.IsChangeMessageFileSize = true;
        }
        var FileName = SaveMailItemToFile(MailItem, false);
        if (MSOutlookLibrary.IsChangeMessageFileSize) {
                MSOutlookLibrary.MessageFileSize = GetFileSize(FileName);
        }
        var MessageID = SaveMailItemToDatabase(MailItem, Options.IsReceiving);
        if (!MessageID) {
                return;
        }
       
        var ContentDataset = GetSingleItemByCode('ds_MailMessageContent');
        var ContentField = ContentDataset.DataFields.ItemsByName('MessageContent');
        ContentField.IsEnabled = true;
        ApplyDatasetIDFilter(ContentDataset, MessageID, true);
        ContentDataset.Open();
        try {
                if (!IsDatasetEmpty(ContentDataset)) {
                        ContentDataset.Edit();
                        if (ContentField) {
                                ContentField.LoadFromFile(FileName);
                                ContentDataset.Post();
                        }
                }
        } finally {
                ContentDataset.Close();
                ApplyDatasetIDFilter(ContentDataset, null, false);
        }
        if (Bindings && (Bindings.Count > 0)) {
                InsertNewLinks(Bindings, MessageID, Options.Links);
        }
        InsertAddLinks(Options.Links, MessageID);
        InsertAddLinks(Options.AddLinks, MessageID);
       
        var Session = GetMAPISession();
        var MapiMessage = Session.WrapMessage(MailItem.MAPIOBJECT);
        MapiMessage.SetSMTPHeader('X-TSMessageID', MessageID);
        var TSFlag = true;
        if (Options.AutoBinding) {
                TSFlag = !!Bindings && (Bindings.Count > 0);
        }
       
       
        //--------------------------------------------------------------------------
        //MY_WORK
        //--------------------------------------------------------------------------
        var ContactID = Connector.CurrentUser.ContactID;
        var UserID = GetDatasetFieldValueFromDatasetByUSI('ds_User', 'UserContactID', ContactID, 'ID');
        var UserInGroup = Services.GetNewItemByUSI('ds_UserInGroup');
        ApplyDatasetFilter(UserInGroup, 'UserID', UserID, true);
        UserInGroup.Open();
        var Flag2 = false;
        for (UserInGroup.GotoFirst(); !UserInGroup.IsEOF; UserInGroup.GotoNext()){
                if (UserInGroup('GroupID') == '{2858B193-8FC6-4D36-BD55-A6F80D69590B}') {
                        Flag2 = true;          
                }
        }
        UserInGroup.Close();
        Cycle = 0;
        if (Flag2 == true) {
                var RecordID = MessageID;
                var RecipientAddress = GetDatasetFieldValueByID('ds_MailMessage', RecordID, 'RecipientAddress');
                var SenderAddress = GetDatasetFieldValueByID('ds_MailMessage', RecordID, 'SenderAddress');
//для СБЕРБАНКА
                if (!!~SenderAddress.indexOf('servicedesk@mail.ca.sbrf.ru') ||
                !!~SenderAddress.indexOf('sasmolin@sberbank.ru') ||
                !!~SenderAddress.indexOf('iskonovchenko@sberbank.ru') ||
                !!~SenderAddress.indexOf('anvegorov@sberbank.ru')) {
                        CreateIncidentSB(RecordID);    
//для Х5
                } else if (!!~SenderAddress.indexOf('noreply@x5.ru')) {  
                        CreateIncident(RecordID);
//для отчетов диспетчера
                } else if (!!~SenderAddress.indexOf('oss@c-centre.ru')){
                        CreateIncidentReport(RecordID);
                }
        }  
        //--------------------------------------------------------------------------
        //END OF MY_WORK
        //--------------------------------------------------------------------------
       
       
        /* MODULE INCIDENTS */
        if (!Options.AutoBinding) {
                TSFlag = HasOtherLink(Options.AllLinks, 'tbl_IncidentMessage');
        }
        MapiMessage.SetProperty(IntegrateSDUserPropertyName, mptBoolean, !!Incident);
        /* ENDMODULE INCIDENTS */
        MapiMessage.SetProperty(IntegrateTSUserPropertyName, mptBoolean, TSFlag);
        try {
                MapiMessage.Save();
        } catch (e) {
        }
        /* MODULE INCIDENTS */
        if (Incident) {
                AddReminderByIncident(Incident);
        }
        /* ENDMODULE INCIDENTS */
        return true;
}

Нравится

5 комментариев

Поправка: не заносятся именно автоматически письма, в ручную заносятся.

В настройках E-mail все галки стоят

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

да есть такой контакт. Дело в том, что иногда два письма почти совершенно одинаковых (один и тот же шаблон, регулярные сообщения). Но одно занеслось, а другое нет. Проверяли так, выделили все письма за промежуток времени, и нажали "Автопривязка", он нашел из 20 где-то 5 не занесенных в Террасофт, хотя синхронизацию и террасофт не выключали. Почему-то иногда он пропускает письма. какие еще могут быть причины?

Дмитрий, не смогла воспроизвести описанную ситуацию в базовой версии. Понять в чем дело можно только выполнив отладку. Поставьте debugger в начале функции function SaveMailItem, посмотрите где происходит выход.

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