Как я могу отправлять длинные электронные письма в скрипте сервера Siebel?

Вкратце: как я могу отправить электронное письмо с помощью Siebel Comm Outbound Email buscomp, если длина тела электронного письма превышает 40 960 символов? Вместо этого я могу использовать Outbound Communications Manager BS (или другой), но мне также нужно создать запись активности.


В Siebel 7.8 вы можете отправлять электронные письма несколькими способами:

  1. Нажатие F9 открывает Send Communications Applet, где кнопка Отправить вызывает базовый метод BC Comm Outbound Email EmailSend: электронное письмо отправляется и создается новая запись активности (таблицы S_EVT_ACT и S_EVT_MAIL). Длина тела письма не ограничена.

  2. Из серверного сценария можно использовать Outbound Communications Manager сервисный метод SendMessage. У него также нет ограничений по длине, но он не создает никаких записей в Siebel BC, он просто отправляет сообщение, не оставляя следов.

var psOut:PropertySet = TheApplication().NewPropertySet();
var psIn:PropertySet = TheApplication().NewPropertySet();
psIn.SetProperty("ProcessMode", "Remote");
psIn.SetProperty("Charset", "iso-8859-1");
psIn.SetProperty("CommProfile", from);
psIn.SetProperty("MsgToList", to);
psIn.SetProperty("MsgSubject", subject);
psIn.SetProperty("MsgHTMLBody", body);
var bs:Service = TheApplication().GetService("Outbound Communications Manager");
bs.InvokeMethod("SendMessage", psIn, psOut);
  1. Или вы можете воспроизвести поведение F9, самостоятельно создав запись BC и вызвав (недокументированный?) метод EmailSend. Проблема в том, что вы не можете установить значение Display Email Body длиннее 40,960 символов, иначе вы получите ошибку SBL-DAT-00235.
var bo:BusObject = TheApplication().GetBusObject("Service Request");
var bc:BusComp = bo.GetBusComp("Comm Outbound Email");
bc.NewRecord(NewAfter);
bc.SetFieldValue("Email Format", "HTML/Plain Text");
bc.SetFieldValue("Email Charset", "iso-8859-1");
bc.SetFieldValue("Email Sender Address", from);
bc.SetFieldValue("Email Sender Name", from);
bc.SetFieldValue("Email To Line", to);
bc.SetFieldValue("Description", subject);
bc.SetFieldValue("Display Email Body", body); // will fail if body.length > 40960
bc.WriteRecord();
bc.InvokeMethod("EmailSend");

Почему я ограничен 40 960 символами (и откуда взялось это число?) в Display Email Body, а в апплете F9 такого ограничения нет? Я знаю, что это поле особенное; для начала, Siebel 7.8 не поддерживает столбцы базы данных длиной более 16 383 символов, но максимальная длина этого поля составляет 1.024.000 (не 40.960...). Для этого определяется свойство пользователя поля Text Length Override (без значения ). Кроме того, оно не сопоставлено ни с одним столбцом: это вычисляемое поле, но без вычисляемого выражения; Я предполагаю, что класс CSSBCOutMail BC справляется с этим. Но тем не менее, это должно быть одинаково, использую ли я его из сценария или из апплета. Почему это не так, я должен что-то изменить где-нибудь, чтобы включить его?

Мое требование состоит в том, чтобы отправлять длинные электронные письма из сценария сервера, но мне также нужно создать запись активности. Есть ли какой-либо скрытый параметр, который я могу установить при вызове Outbound Communications Manager SendMessage, чтобы создать запись активности? Или как избежать ошибки, если я сделаю bc.SetFieldValue("Display Email Body", aVeryLongEmailBody);?


person AJPerez    schedule 23.08.2016    source источник


Ответы (1)


Я нашел этот документ (1676136.1) в Интернете поддержки Oracle, который отвечает аналогичный вопрос:

Клиент использует метод бизнес-службы Outbound Communications Manager SendMessage для отправки электронных писем из рабочего процесса и хочет сохранить запись активности или иметь представление, в котором они могут видеть электронные письма, отправленные с помощью этого метода.

Обходной путь, который они предлагают, тот же, что и мы: создать запись активности с помощью файла Comm Outbound Email BC. Но вместо того, чтобы делать это напрямую с NewRecord и кучей SetFieldValues, они используют бизнес-сервис Inbound E-mail Database Operations:

var psOut:PropertySet = TheApplication().NewPropertySet();
var psIn:PropertySet = TheApplication().NewPropertySet();
psIn.SetProperty("BusObj", "Mail Agent Activity");
psIn.SetProperty("BusComp", "Comm Outbound Email");
psIn.SetProperty("Field: Description", subject);
psIn.SetProperty("Field: Display Email Body", body);
psIn.SetProperty("Field: Email Sender Address", fromAddress);
psIn.SetProperty("Field: Email Sender Name", fromProfile);
psIn.SetProperty("Field: Email To Line", toAddress);

var bs:Service = TheApplication().GetService("Inbound E-mail Database Operations");
bs.InvokeMethod("InsertRecord", psIn, psOut);
var error = psOut.GetProperty("ErrorMessage"); // "" if everything went ok
var actId = psOut.GetProperty("ID");

Это позволяет избежать странного ограничения в 40960 символов.

В случае, если это кому-то нужно, по-видимому, есть также метод UpdateRecord, но он скрыт в определении BS. Параметры аналогичны: BusObj и BusComp, Id (идентификатор строки записи, которую вы хотите обновить), и Field: Name Of The Field для каждого поля, которое вы хотите изменить.

person AJPerez    schedule 23.08.2016