Публикация

Bug mobile report: В процессе записи в файл произошла ошибка (актуально для iOS) - возникает из-за спецсимволов в названии файла

Симптомы

Bug mobile report:

Type: Terrasoft.SyncException 

Message: В процессе синхронизации произошла ошибка 

Stack trace: 



Type: Terrasoft.FileException 

Message: В процессе записи в файл произошла ошибка 

AdditionalInfo: Имя: BPMonline700/Downloads/6005bfc5-5ea7-42da-82e6-15f5f4c9e80a/счет на оплату #6.pdf

Type: Terrasoft.FileSystemException 

Message: undefined 

AdditionalInfo: Код: undefined 

Data: 4 

Model Name: iPhone8,2 (0x0)

Platform: iOS

Platform Version: 9.2.1

IsOnlineMode: false

UIVersion: 2

ApplicationVersion: 7.7.8

ApplicationMajorVersion: 7.7

ContactId: c41b4784-a414-438c-a846-c5bf418f0056

CultureName: ru-RU

ApplicationRevision: 0

BackgroundSyncMode: 3

WorkplaceCode: DefaultWorkplace

Причина

Данная ошибка возникает из-за того, что в приложении присутствует файл «счет на оплату #6.pdf» (деталь «Файлы и ссылки»), в котором есть спецсимвол «#». В мобильном устройстве на платформе iOS есть ограничения по использованию спецсимволов при передаче запросов/файлов.

Решение

Для исправления необходимо переименовать файл и убрать символ «#». Это можно сделать, например, следующими способами:

- найти прикрепленный файл вручную открывая каждую запись в приложении;

- по ID записи (например, «6005bfc5-5ea7-42da-82e6-15f5f4c9e80a») в БД найти родительский объект, чтобы понять в каком разделе и в какой записи находиться данный файл и также переименовать через БД или на уровне приложения. Для упрощения поиска прикрепил скрипт, который можно выполнить на уровне БД и определить в каком объекте находиться данный файл.  

-- Вхідні параметри - назва та значення стовпчика:
DECLARE @COLUMN_NAME NVarChar(100) = 'Id'
DECLARE @COLUMN_VALUE NVarChar(100) = '6005bfc5-5ea7-42da-82e6-15f5f4c9e80a'
DECLARE @tableName VARCHAR(50)
DECLARE tablesCursor CURSOR LOCAL FORWARD_ONLY STATIC FOR
    -- Запит повертає імена таблиць в БД, у яких є стовпчик @COLUMN_VALUE:
    SELECT table_name = sysobjects.name
    FROM sysobjects
    JOIN syscolumns ON sysobjects.id = syscolumns.id         
    WHERE sysobjects.xtype='U'
    and syscolumns.name = @COLUMN_NAME
OPEN tablesCursor
FETCH NEXT FROM tablesCursor INTO @tableName
WHILE @@FETCH_STATUS = 0
BEGIN  
    -- Якщо в якійсь таблиці є стопчик @COLUMN_NAME зі значенням @COLUMN_VALUE -
    -- вивести ім'я таблиці, запит і кількість рядків у запиті
    EXEC ('DECLARE @recordCount INT;
        DECLARE @quotesChar CHAR = char(39);
        DECLARE @tabChar CHAR = char(9);
        BEGIN TRY
            SET @recordCount =
                (SELECT COUNT(*)
                FROM [' + @tableName + '] where ' + @COLUMN_NAME + ' = ''' + @COLUMN_VALUE + ''')
                IF @recordCount > 0
                    BEGIN                                                 
                        PRINT ''''
                        PRINT ''-- ' + @tableName + ':''
                        PRINT ''     SELECT * FROM ' + @tableName +
                            ' WHERE ' + @COLUMN_NAME +
                            ' = '' + @quotesChar + ''' + @COLUMN_VALUE + ''' + @quotesChar + ''''                                          
                        PRINT ''     -- Кількість рядків у запиті: '' + CAST(@recordCount as VARCHAR(5))
                    END
        END TRY        
        BEGIN CATCH                                   
        END CATCH;                      
    ');
    FETCH NEXT FROM tablesCursor INTO @tableName
END
CLOSE tablesCursor
DEALLOCATE tablesCursor

Необходимые условия и возможные ограничения

Данная ошибка актуальна для iOS (iPhone)

Нравится

Поделиться

0 комментариев
Показать все комментарии