Opc.Ua.Com.Server.ComDaGroup.CreateItems C# (CSharp) Method

CreateItems() public method

Creates the items.
public CreateItems ( ComDaCreateItemRequest requests, bool validateOnly ) : void
requests ComDaCreateItemRequest The requests.
validateOnly bool if set to true if the items only need to be validated.
return void
        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();
            }
        }