Skip to main content

Prevent unexpected error when uploading file does not exist in Aras Innovator

Sometime users may rename or remove local file "accidentally", it will make the saving process stuck like Figure 1.
According to Figure 2, the problem should be that uploading program cannot read file. It seems there is no exception handler.

Figure 1. Saving process stuck when uploading failed.

Figure 2. Error in console.

Solution

  1. Open "\Innovator\Client\Modules\core\xxhWorker.js".
  2. Move to line 31 and modify "onmessage" function.
    
    var receivedData = e.data.data;
    var fileId = e.data.fileId;
    var offset = e.data.from;
    var reader = new FileReaderSync();
    var byteData,xxhash;
    
    try
    {
    	byteData = reader.readAsArrayBuffer(receivedData);
    	xxhash = xxHash(byteData);
    }
    catch (e)
    {
    	xxhash = -1;
    }
    
    var result = {
    	xxhash: xxhash,
    	fileId: fileId,
    	offset: offset
    };
    
    //we remove links to objects in memory to prevent keeping references and to stable garbage collector working
    reader = null;
    byteData = null;
    postMessage(result);

  3. Open "\Innovator\Client\Modules\core\vaultUploader.js".
  4. Move to line 368 and add below code.
    
    if (dataObject.hash<0)
    	return Promise.reject('Unable to read '+fileWrapper.fileName+', please check if the file exists.');
    


  5. Move to line 491 and modify promise catch handler.
    
    filesUploader.destroyWorker();
    filesUploader.rollbackTransaction();
    
    var err = aras.IomInnovator.newError(error);
    
    return Promise.reject(err.dom);
    

Result

After update vault library, users will get error message (like below figure) to notify that the file doesn't exist, without infinite spinner.


Comments

Popular posts from this blog

aras.uiShowItemEx Method (aras Object)

aras.uiShowItemEx Method Shows Item with Item node. Syntax aras.uiShowItem( itemNd , viewMode , isOpenInTearOff ) Parameters Name Type Description itemNd Object Required. Item node. viewMode String Optional. Unknown purpose but only supports the following values: tab view (Default) openFile new ※Each supported value will get same result. Therefore, call method and pass undefined for this parameter is OK. isOpenInTearOff Boolean Optional. Specifies whether show Item with tear-off window. true - open in a tear-off window. false - open in a tab. (Default) Return Value An AsyncResult object or a Boolean. Returns AsyncResult object if the Item winodw is opened successfully, otherwise returns false. See Also aras Object Aras Innovator Client Framework

aras.uiShowItem Method (aras Object)

aras.uiShowItem Method Gets Item by Item ID and then shows the Item. Syntax aras.uiShowItem( itemTypeName , itemID , viewMode ) Parameters Name Type Description itemTypeName String Required. Name of the ItemType. itemID String Required. ID of the Item. viewMode String Optional. Unknown purpose but only supports the following values: tab view - This is default. openFile new ※Each supported value will get same result. Therefore, call method without this parameter is OK. Return Value An AsyncResult object or a Boolean. Returns AsyncResult object if the Item winodw is opened successfully, otherwise returns false. See Also aras Object Aras Innovator Client Framework

window.handleItemChange Method (Instance Window Object)

window.handleItemChange Method Changes current Item's property value. If Item is not locked, the function will do nothing. Syntax window.handleItemChange( propNm , propVal , dataType , datePattern ) Parameters Name Type Description propNm String Required. Property name. propVal String Required. Property value. dataType String Optional. Property data type. If the data type is "date", this parameter is required, otherwise it is not necessary to pass. datePattern String Optional. Date pattern, supports the following values: short_date (Default) short_date_time long_date long_date_time See Also Instance Window Object Aras Innovator Client Framework