Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
michaelfentondata
Partner - Contributor III
Partner - Contributor III

LoadContainerGlobalVariables is not picking up the correct paths

Hi,

We have a situation where there is a user who needs to reload their document on-demand.  The plan is that the user uploads some CSV files for loading, opens the app in QlikView Desktop, reloads and saves it to make it available in AccessPoint.

The image below shows our current folder structure:

Container Structure.jpg

The user has NTFS read/write permissions on the app inside the 1.Application folder inside their container.  In addition to this, they have read-only on the System folder containing QVD and Import files and read-only permissions to the Shared_Folders container (ideally, they should only have permissions to specific sub-folders within QVD and Import folders, not the entire System container).

When they execute a reload, the script is not picking up the correct path to the QVD and Import files.  From tracing through the script, I can see that the BasePath and other variables are set correctly, but when it gets to creating path variables to the QVD and Import folders in the System container it does not read them correctly.  The following lines set the QVD file path:

// Get paths to QVD files

call LoadContainerGlobalVariables('System','QVD');

let vL.MasterDataQVDPath = '$(vG.SystemQVDPath)6.MasterData\';

After those lines, vG.SystemQVDPath still has the value from my development environment, not the server path.

Should we be setting additional linking variables in the Variable Editor, giving the user additional NTFS permissions, or something else?

Thanks,

Michael

1 Solution

Accepted Solutions
michaelfentondata
Partner - Contributor III
Partner - Contributor III
Author

We were able to solve this by granting the user NTFS read permissions (Traverse folder / execute file, List folder / read data, Read attributes) on the top level folder (2.Test) with no inheritance to sub-folders and contents.  This means they can enumerate the containers, but cannot go into them unless they have specific permissions.

It seems that the LoadContainerMap sub (called by LoadContainerGlobalVariables) needs to be able to see all the containers in the file system even though I am only requesting variables from the System folder.

It would be handy to have a guide outlining the NTFS permissions required by different business roles in the QDF.

View solution in original post

6 Replies
Magnus_Berg
Employee
Employee

HI Michael, if you have not done so, activate the application logging (document properties) and check for deployment framework error message, search for DF Error in the log.

Best regards

Magnus

michaelfentondata
Partner - Contributor III
Partner - Contributor III
Author

Hi Magnus,

The log file lines leading up to the first error are as follows.  Please note that the UNC path in the second line is correct.  The 'D:\...' path is incorrect, it is the path on my development machine.

Also, we are using QDF v1.3.1 with QlikView Version:11.20.12235.

28/05/2014 1:52:03 PM: 0032        SUB LoadContainerMap(vL.CVSTableName,vL.SpecificVariable,vL.GetRootPath)

28/05/2014 1:52:03 PM: 0034        call LoadContainerMap('\\svqlikview\QlikViewDocs\2.Test\5.Finance\3.Include\1.BaseVariable\\ContainerMap.csv','Shared')

28/05/2014 1:52:03 PM: 0011          SET vL.LoadContainerMapCount=

28/05/2014 1:52:03 PM: 0015          vL.temp_table_map:

28/05/2014 1:52:03 PM: 0016          LOAD *

28/05/2014 1:52:03 PM: 0017          FROM

28/05/2014 1:52:03 PM: 0018          '\\svqlikview\QlikViewDocs\2.Test\5.Finance\3.Include\1.BaseVariable\\ContainerMap.csv'

28/05/2014 1:52:03 PM: 0019          (txt, utf8, embedded labels, delimiter is ',', msq)

28/05/2014 1:52:03 PM:               4 fields found: ContainerPathName, ContainerFolderName, ContainerComments, RootPath, 16 lines fetched

28/05/2014 1:52:03 PM: 0022          Left join

28/05/2014 1:52:03 PM: 0023          Load ContainerPathName,count(ContainerPathName) as ContainerPathNameCount

28/05/2014 1:52:03 PM: 0024          Resident vL.temp_table_map

28/05/2014 1:52:03 PM: 0025          group by ContainerPathName

28/05/2014 1:52:03 PM:               2 fields found: ContainerPathName, ContainerPathNameCount, 12 lines fetched

28/05/2014 1:52:03 PM:               Joining/Keeping

28/05/2014 1:52:03 PM: 0028          let vL.xxx = NoOfRows('vL.temp_table_map')

28/05/2014 1:52:03 PM: 0030          for vL.ttt = 0 to vL.xxx-1

28/05/2014 1:52:03 PM: 0032            LET vL.Comment =''

28/05/2014 1:52:03 PM: 0034            LET vL.ContainerPathName = PurgeChar(trim(peek(FieldName(1,'vL.temp_table_map'),0,'vL.temp_table_map')),'=;,- '&chr(39))

28/05/2014 1:52:03 PM: 0035            LET vL.ContainerFolderName = lower(PurgeChar(trim(peek(FieldName(2,'vL.temp_table_map'),0,'vL.temp_table_map')),'=;,'&chr(39)))

28/05/2014 1:52:03 PM: 0036            LET vL.Comment = PurgeChar(trim(peek(FieldName(3,'vL.temp_table_map'),0,'vL.temp_table_map')),';,'&chr(39))

28/05/2014 1:52:03 PM: 0037            LET vL.RootPath = lower(PurgeChar(trim(peek(FieldName(4,'vL.temp_table_map'),0,'vL.temp_table_map')),'=;,'&chr(39)))

28/05/2014 1:52:03 PM: 0038            LET vL.ContainerPathNameCount = peek(FieldName(5,'vL.temp_table_map'),0,'vL.temp_table_map')

28/05/2014 1:52:03 PM: 0041            if not 'Admin' = '' and not '0.administration' = '' then

28/05/2014 1:52:03 PM: 0044              if not right( '0.administration' , 1 ) ='\' then

28/05/2014 1:52:03 PM: 0045                let vL.ContainerName ='0.administration'&'\'

28/05/2014 1:52:03 PM: 0046              else

28/05/2014 1:52:03 PM: 0051              if   '0.administration\' =right(lower(''),len('0.administration\')) and '' = '' then

28/05/2014 1:52:03 PM: 0074              if ('Shared'='Admin' or 'Shared'='0.administration')  then

28/05/2014 1:52:03 PM: 0096              exit for when ''='True'

28/05/2014 1:52:03 PM: 0097            endif

28/05/2014 1:52:03 PM: 0098          next

28/05/2014 1:52:03 PM: 0032            LET vL.Comment =''

28/05/2014 1:52:03 PM: 0034            LET vL.ContainerPathName = PurgeChar(trim(peek(FieldName(1,'vL.temp_table_map'),1,'vL.temp_table_map')),'=;,- '&chr(39))

28/05/2014 1:52:03 PM: 0035            LET vL.ContainerFolderName = lower(PurgeChar(trim(peek(FieldName(2,'vL.temp_table_map'),1,'vL.temp_table_map')),'=;,'&chr(39)))

28/05/2014 1:52:03 PM: 0036            LET vL.Comment = PurgeChar(trim(peek(FieldName(3,'vL.temp_table_map'),1,'vL.temp_table_map')),';,'&chr(39))

28/05/2014 1:52:03 PM: 0037            LET vL.RootPath = lower(PurgeChar(trim(peek(FieldName(4,'vL.temp_table_map'),1,'vL.temp_table_map')),'=;,'&chr(39)))

28/05/2014 1:52:04 PM: 0038            LET vL.ContainerPathNameCount = peek(FieldName(5,'vL.temp_table_map'),1,'vL.temp_table_map')

28/05/2014 1:52:04 PM: 0041            if not 'Shared' = '' and not '99.shared_folders' = '' then

28/05/2014 1:52:04 PM: 0044              if not right( '99.shared_folders' , 1 ) ='\' then

28/05/2014 1:52:04 PM: 0045                let vL.ContainerName ='99.shared_folders'&'\'

28/05/2014 1:52:04 PM: 0046              else

28/05/2014 1:52:04 PM: 0051              if   '99.shared_folders\' =right(lower(''),len('99.shared_folders\')) and '' = '' then

28/05/2014 1:52:04 PM: 0074              if ('Shared'='Shared' or 'Shared'='99.shared_folders')  then

28/05/2014 1:52:04 PM: 0076                if not '' = '' then

28/05/2014 1:52:04 PM: 0082                  let vL.RootPath ='D:\Source\BusIntel\1.Dev\'

28/05/2014 1:52:04 PM: 0083                endif

28/05/2014 1:52:04 PM: 0084                if vL.ContainerPathNameCount = 1 then

28/05/2014 1:52:04 PM: 0085                  SET vL.Exit= 'True'

28/05/2014 1:52:04 PM: 0087                else

28/05/2014 1:52:04 PM: 0094                exit for when 'True'='True'

28/05/2014 1:52:04 PM: 0100          drop table 'vL.temp_table_map'

28/05/2014 1:52:04 PM: 0103          SET vL.ttt =

28/05/2014 1:52:04 PM: 0104          SET vL.xxx =

28/05/2014 1:52:04 PM: 0105          SET vL.CVSTableName =

28/05/2014 1:52:04 PM: 0106          SET vL.SpecificVariable =

28/05/2014 1:52:04 PM: 0107          SET vL.GetRootPath =

28/05/2014 1:52:04 PM: 0108          SET vL.Exit=

28/05/2014 1:52:04 PM: 0109          SET vL.ContainerName=

28/05/2014 1:52:04 PM: 0110          SET vL.ContainerPathNameCount=

28/05/2014 1:52:04 PM: 0111        end sub

28/05/2014 1:52:04 PM: 0037        SET vL.ContainerFolderName='99.shared_folders'

28/05/2014 1:52:04 PM: 0040        SET vL.ContainerPathName='Shared'

28/05/2014 1:52:04 PM: 0043        SET vL.RootPath='D:\Source\BusIntel\1.Dev\'

28/05/2014 1:52:04 PM: 0045        if not 'Shared' = '' then

28/05/2014 1:52:04 PM: 0049          trace '### DF 99.shared_folders'

28/05/2014 1:52:04 PM: 0049          '### DF 99.shared_folders'

28/05/2014 1:52:04 PM: 0050          trace '### DF Default Shared Container'

28/05/2014 1:52:04 PM: 0050          '### DF Default Shared Container'

28/05/2014 1:52:04 PM: 0053          SET vG.SharedBasePath = 'D:\Source\BusIntel\1.Dev\99.shared_folders\'

28/05/2014 1:52:04 PM: 0057          sub vL.FileExist (vL.Root)

28/05/2014 1:52:04 PM: 0058          call vL.FileExist ('D:\Source\BusIntel\1.Dev\99.shared_folders\*')

28/05/2014 1:52:04 PM: 0011            if IsNull(filesize('D:\Source\BusIntel\1.Dev\99.shared_folders\*')) = -1  then

28/05/2014 1:52:04 PM: 0012              SET vL.FileExist='false'

28/05/2014 1:52:04 PM: 0013            else  

28/05/2014 1:52:04 PM: 0016            set vL.Root=

28/05/2014 1:52:04 PM: 0017          end sub

28/05/2014 1:52:04 PM: 0060          if vL.FileExist = 'false' then

28/05/2014 1:52:04 PM: 0061            trace '### DF Error Do not find vG.SharedBasePath'

28/05/2014 1:52:04 PM: 0061            '### DF Error Do not find vG.SharedBasePath'

28/05/2014 1:52:04 PM: 0062            trace '### DF Path D:\Source\BusIntel\1.Dev\99.shared_folders\'

28/05/2014 1:52:04 PM: 0062            '### DF Path D:\Source\BusIntel\1.Dev\99.shared_folders\'

Magnus_Berg
Employee
Employee

Hi Michael, It seems to me like your Container Map (ContainerMap,csv) file is empty och contains wrong values. Could you please check that it contains your container architecture? Will be stored under 5.Finance\3.Include\1.BaseVariable\\ContainerMap.csv

If you are uncertain attache the map and I will have a look.

Best regards

Magnus

michaelfentondata
Partner - Contributor III
Partner - Contributor III
Author

Hi Magnus,

Attached is a copy of the Container Map.  It looks ok to me.

Michael

michaelfentondata
Partner - Contributor III
Partner - Contributor III
Author

In addition, here is an extract from the log file when it is run by a user with "Full control" NTFS permissions on the entire folder structure.  It completes successfully in this instance, so I am pretty sure that there is something missing from the other user's permissions.

The other user is able to open the ContainerMap.csv file.

29/05/2014 10:42:59 AM: 0032        SUB LoadContainerMap(vL.CVSTableName,vL.SpecificVariable,vL.GetRootPath)

29/05/2014 10:42:59 AM: 0034        call LoadContainerMap('\\svqlikview\QlikViewDocs\2.Test\5.Finance\3.Include\1.BaseVariable\\ContainerMap.csv','Shared')

29/05/2014 10:42:59 AM: 0011          SET vL.LoadContainerMapCount=

29/05/2014 10:42:59 AM: 0015          vL.temp_table_map:

29/05/2014 10:42:59 AM: 0016          LOAD *

29/05/2014 10:42:59 AM: 0017          FROM

29/05/2014 10:42:59 AM: 0018          '\\svqlikview\QlikViewDocs\2.Test\5.Finance\3.Include\1.BaseVariable\\ContainerMap.csv'

29/05/2014 10:42:59 AM: 0019          (txt, utf8, embedded labels, delimiter is ',', msq)

29/05/2014 10:42:59 AM:               4 fields found: ContainerPathName, ContainerFolderName, ContainerComments, RootPath, 16 lines fetched

29/05/2014 10:42:59 AM: 0022          Left join

29/05/2014 10:42:59 AM: 0023          Load ContainerPathName,count(ContainerPathName) as ContainerPathNameCount

29/05/2014 10:42:59 AM: 0024          Resident vL.temp_table_map

29/05/2014 10:42:59 AM: 0025          group by ContainerPathName

29/05/2014 10:42:59 AM:               2 fields found: ContainerPathName, ContainerPathNameCount, 12 lines fetched

29/05/2014 10:42:59 AM:               Joining/Keeping

29/05/2014 10:42:59 AM: 0028          let vL.xxx = NoOfRows('vL.temp_table_map')

29/05/2014 10:42:59 AM: 0030          for vL.ttt = 0 to vL.xxx-1

29/05/2014 10:42:59 AM: 0032            LET vL.Comment =''

29/05/2014 10:42:59 AM: 0034            LET vL.ContainerPathName = PurgeChar(trim(peek(FieldName(1,'vL.temp_table_map'),0,'vL.temp_table_map')),'=;,- '&chr(39))

29/05/2014 10:42:59 AM: 0035            LET vL.ContainerFolderName = lower(PurgeChar(trim(peek(FieldName(2,'vL.temp_table_map'),0,'vL.temp_table_map')),'=;,'&chr(39)))

29/05/2014 10:42:59 AM: 0036            LET vL.Comment = PurgeChar(trim(peek(FieldName(3,'vL.temp_table_map'),0,'vL.temp_table_map')),';,'&chr(39))

29/05/2014 10:42:59 AM: 0037            LET vL.RootPath = lower(PurgeChar(trim(peek(FieldName(4,'vL.temp_table_map'),0,'vL.temp_table_map')),'=;,'&chr(39)))

29/05/2014 10:42:59 AM: 0038            LET vL.ContainerPathNameCount = peek(FieldName(5,'vL.temp_table_map'),0,'vL.temp_table_map')

29/05/2014 10:42:59 AM: 0041            if not 'Admin' = '' and not '0.administration' = '' then

29/05/2014 10:42:59 AM: 0044              if not right( '0.administration' , 1 ) ='\' then

29/05/2014 10:42:59 AM: 0045                let vL.ContainerName ='0.administration'&'\'

29/05/2014 10:42:59 AM: 0046              else

29/05/2014 10:42:59 AM: 0051              if   '0.administration\' =right(lower(''),len('0.administration\')) and '' = '' then

29/05/2014 10:42:59 AM: 0074              if ('Shared'='Admin' or 'Shared'='0.administration')  then

29/05/2014 10:42:59 AM: 0096              exit for when ''='True'

29/05/2014 10:42:59 AM: 0097            endif

29/05/2014 10:42:59 AM: 0098          next

29/05/2014 10:42:59 AM: 0032            LET vL.Comment =''

29/05/2014 10:42:59 AM: 0034            LET vL.ContainerPathName = PurgeChar(trim(peek(FieldName(1,'vL.temp_table_map'),1,'vL.temp_table_map')),'=;,- '&chr(39))

29/05/2014 10:42:59 AM: 0035            LET vL.ContainerFolderName = lower(PurgeChar(trim(peek(FieldName(2,'vL.temp_table_map'),1,'vL.temp_table_map')),'=;,'&chr(39)))

29/05/2014 10:42:59 AM: 0036            LET vL.Comment = PurgeChar(trim(peek(FieldName(3,'vL.temp_table_map'),1,'vL.temp_table_map')),';,'&chr(39))

29/05/2014 10:42:59 AM: 0037            LET vL.RootPath = lower(PurgeChar(trim(peek(FieldName(4,'vL.temp_table_map'),1,'vL.temp_table_map')),'=;,'&chr(39)))

29/05/2014 10:42:59 AM: 0038            LET vL.ContainerPathNameCount = peek(FieldName(5,'vL.temp_table_map'),1,'vL.temp_table_map')

29/05/2014 10:42:59 AM: 0041            if not 'Shared' = '' and not '99.shared_folders' = '' then

29/05/2014 10:42:59 AM: 0044              if not right( '99.shared_folders' , 1 ) ='\' then

29/05/2014 10:42:59 AM: 0045                let vL.ContainerName ='99.shared_folders'&'\'

29/05/2014 10:42:59 AM: 0046              else

29/05/2014 10:42:59 AM: 0051              if   '99.shared_folders\' =right(lower(''),len('99.shared_folders\')) and '' = '' then

29/05/2014 10:42:59 AM: 0074              if ('Shared'='Shared' or 'Shared'='99.shared_folders')  then

29/05/2014 10:42:59 AM: 0076                if not '' = '' then

29/05/2014 10:42:59 AM: 0082                  let vL.RootPath ='\\svqlikview\QlikViewDocs\2.Test\'

29/05/2014 10:42:59 AM: 0083                endif

29/05/2014 10:43:00 AM: 0084                if vL.ContainerPathNameCount = 1 then

29/05/2014 10:43:00 AM: 0085                  SET vL.Exit= 'True'

29/05/2014 10:43:00 AM: 0087                else

29/05/2014 10:43:00 AM: 0094                exit for when 'True'='True'

29/05/2014 10:43:00 AM: 0100          drop table 'vL.temp_table_map'

29/05/2014 10:43:00 AM: 0103          SET vL.ttt =

29/05/2014 10:43:00 AM: 0104          SET vL.xxx =

29/05/2014 10:43:00 AM: 0105          SET vL.CVSTableName =

29/05/2014 10:43:00 AM: 0106          SET vL.SpecificVariable =

29/05/2014 10:43:00 AM: 0107          SET vL.GetRootPath =

29/05/2014 10:43:00 AM: 0108          SET vL.Exit=

29/05/2014 10:43:00 AM: 0109          SET vL.ContainerName=

29/05/2014 10:43:00 AM: 0110          SET vL.ContainerPathNameCount=

29/05/2014 10:43:00 AM: 0111        end sub

29/05/2014 10:43:00 AM: 0037        SET vL.ContainerFolderName='99.shared_folders'

29/05/2014 10:43:00 AM: 0040        SET vL.ContainerPathName='Shared'

29/05/2014 10:43:00 AM: 0043        SET vL.RootPath='\\svqlikview\QlikViewDocs\2.Test\'

29/05/2014 10:43:00 AM: 0045        if not 'Shared' = '' then

29/05/2014 10:43:00 AM: 0049          trace '### DF 99.shared_folders'

29/05/2014 10:43:00 AM: 0049          '### DF 99.shared_folders'

29/05/2014 10:43:00 AM: 0050          trace '### DF Default Shared Container'

29/05/2014 10:43:00 AM: 0050          '### DF Default Shared Container'

29/05/2014 10:43:00 AM: 0053          SET vG.SharedBasePath = '\\svqlikview\QlikViewDocs\2.Test\99.shared_folders\'

29/05/2014 10:43:00 AM: 0057          sub vL.FileExist (vL.Root)

29/05/2014 10:43:00 AM: 0058          call vL.FileExist ('\\svqlikview\QlikViewDocs\2.Test\99.shared_folders\*')

29/05/2014 10:43:00 AM: 0011            if IsNull(filesize('\\svqlikview\QlikViewDocs\2.Test\99.shared_folders\*')) = -1  then

29/05/2014 10:43:00 AM: 0014              SET vL.FileExist='true'

29/05/2014 10:43:00 AM: 0015            endif

29/05/2014 10:43:00 AM: 0016            set vL.Root=

29/05/2014 10:43:00 AM: 0017          end sub

29/05/2014 10:43:00 AM: 0060          if vL.FileExist = 'false' then

29/05/2014 10:43:00 AM: 0067            Call GetContainerStructure (vL.GetContainerStructure)

29/05/2014 10:43:00 AM: 0036              vL.ContainerStructure:

29/05/2014 10:43:00 AM: 0037               LOAD * INLINE [

29/05/2014 10:43:00 AM: 0038               PhysicalFolderName, VariablePrefix, Comments

29/05/2014 10:43:00 AM: 0039               '1.Application','Application','QlikView Applications are resided in subfolders under 1.Applications'

29/05/2014 10:43:00 AM: 0040               '2.QVD','QVD','QlikView Data files are stored in subfolders under 2.QVD'

29/05/2014 10:43:00 AM: 0041               '3.Include','Include','Folder where QlikView Include files are stored. These are script parts that are called from the main QlikView script. '

29/05/2014 10:43:00 AM: 0042               '4.Mart', 'Mart','Resides QlikView Qvw marts (in subfolders) for data discovery usage, these folders could be shared.'

29/05/2014 10:43:00 AM: 0043               '5.Config','Config','Configuration and language files like Excel and txt. This folders could be shared to make configuration changes easier'

29/05/2014 10:43:00 AM: 0044               '6.Script','Script','Store for special scripts run by the publisher or scheduled tasks'

29/05/2014 10:43:00 AM: 0045               '7.Export','Export','Folder used to store from QlikView exported data, probably txt or qvx'

29/05/2014 10:43:00 AM: 0046               '8.Import','Import','Folder used to store import data from external systems'

29/05/2014 10:43:00 AM: 0047               '3.Include\1.BaseVariable','BaseVariable','Stores all the variables needed to use the framework, like paths inside the container'

29/05/2014 10:43:00 AM: 0048               '3.Include\2.Locale','Locale','Locale for different regions, used for easy migration between regions'

29/05/2014 10:43:00 AM: 0049               '3.Include\3.ConnString','ConnString','Stores connection strings to data sources'

29/05/2014 10:43:00 AM: 0050               '3.Include\4.Sub','Sub','Store for sub routines, this is a way to reuse code between applications '

29/05/2014 10:43:00 AM: 0051               '3.Include\5.ColorScheme','ColorScheme','Company standard Color Scheme would be placed here'

29/05/2014 10:43:00 AM: 0052               '3.Include\6.Custom','Custom','Store for custom include scripts'

29/05/2014 10:43:00 AM: 0053               '0.Template','Template','Used to identify Admin container and create extra variables used by Variable Editor'

29/05/2014 10:43:00 AM: 0054               ]

29/05/2014 10:43:00 AM:                   3 fields found: PhysicalFolderName, VariablePrefix, Comments, 15 lines fetched

29/05/2014 10:43:00 AM: 0055            end sub

29/05/2014 10:43:00 AM: 0068            FOR vL.VariableLoop = 1 to NoOfRows('vL.ContainerStructure')

29/05/2014 10:43:00 AM: 0070              let vL.PhysicalFolderName = fieldvalue('PhysicalFolderName',1)

29/05/2014 10:43:00 AM: 0071              let vL.VariablePrefix = fieldvalue('VariablePrefix',1)

29/05/2014 10:43:00 AM: 0074              if ''='' and FileTime('\\svqlikview\QlikViewDocs\2.Test\99.shared_folders\1.Application') > 0 then

29/05/2014 10:43:00 AM: 0075                SET vG.SharedApplicationPath='\\svqlikview\QlikViewDocs\2.Test\99.shared_folders\1.Application\'

29/05/2014 10:43:00 AM: 0078              elseif FileTime('\\svqlikview\QlikViewDocs\2.Test\99.shared_folders\1.Application') > 0 then

29/05/2014 10:43:00 AM: 0087            Next vL.VariableLoop

29/05/2014 10:43:00 AM: 0070              let vL.PhysicalFolderName = fieldvalue('PhysicalFolderName',2)

29/05/2014 10:43:00 AM: 0071              let vL.VariablePrefix = fieldvalue('VariablePrefix',2)

29/05/2014 10:43:00 AM: 0074              if ''='' and FileTime('\\svqlikview\QlikViewDocs\2.Test\99.shared_folders\2.QVD') > 0 then

29/05/2014 10:43:00 AM: 0075                SET vG.SharedQVDPath='\\svqlikview\QlikViewDocs\2.Test\99.shared_folders\2.QVD\'

29/05/2014 10:43:00 AM: 0078              elseif FileTime('\\svqlikview\QlikViewDocs\2.Test\99.shared_folders\2.QVD') > 0 then

29/05/2014 10:43:00 AM: 0087            Next vL.VariableLoop

29/05/2014 10:43:00 AM: 0070              let vL.PhysicalFolderName = fieldvalue('PhysicalFolderName',3)

29/05/2014 10:43:00 AM: 0071              let vL.VariablePrefix = fieldvalue('VariablePrefix',3)

29/05/2014 10:43:00 AM: 0074              if ''='' and FileTime('\\svqlikview\QlikViewDocs\2.Test\99.shared_folders\3.Include') > 0 then

29/05/2014 10:43:00 AM: 0075                SET vG.SharedIncludePath='\\svqlikview\QlikViewDocs\2.Test\99.shared_folders\3.Include\'

29/05/2014 10:43:00 AM: 0078              elseif FileTime('\\svqlikview\QlikViewDocs\2.Test\99.shared_folders\3.Include') > 0 then

29/05/2014 10:43:00 AM: 0087            Next vL.VariableLoop

29/05/2014 10:43:00 AM: 0070              let vL.PhysicalFolderName = fieldvalue('PhysicalFolderName',4)

29/05/2014 10:43:00 AM: 0071              let vL.VariablePrefix = fieldvalue('VariablePrefix',4)

29/05/2014 10:43:00 AM: 0074              if ''='' and FileTime('\\svqlikview\QlikViewDocs\2.Test\99.shared_folders\4.Mart') > 0 then

29/05/2014 10:43:00 AM: 0075                SET vG.SharedMartPath='\\svqlikview\QlikViewDocs\2.Test\99.shared_folders\4.Mart\'

29/05/2014 10:43:00 AM: 0078              elseif FileTime('\\svqlikview\QlikViewDocs\2.Test\99.shared_folders\4.Mart') > 0 then

29/05/2014 10:43:00 AM: 0087            Next vL.VariableLoop

29/05/2014 10:43:00 AM: 0070              let vL.PhysicalFolderName = fieldvalue('PhysicalFolderName',5)

29/05/2014 10:43:00 AM: 0071              let vL.VariablePrefix = fieldvalue('VariablePrefix',5)

29/05/2014 10:43:00 AM: 0074              if ''='' and FileTime('\\svqlikview\QlikViewDocs\2.Test\99.shared_folders\5.Config') > 0 then

29/05/2014 10:43:00 AM: 0075                SET vG.SharedConfigPath='\\svqlikview\QlikViewDocs\2.Test\99.shared_folders\5.Config\'

29/05/2014 10:43:00 AM: 0078              elseif FileTime('\\svqlikview\QlikViewDocs\2.Test\99.shared_folders\5.Config') > 0 then

29/05/2014 10:43:00 AM: 0087            Next vL.VariableLoop

29/05/2014 10:43:00 AM: 0070              let vL.PhysicalFolderName = fieldvalue('PhysicalFolderName',6)

29/05/2014 10:43:00 AM: 0071              let vL.VariablePrefix = fieldvalue('VariablePrefix',6)

29/05/2014 10:43:00 AM: 0074              if ''='' and FileTime('\\svqlikview\QlikViewDocs\2.Test\99.shared_folders\6.Script') > 0 then

29/05/2014 10:43:00 AM: 0075                SET vG.SharedScriptPath='\\svqlikview\QlikViewDocs\2.Test\99.shared_folders\6.Script\'

29/05/2014 10:43:00 AM: 0078              elseif FileTime('\\svqlikview\QlikViewDocs\2.Test\99.shared_folders\6.Script') > 0 then

29/05/2014 10:43:00 AM: 0087            Next vL.VariableLoop

29/05/2014 10:43:00 AM: 0070              let vL.PhysicalFolderName = fieldvalue('PhysicalFolderName',7)

29/05/2014 10:43:00 AM: 0071              let vL.VariablePrefix = fieldvalue('VariablePrefix',7)

29/05/2014 10:43:00 AM: 0074              if ''='' and FileTime('\\svqlikview\QlikViewDocs\2.Test\99.shared_folders\7.Export') > 0 then

29/05/2014 10:43:00 AM: 0075                SET vG.SharedExportPath='\\svqlikview\QlikViewDocs\2.Test\99.shared_folders\7.Export\'

29/05/2014 10:43:00 AM: 0078              elseif FileTime('\\svqlikview\QlikViewDocs\2.Test\99.shared_folders\7.Export') > 0 then

29/05/2014 10:43:00 AM: 0087            Next vL.VariableLoop

29/05/2014 10:43:00 AM: 0070              let vL.PhysicalFolderName = fieldvalue('PhysicalFolderName',8)

29/05/2014 10:43:00 AM: 0071              let vL.VariablePrefix = fieldvalue('VariablePrefix',8)

29/05/2014 10:43:00 AM: 0074              if ''='' and FileTime('\\svqlikview\QlikViewDocs\2.Test\99.shared_folders\8.Import') > 0 then

29/05/2014 10:43:00 AM: 0075                SET vG.SharedImportPath='\\svqlikview\QlikViewDocs\2.Test\99.shared_folders\8.Import\'

29/05/2014 10:43:00 AM: 0078              elseif FileTime('\\svqlikview\QlikViewDocs\2.Test\99.shared_folders\8.Import') > 0 then

29/05/2014 10:43:00 AM: 0087            Next vL.VariableLoop

29/05/2014 10:43:00 AM: 0070              let vL.PhysicalFolderName = fieldvalue('PhysicalFolderName',9)

29/05/2014 10:43:00 AM: 0071              let vL.VariablePrefix = fieldvalue('VariablePrefix',9)

29/05/2014 10:43:00 AM: 0074              if ''='' and FileTime('\\svqlikview\QlikViewDocs\2.Test\99.shared_folders\3.Include\1.BaseVariable') > 0 then

29/05/2014 10:43:00 AM: 0075                SET vG.SharedBaseVariablePath='\\svqlikview\QlikViewDocs\2.Test\99.shared_folders\3.Include\1.BaseVariable\'

29/05/2014 10:43:00 AM: 0078              elseif FileTime('\\svqlikview\QlikViewDocs\2.Test\99.shared_folders\3.Include\1.BaseVariable') > 0 then

29/05/2014 10:43:00 AM: 0087            Next vL.VariableLoop

29/05/2014 10:43:00 AM: 0070              let vL.PhysicalFolderName = fieldvalue('PhysicalFolderName',10)

29/05/2014 10:43:00 AM: 0071              let vL.VariablePrefix = fieldvalue('VariablePrefix',10)

29/05/2014 10:43:00 AM: 0074              if ''='' and FileTime('\\svqlikview\QlikViewDocs\2.Test\99.shared_folders\3.Include\2.Locale') > 0 then

29/05/2014 10:43:00 AM: 0075                SET vG.SharedLocalePath='\\svqlikview\QlikViewDocs\2.Test\99.shared_folders\3.Include\2.Locale\'

29/05/2014 10:43:00 AM: 0078              elseif FileTime('\\svqlikview\QlikViewDocs\2.Test\99.shared_folders\3.Include\2.Locale') > 0 then

29/05/2014 10:43:00 AM: 0087            Next vL.VariableLoop

29/05/2014 10:43:00 AM: 0070              let vL.PhysicalFolderName = fieldvalue('PhysicalFolderName',11)

29/05/2014 10:43:00 AM: 0071              let vL.VariablePrefix = fieldvalue('VariablePrefix',11)

29/05/2014 10:43:00 AM: 0074              if ''='' and FileTime('\\svqlikview\QlikViewDocs\2.Test\99.shared_folders\3.Include\3.ConnString') > 0 then

29/05/2014 10:43:00 AM: 0075                SET vG.SharedConnStringPath='\\svqlikview\QlikViewDocs\2.Test\99.shared_folders\3.Include\3.ConnString\'

29/05/2014 10:43:00 AM: 0078              elseif FileTime('\\svqlikview\QlikViewDocs\2.Test\99.shared_folders\3.Include\3.ConnString') > 0 then

29/05/2014 10:43:00 AM: 0087            Next vL.VariableLoop

29/05/2014 10:43:00 AM: 0070              let vL.PhysicalFolderName = fieldvalue('PhysicalFolderName',12)

29/05/2014 10:43:00 AM: 0071              let vL.VariablePrefix = fieldvalue('VariablePrefix',12)

29/05/2014 10:43:00 AM: 0074              if ''='' and FileTime('\\svqlikview\QlikViewDocs\2.Test\99.shared_folders\3.Include\4.Sub') > 0 then

29/05/2014 10:43:00 AM: 0075                SET vG.SharedSubPath='\\svqlikview\QlikViewDocs\2.Test\99.shared_folders\3.Include\4.Sub\'

29/05/2014 10:43:00 AM: 0078              elseif FileTime('\\svqlikview\QlikViewDocs\2.Test\99.shared_folders\3.Include\4.Sub') > 0 then

29/05/2014 10:43:00 AM: 0087            Next vL.VariableLoop

29/05/2014 10:43:00 AM: 0070              let vL.PhysicalFolderName = fieldvalue('PhysicalFolderName',13)

29/05/2014 10:43:00 AM: 0071              let vL.VariablePrefix = fieldvalue('VariablePrefix',13)

29/05/2014 10:43:00 AM: 0074              if ''='' and FileTime('\\svqlikview\QlikViewDocs\2.Test\99.shared_folders\3.Include\5.ColorScheme') > 0 then

29/05/2014 10:43:00 AM: 0075                SET vG.SharedColorSchemePath='\\svqlikview\QlikViewDocs\2.Test\99.shared_folders\3.Include\5.ColorScheme\'

29/05/2014 10:43:00 AM: 0078              elseif FileTime('\\svqlikview\QlikViewDocs\2.Test\99.shared_folders\3.Include\5.ColorScheme') > 0 then

29/05/2014 10:43:00 AM: 0087            Next vL.VariableLoop

29/05/2014 10:43:00 AM: 0070              let vL.PhysicalFolderName = fieldvalue('PhysicalFolderName',14)

29/05/2014 10:43:00 AM: 0071              let vL.VariablePrefix = fieldvalue('VariablePrefix',14)

29/05/2014 10:43:00 AM: 0074              if ''='' and FileTime('\\svqlikview\QlikViewDocs\2.Test\99.shared_folders\3.Include\6.Custom') > 0 then

29/05/2014 10:43:00 AM: 0075                SET vG.SharedCustomPath='\\svqlikview\QlikViewDocs\2.Test\99.shared_folders\3.Include\6.Custom\'

29/05/2014 10:43:00 AM: 0078              elseif FileTime('\\svqlikview\QlikViewDocs\2.Test\99.shared_folders\3.Include\6.Custom') > 0 then

29/05/2014 10:43:00 AM: 0087            Next vL.VariableLoop

29/05/2014 10:43:00 AM: 0070              let vL.PhysicalFolderName = fieldvalue('PhysicalFolderName',15)

29/05/2014 10:43:00 AM: 0071              let vL.VariablePrefix = fieldvalue('VariablePrefix',15)

29/05/2014 10:43:00 AM: 0074              if ''='' and FileTime('\\svqlikview\QlikViewDocs\2.Test\99.shared_folders\0.Template') > 0 then

29/05/2014 10:43:00 AM: 0087            Next vL.VariableLoop

29/05/2014 10:43:00 AM: 0090            drop table vL.ContainerStructure

29/05/2014 10:43:00 AM: 0093            if not ''='' then

29/05/2014 10:43:00 AM: 0098            trace '### DF 99.shared_folders Finished'

29/05/2014 10:43:00 AM: 0098            '### DF 99.shared_folders Finished'

29/05/2014 10:43:00 AM: 0100          else

29/05/2014 10:43:00 AM: 0103        else

29/05/2014 10:43:00 AM: 0111        SET vL.ContainerFolderName=

29/05/2014 10:43:00 AM: 0112        SET vL.PhysicalFolderName=

29/05/2014 10:43:00 AM: 0113        SET vL.VariablePrefix=

29/05/2014 10:43:00 AM: 0114        SET vL.VariableLoop=

29/05/2014 10:43:00 AM: 0115        SET vL.Path=

29/05/2014 10:43:00 AM: 0116        SET vL.LinkShared_Folders=

29/05/2014 10:43:00 AM: 0117        set vL.VariableLoop=

29/05/2014 10:43:00 AM: 0118        set vL.GetContainerStructure=

29/05/2014 10:43:00 AM: 0119        SET vL.ContainerMapPath =

29/05/2014 10:43:00 AM: 0120        SET vL.ContainerPathName=

29/05/2014 10:43:00 AM: 0121        SET vL.RootPath=

29/05/2014 10:43:00 AM: 0122        SET vL.FileExist=

29/05/2014 10:43:00 AM: 0123        SET vL.ContanerName=

29/05/2014 10:43:00 AM: 0124        SET vL.Comment =

29/05/2014 10:43:00 AM: 0125        SET vL.ContainerIdentification=

29/05/2014 10:43:00 AM: 0126        SET vL.SingleFolder=

29/05/2014 10:43:00 AM: 0127        SET vL.SubStringSplitt=

29/05/2014 10:43:00 AM: 0128        SET vL.SubString=

29/05/2014 10:43:00 AM: 0130      end sub

29/05/2014 10:43:00 AM: 0135    endif

michaelfentondata
Partner - Contributor III
Partner - Contributor III
Author

We were able to solve this by granting the user NTFS read permissions (Traverse folder / execute file, List folder / read data, Read attributes) on the top level folder (2.Test) with no inheritance to sub-folders and contents.  This means they can enumerate the containers, but cannot go into them unless they have specific permissions.

It seems that the LoadContainerMap sub (called by LoadContainerGlobalVariables) needs to be able to see all the containers in the file system even though I am only requesting variables from the System folder.

It would be handy to have a guide outlining the NTFS permissions required by different business roles in the QDF.