Публикация

Bpm'online mobile bug report: Невозможно получить значение колонки Data, так как она не была загружена

Симптомы

В мобильном приложении добавляется файл/фото на деталь "файлы и ссылки" в одном из разделов.

После запуска синхронизации возникает ошибка:

Bpm'online mobile bug report

Type: Terrasoft.ODataException 

Message: An error occurred while processing this request. 

Сообщение содержит: Невозможно получить значение колонки Data, так как она не была загружена

Причина

В процессе схемы File в скрипте ScriptFileSaving есть код:

var data = Entity.GetColumnValue("Data") as byte[];

И если обновлять данные в этой схеме (через OData) и не указывать колонку Data, то появляется сообщение, что она не загружена.

Такая ситуация может происходить если в таблице файлов (ActivityFile, OpportunityFile и т.п.) есть циклическая связь.

Например в таблице ActivityFile есть колонка Activity, которая ссылается на таблицу Activity, в которой, в свою очередь, есть справочная колонка UsrActivityFile, которая ссылается на таблицу ActivityFile.

Мобильное приложение это отслеживает и разбивает один запрос

 

INSERT INTO ActivityFile (Id, Name, Data, Activity) VALUES (1, 2, 3, 4)

На два запроса:

INSERT INTO ActivityFile (Id, Name, Data) VALUES (1, 2, 3)
UPDATE ActivityFile SET Activity = 4 WHERE Id = 1

Вот этот второй запрос и не срабатывает.

Решение

Есть обходное решение. Для требуемой таблицы в манифесте установить признак IgnoreSplitLogActions

{
   "SyncOptions": {
      "ModelDataExportConfig": [
         {
            "Name": "ActivityFile",
            "IgnoreSplitLogActions": true
         }
      ],

Тогда вставка файла не будет разбиваться на два запроса.

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

Для UIV1 необходимо дополнительно "заоверрайдить" схему:

if (!Terrasoft.SysSettingsValue.getBooleanValue("UseMobileUIV2")) {
    /*
     * Moved from UIV2
     */
    Ext.define("Terrasoft.Sync.LogManager.override", {
        override: "Terrasoft.Sync.LogManager",
        /**
         * @private
         */
        ignoreSplitLogActions: function(logAction) {
            var modelName = logAction.get("ModelName");
            var manifest = Terrasoft.ApplicationConfig.manifest;
            var ignore = false;
            if (manifest.SyncOptions) {
                var modelDataExportConfig = manifest.SyncOptions.ModelDataExportConfig || [];
                for (var i = 0, ln = modelDataExportConfig.length; i < ln; i++) {
                    var modelConfig = modelDataExportConfig[i];
                    if (Ext.isObject(modelConfig) && modelConfig.Name === modelName) {
                        ignore = modelConfig.IgnoreSplitLogActions;
                        break;
                    }
                }
            }
            return ignore === true;
        },
        /**
         * @private
         */
        splitLogActions: function() {
            var firstTierActions = this.firstTierActions = [];
            var secondTierActions = this.secondTierActions = [];
            for (var i = 0, ln = this.mergedLogActions.length; i < ln; i++) {
                var logAction = this.mergedLogActions[i];
                if (this.isCreateAction(logAction) && !this.ignoreSplitLogActions(logAction)) {
                    firstTierActions.push(logAction);
                    this.splitLogActionWithLoopColumns(logAction);
                    this.splitLogActionWithBinaryColumns(logAction);
                } else {
                    secondTierActions.push(logAction);
                    if (this.isUpdateAction(logAction)) {
                        this.splitLogActionWithBinaryColumns(logAction);
                    }
                }
            }
        }
    });
}

 

Нравится

Поделиться

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