Documents\Public location

Koemets
Contributor

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?

1 ACCEPTED SOLUTION

db_pdx
Contributor III

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)

 

View solution in original post

6 REPLIES 6

HenriR
New Contributor

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 
	

 

 

 

 

 

 

 

Koemets
Contributor

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.

scottr
New Contributor III

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

db_pdx
Contributor III

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)

 

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!

Gidon_Albert
Contributor

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)