public void CreateItems(ComDaCreateItemRequest[] requests, bool validateOnly)
{
TraceState("CreateItems", this.Name, this.Active, this.UpdateRate);
ThrowIfDisposed();
// validates the items.
ComDaGroupItem[] items = m_manager.ValidateItems(this, requests);
// check if nothing more to do.
if (validateOnly)
{
return;
}
if (this.Deadband > 0)
{
// need the EU Info if the deadband is specified.
m_manager.UpdateItemEuInfo(this, items);
}
// create the items on the server.
lock (m_lock)
{
// update the filters.
UpdateDeadbandFilters(items);
// add the monitored items to the group's subscription.
for (int ii = 0; ii < items.Length; ii++)
{
ComDaGroupItem item = items[ii];
if (item != null)
{
AddItemToSubscription(item);
}
}
// update the server.
try
{
m_subscription.ApplyChanges();
}
catch (Exception e)
{
// set fatal error for remaining items.
for (int ii = 0; ii < items.Length; ii++)
{
ComDaGroupItem item = items[ii];
if (items[ii] != null)
{
requests[ii].Error = ComUtils.GetErrorCode(e, ResultIds.E_FAIL);
}
}
return;
}
// build results.
for (int ii = 0; ii < items.Length; ii++)
{
// check for valid item.
ComDaGroupItem item = items[ii];
if (item == null)
{
continue;
}
// check for error.
ServiceResult error = item.MonitoredItem.Status.Error;
if (ServiceResult.IsBad(error))
{
RemoveItemFromSubscription(item);
requests[ii].Error = ComDaProxy.MapReadStatusToErrorCode(error.StatusCode);
continue;
}
TraceState(
"ItemCreated",
m_subscription.CurrentPublishingEnabled,
m_subscription.CurrentPublishingInterval,
item.MonitoredItem.Status.MonitoringMode,
item.MonitoredItem.Status.SamplingInterval);
// save the item.
m_itemsByHandle.Add(item.ServerHandle, item);
m_items.Add(item);
}
// start the update timer.
CheckUpdateTimerStatus();
}
}