FAQ
ArcObjects でのジオプロセシング メッセージの利用

ナレッジ番号:5322 | 登録日:2023/07/26 | 更新日:2024/11/21

概要

ジオプロセシング ツールがプログラムで実行される時、エラーの結果や警告メッセージを取得したり、操作の進行状態を単純に表示したりすることができます。返ってきたメッセージは、severity オプションと共に GetMessages  メソッドを使用して severity(深刻度)によって分類することができます。

サンプル コード

エラー メッセージのみを表示

以下のコード例はエラー メッセージのみを表示する例です。

public void ExamplePrintGPErrorMessages(Geoprocessor gp)
{
    object sev = 2;
    string messages = gp.GetMessages(ref sev);
    System.Console.WriteLine(messages);
}
Public Sub ExamplePrintGPErrorMessages(ByVal gp As Geoprocessor)
    Dim sev As Object = 2
    Dim messages As String = gp.GetMessages(sev)
    System.Console.WriteLine(messages)
End Sub 

すべてのメッセージを表示

個々のメッセージは GetMessage メソッドを利用して取り出すことができます。このメソッドはひとつのパラメータを持ちますが、これはジオプロセッサのメッセージ リストまたは配列におけるメッセージのインデックスです。MessageCount プロパティはジオプロセッサのメッセージ配列におけるメッセージの個数を保持しています。以下のコード例は、ツールのすべてのメッセージを返しています。

 public void ExamplePrintAllGPMessages(Geoprocessor gp, Union uniontool)
{
    // Union ツールを実行
    gp.Execute(uniontool, null);
    if (gp.MessageCount > 0)
    {
        for (int Count = 0; Count <= gp.MessageCount - 1; Count++)
        {
            Console.WriteLine(gp.GetMessage(Count));
        }
    }
}
Public Sub ExamplePrintAllGPMessages(ByVal gp As Geoprocessor, ByVal uniontool As Union)
    ' Union ツールを実行
    gp.Execute(uniontool, Nothing)
    If gp.MessageCount > 0 Then
        For Count As Integer = 0 To gp.MessageCount - 1
            Console.WriteLine(gp.GetMessage(Count))
        Next Count
    End If
End Sub

IGeoProcessorResult2 の利用

前のコード例で示したように、メッセージはジオプロセッサで利用可能なメソッドを使用して取り出すことができます。また、IGeoProcessorResult2 インタフェースからのメッセージを取得することも可能です。従って geoprocessing サーバ ツールを実行する時は、IGeoProcessorResult からのメッセージを取り出す必要があります。

public void ExamplePrintAllGPMessages2(Geoprocessor gp, Union uniontool)
{
    // Union ツールを実行
    IGeoProcessorResult2 pResult = (IGeoProcessorResult2)gp.Execute(uniontool, null);
    if (pResult.MessageCount > 0)
    {
        for (int Count = 0; Count <= pResult.MessageCount - 1; Count++)
        {
            Console.WriteLine(pResult.GetMessage(Count));
        }
    }
}
Public Sub ExamplePrintAllGPMessages2(ByVal gp As Geoprocessor, ByVal uniontool As Union)
    'Union ツールを実行
    Dim pResult As ESRI.ArcGIS.Geoprocessing.IGeoProcessorResult2 = CType(gp.Execute(uniontool, Nothing), ESRI.ArcGIS.Geoprocessing.IGeoProcessorResult2)
    If pResult.MessageCount > 0 Then
        For Count As Integer = 0 To pResult.MessageCount - 1
            Console.WriteLine(pResult.GetMessage(Count))
        Next Count
     End If
End Sub

メタデータ

機能

種類

製品