--- title: "Workflows with RT" author: "Bryce Mecum" date: "`r Sys.Date()`" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{workflows} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- The `rt` package was built to make it easier for our own team to work with RT in an automated fashion. As a result, most functions in the package have return values suitable for passing into other functions in the `rt` package or functions from other packages. Notably, functions are [pipeable](https://magrittr.tidyverse.org/reference/pipe.html) when possible. Below are some example workflows you might use this package for. ## Creating tickets You can always email your RT installations associated email address to create a ticket but you can also create one programmatically: ```r rt_ticket_create("General", "me@example.com", "Hey, a quick question...") ``` You could also create a set of tickets from a database dump of some kind, such as an old ticket tracking system. First, let's create some example data to work with: ```r old_tickets <- data.frame( queue = "General", subject = c("I need some help", "about those TPS reports...", "hello!"), requestor = c("someone@example.com", "boss@initech.com", "user@example.com"), stringsAsFactors = FALSE ) ``` With some example data, creating tickets for each of those in on go is only a few lines of code: ```r lapply(seq_len(nrow(old_tickets)), function (row) { do.call(rt_ticket_create, as.list(old_tickets[row,])) }) ``` We can then check our work: ```r library(dplyr) rt_ticket_search('Queue="General"') %>% select(id, Subject) ``` ``` # A tibble: 3 x 2 id Subject 1 1 I need some help 2 2 about those TPS reports... 3 3 hello! ``` ## Editing tickets Each ticket has a set of properties associated with it and `rt` makes it quick to update those programmatically. For example, we write R code to resolve a ticket. For example, say we're ready to resolve ticket number 6: ```r rt_ticket_edit(6, status = "resolved") ``` What if we wanted to re-assign a set of tickets? We _could_ go about this the slow way: By looking up ticket IDs in our web browser and resolving them one by one. Instead, we can make `rt` do the work for us: ```r result <- rt_ticket_search("Owner = 'manager'", format = "i") sapply(result, function (id) { rt_ticket_edit(id, owner = "intern") }) ``` ## Comment and Replying If you're already using RT, you're probably already familiar with commenting and replying to tickets. You've also possibly pasted text into your web browser from another source. `rt` can help automate some of this. For example, what if we were calculating some statistics for a ticket and wanted to put that information in the ticket as a comment? ```r rt_ticket_history_comment(6, paste(capture.output({summary(iris)}), collapse = "\n")) ``` Above, we used the handy `capture.output` function along with `paste` but there are many other ways to get information from R into RT. We can look at the comment we just made like so: ```r cat(rt_ticket_history(3)$body) ``` ``` ... # 3/3 (id/47/total) id: 47 Ticket: 3 TimeTaken: 0 Type: Comment Field: OldValue: NewValue: Data: No Subject Description: Comments added by root Content: Sepal.Length Sepal.Width Petal.Length Petal.Width Species Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100 setosa :50 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300 versicolor:50 Median :5.800 Median :3.000 Median :4.350 Median :1.300 virginica :50 Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800 Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500 Creator: root Created: 2020-03-03 01:07:45 ... ``` ## Piping Many functions in `rt` return values suitable for passing into other functions, such as with the `%>%` operator from the `magrittr` package that's commonly used in the `tidyverse`. Here's an example of how this can be used: ```r rt_ticket_create("General") %>% rt_ticket_edit(owner = "some_user") %>% rt_ticket_history_comment("Hey, this is just a comment...") ```