Skip to main content

Fix Failed to Logout Properly in Aras Innovator When Using Chrome

Normally, Aras Innovator will save user's preference and disconnect session automatically when user logout. In order to perform this action in background, relevant code should be triggered in onbeforeunload event and then send request to server silently.
But newer version Chrome disallow "Synchronous XHR in page dismissal", this would make above post process failed (see error message in Figure 1). Therefore, all requests in onbeforeunload event are abandoned due to this kind of policy.

Figure 1. Error in console.

Solution

  1. Open "\Innovator\Client\javascript\aras_object.js".
  2. Add below code.
    
    Aras.prototype.handleUnloadSoapSend = function Aras_handleUnloadSoapSend(methodName,xmlBody,url) {
    	if (this.Browser.isCh() && window.fetch)
    	{
    		var soapMessage = '<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">';
    		soapMessage += '<SOAP-ENV:Body>';
    		soapMessage += '<'+methodName+'>'+xmlBody+'</'+methodName+'>';
    		soapMessage += '</SOAP-ENV:Body>';
    		soapMessage += '</SOAP-ENV:Envelope>';
    		
    		if (!url)
    			url = this.getServerURL();
    		
    		fetch(url,{
    			method: 'POST',
    			headers: {
    				'AUTHUSER': encodeURIComponent(this.getCurrentLoginName()),
    				'AUTHPASSWORD': this.getCurrentPassword(),
    				'DATABASE': encodeURIComponent(this.getDatabase()),
    				'LOCALE': this.getCommonPropertyValue('systemInfo_CurrentLocale'),
    				'TIMEZONE_NAME': this.getCommonPropertyValue('systemInfo_CurrentTimeZoneName'),
    				'SOAPACTION': methodName
    			},
    			body: soapMessage,
    			mode: 'same-origin',
    			keepalive: true
    		}).then(function (response) {
    			//Do nothing
    		}).catch(function (error) {
    			//Do nothing
    		});
    	}
    	else
    	{
    		this.soapSend(methodName,xmlBody,url);
    	}
    };

  3. Move to line 641 and replace by below code.
    
    this.handleUnloadSoapSend('ApplyAML','<AML>'+xml+'</AML>');
    

  4. Move to line 1034 and replace by below code.
    
    this.handleUnloadSoapSend('Logoff','<logoff skip_unlock=\'0\'/>');
    
  5. Move to line 1036 and replace by below code.
    
    this.handleUnloadSoapSend('Logoff','',this.UserNotification.url);
    
  6. Move to line 5752 and replace by below code.
    
    this.handleUnloadSoapSend('ApplyItem',prefItem.xml);
    

Comments

Popular posts from this blog

Trigger Sequence of Promotion Events in Aras Innovator

There are several Server Event could trigger Method during item promotion: ItemType: OnBeforePromote, OnAfterPromote; Life Cycle: Transition Pre, Transition Post. Trigger sequence of above events is shown in below figure: It's important to note that "Transition Post" cannot rollback while exception throws because item promotion is finished after "OnAfterPromote" That means even if throwing exception, the life cycle will still stay at promoted state. Please note, all above events will not be triggered when "OnPromote" event exists (due to this will overwrite original system process).

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

Account and Password Policy in Aras Innovator

Aras Innovator has prepared security policy for account and password and very simple to set up. Account Policy There are two system variables could handle account policy: AccountLockoutThreshold_triesNum: The maximum trying number of login, user account will be locked if exceed. AccountLockoutDuration_minutes: User account locking duration after reach maximum trying number. ※Account policy will only be effective when values of above two variables are greater than zero. Password Policy There are two system variables could handle password policy: User_pwd_symbols_min_number: The minimum characters that must be contained when user set new password. User_pwd_digits_min_number: The minimum digits that must be contained when user set new password.