Skip to main content
November 12, 2022
Solved

Documents\Public location

  • November 12, 2022
  • 5 replies
  • 0 views

Got a task to copy certain file from FileShare to Documents\Public because users security settings. Wanted to go with the standard System.IO.File.Copy(strSourceFile,strTargetFile) where source and targets are sting.

 

Can get full source file path using the FileShareFolderHelper. However can't get full path to the target, that is under FileSystemLocation.ApplicationDatabase. 

 

Any suggestions how can I get the target path or otherwise copy the file in question?

Best answer by db_pdx

The methods you need are under BRApi.Filesystem:

  • BRApi.FileSystem.GetFile
    BRApi.FileSystem.InsertOrUpdateFile
  • BRApi.FileSystem.GetFileShareFolder

Here's a mock example that just copies a file from a user's document folder and changes the name.  You'll need to swap the sourceFile/sourceDir pieces with FileShare pieces from BRApi.FileSystem.GetFileShareFolder according to your needs.

'Source file
Dim sourceFile As String = "SomeCSV.csv"
Dim sourceDir As String = $"Documents/Users/{StringHelper.RemoveInvalidNameCharacters(si.UserName,False,False)}"
'Target File
Dim targetFile As String = "CopiedFile.csv"
Dim targetDir As String = sourceDir
				
'Get the file
Dim sourceXFFileEx As New XFFileEx
sourceXFFileEx = BRApi.FileSystem.GetFile(si, FileSystemLocation.ApplicationDatabase, sourceDir & "/" & sourceFile,True,True)
												
'Save the file				
Dim targetFileDataInfo As New XFFileInfo(FileSystemLocation.ApplicationDatabase, targetFile, targetDir)
Dim targetFileData As New XFFile(targetFileDataInfo, String.Empty, sourceXFFileEx.XFFile.ContentFileBytes)
BRApi.FileSystem.InsertOrUpdateFile(si, targetFileData)

 

5 replies

November 14, 2022

Hi Koemets,

 

Would this be useful to get the full path to the target directory ?

 

'Folder to Create

		Dim newPath As String = "Consolidation" '<-- This is the destination folder

		Dim parentPath As String = "Documents/Public" '<-- App Folder path where new folder will be added, may be updated


'Get full folder path to test

		Dim folderPath As XFFolderEx = BRApi.FileSystem.GetFolder(si, FileSystemLocation.ApplicationDatabase, parentPath & "/" & newPath)

 
'Create Folder if it does not exist

		If folderPath Is Nothing Then

			BRApi.FileSystem.CreateFullFolderPathIfNecessary(si, FileSystemLocation.ApplicationDatabase, parentPath, newPath)

		End If
		
		
'Target Directory
		
		Dim targetDir As String = BRApi.FileSystem.GetFolder(si, FileSystemLocation.ApplicationDatabase, parentPath & "/" & newPath).XFFolder.FullName 
	

 

 

 

 

 

 

 

KoemetsAuthor
November 14, 2022

Unfortunately not 😞

OS object doesn't seem to have a method to copy the files, and standard IO needs full path. Meaning the /consolidation folder is being created by OS Framework which still doesn't return the full path, necessary to copy the file by the IO.

November 14, 2022

interesting. if you submit a ticket to support, please post the results.

db_pdxAnswer
November 14, 2022

The methods you need are under BRApi.Filesystem:

  • BRApi.FileSystem.GetFile
    BRApi.FileSystem.InsertOrUpdateFile
  • BRApi.FileSystem.GetFileShareFolder

Here's a mock example that just copies a file from a user's document folder and changes the name.  You'll need to swap the sourceFile/sourceDir pieces with FileShare pieces from BRApi.FileSystem.GetFileShareFolder according to your needs.

'Source file
Dim sourceFile As String = "SomeCSV.csv"
Dim sourceDir As String = $"Documents/Users/{StringHelper.RemoveInvalidNameCharacters(si.UserName,False,False)}"
'Target File
Dim targetFile As String = "CopiedFile.csv"
Dim targetDir As String = sourceDir
				
'Get the file
Dim sourceXFFileEx As New XFFileEx
sourceXFFileEx = BRApi.FileSystem.GetFile(si, FileSystemLocation.ApplicationDatabase, sourceDir & "/" & sourceFile,True,True)
												
'Save the file				
Dim targetFileDataInfo As New XFFileInfo(FileSystemLocation.ApplicationDatabase, targetFile, targetDir)
Dim targetFileData As New XFFile(targetFileDataInfo, String.Empty, sourceXFFileEx.XFFile.ContentFileBytes)
BRApi.FileSystem.InsertOrUpdateFile(si, targetFileData)

 

KoemetsAuthor
November 15, 2022

Thank you. With minor corrections this worked. For the record (and future reference to whoever will search for it), FileShare root is located at

 

sourceXFFileEx = BRApi.FileSystem.GetFile(si, FileSystemLocation.FileShare, sourceDir & "/" & sourceFile,True,True)

 

Thank you for the solution!

May 12, 2023

Set the target folder as the public folder in the Application Database/Documents path

Public Folder.png

 

 

 

 

 

 

 

 

with the following:

 

Dim targetDir As String = $"Documents/Public"

 

Set the target path the same way, but now it will point to the public folder instead of the user's private folder:

 

Dim targetFileDataInfo As New XFFileInfo(FileSystemLocation.ApplicationDatabase, targetFile, targetDir)