/// <summary>
/// Called when the add comment 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 OnAddCommentCalled(
ISystemContext context,
MethodState method,
NodeId objectId,
byte[] eventId,
LocalizedText comment)
{
ServiceResult error = ProcessBeforeAddComment(context, eventId, comment);
if (ServiceResult.IsGood(error))
{
string currentUserId = GetCurrentUserId(context);
ConditionState branch = GetBranch(eventId);
if (branch != null)
{
branch.OnAddCommentCalled(context, method, objectId, eventId, comment);
}
SetComment(context, comment, currentUserId);
}
if (EventsMonitored())
{
// report a state change event.
if (ServiceResult.IsGood(error))
{
ReportStateChange(context, false);
}
// raise the audit event.
AuditConditionCommentEventState e = new AuditConditionCommentEventState(null);
TranslationInfo info = new TranslationInfo(
"AuditConditionComment",
"en-US",
"The AddComment 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/AddComment", 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);
}