从控制台调用方法:"No current object"
Calling method from console: "No current object"
我有一个方法需要测试。我想从控制台这样做。这是方法,以及来自 class:
的一些元数据
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
我尝试在调用该方法之前实例化适配器,就像 属性 定义一样,但这没有用。 如何从控制台会话调用此方法?
该方法是实例方法,有些class不能直接调用。之前,你应该创建一个对象,然后对于那个对象,你可以调用任何实例方法。但是您仍然尝试调用 Ensemble classes,这并不容易,因为您应该准备环境,例如配置并启动 Ensemble Production,您的 class 应该作为操作添加,配置并激活.
set oper=##class(Custom.class).%New("configName")
其中 configName - 生产中该操作的名称,默认情况下它与 class 名称相同(例如 "Custom.class")。现在您可以调用您的方法了。
write oper.SendMessage("testSubj","test body","my@mail.com")
但我不推荐这种方式。如果你通过生产测试它会更好,只是向这个操作发送测试消息。
我有一个方法需要测试。我想从控制台这样做。这是方法,以及来自 class:
的一些元数据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
我尝试在调用该方法之前实例化适配器,就像 属性 定义一样,但这没有用。 如何从控制台会话调用此方法?
该方法是实例方法,有些class不能直接调用。之前,你应该创建一个对象,然后对于那个对象,你可以调用任何实例方法。但是您仍然尝试调用 Ensemble classes,这并不容易,因为您应该准备环境,例如配置并启动 Ensemble Production,您的 class 应该作为操作添加,配置并激活.
set oper=##class(Custom.class).%New("configName")
其中 configName - 生产中该操作的名称,默认情况下它与 class 名称相同(例如 "Custom.class")。现在您可以调用您的方法了。
write oper.SendMessage("testSubj","test body","my@mail.com")
但我不推荐这种方式。如果你通过生产测试它会更好,只是向这个操作发送测试消息。