如何在Siebel服务器脚本中发送长电子邮件?

时间:2016-08-23 08:48:12

标签: email siebel

简而言之:当电子邮件正文超过40.960个字符时,如何使用Siebel的Comm Outbound Email buscomp发送电子邮件?我可以使用Outbound Communications Manager BS(或另一个),但我也需要创建活动记录。

在Siebel 7.8中,您可以通过几种不同的方式发送电子邮件:

  1. F9 打开Send Communications Applet,其中发送按钮调用基础BC Comm Outbound EmailEmailSend方法:发送电子邮件并创建新的活动记录(S_EVT_ACTS_EVT_MAIL表)。电子邮件正文没有长度限制。

  2. 从服务器脚本中,您可以使用Outbound Communications Manager service method SendMessage。它也没有长度限制,但它不会在Siebel BCs中创建任何记录,它只是发送消息而不留任何痕迹。

  3. 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. 或者您可以通过自己创建BC记录并调用(未记录的?)EmailSend方法来复制F9行为。问题是,您无法设置超过40.960 字符的Display Email Body值,否则会出现SBL-DAT-00235错误。
    2. 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");
      

      为什么我在Display Email Body中限制为40.960个字符(以及该号码来自哪里?),而F9小程序没有限制?我知道这个领域很特别;首发,Siebel 7.8 doesn't support database columns above 16.383 characters,但此字段最大长度为1.024.000(不是40.960 ...)。为此,field user property Text Length Override被定义(没有值)。此外,它不会映射到任何列:它是一个计算字段,但没有计算表达式;我想BC的CSSBCOutMail班级管理它。但是,无论我是从脚本还是从applet使用它,都应该是一样的。为什么不是,我应该在任何地方改变任何东西来启用它吗?

      我的理由是从服务器脚本发送长电子邮件,但我还需要创建活动记录。在调用Outbound Communications ManagerSendMessage时,是否有任何隐藏参数可以设置,以创建活动记录?或者如果我做bc.SetFieldValue("Display Email Body", aVeryLongEmailBody);

      ,可以采取任何方式避免错误

1 个答案:

答案 0 :(得分:1)

我在Oracle支持网站上找到了this document (1676136.1),它回答了类似的问题:

  

客户正在使用Outbound Communications Manager业务服务方法SendMessage从工作流发送电子邮件,并希望保留活动记录或查看他们可以看到使用此方法发送的电子邮件。

他们提供的解决方法与我们使用的相同:使用export class App { constructor() { this.UserRecords = null;//.slice(0,5); this.fetchUserDataFromWebService(); } fetchUserDataFromWebService() { httpClient.fetch('http://jsonplaceholder.typicode.com/posts') .then(response => response.json()) .then(data => { this.UserRecords = data; }); } } BC创建活动记录。但是,他们不是直接使用NewRecord和一堆SetFieldValues,而是使用Comm Outbound Email业务服务:

Inbound E-mail Database Operations

这样做可以避免奇怪的40960字符限制。

如果有人需要它,显然在BS定义中还有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"); 方法,but it's hidden。参数类似:UpdateRecordBusObjBusComp(要更新的记录的行ID),以及要更改的每个字段的Id