2015-10-20 76 views
3

我試圖跟蹤用戶活動,因爲他們通過我的閃亮應用程序。我將函數放置在將行寫入臨時文件的特定位置。我想要的是在用戶會話結束時調用一個函數。

根據文檔:

> ?session 
> onSessionEnded(callback) 
     Registers a function to be called after the client has disconnected. Returns a function that can be called with no arguments to cancel the registration. 

我試圖用這樣的:

session$onSessionEnded(function(x){ 
    a = read_csv(shinyActivityTmpFile_000) 
    write_csv(a,'C:\\Users\\xxxx\\Desktop\\test.csv') 
}) 

但是什麼都沒有發生。 shinyActivityTmpFile_000是一個全局文件參考。當用戶點擊按鈕並執行某些操作時,該應用程序將以CSV格式寫入該文件。我只是試圖將其從臨時存儲轉移到永久存儲。最終,我希望函數將其寫入數據庫,但爲了測試,我只是試圖獲得將在應用程序關閉時運行的函數。

我在這裏錯過了什麼?

+0

與功能沒有參數嘗試在'onSessionEnded':'函數(){...}' – Victorp

回答

10

您好我不知道你是如何構建shinyActivityTmpFile文件,但使用onSessionEnded你可以看看這個爲例,它在文件中寫的日期時間,當一個應用程序被啓動,當應用程序被關閉:

library("shiny") 
ui <- fluidPage(
    "Nothing here" 
) 
server <- function(input, output, session) { 
    # This code will be run once per user 
    users_data <- data.frame(START = Sys.time()) 

    # This code will be run after the client has disconnected 
    session$onSessionEnded(function() { 
    users_data$END <- Sys.time() 
    # Write a file in your working directory 
    write.table(x = users_data, file = file.path(getwd(), "users_data.txt"), 
       append = TRUE, row.names = FALSE, col.names = FALSE, sep = "\t") 
    }) 
} 
shinyApp(ui = ui, server = server) 

如果您使用的身份驗證的服務器,你可以檢索與用戶名:

users_data <- data.frame(USERS = session$user, START = Sys.time()) 
+0

有任何方式來指定只有一個會話做某事g當會話結束時。例如 'session $ onSessionEnded(function(){ if(userID == 1)cat(「Do Something Wild」)})' – Jordan