Forum Discussion
Sounds like your callback function not really works. Callbacks/promises/async-await is used for asynchronous stuff when Innovator shall wait for another client task to be completed.
Regular code is executed synchronous. So it can happen that your Form is closing before something in between was finished. When using the debugger you slow down the whole process and you give Innovator more time for execution. -->That´s why your code works with debugger enabled.
I am not sure, but as far as I remember the AML Editor doesn´t use async calls at all?!? Classical Form callback looks something like this: community.aras.com/.../tech-tip-calling-a-date-dialog-from-a-method
Or you execute too much time consuming stuff inside the callback. This would require further callbacks :-).
- NOOB4 years agoIdeator I[deleted]
- NOOB4 years agoIdeator I
Yes it does not have a callback.I have added timeouts on callback as well as save button click but it was of no use.I have only 1 debugger that is on show dialog button.Can it be because the quick edit form is also a popup?I am getting a relationship items and setting a property on the quick edit form on the callback.My code looks like this:
debugger;var inn = document.thisItem.getInnovator();var opItem = document.thisItem;var query = new Item("mpp_Operation", "get");query.setID(document.thisItem.getID());query = query.apply();var param = aras.newObject();param.title = "Predecessor Editor for Operation " + opItem.getProperty("sort_order");param.formId = "A0637ABC383446F1A84D6CEB4D2CC574"; //Predecessor Editor Formparam.aras = aras;param.item = query;var options = {dialogWidth: 1100,dialogHeight: 460,resizable: 'no'};
// This will be called after the dialog is closedvar callback = {oncancel: function(dialogWrapper) {//debugger;var save = dialogWrapper.result.save;if(save === '1'){var predecessorIds = [];pr = document.thisItem;var mppOperationID = document.thisItem.getID();var query = "<AML>"+"<Item type='abc' action='get' select='id,related_id,sort_order'>"+"<source_id>"+mppOperationID+"</source_id>"+"</Item>"+"</AML>";var predecessorItems = inn.applyAML(query);var count = predecessorItems.getItemCount();if(count > 0){for (var j = 0; j < count; j++){var currentPredessorItem = predecessorItems.getItemByIndex(j).getRelatedItem();var keyedName = currentPredessorItem.getProperty("keyed_name","");predecessorIds.push(keyedName);}}
var predecessorKeyedNames = predecessorIds.join();document.thisItem.setProperty("_predecessor",predecessorKeyedNames);handleItemChange("_predecessor",predecessorKeyedNames);}document.getElementsByName("sort_order")[0].getElementsByTagName("input")[0].focus();} // on cancel};var topWnd = top.aras.getMostTopWindowWithAras();var wnd = topWnd ? topWnd : window;//wnd.ArasModules.Dialog.show('iframe', param).promise.then(callback);var res = aras.modalDialogHelper.show('DefaultPopup', wnd, param, options, 'ShowFormAsADialog.html', callback); - NOOB4 years agoIdeator I
And When I directly cancel the new popup it executes the same behaviour so the code inside the callback is not a problem I believe.I have tried the approach as the article suggested but it leads to the same result.I have reduced code to a minimum in callback.It looks like this now:
var callback = {oncancel: function(dialogWrapper) {//debugger;var save = dialogWrapper.result.save;var ids = dialogWrapper.result.ids;if(save === '1'){var predecessorKeyedNames = ids.join();document.thisItem.setProperty("_predecessor",predecessorKeyedNames);handleItemChange("_predecessor",predecessorKeyedNames);}document.getElementsByName("sort_order")[0].getElementsByTagName("input")[0].focus();} // on cancel};- AngelaIp4 years agoIdeator I
Oh I haven´t seen that you open the pop-up from the other pop-up! Does anything work when you call you own pop-up from a regular position in the Form?
If yes, than you interfere with the other popup. I assume you have a "close dialog" function somewhere. But it doesn´t closes your dialog, but the Aras one. In this case your callback is bypassed.
As far as I remember you have to explicitly close your dialog within the callback:
topWindow.ArasModules.Dialog.show('iframe', params).promise.then(function(res) {
parent.args.dialog.close();
- NOOB4 years agoIdeator I
How can a callback be called if the dialog doesn't close first?I tried your way but it does not go to the callback if we remove dialog.close() on save changes button which I have on my popup.I have tried adding a check on the formId of the dialog if it matches than only close it but it is also of no use.