投稿者

インターシステムズジャパン
記事 Toshihiko Minamoto · 10月 5, 2021 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?KEY=GSQL_esql#GSQL_esql_cursor

http://docs.intersystems.com/ens20152/csp/documatic/%25CSP.Documatic.cls?PAGE=CLASS&LIBRARY=ENSLIB&CLASSNAME=Ens.MessageHeader#METHOD_ResendDuplicatedMessage