0

我有一个需要测试的方法。我想从控制台这样做。这是方法,以及类中的一些元数据:

Include HS.Common

Class Custom.class Extends Ens.BusinessOperation
{
    Parameter ADAPTER = "EnsLib.EMail.OutboundAdapter";

    Property Adapter As EnsLib.EMail.OutboundAdapter;

    Method SendMessage(pSubject As %String, pMessage As %String, pEmailAddresses) As %Status
    {
        set tSC=$$$OK
        set tMailMessage=##class(%Net.MailMessage).%New()
        do tMailMessage.To.Insert($PIECE(pEmailAddresses,",",1))
        for tI=2:1:$LENGTH(pEmailAddresses,",") {
            do tMailMessage.Cc.Insert($PIECE(pEmailAddresses,",",tI))
        }

        set tMailMessage.Subject=pSubject
        set tMailMessage.Charset="iso-8859-1"
        set tSC=tMailMessage.TextData.Write(pMessage)
        quit:'tSC
        Set tSC1=..Adapter.SendMail(tMailMessage)
        if 'tSC1 {
            //Log warning about being unable to send mail.
            do $SYSTEM.Status.DecomposeStatus(tSC1,.err)
            $$$LOGWARNING("Could not send email: "_err(err))
            kill err
        }

        quit tSC
    }

    ...other methods here...

}

但是当我执行这个命令时:

set tResult = ##class(Custom.class).SendMessage("Test Subject","Test Message","my@email.com")

我收到此错误:

 Set tSC1=..Adapter.SendMail(tMailMessage)
 ^
<NO CURRENT OBJECT>zSendMessage+11^Custom.class.1

在调用该方法之前,我尝试实例化适配器,就像属性定义一样,但这不起作用。 如何从控制台会话中调用此方法?

4

1 回答 1

2

这个方法是一个实例方法,不能只为某个类直接调用。之前,您应该创建一个对象,然后对于该对象,您可以调用任何实例方法。但是你还是想调用 Ensemble 类,不是那么容易,因为你要准备好环境,比如配置并启动 Ensemble Production,你的类应该添加为 Operation,配置并激活。

set oper=##class(Custom.class).%New("configName")

其中 configName - 生产中该操作的名称,默认情况下与类名相同(例如“Custom.class”)。现在你可以调用你的方法了。

write oper.SendMessage("testSubj","test body","my@mail.com")

但我不会推荐这种方式。如果你通过生产测试它会更好,只是发送测试消息到这个操作。

于 2016-01-12T05:20:30.097 回答