What's New in PI AF 2017
- Last UpdatedNov 18, 2025
- 6 minute read
- PI System
- AF SDK 2024 R2
- Developer
The PI AF 2017 (2.9.0.8065) release provides performance and usability improvements in many areas. New search mechanisms are provided to only return specific fields in searches rather than the entire object thereby dramatically improving performance in many circumstances. New queries for event frames summaries have been added to allow users to more easily summarize event frame attributes across many event frames. Users can now search for PI Points filtered by value, timestamp and status.
Other major enhancements include:
- Improved UOM support for PI Point data reference, expression analyses, and rollups.
- The ability to import/export security identities and mappings.
- New “Owner” security identity has been added.
This topic contains the following sections:
- OSIsoft.AF Namespace
- OSIsoft.AF.Analysis Namespace
- OSIsoft.AF.Asset Namespace
- OSIsoft.AF.Data Namespace
- OSIsoft.AF.Data.Aggregate Namespace
- OSIsoft.AF.EventFrame Namespace
- OSIsoft.AF.Notification Namespace
- OSIsoft.AF.PI Namespace
- OSIsoft.AF.Search Namespace
- OSIsoft.AF.Time Namespace
- OSIsoft.AF.UnitsOfMeasure Namespace
OSIsoft.AF Namespace
With the new PISystemFindChangedItems(Boolean, Boolean, Int32, Object, Object) and PISystemFindChangedItems(AFIdentity, Boolean, Boolean, Int32, Object, Object) methods, you can do a full search for all changes from the system and all databases in a single call. The PISystemGetFindChangedItemsCookie(Boolean) method will return an initial cookie that can be used when getting changed items from the server. New overloads PISystemsRefresh(Boolean, Boolean) and PISystemRefresh(Boolean) allow the databases to be optionally refreshed when refreshing the system.
The following changes were made related to security:
- The AuthenticationType property was added to display the type of authentication used when connecting to the server.
- Two new AFSecurityCheckSecurity methods were added to check security based upon the list of security identities for the user.
- The AFSecurityGetUserId(PISystem, String) helper method was added to get the user's identifier to be used when setting the AFSecurityRightsTokenSecurityOwnerId using the new AFSecurityRightsTokenAFSecurityRightsToken(Guid, Int64, AFIdentity, Guid, Int32, AFSecurityItem, AFSecurityRights, AFSecurityRights) constructor.
- The ability to get and set the owner of an object was added with the AFSecurityOwnerName property and AFSecuritySetOwner(NTAccount) method.
- The AFSecurityMappingAccountDisplayName property was added to display an account's name for a security mapping.
The creation date of an object is now exposed by the IAFTransactableCreationDate property. The AFProgressStatusPromptForContinue enumeration value was added to allow progress event handler to determine if the operation should continue.
The AFNameSubstitutionTypeDuration substitution type has been added to allow the duration of an object to be used as a substitution in a data reference's configuration.
OSIsoft.AF.Analysis Namespace
To support enhanced caching ability in the analysis service, the following classes, methods, and properties have been added:
- AFAnalysisInputRange Class
- AFInputRangeData Class
- AFInputCountData Class
- AFAnalysisRuleInputDefinitionCreateSingleInputWithMappingAndRanges(AFVariableMappingData, AFInputRangeData, AFInputCountData, AFAnalysisInputType, String, String, Boolean) Method
- AFAnalysisRuleInputDefinitionInputRange Property
- AFAnalysisRuleResolvedInputInputRange Property
The ability to find analyses in bulk when you know their unique identifiers was added with the new AFAnalysisFindAnalyses(PISystem, Guid, Object) method.
OSIsoft.AF.Asset Namespace
The new method AFElementLoadAttributes(PISystem, IListGuid, IListAFAttributeTemplate, Object) will partially load elements by their ID instead of having to find the elements first. The AFTableInitializeDataTable(AFTable, DataTable) method was added to properly initialize a .NET DataTable to be used with an AFTable. The AFValueConvertForAttribute(AFAttribute) helper method was added to convert a value based upon an attribute.
The ability to find objects in bulk and only load their headers and only load their headers when you know their unique identifiers was added with the following new methods:
- AFElementFindElements(PISystem, Guid, Object)
- AFElementTemplateFindElementTemplates(PISystem, Guid, Object)
- AFEnumerationSetFindEnumerationSets(PISystem, Guid)
- AFReferenceTypeFindReferenceTypes(PISystem, Guid, Object)
- AFTableConnectionFindTableConnections(PISystem, Guid)
- AFTableFindTables(PISystem, Guid, Object)
OSIsoft.AF.Data Namespace
The new async methods AFDataRecordedValuesAtTimesAsync(IListAFTime, AFRetrievalMode, UOM, CancellationToken) and AFDataReferenceRecordedValuesAtTimesAsync(IListAFTime, AFRetrievalMode, AFAttributeList, AFValues, CancellationToken) have been added. The new AFDataCacheTrimData(AFAttribute, AFTime, Int32) overload method was added to allow the number of events to be specified to keep in the data cache before the minimum time. The new AFSummaryTypesTotalWithUOM enumeration value was also added.
OSIsoft.AF.Data.Aggregate Namespace
This new namespace has been added to support the ability to summarize search results based on the AFSearch base class. The following new classes have been added to this namespace:
OSIsoft.AF.EventFrame Namespace
The ability to find objects in bulk and only load their headers when you know their unique identifiers was added with the following new methods:
OSIsoft.AF.Notification Namespace
The ability to find objects in bulk and only load their headers when you know their unique identifiers was added with the following new methods:
OSIsoft.AF.PI Namespace
The new async method PIPointRecordedValuesAtTimesAsync(IListAFTime, AFRetrievalMode, CancellationToken) has been added. The new PIServersRefresh(Boolean) overload method will optionally refresh any connected PI Servers. The PIServerGetClientRpcMetrics method will return the client metrics between the SDK and the PI Server.
OSIsoft.AF.Search Namespace
The IAFSearchT interface has been added to access the search properties and methods generically. The search classes now implement the IDisposable interface which will automatically call the Close method when leaving scope to release any cached results in the server.
The ability to perform a search and only return back some of the fields of the matching objects can now be accomplished using the new AFSearchFindObjectFields methods and the OSIsoft.AF.SearchAFSearchObjectFieldAttribute to indicate the fields of a user-defined type to be returned. Static GetFilters and GetObjectFields methods have been added to each AFSearch-based class to return the valid filters and fields based upon the server.
Five new search filters were added: CreationDate, ModifyDate, TargetName, TimeContext, and TimeContextEnd. And since it is common to create search tokens with the equal operator, the new AFSearchTokenAFSearchToken(AFSearchFilter, String, String) constructor was added.
The ability to summarize search results has been added with the addition of the following methods to the AFSearch base class:
OSIsoft.AF.Time Namespace
The ability to get a duration of an event has been added with the following new properties:
OSIsoft.AF.UnitsOfMeasure Namespace
UOMs now support the ability for time weighted totals to produce other than day based UOM with the following new properties and method:
- UOMDayBasedTimeIntegralUOM Property
- UOMTimeIntegralUOM Property
- UOMDeltaUOM Property
- UOMDatabaseGetWarnings(CultureInfo) Method