Please ensure Javascript is enabled for purposes of website accessibility
Powered by Zoomin Software. For more details please contactZoomin

AF SDK Reference

Product Family
Current publication

PISystem.FindChangedItems Method (AFIdentity, Boolean, Int32, Object, Object)

Table of Contents
HomeAF SDK Reference...NamespacesOSIsoft.AFPISystem ClassPISystem MethodsFindChangedItems Method PISystem.FindChangedItems Method (AFIdentity, Boolean, Int32, Object, Object)Current page
TABLE OF CONTENTS

PISystem.FindChangedItems Method (AFIdentity, Boolean, Int32, Object, Object)

PISystem.FindChangedItems Method (AFIdentity, Boolean, Int32, Object, Object)
Find all the items that have changed in the PISystem of the specified type.

Namespace:  OSIsoft.AF
Assembly:  OSIsoft.AFSDK (in OSIsoft.AFSDK.dll) Version: 3.1.0.1156

Syntax

public IList<AFChangeInfo> FindChangedItems(
	AFIdentity identity,
	bool searchSandbox,
	int maxCount,
	Object cookie,
	out Object nextCookie
)
Public Function FindChangedItems ( 
	identity As AFIdentity,
	searchSandbox As Boolean,
	maxCount As Integer,
	cookie As Object,
	<OutAttribute> ByRef nextCookie As Object
) As IList(Of AFChangeInfo)

Dim instance As PISystem
Dim identity As AFIdentity
Dim searchSandbox As Boolean
Dim maxCount As Integer
Dim cookie As Object
Dim nextCookie As Object
Dim returnValue As IList(Of AFChangeInfo)

returnValue = instance.FindChangedItems(identity, 
	searchSandbox, maxCount, cookie, 
	nextCookie)
public:
IList<AFChangeInfo>^ FindChangedItems(
	AFIdentity identity, 
	bool searchSandbox, 
	int maxCount, 
	Object^ cookie, 
	[OutAttribute] Object^% nextCookie
)
member FindChangedItems : 
        identity : AFIdentity * 
        searchSandbox : bool * 
        maxCount : int * 
        cookie : Object * 
        nextCookie : Object byref -> IList<AFChangeInfo> 

Parameters

identity
Type: OSIsoft.AF.AFIdentity
The AFIdentity of the type of objects that should be returned if they have changed. Only the objects of the specified AFIdentity type will be checked and returned. Specifying an identify for any category type (e.g. CategoryElement or CategoryTable) will return changes for all category types.
searchSandbox
Type: System.Boolean
If true, then items saved to the sandbox but not checked into the server are also searched. Setting this value to true is a slower operation, therefore set this parameter to false unless you need changed items from the sandbox to be checked. When this parameter is true, then more than maxCount items can be returned if there are changes in the sandbox.
maxCount
Type: System.Int32
The maximum number of changes to be returned.
cookie
Type: System.Object
Use the value returned from the GetFindChangedItemsCookie(Boolean) method or the value of the nextCookie parameter returned from a previous call to this method to find all changes since the last call. Pass null to return all changes since the PISystem was last loaded or refreshed. Pass an AFTime to find all changes since a particular time.
nextCookie
Type: System.Object
The returned object can be used to pass into the next call to this method to find all changes since the previous call.

Return Value

Type: IList<AFChangeInfo>
Returns a list of AFChangeInfo structures which represent the items that have changed in the server.

Remarks

This method can be used to determine what objects have changed on the server since a specified time or the previous call to this method. Changes to the sandbox using ApplyChanges() are not included unless the searchSandbox is set to true. The FindObject Overload or Refresh(PISystem, IEnumerable<AFChangeInfo> ) methods can be used to find the actual object represented by the returned AFChangeInfo structures.

Important note Important
This method will not return any items that have changed in an AFDatabase unless you are using an overload of this method that has its fullSearch parameter set to true. Use one of the AFDatabase.FindChangedItems methods to find changed items at the database level.

Note Notes to Callers
This call might use a background task to complete some of its work. See the Threading Overview for some matters to consider when execution transitions to another thread.

Examples

// This example demonstrates getting changes made by other users
//  and refreshing the objects.

// Get the System and System Cookie
PISystem myPISystem = new PISystems().DefaultPISystem;
object sysCookie = myPISystem.GetFindChangedItemsCookie(searchSandbox: false);

// Wait for changes to be made...
//=======================================================

// Find changes made by other users.
List<AFChangeInfo> list = new List<AFChangeInfo>();
int resultsPerPage = 1000;
while (true)
{
    var results = myPISystem.FindChangedItems(false, true, resultsPerPage, sysCookie, out sysCookie);
    if ((results?.Count ?? 0) == 0) break;
    list.AddRange(results);
}

// Refresh objects that have been changed.
AFChangeInfo.Refresh(myPISystem, list);

// Find the objects that have been changed.
foreach (AFChangeInfo info in list)
{
    AFObject myObj = info.FindObject(myPISystem, false);
    Console.WriteLine("Found changed object: {0}", myObj);
}
' This example demonstrates getting changes made by other users
'  and refreshing the objects.

' Get the System and System Cookie
Dim myPISystem As PISystem = New PISystems().DefaultPISystem
Dim sysCookie As Object = myPISystem.GetFindChangedItemsCookie(searchSandbox:=False)

' Wait for changes to be made...
'=======================================================


' Find changes made by other users.
Dim list As New List(Of AFChangeInfo)()
Dim resultsPerPage As Integer = 1000
While True
    Dim results As IList(Of AFChangeInfo) _
        = myPISystem.FindChangedItems(False, True, resultsPerPage, sysCookie, sysCookie)
    If ((results Is Nothing) OrElse (results.Count = 0)) Then
        Exit While
    End If

    list.AddRange(results)
End While

' Refresh objects that have been changed.
AFChangeInfo.Refresh(myPISystem, list)

' Find the objects that have been changed.
For Each info As AFChangeInfo In list
    Dim myObj As AFObject = info.FindObject(myPISystem, False)
    Console.WriteLine("Found changed object: {0}", myObj)
Next

No code example is currently available or this language may not be supported.

No code example is currently available or this language may not be supported.

// This example demonstrates persisting and restoring the cookie
//  using the XmlSerializer. Other serializers could also be used.
//  Then the cookie is restored and used to get changes made while
//  the application was shut down.

// Get the System and Database and their Cookie Values
PISystem myPISystem = new PISystems().DefaultPISystem;
AFDatabase myDB = myPISystem.Databases.DefaultDatabase;

object sysCookie = myPISystem.GetFindChangedItemsCookie(searchSandbox: false);
object dbCookie;
myDB.FindChangedItems(false, int.MaxValue, null, out dbCookie);

// Persist the cookie if you want to save to pick up changes
//  where you left off after restarting application.
string tmpDir = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
string sysCookieFile = Path.Combine(tmpDir, "AFSysCookie.xml");
string dbCookieFile = Path.Combine(tmpDir, "AFDbCookie.xml");
XmlSerializer serializer = new XmlSerializer(typeof(object[]));
using (var stream = File.Create(sysCookieFile))
{
    serializer.Serialize(stream, sysCookie);
}
using (var stream = File.Create(dbCookieFile))
{
    serializer.Serialize(stream, dbCookie);
}

// Shut down application, and wait for changes to be made...
//=======================================================

// After application restarts, reload persisted cookies.
using (var stream = File.OpenRead(sysCookieFile))
{
    sysCookie = serializer.Deserialize(stream);
}
using (var stream = File.OpenRead(dbCookieFile))
{
    dbCookie = serializer.Deserialize(stream);
}

// Find changes made while application not running.
List<AFChangeInfo> list = new List<AFChangeInfo>();
int resultsPerPage = 1000;
while (true)
{
    var results = myPISystem.FindChangedItems(false, resultsPerPage, sysCookie, out sysCookie);
    if ((results?.Count ?? 0) == 0) break;
    list.AddRange(results);
}
while (true)
{
    var results = myDB.FindChangedItems(false, resultsPerPage, dbCookie, out dbCookie);
    if ((results?.Count ?? 0) == 0) break;
    list.AddRange(results);
}

// Find the objects that have been changed.
foreach (AFChangeInfo info in list)
{
    AFObject myObj = info.FindObject(myPISystem, false);
    Console.WriteLine("Found changed object: {0}", myObj);
}
' This example demonstrates persisting and restoring the cookie
'  using the XmlSerializer. Other serializers could also be used.
'  Then the cookie is restored and used to get changes made while
'  the application was shut down.

' Get the System and Database and their Cookie Values
Dim myPISystem As PISystem = New PISystems().DefaultPISystem
Dim myDB As AFDatabase = myPISystem.Databases.DefaultDatabase

Dim sysCookie As Object = myPISystem.GetFindChangedItemsCookie(searchSandbox:=False)
Dim dbCookie As Object = Nothing
myDB.FindChangedItems(False, Integer.MaxValue, Nothing, dbCookie)

' Persist the cookie if you want to save to pick up changes
'  where you left off after restarting application.
Dim tmpDir As String = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)
Dim sysCookieFile As String = Path.Combine(tmpDir, "AFSysCookie.xml")
Dim dbCookieFile As String = Path.Combine(tmpDir, "AFDbCookie.xml")
Dim serializer As XmlSerializer = New XmlSerializer(GetType(Object()))
Using stream As FileStream = File.Create(sysCookieFile)
    serializer.Serialize(stream, sysCookie)
End Using
Using stream As FileStream = File.Create(dbCookieFile)
    serializer.Serialize(stream, dbCookie)
End Using

' Shut down application, and wait for changes to be made...
'=======================================================


' After application restarts, reload persisted cookies.
Using stream As FileStream = File.OpenRead(sysCookieFile)
    sysCookie = serializer.Deserialize(stream)
End Using
Using stream As FileStream = File.OpenRead(dbCookieFile)
    dbCookie = serializer.Deserialize(stream)
End Using

' Find changes made while application not running.
Dim list As List(Of AFChangeInfo) = New List(Of AFChangeInfo)
Dim resultsPerPage As Integer = 1000
While True
    Dim results As IList(Of AFChangeInfo) _
        = myPISystem.FindChangedItems(False, resultsPerPage, sysCookie, sysCookie)
    If ((results Is Nothing) OrElse (results.Count = 0)) Then
        Exit While
    End If

    list.AddRange(results)
End While
While True
    Dim results As IList(Of AFChangeInfo) _
        = myDB.FindChangedItems(False, resultsPerPage, dbCookie, dbCookie)
    If ((results Is Nothing) OrElse (results.Count = 0)) Then
        Exit While
    End If

    list.AddRange(results)
End While

list.AddRange(myPISystem.FindChangedItems(False, Integer.MaxValue, sysCookie, sysCookie))
list.AddRange(myDB.FindChangedItems(False, Integer.MaxValue, dbCookie, dbCookie))

' Find the objects that have been changed.
For Each info As AFChangeInfo In list
    Dim myObj As AFObject = info.FindObject(myPISystem, False)
    Console.WriteLine("Found changed object: {0}", myObj)
Next

No code example is currently available or this language may not be supported.

No code example is currently available or this language may not be supported.

Version Information

AFSDK


See Also

Was this topic helpful?