非推奨コードのスキャン
%SYSTEM.CodeScannerOpens in a new tab クラスを使用すると、非推奨のクラスと非推奨のクラス・メンバを参照するコードをすばやく見つけることができます。具体的には、このクラスは ScanDocuments クラス・クエリを備えており、以下の 3 つのフィールドを含む結果セットを返します。
-
Document は、参照を含むクラスまたはルーチンを特定します。以下に例を示します。
ResearchXForms.BasicDemo.cls
-
Location は、指定されたクラスまたはルーチン内の参照の場所を特定します。以下に例を示します。
ClassMethod CreateOne Implementation+4
-
Message は、非推奨の内容について説明します。以下に例を示します。
Class '%Library.FileBinaryStream' is deprecated.
既定では、現在のネームスペースの既定のルーチン・データベース内のクラスとルーチンのみがクエリでスキャンされますが、マップされたコードを含めるパラメータを渡すことができます。また、クエリは、名前が % で始まるクラスやルーチン、および非推奨とマークされているクラスを無視します。
クエリは SQL に %SYSTEM.ScanDocuments ストアド・プロシージャとして投影されます。
例
例えば、以下のようにコードを記述できます。
ClassMethod Check()
{
set stmt = ##class(%SQL.Statement).%New()
set status = stmt.%PrepareClassQuery("%SYSTEM.CodeScanner","ScanDocuments")
if $$$ISERR(status) {quit}
set rset = stmt.%Execute()
if rset.%SQLCODE<0 {quit}
while rset.%Next() {
set Document=rset.%Get("Document")
set Location=rset.%Get("Location")
set Message=rset.%Get("Message")
write !, Document_" "_Location_" "_Message
}
}
以下に出力例を示します。
ResearchXForms.BasicDemo.cls Property BinStream Type Class '%Library.GlobalBinaryStream' is deprecated.
ResearchXForms.BasicDemo.cls Property CharStream1 Type Class '%Library.GlobalCharacterStream' is deprecated.
ResearchXForms.BasicDemo.cls Property CharStream2 Type Class '%Library.GlobalCharacterStream' is deprecated.
ResearchXForms.BasicDemo.cls Property CharStream3 Type Class '%Library.GlobalCharacterStream' is deprecated.
ResearchXForms.BasicDemo.cls ClassMethod CreateOne Implementation+4 Class '%Library.FileBinaryStream' is deprecated.
ResearchXForms.BasicDemo.cls ClassMethod RoundTripBin Implementation+1 Class '%Library.FileBinaryStream' is deprecated.
マップされたコードのスキャン
既定では、現在のネームスペースの既定のルーチン・データベース内のクラスとルーチンのみがクエリでスキャンされます。マップされたデータベースのクラスやルーチンを含めるには、クエリ引数を 1 に指定し、クラス・クエリの実行時にその引数を渡します。以下に例を示します。
ClassMethod Check()
{
set stmt = ##class(%SQL.Statement).%New()
set status = stmt.%PrepareClassQuery("%SYSTEM.CodeScanner","ScanDocuments")
if $$$ISERR(status) {quit}
set rset = stmt.%Execute(1)
if rset.%SQLCODE<0 {quit}
while rset.%Next() {
set Document=rset.%Get("Document")
set Location=rset.%Get("Location")
set Message=rset.%Get("Message")
write !, Document_" "_Location_" "_Message
}
}
関連項目
-
"%SYSTEM.CodeScannerOpens in a new tab" の "ScanDocuments" クラス・クエリ