Triggering the Communication Service

The CommsService.TriggerEvent() function has six required arguments which are outlined in the table below:

Argument
Type/Return Type
Description/Typical Value

appName

String

Config.AppName()

eventName

String

A unique name of your event defined under Configuration -> Communication Services

payload

JSON

Use the ComsServices.JsonSerialize() function to serialise the current instance of your class into JSON

url

String

Config.ComsService()

userName

String

Config.UserName()

password

String

Config.Password()

To trigger the Communication Service, follow these steps:

  1. Open your project and navigate to Data.

  2. Select Diagram or List to view your Data Model.

  3. Locate and select the entity for which you want to configure communications. In a Diagram view, click on the entity's header section with a grey background colour. An active entity is identified by a blue border, and none of its entity fields are active (active entity fields have a blue background colour).

  4. This action will open a properties dialog that displays the entity's global properties.

  5. Within the properties dialog, locate Custom Code you can expand the text editor by clicking on the icon.

  6. Now, you need to identify and select a change interceptor to initiate the ComsService.Trigger() function. If the custom code has already been auto-generated, you can proceed with selecting an appropriate change interceptor. However, if the custom code hasn't been auto-generated, you have the option to define your own partial class. Within this class, you can invoke the ComsService.Trigger() function using the interceptor of your choice as shown(check line 66 in the code block below):

// Copyright (c) ComUnity 2017

using ComUnity.DataServices;
using ComUnity.DataServices.DomainUtility.Exceptions;
using ComUnity.DataServices.DomainUtility.Security;
using ComUnity.DataServices.ServiceUtility;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration.Conventions;
using System.Data.Services;
using System.Data.Services.Providers;
using System.Linq;
using System.Linq.Expressions;
using System.Web;

namespace FaultComms.Models
{
	public partial class Fault
	{
		// START auto-generated - CTOR
		public Fault() : base()
		{
		// END auto-generated, add custom code below this line
		
		}
		
		// START auto-generated - OnAdd
		public override void OnAdd(FaultCommsContext context)
		{
			base.OnAdd(context);
			FaultStatus status = context.Set<FaultStatus>().FirstOrDefault();
			Status = status ?? throw new GeneralException(400, "General", "No status defined in database!");
			context.SaveChanges();
			DateTime dt = DateTime.Now;
			string refString = dt.ToShortDateString() + "-" + FaultId;
			ReferenceNumber = refString;
			var toAddress = Config.FaultEmail();
			var an = Config.AppName();
			var cs = Config.ComsService();
			if (toAddress != null && an != null && cs != null)
			{
			    var payload = ComsServices.JsonSerialize(this);
			    ComsServices.TriggerEvent(an, "OnAddFault", payload, cs, Config.ComsServiceUsername(), Config.ComsServicePassword());
			}
		
		// END auto-generated, add custom code below this line
		
		}
		
		// START auto-generated - OnChange
		public override void OnChange(FaultCommsContext context)
		{
			base.OnChange(context);
			int prevStatus = context.Entry(this).OriginalValues.GetValue<int>("StatusFaultStatusId");
			if (StatusFaultStatusId != prevStatus)
			{
				var an = Config.AppName();
				var cs = Config.ComsService();
				if (an != null && cs != null)
				{
					var payload = ComsServices.JsonSerialize(this);
					// ComsServices.TriggerEvent() invocation
					ComsServices.TriggerEvent(an, "OnChangeFault", payload, cs, Config.ComsServiceUsername(), Config.ComsServicePassword());
				}
			}
		
		// END auto-generated, add custom code below this line
		
		}
		
		// START auto-generated - OnDelete
		public override void OnDelete(FaultCommsContext context)
		{
			base.OnDelete(context);
		// END auto-generated, add custom code below this line
		
		}
		
		// START auto-generated - Filter start
		public static Expression<Func<Fault,bool>> Filter(FaultCommsContext context)
		{
			Expression<Func<Fault, bool>> filter = o => true;
		// END auto-generated, add custom code below this line
			
		// START auto-generated - Filter end
			return filter;
		}
		// END auto-generated, add custom code below this line
		
		// START auto-generated - OnSeed
		public static void OnSeed(FaultCommsContext context)
		{
		// END auto-generated, add custom code below this line
		
		}
	}
}

After triggering the Communication Service by adding the code to invoke the ComsService.Trigger() function, the next step is to configure the event action and templates.

Last updated