Skip to main content

非推奨コードのスキャン

%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  
    }
}

関連項目

FeedbackOpens in a new tab