ユーザーのクエリに基づいて在庫情報を提供する webap を作成しようとしています。すべてのデータはフラット ファイルにあり、現在 Windows 7 (64 ビット) で R バージョン 3.2.5 (2016-04-14) を実行しています。
ユーザーがクエリを送信した後、入力クエリに基づいて対応する pdf を提供する方法を見つけようとしています。その後、新しいアクション ボタンをクリックして pdf を開きます。すべてのpdf(数千個)は、私のwwwディレクトリに保存されています...
私は多くの投稿を見てきましたが、それらはすべて、UI スクリプトで iframe または window.open() を使用して単一の pdf ファイルを開くことに関連しています。それはうまくいきますが、サーバー側で複数のファイルからオブジェクトを生成する方法がわかりません。
私のコード:
shinyUI(fluidPage(
tags$head(
tags$style(type="text/css", ".dataTables_filter {display: none; }", "tfoot {display:none;}",HTML("
@import url('//fonts.googleapis.com/css?family=Arima+Madurai|Cabin:400,700');
h1 {
font-family: 'Arima+Madurai', bold;
font-weight: 500;
line-height: 1.1;
}
"))
),
headerPanel("Chem-Share Search Page"),
# Application title
title="Chem-Share Search Page",
# Sidebar with controls to select a dataset
sidebarLayout(
sidebarPanel(
conditionalPanel("Search by Chemicals",
selectizeInput("obs", "Query Chemical Name",choices=NULL, options = list(maxOptions = 5137)),
textInput("txt","Query Barcode, CAS#, or CAT#"),
actionButton("submit", "Submit")),
actionButton('pdfview', 'View SDS', onclick = "window.open('2-Propanol.pdf')") #### this works when I know the pdf, but how to make it work from subseting a list of pdf's storred locally
),
# Show a summary of the dataset and a data table
mainPanel(
tabsetPanel(
tabPanel('By Name', dataTableOutput('mytable1')),
tabPanel('By Catalog #', dataTableOutput('mytable2')),
tabPanel('By Barcode', dataTableOutput('mytable3')),
tabPanel('By CAS #',dataTableOutput('mytable4')),
tags$head(
tags$style(type = "text/css", "a{color: #000000;}")
)
)
)
),
includeHTML("www/mail_to.html"))
)
サーバ
require(dplyr);require(data.table);require(xlsx)
locals<- getwd()
shinyServer(function(input, output,session) {
values <- reactiveValues(default = 0)
omw_inventory_2016 <- as.data.table(read.csv("2016_inventory_database.csv",stringsAsFactors = F, encoding = 'UTF-8',na.strings = c("NA","N/A","","none","lookup","look.up","look up")))
omw_inventory_2016<-omw_inventory_2016[Transaction.Type!="Disposal"][Transaction.Type!="Dispose"]
searching <- unique(omw_inventory_2016$Product.Name)
uom <- read.csv("Inventory_Instruction_.csv",stringsAsFactors = F)
new_omw <- merge(omw_inventory_2016,uom,by="Unit.of.Measure",all.x = TRUE)
omw_inventory_2016<- new_omw;rm(new_omw)
sds <- as.data.table(read.csv("sds_list.csv",stringsAsFactors = F))
sds<- sds %>% select(Product.Name,Product.Code,sds1)
import <-read.xlsx("2310.xlsx",sheetName = "Sheet2",stringsAsFactors = F,header = T)
updateSelectizeInput(session,"obs",choices=searching,server=TRUE)
observeEvent(input$submit,{values$default <- input$submit})
setkey(omw_inventory_2016,"Product.Name")
output$downloadData <- downloadHandler(
filename = function(){paste("chem_share_template",".csv",sep = "")},
content = function(file){
write.csv(import,file)
}
)
# ### **I am trying to subset the pdf name to generate the filepath**
# **Does not work**
# output$pdfview <- renderText({
# pdfs<-sds[Product.Code %chin% input$txt,sds1]
# # pdfs<- paste("file:///",locals,"/www/",pdfs,sep = "")
# # pdfs
#
# })
# **I have tried this too**
# view_pdf<- function(important){
# pdfs<-sds[Product.Code %chin% input$txt,sds1]
# pdfs<- paste('"file:///',locals,'/www/',pdfs,'"',sep = "")
# paste('src=',pdfs,',style="height:100%; width:100%; scrolling:yes"',sep="")
# }
#
# output$pdfview <- renderText({view_pdf(input$txt)})
#
#
output$mytable1 <- renderDataTable({
if(values$default==0){
omw_inventory_2016[grep("Ethynyltrimethylsilane",omw_inventory_2016$Product.Name,ignore.case = T),.(Chemical=Product.Name,Manufacture=Manufacturer.Name,Catalog=Product.Code, Floor=Floor,Amount=Amount.per.Container,UOM=UoM )]
}
else{
omw_inventory_2016[Product.Name==input$obs,.(Chemical=Product.Name,Manufacture=Manufacturer.Name,Catalog=Product.Code, Floor=Floor,Amount=Amount.per.Container,UOM=UoM)]
}
})
output$mytable2 <- renderDataTable({
if(values$default==0){
omw_inventory_2016[grep("Ethynyltrimethylsilane",omw_inventory_2016$Product.Name,ignore.case = T),.(Chemical=Product.Name,Manufacture=Manufacturer.Name,Catalog=Product.Code, Floor=Floor,Amount=Amount.per.Container,UOM=UoM)]
}
else{
omw_inventory_2016[Product.Code %chin% input$txt,.(Chemical=Product.Name,Manufacture=Manufacturer.Name,Catalog=Product.Code, Floor=Floor,Amount=Amount.per.Container,UOM=UoM)]
}
})
output$mytable3 <- renderDataTable({
if(values$default==0){
omw_inventory_2016[grep("Ethynyltrimethylsilane",omw_inventory_2016$Product.Name,ignore.case = T),.(Chemical=Product.Name,Manufacture=Manufacturer.Name,Catalog=Product.Code, Floor=Floor,Amount=Amount.per.Container,UOM=UoM)]
}
else{
omw_inventory_2016[MBC %chin% input$txt,.(Chemical=Product.Name,Manufacture=Manufacturer.Name,Catalog=Product.Code, Floor=Floor,Amount=Amount.per.Container,UOM=UoM)]
}
})
output$mytable4 <- renderDataTable({
if(values$default==0){
omw_inventory_2016[grep("Ethynyltrimethylsilane",omw_inventory_2016$Product.Name,ignore.case = T),.(Chemical=Product.Name,Manufacture=Manufacturer.Name,Catalog=Product.Code, Floor=Floor,Amount=Amount.per.Container,UOM=UoM)]
}
else{
omw_inventory_2016[Ingredient.CAS %chin% input$txt,.(Chemical=Product.Name,Manufacture=Manufacturer.Name,Catalog=Product.Code, Floor=Floor,Amount=Amount.per.Container,UOM=UoM)]
}
})
})