1

我在发票和备忘录 AR301000 屏幕上自定义了“操作电子邮件发票/备忘录”操作。

在此处输入图像描述

每次单击该操作时,都会出现一个面板以加载 xml 文件。

在此处输入图像描述

按下“CARGAR”按钮后,面板应该关闭,但它会一次又一次地打开,我不知道这是什么原因。

在此处输入图像描述

        public PXAction<ARInvoice> notification;
    [PXUIField(DisplayName = "Notifications", Visible = false)]
    [PXButton(ImageKey = PX.Web.UI.Sprite.Main.DataEntryF)]
    protected virtual IEnumerable Notification(PXAdapter adapter,
    [PXString]
    string notificationCD)
    {
        cargarXML(); 

        foreach (ARInvoice doc in adapter.Get())
        {
            Dictionary<string, string> parameters = new Dictionary<string, string>();
            parameters.Add("DocType", doc.DocType);
            parameters.Add("RefNbr", doc.RefNbr);

            ARContact ar = Base.Billing_Contact.Select(this, doc.BillContactID);

            if (String.IsNullOrEmpty(ar.Email))
            {
                var param = new List<PXSPParameter>();
                PXSPParameter p1 = new PXSPInParameter("@CompanyID", PXDbType.Int, PX.Data.Update.PXInstanceHelper.CurrentCompany);
                PXSPParameter p2 = new PXSPInParameter("@CustomerID", PXDbType.Int, ar.CustomerID);
                PXSPParameter p3 = new PXSPInParameter("@CustomerContactID ", PXDbType.Int, ar.CustomerContactID);
                PXSPParameter p4 = new PXSPInParameter("@BillContactID ", PXDbType.Int, doc.BillContactID);
                param.Add(p1);
                param.Add(p2);
                param.Add(p3);
                param.Add(p4);
                var proc = PXDatabase.Execute("XSPUpadeEmailVacio", param.ToArray());
            }

            using (var ts = new PXTransactionScope())
            {

                Base.Activity.SendNotification(ARNotificationSource.Customer, notificationCD, doc.BranchID, parameters);
                Base.Save.Press();
                ts.Complete();
            }

            List<Guid> _attachments = new List<Guid>();
            foreach (NoteDoc noteDoc in PXSelect<NoteDoc, Where<NoteDoc.noteID, Equal<Required<NoteDoc.noteID>>>>.Select(Base, doc.NoteID))
            {
                _attachments.Add((Guid)noteDoc.FileID); 
            }

            foreach (CRActivity item in PXSelect<CRActivity, Where<CRActivity.refNoteID, In<Required<CRActivity.refNoteID>>>>.Select(Base, doc.NoteID))
            {
                if (item != null)
                {
                    foreach (Guid item2 in _attachments)
                    {
                        var pars = new List<PXSPParameter>();
                        PXSPParameter p1 = new PXSPInParameter("@CompanyID", PXDbType.Int, PX.Data.Update.PXInstanceHelper.CurrentCompany);
                        PXSPParameter p2 = new PXSPInParameter("@FileID", PXDbType.UniqueIdentifier, item2);
                        PXSPParameter p3 = new PXSPInParameter("@NoteID", PXDbType.UniqueIdentifier, item.NoteID);
                        pars.Add(p1);
                        pars.Add(p2);
                        pars.Add(p3);
                        var proc = PXDatabase.Execute("XSPInsertarNoteDoc", pars.ToArray());
                    }

                    var par = new List<PXSPParameter>();
                    PXSPParameter p01 = new PXSPInParameter("@CompanyID", PXDbType.Int, PX.Data.Update.PXInstanceHelper.CurrentCompany);
                    PXSPParameter p02 = new PXSPInParameter("@NoteID", PXDbType.UniqueIdentifier, item.NoteID);
                    par.Add(p01);
                    par.Add(p02);
                    var proce = PXDatabase.Execute("XSPModificarEmail", par.ToArray());
                }
            }  
            yield return doc;
        }

    }

public virtual void cargarXML()
    {
        if (Base.Document.AskExt() == WebDialogResult.OK)
        {
        PX.SM.FileInfo fileInfo = PX.Common.PXContext.SessionTyped<PXSessionStatePXData>().FileInfo["CargaSessionKey"]; 
        string result = System.Text.Encoding.UTF8.GetString(fileInfo.BinData); 

            ARInvoice ari = Base.Document.Current;
            xtFECodHashEntry graph2 = PXGraph.CreateInstance<xtFECodHashEntry>();
            var pchExt = ari.GetExtension<ARRegisterExt>();

            string Valor = "";
            XmlDocument xm = new XmlDocument();

            xm.LoadXml(result);

            XmlNodeList elemList = xm.GetElementsByTagName("ds:DigestValue");
            for (int i = 0; i < elemList.Count; i++)
            {
                Valor = (elemList[i].InnerXml);
                break;
            }

            PXLongOperation.StartOperation(Base, delegate ()
            {
                xtFECodHash dac = new xtFECodHash();

                dac.RefNbr = ari.RefNbr;
                dac.DocType = ari.DocType;
                dac.Nrocomprobante = ari.InvoiceNbr;
                dac.Hash = Valor;
                dac.Tipo = pchExt.UsrTDocSunat;
                graph2.xtFECodHashs.Insert(dac);
                graph2.Actions.PressSave();
                //Base.Document.Cache.Persist(PXDBOperation.Insert);
            });

            //Base.Actions.PressSave();
            //}
        }
    }
4

1 回答 1

1

我会先检查您的 SmartPanel 按钮。以下是触发操作并关闭的“更新”按钮的示例:

<px:PXButton ID="btnOKGasCost" runat="server" DialogResult="OK" Text="Update">
    <AutoCallBack Target="formUpdateGasCost" Command="Save" />
</px:PXButton>

目标表单是其中包含的 FormView formUpdateGasCost。

智能面板具有定义的标签,用于在字段更改时启用回调,绑定到它的主过滤器/DAC对象,以及调用AcceptButtonID

<px:PXSmartPanel ID="pnlUpdateGasCost" runat="server" Caption="Update Gas Cost"
    CaptionVisible="true" DesignView="Hidden" LoadOnDemand="true" Key="UpdateGasCostFilter" CreateOnDemand="false" AutoCallBack-Enabled="true"
    AutoCallBack-Target="formUpdateGasCost" AutoCallBack-Command="Refresh" CallBackMode-CommitChanges="True" CallBackMode-PostData="Page"
    AcceptButtonID="btnOKGasCost">

我看到您在函数上使用了 AskExt 方法。如果上述更改不起作用,我会尝试将绑定的 DAC 移动到过滤器,并从过滤器中调用 AskExt。例如,我的设置为:

public PXFilter<UpdateGasCostFilter> UpdateGasCostFilter;

public PXAction<CYGas> UpdateGasCost;
[PXUIField(DisplayName = "Update Gas Cost", MapEnableRights = PXCacheRights.Select, MapViewRights = PXCacheRights.Select)]
[PXButton]
public virtual IEnumerable updateGasCost(PXAdapter adapter)
{
    var Result = UpdateGasCostFilter.AskExt(true);
    if(Result == WebDialogResult.OK)
    {
       // perform the update actions
    }
    return adapter.Get();
}

我希望这有帮助。

于 2019-08-02T21:49:11.350 回答