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



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


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

  1. F9打开Send Communications Applet,其中Send按钮调用底层BC Comm Outbound EmailEmailSend方法:发送电子邮件并创建新的活动记录(S_EVT_ACTS_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);
  • 或者您可以通过自己创建BC记录并调用(未记录?)来复制F9行为。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");
    

    为什么我在Display Email Body中被限制为40.960个字符(和这个数字来自哪里?),而F9 applet没有这个限制?我知道那个领域很特别;对于初学者来说,Siebel 7.8不支持超过16.383个字符的数据库列,但是这个字段的最大长度是1.024.000(不是40.960…)。为此,定义了字段用户属性Text Length Override(不带值)。此外,它不映射到任何列:它是一个计算字段,但没有计算表达式;我猜BC的CSSBCOutMail类管理它。但是,无论我是通过脚本还是applet使用它,它都应该是相同的。为什么不是,我应该改变任何地方来启用它吗?

    我的要求是从服务器脚本发送长电子邮件,但我需要创建的活动记录也。是否有任何隐藏的参数,我可以设置调用Outbound Communications ManagerSendMessage,为了创建活动记录?或者有什么方法可以避免错误,如果我做bc.SetFieldValue("Display Email Body", aVeryLongEmailBody); ?

  • 我在Oracle支持web中找到了这个文档(1676136.1),它回答了一个类似的问题:

    客户正在使用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定义中。参数是相似的:BusObjBusComp, Id(您想要更新的记录的行id),以及您想要更改的每个字段的Field: Name Of The Field

    相关内容

    • 没有找到相关文章

    最新更新