DataRecordset.GetMatchingRowsForRefreshConflict メソッド (Visio)
データ レコードセットのリフレッシュ後に、競合がある図形にリンクされているデータ レコードセット行の行 ID の配列を返します。
注:
この Visio オブジェクトまたはメンバーは Visio Professional 2013 のライセンス ユーザーのみが使用できます。
構文
式。GetMatchingRowsForRefreshConflict (ShapeInConflict)
式DataRecordset オブジェクトを返す式。
パラメーター
名前 | 必須 / オプション | データ型 | 説明 |
---|---|---|---|
ShapeInConflict | 必須 | 図形 | データ レコードセットの更新後に競合するデータにリンクされた図形。 |
戻り値
Long()
注釈
GetAllRefreshConflicts メソッドは、図形内のデータと、図形がリンクされているデータ レコードセット行のデータとの間に競合が存在する図形の配列を返します。 競合が発生したデータ レコードセット行を特定するには、これらの各図形 を GetMatchingRowsForRefreshConflict メソッドに渡します。このメソッドは、特定の図形に対して競合している行の配列を返します。
データ レコードセットの行は、複数の行に同じ主キーが設定され、同じ図形にリンクされている場合に競合が発生します。 この場合、GetMatchingRowsForRefreshConflict メソッドは、少なくとも 2 つ以上の行 ID を含む配列を返します。
競合は、以前リンクされていたデータ行がデータ レコードセットから削除される場合にも発生します。 この場合、メソッドは空の配列を返します。
競合を削除するには、競合している図形を RemoveRefreshConflict メソッドに渡します。これにより、現在のドキュメントから競合する情報が削除されます。 競合の情報は、競合している図形を削除するか、または図形に対して RemoveRefreshConflict メソッドを呼び出すまで、現在の図面で永続化されます。
例
この Microsoft Visual Basic for Applications (VBA) マクロは、GetAllRefreshConflicts メソッドを使用して、データ レコードセットの更新後に競合がある図形を特定し、GetMatchingRowsForRefreshConflict メソッドを使用して、競合の原因となっているデータ レコードセットの行または行を特定する方法を示します。 最後に追加されたデータ レコードセットを更新し、競合がなかった場合は [イミディエイト] ウィンドウに "No conflicts" と出力します。 競合が見つかると、競合している各図形が GetMatchingRowsForRefreshConflict メソッドに渡され、結果の行 ID が同じウィンドウに出力されます。
このマクロを実行する前に、最後に追加されたデータ レコードセットが、接続された (非 XML ベースの) データ レコードセットであり、元のデータ ソースに接続されていることを確認してください。 次に、データ ソースの行を削除するか、またはデータ レコードセットをリフレッシュすると競合が発生するような変更を行ってください。
Public Sub GetMatchingRowsForRefreshConflict_Example()
Dim vsoDataRecordset As Visio.DataRecordset
Dim intRecordsetCount As Integer
Dim intShapeCount As Integer
Dim vsoShapes() As Visio.Shape
Dim intRowCount As Integer
Dim vsoShapeInConflict As Visio.Shape
Dim alngRowIDs() As Long
Dim lngvsoRowID As Long
intRecordsetCount = Visio.ActiveDocument.DataRecordsets.Count
Set vsoDataRecordset = Visio.ActiveDocument.DataRecordsets(intRecordsetCount)
vsoDataRecordset.Refresh
vsoShapes = vsoDataRecordset.GetAllRefreshConflicts
If IsEmpty(vsoShapes) Then
Debug.Print "No conflict"
Else
For intShapeCount = LBound(vsoShapes) To UBound(vsoShapes)
Set vsoShapeInConflict = vsoShapes(intShapeCount)
alngRowIDs = vsoDataRecordset.GetMatchingRowsForRefreshConflict(vsoShapeInConflict)
If IsEmpty(alngRowIDs) Then
Debug.Print "For shape:", vsoShapeInConflict.Name, "Row deleted."
Else
For intRowCount = LBound(alngRowIDs) To UBound(alngRowIDs)
lngvsoRowID = alngRowIDs(intRowCount)
Debug.Print "For shape:", vsoShapeInConflict.Name, "Row ID of row in conflict:", lngvsoRowID
Next intRowCount
End If
Next intShapeCount
End If
End Sub
サポートとフィードバック
Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。