記事
Toshihiko Minamoto · 2021年10月5日 2m read

Ensembleで大量のメッセージを再送信するには

メッセージビューアはメッセージを再送信できますが、大量(>100件)のメッセージを再送信するには適していません。  それを行うには、以下のようなCache Object Scriptコードを使用する必要があります。

Class Sample.Resender Extends %RegisteredObject
{

ClassMethod Resend()
{
//2016-06-15から2016-06-20の間に'FromComponent'から'ToComponent'に送られたすべてのメッセージを再送信
&sql(DECLARE C1 CURSOR FOR
 SELECT ID INTO :id FROM Ens.MessageHeader
 WHERE SourceConfigName='FromComponent' AND TargetConfigName='ToComponent'
 AND TimeCreated BETWEEN '2016-06-15' AND '2016-06-20')

&sql(OPEN C1)
&sql(FETCH C1)

set tSC = $$$OK

while (SQLCODE = 0) {
//idには1つのメッセージのidが含まれます。 それを再送信
set tSC = ##class(Ens.MessageHeader).ResendDuplicatedMessage(id)
quit:$$$ISERR(tSC)
&sql(FETCH C1)
}

&sql(CLOSE C1)
quit tSC
}

}

 

このコードに、エラーチェックをさらに改善したコードや、問題が発生した場合に中断したところから再開するコードなどを追加することもできます。

埋め込みSQLとEns.MessageHeaderメソッドのResendDuplicatedMessageのドキュメントは次からアクセスできます。

http://docs.intersystems.com/ens20161/csp/docbook/DocBook.UI.Page.cls?KE...

http://docs.intersystems.com/ens20152/csp/documatic/%25CSP.Documatic.cls... 

00
2 0 0 10
Log in or sign up to continue