/// <summary>
/// Called when the Confirm method is called.
/// </summary>
/// <param name="context">The system context.</param>
/// <param name="method">The method being called.</param>
/// <param name="objectId">The id of the object.</param>
/// <param name="eventId">The identifier for the event which is the target for the comment.</param>
/// <param name="comment">The comment.</param>
/// <returns>Any error.</returns>
protected virtual ServiceResult OnConfirmCalled(
ISystemContext context,
MethodState method,
NodeId objectId,
byte[] eventId,
LocalizedText comment)
{
ServiceResult error = ProcessBeforeConfirm(context, eventId, comment);
if (ServiceResult.IsGood(error))
{
AcknowledgeableConditionState branch = GetAcknowledgeableBranch(eventId);
if (branch != null)
{
branch.OnConfirmCalled(context, method, objectId, eventId, comment);
RemoveBranchEvent(eventId);
}
else
{
SetConfirmedState(context, true);
}
// If this is a branch, the comment goes to both the branch and the original event
if (CanSetComment(comment))
{
SetComment(context, comment, GetCurrentUserId(context));
}
UpdateRetainState();
}
if (EventsMonitored())
{
// report a state change event.
if (ServiceResult.IsGood(error))
{
ReportStateChange(context, false);
}
// raise the audit event.
AuditConditionConfirmEventState e = new AuditConditionConfirmEventState(null);
TranslationInfo info = new TranslationInfo(
"AuditConditionConfirm",
"en-US",
"The Confirm method was called.");
e.Initialize(
context,
this,
EventSeverity.Low,
new LocalizedText(info),
ServiceResult.IsGood(error),
DateTime.UtcNow);
e.SetChildValue(context, BrowseNames.SourceNode, NodeId, false);
e.SetChildValue(context, BrowseNames.SourceName, "Method/Confirm", false);
e.SetChildValue(context, BrowseNames.MethodId, method.NodeId, false);
e.SetChildValue(context, BrowseNames.InputArguments, new object[] { eventId, comment }, false);
e.SetChildValue(context, BrowseNames.ConditionEventId, eventId, false);
e.SetChildValue(context, BrowseNames.Comment, comment, false);
ReportEvent(context, e);
}
return(error);
}