Trigger Exempel

Sätt ett datum till aktuell tid

record.u_CustomDate = DateTime.UtcNow;

 

Sätt ett fältvärde till värdet från annat fält

record.u_Field1 = record.u_Field2;

 

Konvertera ett ”antal minuter” till text med specifik formatering #1

var duration = TimeSpan.FromMinutes(record.u_TimeMinutes || 0);

// Will set the field u_CustomTime to "0.1:17 (d.hh:mm)"

record.u_CustomTime = duration.ToString("d\\.hh\\:mm") + ' (d.hh:mm)';

 

Konvertera ett ”antal minuter” till text med specifik formatering #2

var duration = TimeSpan.FromMinutes(record.u_TimeMinutes || 0);

// This will set the field u_Customtime to "0 days 1 hours 17 min"

record.u_CustomTime = String.Format('{0:%d} days {0:%h} hours {0:%m} min', duration);

 

Ladda en entitet och kontrollera dess värde.

// Set IsMajor automatically to true if requester is marked VIP

if (record.BaseEndUserId != null) { 

  var endUser = db.Load("Person", record.BaseEndUserId);

  if (endUser != null && endUser.IsVIP || false) {

     record.IsMajor = true;

  }

}

 

Ladda en entitet och ändra den:

I detta exempel håller det användardefinierade fältet ”u_ChangeId” en referens till en annan entitet (ett Change-objekt).

// First check so reference field is not empty

if (record.u_ChangeId != null) {

  // Load the Change-record:

  var changeTicket = db.Load("Change", record.u_ChangeId);

  // Copy the priority to the change-record:

  changeTicket.PriorityId = record.PriorityId;

  // Save the Change-ticket:

  changeTicket.Save();

}

Varje entitet som laddas och ändras via script måste explicit sparas genom att köra “variableName.Save()”. Notera att detta inte bör göras på objektvariabeln (record.) eftersom det görs automatiskt av NSP.

Om ämnesraden är tom, kopiera in de första 150 tecknen från beskrivningen.

// First, strip html because subject/baseheader do not support html-formatting:

var subject = api.HtmlToPlainText(record.BaseDescription);

// Take the first 150 characters:

if (subject.Length > 150)

  subject = subject.Substring(0, 150);

// Set string in baseheader

record.BaseHeader = subject;

 

Återöppna ärendet automatiskt om en slutanvändare skriver kommentar (Händelsestyrd trigger)

Notera att detta script förutsätter att det finns en återöppningsstatus som har strongname (systemnamn)  ”ReOpen” och triggervillkoret ”Antal slutanvändarkommentarer => Ändrad”

// There are two situations where we do not want to reopen ticket:

// If current user posting the comment is agent (agent can reopen manually)

// If ticket closed less than a minute ago (it might mean end-user just closed ticket and posted a final comment)

if (CurrentUser.Id != record.BaseAgentId && (NowUtc - (record.CloseDateTime || NowUtc)).TotalMinutes > 1)

{

  // Find reopen-status to set to ticket, we look for one with strongname “ReOpen”, this depends on NSP-installation:

  var reopenStatus = db.QueryFirst("from SysEntityStatus where StrongName = :sname", {sname: 'ReOpen'});

  if (reopenStatus != null) {   

    record.BaseEntityStatusId = reopenStatus.Id;

  }

}

 

Leta efter en ”instruktion” i ärendets ämnesrad och ändra slutanvändare till [requester: realuser@real.com]

 

Detta script ändrar standardhanteringen för inkommande mail där avsändaren automatiskt sätts som ärendets anmälare. Här sätts istället anmälaren via mailets ämnesrad.

var startIndex = record.BaseHeader.IndexOf('[requester:');

var stopIndex = record.BaseHeader.IndexOf(']');

if (startIndex == -1 || stopIndex <= startIndex)

    return;

var reqAddress = record.BaseHeader.Substring(startIndex + 11, stopIndex - startIndex - 11);

if (reqAddress.IndexOf('@') == -1)

    return;

// Found a valid email-adress in subject, fetch corresponding user in db:

var person = db.QueryFirst('from Person where Email = :address', { address: reqAddress.Trim() });

if (person != null)

    record.BaseEndUserId = person.Id;

 

 

Applicera åtgärdsmall på ett ärende via script

Detta kommer att skapa åtgärder på ett ärende enligt en specifik åtgärdsmall. Startdatum kommer att sättas till aktuellt datum.

// Need to know db-id of template (inspect http-call fetching from ui)

var taskTemplateId = 13;

 

// Method below creates all tasks, this is all that is necessary to call.

Note: Language is the language´s culture-code, e g ‘en-US’, ‘sv-SE’, ‘da_DK’, etc. If you leave out language, task subject and description will be inserted using current OS language.

var tasks = api.ApplyTaskTemplate(record, taskTemplateId, language);

 

// Optional: for every task created, add a checkbox in a custom html-field called "u_TaskCheckList"

var checkList = "";

for (var i = 0; i < tasks.Count; i++) {

  var t = tasks[i];

  checkList = checkList + String.Format("<li>{0} - {1}<input type='checkbox'></li>", t.ReferenceNo, t.TaskBaseHeader);

}

record.u_TaskCheckList = String.Format("The following tasks should be completed:<ol>{0}</ol>", checkList);

 

 

Skapa en kopia av ett ärende och länka det till originalet:

// create new record of same type

var relatedInstance = db.Create(record.EntityTypeName);

 

// copy all field values (except CreatedBy, UpdatedBy, Version)

relatedInstance.AssignFromAny(record);

relatedInstance.Save();

 

// Create associations between original and new ticket

var association = db.Create("SysAssociatedEntity");

association.SourceEntityInstanceId = record.Id

association.SourceEntityTypeId = record.Type.Id;

association.DestinationEntityInstanceId = relatedInstance.Id

association.DestinationEntityTypeId = relatedInstance.Type.Id;

association.Save();

 

var association2 = db.Create("SysAssociatedEntity");

association2.SourceEntityInstanceId = relatedInstance.Id;

association2.SourceEntityTypeId = relatedInstance.Type.Id;

association2.DestinationEntityInstanceId = record.Id;

association2.DestinationEntityTypeId = record.Type.Id;

association2.Save();

 

Skapa CI från ärendetrigger och länka CI till ärendet

api.CreateCi(record, {"Name":"MyCI", "Description":"test" });

 

Uppdatera CI från ärendetrigger

Andra parameter är ID, kan vara RefNo eller ID.

api.UpdateCi(record, "CI0000001",{ "Description":"update description" });

or

api.UpdateCi(record, "1", { "Description":" update description " });

 

Få en lista med alla länkade CI i ett ärende

api. GetLinkedCis(record); 

returnerar lista med CI-ID.

 

Länka CI till ärende

api. LinkCiToTicket(record, "CI0000001") ; 

eller

api. LinkCiToTicket(record, "1"); 

 

Länka CI och alla CI länkande till CI till ärende

api. LinkCisToTicket (record, "CI0000001");  

eller

api. LinkCisToTicket (record, "1");

 

Kopiera ett värde från den första länkade CI till ett ärendefält

api. CopyFromFirstLinkedCiToTicket (record, { "CiFieldName":"TicketStorageFieldName" });

 

Kopiera ett värde från ärendet till ett fält i den första eller alla länkade CI

api. CopyFromTicketToLinkedCis (record, true, {"TicketStorageFieldName":"CiFieldName" });

eller

api. CopyFromTicketToLinkedCis (record, true, {"TicketStorageFieldName":"CiFieldName" });

Andra parametern är onlyFirst = true / false.

Kopiera bilagor

Med hjälp av triggerscriptmetoden copyattachment kan man kopiera bilagan från ärendebeskrivningen från ett ärende till ett annat. Den här funktionen är, till exempel, användbar när man skapar ett nytt ärende från det ursprungliga via triggers.

api.CopyAttachments(sourceRecord, destionationRecord);

 

Infoga användare i Active Directory från ett ärende

Med hjälp av triggerscriptmetoden InsertUserIntoAD är det möjligt att lägga till en användare från ärendet till den lokala Active Directory.

api.InsertUserIntoAD(properties, userBaseDN, ldapServerConnectionName, groupsDnMemerOf);

Properties – innehåller ActiveDirectory-användarattribut med värden.

UserBaseDN – är bas DN där det kommer att läggas till en ny användare.

ldapServerConnectionName – är LDAP-anslutningsnamn från NSP till vilken server ska man ansluta.

GroupsDnMemerOf – är en lista över hela DN-gruppsökvägen, i varje grupp kommer användaren att vara medlem, om man har många grupper måste man dela dem med detta semikolon (;).

Exampel:

api.InsertUserIntoAD({"userPrincipalName":"dzenan102test@nilex.hbg.local", "samAccountName":"dzenan102test", "displayName":"Dzenan Strujic Test 102", "givenName":"Dzenan","sn":"Strujic Test 102","initials":"Dz.S","telephoneNumber":"0725019999","mail":"dzenan101@nilex.se","password":"NilexTest"}, "OU=Bolaget_AB,DC=Nilex,DC=hbg,DC=local", "NilexADConnection", "CN=testtest,OU=Bolaget_AB,DC=Nilex,DC=hbg,DC=local;CN=MinGrupp,OU=Bolaget_AB,DC=Nilex,DC=hbg,DC=local");

Om vissa attribut inte finns i listan för egenskaper, kommer de nedanför att läggas till som standard:

displayName: NSP dynamisk användare

password: 123456

givenName: NSP

sn: Dynamisk användare

objectClass: användare