Acumatica: когда данные меняются, появляется сообщение «покинуть сайт?» «Изменения, которые вы внесли, не могут быть сохранены» не отображаются, чтобы предотвратить потерю изменений - PullRequest
0 голосов
/ 28 апреля 2020

Обычно на всех страницах Acumatica при внесении изменений платформа выдает стандартное сообщение javascript: «Изменения, которые вы внесли, могут быть не сохранены», чтобы предотвратить потерю изменений:

enter image description here

или

enter image description here

Какая настройка вызывает такое поведение? У меня есть экран, на котором такого диалога нет, и я не знаю, как его вызвать.

Эта проблемная c страница является всплывающим окном: enter image description here

это всплывающее окно открывается при использовании. Эта проблема не возникает при открытии всплывающего окна с помощью PXRedirectRequiredException:

throw new PXPopupRedirectException(currentPayCalendarMaint, true, string.Empty);

При открытии с помощью PXRedirectRequiredException:

throw new PXRedirectRequiredException(currentPayCalendarMaint, true, string.Empty);

фреймворк открывает диалоговое окно в виде обычного всплывающего окна браузера и показывает требуемое сообщение («Изменения, которые вы сделали, возможно, не сохранены»), как и ожидалось:

enter image description here

Возможно ли иметь требуемое поведение, не открывая всплывающее окно в виде отдельного окна?

Буду благодарен за любую помощь или совет.

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

На данный момент единственный способ решить проблему - это открыть в новом стандартном окне браузера, например: enter image description here Вместо диалога Aucmatica: enter image description here

Для этого нам нужно открыть диалог с:

throw new PXRedirectRequiredException(currentPayCalendarMaint, true, string.Empty)
            {
                Mode = PXBaseRedirectException.WindowMode.NewWindow
            };

Вместо этого:

throw new PXPopupRedirectException(currentPayCalendarMaint, string.Empty, true);
1 голос
/ 28 апреля 2020

Я полагаю, что в нормальных случаях это напрямую связано с флагом IsDirty на графике или кешем на графике. При изменении значения в любом кэше флаг IsDirty графа устанавливается в значение true. Я видел некоторый код, который вручную устанавливает IsDirty на false в указанных c кешах, чтобы вызвать то, что вы описываете как проблему. Возможно, это произошло, но также возможно, что ваш код фактически не обновляет какие-либо значения ни в одном из кэшей. Без вашего кода я могу только строить предположения.

Комментарии из исходного кода, где IsDirty определен в PX.Data.PXGraph:

// Summary:
//     Gets the value that indicates whether there are modified data records not saved
//     to the database in the caches related to the graph data views. If the IsDirty
//     property of at least one cache object is true, the IsDirty property of the graph
//     is also true.
public virtual bool IsDirty { get; }

Выдержки из SOCreateShipment с использованием конструктора для Orders:

[PXFilterable]
public PXFilteredProcessing<SOOrder, SOOrderFilter> Orders;
...

public virtual IEnumerable orders()
{
    PXUIFieldAttribute.SetDisplayName<SOOrder.customerID>(Caches[typeof(SOOrder)], Messages.CustomerID);
    ...
    PXView.StartRow = 0;

    Orders.Cache.IsDirty = false;
}
...