Здравствуйте.
Проблема такая: не заносятся некоторые письма в Террасофт из Аутлука, в чем причина, непонятно. Закономерность определить не удалось. Из-за чего такое может происходить? У меня на сохранение письма стоит запуск БП в функции 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;
}
Нравится
Поправка: не заносятся именно автоматически письма, в ручную заносятся.
При настроенной автоматической привязке сообщений входящие и исходящие письма проходят проверку на наличие адреса отправителя или получателя. В случае если данное соответствие найдено - письмо загружается в базу данных. Дмитрий, проверьте, зафиксирован ли в системе контакт с email, фигурирующим у непривязанных писем. Возможно, не была идентифицирована запись, к которой нужно привязать письмо.
да есть такой контакт. Дело в том, что иногда два письма почти совершенно одинаковых (один и тот же шаблон, регулярные сообщения). Но одно занеслось, а другое нет. Проверяли так, выделили все письма за промежуток времени, и нажали "Автопривязка", он нашел из 20 где-то 5 не занесенных в Террасофт, хотя синхронизацию и террасофт не выключали. Почему-то иногда он пропускает письма. какие еще могут быть причины?
Дмитрий, не смогла воспроизвести описанную ситуацию в базовой версии. Понять в чем дело можно только выполнив отладку. Поставьте debugger в начале функции function SaveMailItem, посмотрите где происходит выход.