public virtual void ModifyMonitoredItems(
OperationContext context,
TimestampsToReturn timestampsToReturn,
IList<IMonitoredItem> monitoredItems,
IList<MonitoredItemModifyRequest> itemsToModify,
IList<ServiceResult> errors,
IList<MonitoringFilterResult> filterResults)
{
ServerSystemContext systemContext = m_systemContext.Copy(context);
List<IMonitoredItem> modifiedItems = new List<IMonitoredItem>();
lock (Lock)
{
for (int ii = 0; ii < monitoredItems.Count; ii++)
{
MonitoredItemModifyRequest itemToModify = itemsToModify[ii];
// skip items that have already been processed.
if (itemToModify.Processed || monitoredItems[ii] == null)
{
continue;
}
// check handle.
NodeHandle handle = IsHandleInNamespace(monitoredItems[ii].ManagerHandle);
if (handle == null)
{
continue;
}
// owned by this node manager.
itemToModify.Processed = true;
// modify the monitored item.
MonitoringFilterResult filterResult = null;
errors[ii] = ModifyMonitoredItem(
systemContext,
context.DiagnosticsMask,
timestampsToReturn,
monitoredItems[ii],
itemToModify,
handle,
out filterResult);
// save any filter error details.
filterResults[ii] = filterResult;
// save the modified item.
if (ServiceResult.IsGood(errors[ii]))
{
modifiedItems.Add(monitoredItems[ii]);
}
}
}
// do any post processing.
OnModifyMonitoredItemsComplete(systemContext, modifiedItems);
}