票据窗口未更新账单

时间:2018-08-29 14:38:50

标签: acumatica

我正在通过图形扩展名中的一些自定义代码更新票据上的注释。我的问题是,当您单击屏幕右上角的Notes图标时弹出的窗口无法反映我对代码中的注释所做的更改。如果我使用<>按钮滚动到另一个Bill,然后又回到我更新的Bill,它会显示更改。因此,我不确定如何刷新笔记。

这是在AP301000屏幕上。我的代码更改了Bill的注释后,我尝试了Base.Document.View.RequestRefresh(),Base.Document.View.Clear()并调用Base.Actions.PressSave()。

TIA!

这里的代码:

protected void APTran_RowInserted(PXCache cache, PXRowInsertedEventArgs e)
    {

        var row = (APTran)e.Row;
        if (row == null)
            return;

        //*********************** copy notes and file attachments from PO lines and header to the Bill **********************************
        if ((row.PONbr != null) && (row.POLineNbr != null))
        {
            POOrderEntry poEntry = (POOrderEntry)PXGraph.CreateInstance(typeof(POOrderEntry));
            poEntry.Clear();
            POOrder poHeader = poEntry.Document.Search<POOrder.orderNbr>(row.PONbr);
            poEntry.Document.Current = poHeader;
            POLine poLine = poEntry.Transactions.Search<POLine.lineNbr>(row.POLineNbr);

            if (poLine != null)
            {
                PXNoteAttribute.CopyNoteAndFiles(poEntry.Caches[typeof(POLine)], poLine, cache, row); //// - use this for Notes and Files.

                // making of copy of what the note is on the APInvoice at this point because the PXNoteAttribute.CopyNoteAndFiles() below
                // will replace what is in the notes with what is in the PO instead of appending.
                string oldNote = PXNoteAttribute.GetNote(Base.Caches[typeof(APInvoice)], Base.CurrentDocument.Current);

                PXNoteAttribute.CopyNoteAndFiles(poEntry.Caches[typeof(POOrder)], poHeader, Base.Caches[typeof(APInvoice)], Base.CurrentDocument.Current);
                PXNoteAttribute.SetNote(Base.Caches[typeof(APInvoice)], Base.CurrentDocument.Current, oldNote);

                Base.Actions.PressSave();

                string poNote = PXNoteAttribute.GetNote(poEntry.Caches[typeof(POOrder)], poHeader);
                if (!string.IsNullOrEmpty(poNote))
                {
                    //string oldNote = PXNoteAttribute.GetNote(Base.Caches[typeof(APInvoice)], Base.CurrentDocument.Current);
                    if ((oldNote == null) || !oldNote.Contains(poNote))
                    {
                        string newNote = "";

                        if (string.IsNullOrEmpty(oldNote))
                            newNote = poNote;
                        else
                            newNote = oldNote + Environment.NewLine + poNote;
                        //These 2 lines will not update the note without the PressSave();
                        //Guid noteGuid = (Guid)PXNoteAttribute.GetNoteID(Base.Caches[typeof(APInvoice)], Base.CurrentDocument.Current, null);
                        //PXNoteAttribute.UpdateNoteRecord(Base.Caches[typeof(APInvoice)], noteGuid, newNote);

                        PXNoteAttribute.SetNote(Base.Caches[typeof(APInvoice)], Base.Document.Current, newNote);  // Sets the note but, screen does not refresh.


                        //Base.Caches[typeof(APInvoice)].Update(Base.Document.Current); //Does not refresh Notes on screen.

                        //PXNoteAttribute.GetNoteID<APInvoice.noteID>(Base.Caches[typeof(APInvoice)], Base.Document.Current);  // Does not update the screen.

                        //Base.Caches[typeof(Note)].IsDirty = true;  /// No Effect.

                        //Base.Caches[typeof(Note)].Clear();  //this has no effect on refreshing the notes that are seen on the screen.
                        //Base.Caches[typeof(NoteDoc)].Clear();

                        //Base.Actions.PressSave();  // blanks out the header if the Bill has never been saved. Does not refresh note on screen.
                        //Base.Document.View.Clear();
                        //Base.Document.View.RequestRefresh();  // this wipes out the new note if adding a second PO.


                    }
                }


            }
        }

    }

1 个答案:

答案 0 :(得分:0)

这是我部署的解决方案。我认为有一种更好的方法可以执行此操作,但目前看来还可以。我添加了这个:

    [PXOverride]
    public void Persist(Action persist)
    {
        persist();

        APInvoice invoice = (APInvoice)Base.CurrentDocument.SelectSingle();
        if (invoice.Status == "H")
            throw new PXRedirectRequiredException(Base, "Reloading Notes...");
    }

因此,我覆盖了Persist()以便刷新页面,但是,只有在Bill仍处于保留状态时,我才这样做。这将刷新屏幕上显示的注释。