Example #1
2
        /// <summary>
        /// Updates the application after connecting to or disconnecting from the server.
        /// </summary>
        private void Server_ConnectComplete(object sender, EventArgs e)
        {
            try
            {
                m_session = ConnectServerCTRL.Session;

                if (m_session == null)
                {
                    return;
                }

                // set a suitable initial state.
                if (m_session != null && !m_connectedOnce)
                {
                    m_connectedOnce = true;

                    EventsLV.IsSubscribed = false;
                    EventsLV.DisplayConditions = true;
                    EventsLV.ChangeArea(Opc.Ua.ObjectIds.Server, false);

                    FilterDeclaration filter = new FilterDeclaration();

                    ushort namespaceIndex = (ushort)m_session.NamespaceUris.GetIndex(DsatsDemo.Namespaces.DsatsDemo);

                    filter.EventTypeId = ExpandedNodeId.ToNodeId(DsatsDemo.ObjectTypeIds.LockConditionType, m_session.NamespaceUris);

                    filter.AddSimpleField(String.Empty, BuiltInType.NodeId, false);
                    filter.AddSimpleField(Opc.Ua.BrowseNames.EventId, BuiltInType.ByteString, false);
                    filter.AddSimpleField(Opc.Ua.BrowseNames.EventType, BuiltInType.NodeId, false);
                    filter.AddSimpleField(Opc.Ua.BrowseNames.ConditionName, BuiltInType.String, true);
       
                    filter.AddSimpleField(new QualifiedName[] { 
                        new QualifiedName(DsatsDemo.BrowseNames.LockState, namespaceIndex),
                        new QualifiedName(Opc.Ua.BrowseNames.CurrentState) },
                        BuiltInType.String,
                        ValueRanks.Scalar,
                        true);

                    filter.AddSimpleField(new QualifiedName(DsatsDemo.BrowseNames.ClientUserId, namespaceIndex), BuiltInType.String, true);
                    filter.AddSimpleField(new QualifiedName(DsatsDemo.BrowseNames.SubjectName, namespaceIndex), BuiltInType.String, true);
                    filter.AddSimpleField(new QualifiedName(DsatsDemo.BrowseNames.SessionId, namespaceIndex), BuiltInType.NodeId, true);

                    EventsLV.ChangeFilter(filter, true);
                    
                    m_filter = filter;

                    PhaseCB.Items.Clear();

                    BrowseDescription nodeToBrowse = new BrowseDescription();
                    nodeToBrowse.NodeId = new NodeId(DsatsDemo.Objects.Rig_Phases, namespaceIndex);
                    nodeToBrowse.ReferenceTypeId = Opc.Ua.ReferenceTypeIds.HierarchicalReferences;
                    nodeToBrowse.IncludeSubtypes = true;
                    nodeToBrowse.BrowseDirection = BrowseDirection.Forward;
                    nodeToBrowse.ResultMask = (uint)BrowseResultMask.All;

                    DataValue value = m_session.ReadValue(new NodeId(DsatsDemo.Variables.Rig_CurrentPhase, namespaceIndex));
                    NodeId currentPhase = value.GetValue<NodeId>(null);

                    ReferenceDescriptionCollection references = ClientUtils.Browse(m_session, nodeToBrowse, false);

                    if (references != null)
                    {
                        for (int ii = 0; ii < references.Count; ii++)
                        {
                            PhaseCB.Items.Add(references[ii]);

                            if (currentPhase == references[ii].NodeId)
                            {
                                PhaseCB.SelectedIndex = ii;
                            }
                        }
                    }

                    m_connectedOnce = true;
                }

                EventsLV.IsSubscribed = true;
                EventsLV.ChangeSession(m_session, true);
                EventsLV.ConditionRefresh();
            }
            catch (Exception exception)
            {
                MessageBox.Show(exception.Message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
Example #2
0
        private void EventTypeBTN_Click(object sender, EventArgs e)
        {
            try
            {
                if (m_session == null)
                {
                    return;
                }

                TypeDeclaration type = new SelectTypeDlg().ShowDialog(m_session, Opc.Ua.ObjectTypeIds.BaseEventType, "Select Event Type");

                if (type == null)
                {
                    return;
                }

                m_filter           = new FilterDeclaration(type, m_filter);
                EventTypeTB.Text   = m_session.NodeCache.GetDisplayText(m_filter.EventTypeId);
                EventFilterTB.Text = GetFilterFields(m_filter);
                ResultsLV.ChangeFilter(m_filter, false);
            }
            catch (Exception exception)
            {
                ClientUtils.HandleException(this.Text, exception);
            }
        }
Example #3
0
        /// <summary>
        /// Displays the available areas in a tree view.
        /// </summary>
        /// <param name="session">The session.</param>
        /// <returns></returns>
        public bool ShowDialog(FilterDeclaration filter)
        {
            m_filter = filter;

            Populate();

            // display the dialog.
            if (ShowDialog() != DialogResult.OK)
            {
                return(false);
            }

            // update filter.
            List <FilterDeclarationField> fields = new List <FilterDeclarationField>();

            for (int ii = 0; ii < EventFieldsLV.Items.Count; ii++)
            {
                ListViewItem item  = EventFieldsLV.Items[ii];
                FilterItem   field = item.Tag as FilterItem;

                if (field != null)
                {
                    field.Declaration.DisplayInList  = field.DisplayInList;
                    field.Declaration.FilterEnabled  = field.FilterEnabled;
                    field.Declaration.FilterOperator = field.FilterOperator;
                    field.Declaration.FilterValue    = field.FilterValue;
                    fields.Add(field.Declaration);
                }
            }

            filter.Fields = fields;

            // return the result.
            return(true);
        }
Example #4
0
        /// <summary>
        /// Changes the filter used to select the events.
        /// </summary>
        public void ChangeFilter(FilterDeclaration filter, bool fetchRecent)
        {
            m_filter = filter;
            EventsLV.Items.Clear();

            int index = 0;

            // add or update existing columns.
            for (int ii = 0; ii < m_filter.Fields.Count; ii++)
            {
                if (m_filter.Fields[ii].DisplayInList)
                {
                    if (index >= EventsLV.Columns.Count)
                    {
                        EventsLV.Columns.Add(new ColumnHeader());
                    }

                    EventsLV.Columns[index].Text      = m_filter.Fields[ii].InstanceDeclaration.DisplayName;
                    EventsLV.Columns[index].TextAlign = HorizontalAlignment.Left;
                    index++;
                }
            }

            // remove extra columns.
            while (index < EventsLV.Columns.Count)
            {
                EventsLV.Columns.RemoveAt(EventsLV.Columns.Count - 1);
            }

            // adjust the width of the columns.
            for (int ii = 0; ii < EventsLV.Columns.Count; ii++)
            {
                EventsLV.Columns[ii].Width = -2;
            }

            // fetch recent history.
            if (fetchRecent)
            {
                ReadRecentHistory();
            }

            // update subscription.
            if (m_subscription != null)
            {
                m_monitoredItem.Filter = m_filter.GetFilter();
                m_subscription.ApplyChanges();
            }
        }
Example #5
0
        /// <summary>
        /// Displays the dialog.
        /// </summary>
        public bool ShowDialog(Session session, NodeId areaId, FilterDeclaration filter)
        {
            m_session = session;
            m_areaId  = areaId;
            m_filter  = filter;

            EventAreaTB.Text   = session.NodeCache.GetDisplayText(m_areaId);
            EventTypeTB.Text   = session.NodeCache.GetDisplayText(filter.EventTypeId);
            EventFilterTB.Text = GetFilterFields(m_filter);

            ResultsLV.IsSubscribed = false;
            ResultsLV.ChangeSession(session, false);
            ResultsLV.ChangeArea(areaId, false);
            ResultsLV.ChangeFilter(filter, false);

            // get the beginning of data.
            DateTime startTime;

            try
            {
                startTime = ReadFirstDate().ToLocalTime();
            }
            catch (Exception)
            {
                startTime = new DateTime(2000, 1, 1);
            }

            StartTimeDP.Value         = startTime;
            StartTimeCK.Checked       = true;
            EndTimeDP.Value           = DateTime.Now;
            EndTimeCK.Checked         = true;
            MaxReturnValuesNP.Value   = 10;
            MaxReturnValuesCK.Checked = true;
            GoBTN.Visible             = true;
            NextBTN.Visible           = false;
            StopBTN.Enabled           = false;

            if (ShowDialog() != DialogResult.OK)
            {
                return(false);
            }

            return(true);
        }
        /// <summary>
        /// Displays the dialog.
        /// </summary>
        public bool ShowDialog(Session session, NodeId areaId, FilterDeclaration filter)
        {
            m_session = session;
            m_areaId = areaId;
            m_filter = filter;

            EventAreaTB.Text = session.NodeCache.GetDisplayText(m_areaId);
            EventTypeTB.Text = session.NodeCache.GetDisplayText(filter.EventTypeId);
            EventFilterTB.Text = GetFilterFields(m_filter);

            ResultsLV.IsSubscribed = false;
            ResultsLV.ChangeSession(session, false);
            ResultsLV.ChangeArea(areaId, false);
            ResultsLV.ChangeFilter(filter, false);
            
            // get the beginning of data.
            DateTime startTime;

            try
            {
                startTime = ReadFirstDate().ToLocalTime(); 
            }
            catch (Exception)
            {
                startTime = new DateTime(2000, 1, 1);
            }
            
            StartTimeDP.Value = startTime;
            StartTimeCK.Checked = true;
            EndTimeDP.Value = DateTime.Now;
            EndTimeCK.Checked = true;
            MaxReturnValuesNP.Value = 10;
            MaxReturnValuesCK.Checked = true;
            GoBTN.Visible = true;
            NextBTN.Visible = false;
            StopBTN.Enabled = false;

            if (ShowDialog() != DialogResult.OK)
            {
                return false;
            }
                       
            return true;
        }
Example #7
0
        /// <summary>
        /// Returns the filter fields formatted as a string.
        /// </summary>
        private string GetFilterFields(FilterDeclaration filter)
        {
            StringBuilder buffer = new StringBuilder();

            foreach (FilterDeclarationField field in filter.Fields)
            {
                if (field.FilterEnabled)
                {
                    if (buffer.Length > 0)
                    {
                        buffer.Append(", ");
                    }

                    buffer.Append(field.InstanceDeclaration.DisplayName);
                }
            }

            return(buffer.ToString());
        }
Example #8
0
        /// <summary>
        /// Shows all fields for the current condition.
        /// </summary>
        public bool ShowDialog(FilterDeclaration filter, VariantCollection fields)
        {
            // fill in dialog.
            for (int ii = 0; ii < filter.Fields.Count; ii++)
            {
                InstanceDeclaration instance = filter.Fields[ii].InstanceDeclaration;
                ListViewItem item = new ListViewItem(instance.DisplayPath);
                item.SubItems.Add(instance.DataTypeDisplayText);

                string text = null;

                // check for missing fields.
                if (fields.Count <= ii || fields[ii].Value == null)
                {
                    text = String.Empty;
                }

                // use default string format.
                else
                {
                    text = fields[ii].ToString();
                }

                item.SubItems.Add(text);
                item.Tag = filter.Fields[ii];
                FieldsLV.Items.Add(item);
            }

            // adjust columns.
            for (int ii = 0; ii < FieldsLV.Columns.Count; ii++)
            {
                FieldsLV.Columns[ii].Width = -2;
            }

            // display the dialog.
            if (ShowDialog() != DialogResult.OK)
            {
                return false;
            }

            return true;
        }
Example #9
0
        /// <summary>
        /// Shows all fields for the current condition.
        /// </summary>
        public bool ShowDialog(FilterDeclaration filter, VariantCollection fields)
        {
            // fill in dialog.
            for (int ii = 0; ii < filter.Fields.Count; ii++)
            {
                InstanceDeclaration instance = filter.Fields[ii].InstanceDeclaration;
                ListViewItem        item     = new ListViewItem(instance.DisplayPath);
                item.SubItems.Add(instance.DataTypeDisplayText);

                string text = null;

                // check for missing fields.
                if (fields.Count <= ii || fields[ii].Value == null)
                {
                    text = String.Empty;
                }

                // use default string format.
                else
                {
                    text = fields[ii].ToString();
                }

                item.SubItems.Add(text);
                item.Tag = filter.Fields[ii];
                FieldsLV.Items.Add(item);
            }

            // adjust columns.
            for (int ii = 0; ii < FieldsLV.Columns.Count; ii++)
            {
                FieldsLV.Columns[ii].Width = -2;
            }

            // display the dialog.
            if (ShowDialog() != DialogResult.OK)
            {
                return(false);
            }

            return(true);
        }
        /// <summary>
        /// Sets the filter to edit.
        /// </summary>
        public void SetFilter(FilterDeclaration filter)
        {
            m_filter = filter;
            m_dataset = new DataSet();
            m_dataset.Tables.Add("Events");
            m_dataset.Tables[0].Columns.Add("Event", typeof(VariantCollection));

            if (m_filter != null)
            {
                foreach (FilterDeclarationField field in m_filter.Fields)
                {
                    if (field.DisplayInList)
                    {
                        m_dataset.Tables[0].Columns.Add(field.InstanceDeclaration.DisplayName, typeof(string));
                    }
                }
            }
            
            EventsDV.DataSource = m_dataset.Tables[0];
        }
        private void EventTypeBTN_Click(object sender, EventArgs e)
        {
            try
            {
                if (m_session == null)
                {
                    return;
                }

                TypeDeclaration type = new SelectTypeDlg().ShowDialog(m_session, Opc.Ua.ObjectTypeIds.BaseEventType, "Select Event Type");

                if (type == null)
                {
                    return;
                }

                m_filter = new FilterDeclaration(type, m_filter);
                EventTypeTB.Text = m_session.NodeCache.GetDisplayText(m_filter.EventTypeId);
                EventFilterTB.Text = GetFilterFields(m_filter);
                ResultsLV.ChangeFilter(m_filter, false);
            }
            catch (Exception exception)
            {
                ClientUtils.HandleException(this.Text, exception);
            }
        }
Example #12
0
        /// <summary>
        /// Creates list item for an event.
        /// </summary>
        private ListViewItem CreateListItem(FilterDeclaration filter, VariantCollection fieldValues)
        {
            ListViewItem item = new ListViewItem();

            item.Tag = fieldValues;

            for (int ii = 1; ii < fieldValues.Count; ii++)
            {
                if (!filter.Fields[ii - 1].DisplayInList)
                {
                    continue;
                }

                string text = null;

                // check for missing fields.
                if (fieldValues[ii].Value == null)
                {
                    text = String.Empty;
                }

                // display the name of a node instead of the node id.
                else if (fieldValues[ii].TypeInfo.BuiltInType == BuiltInType.NodeId)
                {
                    INode node = m_session.NodeCache.Find((NodeId)fieldValues[ii].Value);

                    if (node != null)
                    {
                        text = node.ToString();
                    }
                }

                // display local time for any time fields.
                else if (fieldValues[ii].TypeInfo.BuiltInType == BuiltInType.DateTime)
                {
                    DateTime value = (DateTime)fieldValues[ii].Value;

                    if (m_filter.Fields[ii - 1].InstanceDeclaration.DisplayName.Contains("Time"))
                    {
                        text = value.ToLocalTime().ToString("HH:mm:ss.fff");
                    }
                    else
                    {
                        text = value.ToLocalTime().ToString("yyyy-MM-dd");
                    }
                }

                // use default string format.
                else
                {
                    text = fieldValues[ii].ToString();
                }

                // update subitem text.
                if (item.Text == String.Empty)
                {
                    item.Text             = text;
                    item.SubItems[0].Text = text;
                }
                else
                {
                    item.SubItems.Add(text);
                }
            }

            return(item);
        }
        /// <summary>
        /// Sets the filter to edit.
        /// </summary>
        public void SetFilter(FilterDeclaration filter)
        {
            m_dataset.Tables[0].Rows.Clear();

            if (filter != null)
            {
                foreach (FilterDeclarationField field in filter.Fields)
                {
                    DataRow row = m_dataset.Tables[0].NewRow();
                    UpdateRow(row, field);
                    m_dataset.Tables[0].Rows.Add(row);
                }
            }
        }
        /// <summary>
        /// Returns the filter fields formatted as a string.
        /// </summary>
        private string GetFilterFields(FilterDeclaration filter)
        {
            StringBuilder buffer = new StringBuilder();

            foreach (FilterDeclarationField field in filter.Fields)
            {
                if (field.FilterEnabled)
                {
                    if (buffer.Length > 0)
                    {
                        buffer.Append(", ");
                    }

                    buffer.Append(field.InstanceDeclaration.DisplayName);
                }
            }

            return buffer.ToString();
        }
Example #15
0
        /// <summary>
        /// Displays the available areas in a tree view.
        /// </summary>
        /// <param name="session">The session.</param>
        /// <returns></returns>
        public bool ShowDialog(FilterDeclaration filter)
        {
            m_filter = filter;

            Populate();

            // display the dialog.
            if (ShowDialog() != DialogResult.OK)
            {
                return false;
            }

            // update filter.
            List<FilterDeclarationField> fields = new List<FilterDeclarationField>();

            for (int ii = 0; ii < EventFieldsLV.Items.Count; ii++)
            {
                ListViewItem item = EventFieldsLV.Items[ii];
                FilterItem field = item.Tag as FilterItem;

                if (field != null)
                {
                    field.Declaration.DisplayInList = field.DisplayInList;
                    field.Declaration.FilterEnabled = field.FilterEnabled;
                    field.Declaration.FilterOperator = field.FilterOperator;
                    field.Declaration.FilterValue = field.FilterValue;
                    fields.Add(field.Declaration);
                }
            }

            filter.Fields = fields;

            // return the result.
            return true;
        }
Example #16
0
        /// <summary>
        /// Changes the filter used to select the events.
        /// </summary>
        public void ChangeFilter(FilterDeclaration filter, bool fetchRecent)
        {
            m_filter = filter;
            EventsLV.Items.Clear();

            int index = 0;

            // add or update existing columns.
            for (int ii = 0; ii < m_filter.Fields.Count; ii++)
            {
                if (m_filter.Fields[ii].DisplayInList)
                {
                    if (index >= EventsLV.Columns.Count)
                    {
                        EventsLV.Columns.Add(new ColumnHeader());
                    }

                    EventsLV.Columns[index].Text = m_filter.Fields[ii].InstanceDeclaration.DisplayName;
                    EventsLV.Columns[index].TextAlign = HorizontalAlignment.Left;
                    index++;
                }
            }

            // remove extra columns.
            while (index < EventsLV.Columns.Count)
            {
                EventsLV.Columns.RemoveAt(EventsLV.Columns.Count - 1);
            }

            // adjust the width of the columns.
            for (int ii = 0; ii < EventsLV.Columns.Count; ii++)
            {
                EventsLV.Columns[ii].Width = -2;
            }

            // fetch recent history.
            if (fetchRecent)
            {
                ReadRecentHistory();
            }

            // update subscription.
            if (m_subscription != null)
            {
                m_monitoredItem.Filter = m_filter.GetFilter();
                m_subscription.ApplyChanges();
            }
        }
Example #17
0
        /// <summary>
        /// Creates list item for an event.
        /// </summary>
        private ListViewItem CreateListItem(FilterDeclaration filter, VariantCollection fieldValues)
        {
            ListViewItem item = new ListViewItem();
            item.Tag = fieldValues;

            for (int ii = 1; ii < fieldValues.Count; ii++)
            {
                if (!filter.Fields[ii-1].DisplayInList)
                {
                    continue;
                }

                string text = null;

                // check for missing fields.
                if (fieldValues[ii].Value == null)
                {
                    text = String.Empty;
                }

                // display the name of a node instead of the node id.
                else if (fieldValues[ii].TypeInfo.BuiltInType == BuiltInType.NodeId)
                {
                    INode node = m_session.NodeCache.Find((NodeId)fieldValues[ii].Value);

                    if (node != null)
                    {
                        text = node.ToString();
                    }
                }

                // display local time for any time fields.
                else if (fieldValues[ii].TypeInfo.BuiltInType == BuiltInType.DateTime)
                {
                    DateTime value = (DateTime)fieldValues[ii].Value;

                    if (m_filter.Fields[ii-1].InstanceDeclaration.DisplayName.Contains("Time"))
                    {
                        text = value.ToLocalTime().ToString("HH:mm:ss.fff");
                    }
                    else
                    {
                        text = value.ToLocalTime().ToString("yyyy-MM-dd");
                    }
                }

                // use default string format.
                else
                {
                    text = fieldValues[ii].ToString();
                }

                // update subitem text.
                if (item.Text == String.Empty)
                {
                    item.Text = text;
                    item.SubItems[0].Text = text;
                }
                else
                {
                    item.SubItems.Add(text);
                }
            }

            return item;
        }
        /// <summary>
        /// Updates the filter from the controls.
        /// </summary>
        private void UpdateFilter()
        {
            // get selected declarations.
            List<InstanceDeclaration> declarations = new List<InstanceDeclaration>();
            NodeId eventTypeId = CollectInstanceDeclarations(declarations);

            if (m_filter == null)
            {
                m_filter = new FilterDeclaration();
            }

            if (m_filter.Fields == null || m_filter.Fields.Count == 0)
            {
                m_filter.Fields = new List<FilterDeclarationField>();

                // select some default values to display in the list.
                AddDefaultFilter(m_filter.Fields, Opc.Ua.BrowseNames.EventType, true);
                AddDefaultFilter(m_filter.Fields, Opc.Ua.BrowseNames.SourceName, true);
                AddDefaultFilter(m_filter.Fields, Opc.Ua.BrowseNames.SourceNode, true);
                AddDefaultFilter(m_filter.Fields, Opc.Ua.BrowseNames.Time, true);
                AddDefaultFilter(m_filter.Fields, Opc.Ua.BrowseNames.Severity, true);
                AddDefaultFilter(m_filter.Fields, Opc.Ua.BrowseNames.Message, true);
            }

            // copy settings from existing filter.
            List<FilterDeclarationField> fields = new List<FilterDeclarationField>();

            foreach (InstanceDeclaration declaration in declarations)
            {
                if (declaration.NodeClass != NodeClass.Variable)
                {
                    continue;
                }

                FilterDeclarationField field = new FilterDeclarationField(declaration);

                foreach (FilterDeclarationField field2 in m_filter.Fields)
                {
                    if (field2.InstanceDeclaration.BrowsePathDisplayText == field.InstanceDeclaration.BrowsePathDisplayText)
                    {
                        field.DisplayInList = field2.DisplayInList;
                        field.FilterEnabled = field2.FilterEnabled;
                        field.FilterOperator = field2.FilterOperator;
                        field.FilterValue = field2.FilterValue;
                        break;
                    }
                }

                fields.Add(field);
            }
            
            // update filter.
            m_filter.EventTypeId = eventTypeId;
            m_filter.Fields = fields;
        }
Example #19
0
        /// <summary>
        /// Deletes the recent history.
        /// </summary>
        private void DeleteHistory(NodeId areaId, List<VariantCollection> events, FilterDeclaration filter)
        {
            // find the event id.
            int index = 0;

            foreach (FilterDeclarationField field in filter.Fields)
            {
                if (field.InstanceDeclaration.BrowseName == Opc.Ua.BrowseNames.EventId)
                {
                    break;
                }

                index++;
            }

            // can't delete events if no event id.
            if (index >= filter.Fields.Count)
            {
                throw ServiceResultException.Create(StatusCodes.BadEventIdUnknown, "Cannot delete events if EventId was not selected.");
            }

            // build list of nodes to delete.
            DeleteEventDetails details = new DeleteEventDetails();
            details.NodeId = areaId;

            foreach (VariantCollection e in events)
            {
                byte[] eventId = null;

                if (e.Count > index)
                {
                    eventId = e[index].Value as byte[];
                }

                details.EventIds.Add(eventId);
            }

            // delete the events.
            ExtensionObjectCollection nodesToUpdate = new ExtensionObjectCollection();
            nodesToUpdate.Add(new ExtensionObject(details));

            HistoryUpdateResultCollection results = null;
            DiagnosticInfoCollection diagnosticInfos = null;

            m_session.HistoryUpdate(
                null,
                nodesToUpdate,
                out results,
                out diagnosticInfos);

            ClientBase.ValidateResponse(results, nodesToUpdate);
            ClientBase.ValidateDiagnosticInfos(diagnosticInfos, nodesToUpdate);

            if (StatusCode.IsBad(results[0].StatusCode))
            {
                throw new ServiceResultException(results[0].StatusCode);
            }

            // check for item level errors.
            if (results[0].OperationResults.Count > 0)
            {
                int count = 0;

                for (int ii = 0; ii < results[0].OperationResults.Count; ii++)
                {
                    if (StatusCode.IsBad(results[0].OperationResults[ii]))
                    {
                        count++;
                    }
                }

                // raise an error.
                if (count > 0)
                {
                    throw ServiceResultException.Create(
                        StatusCodes.BadEventIdUnknown, 
                        "Error deleting events. Only {0} of {1} deletes succeeded.",
                        events.Count - count,
                        events.Count);
                }
            }
        }
        /// <summary>
        /// Displays the current filter components in the control.
        /// </summary>
        public void ShowFilter(FilterDeclaration filter)
        {
            m_declarations = new List<InstanceDeclaration>();

            foreach (FilterDeclarationField declaration in filter.Fields)
            {
                DataRow row = m_dataset.Tables[0].NewRow();
                UpdateRow(row, declaration.InstanceDeclaration);
                m_dataset.Tables[0].Rows.Add(row);
                m_declarations.Add(declaration.InstanceDeclaration);
            }
        }
Example #21
0
        /// <summary>
        /// Deletes the recent history.
        /// </summary>
        private void DeleteHistory(NodeId areaId, List <VariantCollection> events, FilterDeclaration filter)
        {
            // find the event id.
            int index = 0;

            foreach (FilterDeclarationField field in filter.Fields)
            {
                if (field.InstanceDeclaration.BrowseName == Opc.Ua.BrowseNames.EventId)
                {
                    break;
                }

                index++;
            }

            // can't delete events if no event id.
            if (index >= filter.Fields.Count)
            {
                throw ServiceResultException.Create(StatusCodes.BadEventIdUnknown, "Cannot delete events if EventId was not selected.");
            }

            // build list of nodes to delete.
            DeleteEventDetails details = new DeleteEventDetails();

            details.NodeId = areaId;

            foreach (VariantCollection e in events)
            {
                byte[] eventId = null;

                if (e.Count > index)
                {
                    eventId = e[index].Value as byte[];
                }

                details.EventIds.Add(eventId);
            }

            // delete the events.
            ExtensionObjectCollection nodesToUpdate = new ExtensionObjectCollection();

            nodesToUpdate.Add(new ExtensionObject(details));

            HistoryUpdateResultCollection results         = null;
            DiagnosticInfoCollection      diagnosticInfos = null;

            m_session.HistoryUpdate(
                null,
                nodesToUpdate,
                out results,
                out diagnosticInfos);

            ClientBase.ValidateResponse(results, nodesToUpdate);
            ClientBase.ValidateDiagnosticInfos(diagnosticInfos, nodesToUpdate);

            if (StatusCode.IsBad(results[0].StatusCode))
            {
                throw new ServiceResultException(results[0].StatusCode);
            }

            // check for item level errors.
            if (results[0].OperationResults.Count > 0)
            {
                int count = 0;

                for (int ii = 0; ii < results[0].OperationResults.Count; ii++)
                {
                    if (StatusCode.IsBad(results[0].OperationResults[ii]))
                    {
                        count++;
                    }
                }

                // raise an error.
                if (count > 0)
                {
                    throw ServiceResultException.Create(
                              StatusCodes.BadEventIdUnknown,
                              "Error deleting events. Only {0} of {1} deletes succeeded.",
                              events.Count - count,
                              events.Count);
                }
            }
        }
Example #22
0
        /// <summary>
        /// Creates list item for an event.
        /// </summary>
        private ListViewItem CreateListItem(FilterDeclaration filter, VariantCollection fieldValues)
        {
            ListViewItem item = null;

            if (m_displayConditions)
            {
                NodeId conditionId = fieldValues[0].Value as NodeId;

                if (conditionId != null)
                {
                    for (int ii = 0; ii < EventsLV.Items.Count; ii++)
                    {
                        VariantCollection fields = EventsLV.Items[ii].Tag as VariantCollection;

                        if (fields != null && Utils.IsEqual(conditionId, fields[0].Value))
                        {
                            item = EventsLV.Items[ii];
                            break;
                        }
                    }
                }
            }

            if (item == null)
            {
                item = new ListViewItem();
            }

            item.Tag = fieldValues;
            int position = -1;

            for (int ii = 1; ii < filter.Fields.Count; ii++)
            {
                if (!filter.Fields[ii].DisplayInList)
                {
                    continue;
                }

                position++;

                string text = null;
                Variant value = fieldValues[ii + 1];

                // check for missing fields.
                if (value.Value == null)
                {
                    text = String.Empty;
                }

                // display the name of a node instead of the node id.
                else if (value.TypeInfo.BuiltInType == BuiltInType.NodeId)
                {
                    INode node = m_session.NodeCache.Find((NodeId)value.Value);

                    if (node != null)
                    {
                        text = node.ToString();
                    }
                }

                // display local time for any time fields.
                else if (value.TypeInfo.BuiltInType == BuiltInType.DateTime)
                {
                    DateTime datetime = (DateTime)value.Value;

                    if (m_filter.Fields[ii].InstanceDeclaration.DisplayName.Contains("Time"))
                    {
                        text = datetime.ToLocalTime().ToString("HH:mm:ss.fff");
                    }
                    else
                    {
                        text = datetime.ToLocalTime().ToString("yyyy-MM-dd");
                    }
                }

                // use default string format.
                else
                {
                    text = value.ToString();
                }

                // update subitem text.
                if (item.Text == String.Empty)
                {
                    item.Text = text;
                    item.SubItems[0].Text = text;
                }
                else
                {
                    if (item.SubItems.Count <= position)
                    {
                        item.SubItems.Add(text);
                    }
                    else
                    {
                        item.SubItems[position].Text = text;
                    }
                }
            }

            return item;
        }
Example #23
0
        /// <summary>
        /// Updates the application after connecting to or disconnecting from the server.
        /// </summary>
        private void Server_ConnectComplete(object sender, EventArgs e)
        {
            try
            {
                m_session = ConnectServerCTRL.Session;

                if (m_session == null)
                {
                    return;
                }

                // set a suitable initial state.
                if (m_session != null && !m_connectedOnce)
                {
                    m_connectedOnce = true;

                    EventsLV.IsSubscribed      = false;
                    EventsLV.DisplayConditions = true;
                    EventsLV.ChangeArea(Opc.Ua.ObjectIds.Server, false);

                    FilterDeclaration filter = new FilterDeclaration();

                    ushort namespaceIndex = (ushort)m_session.NamespaceUris.GetIndex(DsatsDemo.Namespaces.DsatsDemo);

                    filter.EventTypeId = ExpandedNodeId.ToNodeId(DsatsDemo.ObjectTypeIds.LockConditionType, m_session.NamespaceUris);

                    filter.AddSimpleField(String.Empty, BuiltInType.NodeId, false);
                    filter.AddSimpleField(Opc.Ua.BrowseNames.EventId, BuiltInType.ByteString, false);
                    filter.AddSimpleField(Opc.Ua.BrowseNames.EventType, BuiltInType.NodeId, false);
                    filter.AddSimpleField(Opc.Ua.BrowseNames.ConditionName, BuiltInType.String, true);

                    filter.AddSimpleField(new QualifiedName[] {
                        new QualifiedName(DsatsDemo.BrowseNames.LockState, namespaceIndex),
                        new QualifiedName(Opc.Ua.BrowseNames.CurrentState)
                    },
                                          BuiltInType.String,
                                          ValueRanks.Scalar,
                                          true);

                    filter.AddSimpleField(new QualifiedName(DsatsDemo.BrowseNames.ClientUserId, namespaceIndex), BuiltInType.String, true);
                    filter.AddSimpleField(new QualifiedName(DsatsDemo.BrowseNames.SubjectName, namespaceIndex), BuiltInType.String, true);
                    filter.AddSimpleField(new QualifiedName(DsatsDemo.BrowseNames.SessionId, namespaceIndex), BuiltInType.NodeId, true);

                    EventsLV.ChangeFilter(filter, true);

                    m_filter = filter;

                    PhaseCB.Items.Clear();

                    BrowseDescription nodeToBrowse = new BrowseDescription();
                    nodeToBrowse.NodeId          = new NodeId(DsatsDemo.Objects.Rig_Phases, namespaceIndex);
                    nodeToBrowse.ReferenceTypeId = Opc.Ua.ReferenceTypeIds.HierarchicalReferences;
                    nodeToBrowse.IncludeSubtypes = true;
                    nodeToBrowse.BrowseDirection = BrowseDirection.Forward;
                    nodeToBrowse.ResultMask      = (uint)BrowseResultMask.All;

                    DataValue value        = m_session.ReadValue(new NodeId(DsatsDemo.Variables.Rig_CurrentPhase, namespaceIndex));
                    NodeId    currentPhase = value.GetValue <NodeId>(null);

                    ReferenceDescriptionCollection references = ClientUtils.Browse(m_session, nodeToBrowse, false);

                    if (references != null)
                    {
                        for (int ii = 0; ii < references.Count; ii++)
                        {
                            PhaseCB.Items.Add(references[ii]);

                            if (currentPhase == references[ii].NodeId)
                            {
                                PhaseCB.SelectedIndex = ii;
                            }
                        }
                    }

                    m_connectedOnce = true;
                }

                EventsLV.IsSubscribed = true;
                EventsLV.ChangeSession(m_session, true);
                EventsLV.ConditionRefresh();
            }
            catch (Exception exception)
            {
                MessageBox.Show(exception.Message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }