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