Cloud 如何在流程销售订单中确定流程是否完成

Cloud 如何在流程销售订单中确定流程是否完成,cloud,erp,acumatica,Cloud,Erp,Acumatica,我在分发模块(SO303000)中为发票创建扩展。我需要创建付款时自动释放它基于当前发票。通过使用下面的代码,我成功地使用了单发票 public PXAction<ARInvoice> release; [PXUIField(DisplayName = "Release", Visible = false)] [PXButton()] public IEnumerable Release(PXAdapter adapter) {

我在分发模块(SO303000)中为发票创建扩展。我需要创建付款时自动释放它基于当前发票。通过使用下面的代码,我成功地使用了单发票

    public PXAction<ARInvoice> release;
    [PXUIField(DisplayName = "Release", Visible = false)]
    [PXButton()]
    public IEnumerable Release(PXAdapter adapter)
    {
        Base.Release(adapter);
        PXLongOperation.WaitCompletion(Base.UID);
        ARPaymentEntry arPaymentEntry = PXGraph.CreateInstance<ARPaymentEntry>();
        ARPayment payment = arPaymentEntry.Document.Insert();
        payment.CustomerID = Base.Document.Current.CustomerID;
        payment.CustomerLocationID = Base.Document.Current.CustomerLocationID;
        payment.PaymentMethodID = "TM";
        Branch branch = PXSelect<Branch>.Select(new PXGraph());
        CashAccount ca =
            PXSelect<CashAccount, Where<CashAccount.branchID, Equal<Required<CashAccount.branchID>>>>
                .Select
                (new PXGraph(),
                    branch.BranchID).FirstTableItems.FirstOrDefault();
        if (ca != null)
        {
            payment.CashAccountID = ca.CashAccountID;
        }
        else
        {
            throw new PXException("Cannot find the Cash Account.");
        }
        payment.ExtRefNbr = "Auto";
        payment.Hold = false;
        payment.CuryOrigDocAmt = Base.Document.Current.CuryLineTotal;
        arPaymentEntry.Document.Current = payment;
        arPaymentEntry.Document.Cache.Update(arPaymentEntry.Document.Current);

        ARAdjust arAdjust = new ARAdjust();
        arAdjust.AdjdRefNbr = Base.Document.Current.RefNbr;
        arAdjust.AdjgRefNbr = arPaymentEntry.Document.Current.RefNbr;
        arAdjust.AdjgDocType = arPaymentEntry.Document.Current.DocType;
        arAdjust.AdjdDocType = Base.Document.Current.DocType;
        arAdjust.CustomerID = Base.Document.Current.CustomerID;
        arAdjust.AdjdBranchID = branch.BranchID;
        arAdjust.AdjgBranchID = branch.BranchID;
        arAdjust.AdjdDocDate = Base.Document.Current.DocDate;
        arAdjust.AdjdFinPeriodID = Base.Document.Current.FinPeriodID;
        arAdjust.Released = false;
        arAdjust.Voided = false;
        arPaymentEntry.Adjustments.Insert(arAdjust);
        ARAdjust arAdjusted = (ARAdjust) arPaymentEntry.Adjustments.Update(arAdjust);
        arPaymentEntry.Adjustments.Current = arAdjusted;
        var arAdapter =
            new PXAdapter(new DummyView(arPaymentEntry, arPaymentEntry.Document.View.BqlSelect,
                new List<object> {arPaymentEntry.Document.Current}))
            {

            };
        arPaymentEntry.Save.Press();

        arPaymentEntry.Release(arAdapter);
    }
公共行动发布;
[PXUIField(DisplayName=“Release”,Visible=false)]
[PXButton()]
公共IEnumerable发行版(PXAdapter)
{
底座。释放(适配器);
PXLongOperation.WaitCompletion(Base.UID);
ARPaymentEntry ARPaymentEntry=PXGraph.CreateInstance();
ARPayment payment=arpaymentry.Document.Insert();
payment.CustomerID=Base.Document.Current.CustomerID;
payment.CustomerLocationID=Base.Document.Current.CustomerLocationID;
payment.PaymentMethodID=“TM”;
Branch Branch=PXSelect.Select(新建PXGraph());
现金帐户=
PXSelect
.选择
(新的PXGraph(),
branch.BranchID).FirstTableItems.FirstOrDefault();
如果(ca!=null)
{
payment.CashAccountID=ca.CashAccountID;
}
其他的
{
抛出新的PXException(“找不到现金帐户”);
}
payment.ExtRefNbr=“自动”;
payment.Hold=false;
payment.CuryOrigDocAmt=Base.Document.Current.CuryLineTotal;
arpaymentry.Document.Current=付款;
arpaymentry.Document.Cache.Update(arPaymentEntry.Document.Current);
ARAdjust ARAdjust=新的ARAdjust();
arAdjust.AdjdRefNbr=Base.Document.Current.RefNbr;
arAdjust.AdjgRefNbr=arpaymentry.Document.Current.RefNbr;
arAdjust.AdjgDocType=arpaymentry.Document.Current.DocType;
arAdjust.AdjdDocType=Base.Document.Current.DocType;
arAdjust.CustomerID=Base.Document.Current.CustomerID;
arAdjust.AdjdBranchID=branch.BranchID;
arAdjust.AdjgBranchID=branch.BranchID;
arAdjust.AdjdDocDate=Base.Document.Current.DocDate;
arAdjust.AdjdFinPeriodID=Base.Document.Current.FinPeriodID;
arAdjust.Released=false;
arAdjust.void=false;
arpaymentry.adjusts.Insert(arAdjust);
ARAdjust arAdjusted=(ARAdjust)arpaymentry.adjusts.Update(ARAdjust);
arpaymentry.adjusts.Current=a已调整;
变幅自适应=
新的PXAdapter(新的DummyView)(arPaymentEntry,arPaymentEntry.Document.View.BqlSelect,
新列表{arpaymentry.Document.Current})
{
};
arpaymentry.Save.Press();
arpaymentry.Release(arAdapter);
}
。但过程中发票和付款屏幕(SO505000)。我必须将我的代码改成这样,因为当处理SO505000页中的进程时,它们会将列表传递到适配器中,所以我需要使用循环。我想使用PXLongOperation.WaitCompletion来确定哪个发票已发布或未发布

    public PXAction<ARInvoice> release;
    [PXUIField(DisplayName = "Release", Visible = false)]
    [PXButton()]
    public IEnumerable Release(PXAdapter adapter)
    {
        var list = Base.Release(adapter);
        var invList = adapter.Get<ARInvoice>();
        foreach (var inv in invList)
        {
            ARPaymentEntry arPaymentEntry = PXGraph.CreateInstance<ARPaymentEntry>();
            ARPayment payment = arPaymentEntry.Document.Insert();


            payment.CustomerID = inv.CustomerID;
            payment.CustomerLocationID = inv.CustomerLocationID;
            payment.PaymentMethodID = "TM";
            Branch branch = PXSelect<Branch>.Select(new PXGraph());
            CashAccount ca =
                PXSelect
                    <CashAccount, Where<CashAccount.branchID, Equal<Required<CashAccount.branchID>>>>
                    .Select
                    (new PXGraph(),
                        branch.BranchID).FirstTableItems.FirstOrDefault();
            if (ca != null)
            {
                payment.CashAccountID = ca.CashAccountID;
            }
            else
            {
                throw new PXException("Cannot find the Cash Account.");
            }
            payment.ExtRefNbr = "Auto";
            payment.Hold = false;
            payment.CuryOrigDocAmt = inv.CuryLineTotal;
            arPaymentEntry.Document.Current = payment;
                   arPaymentEntry.Document.Cache.Update(arPaymentEntry.Document.Current);

            //arPaymentEntry.Save.Press();
            ARAdjust arAdjust = new ARAdjust();
            arAdjust.AdjdRefNbr = inv.RefNbr;
            arAdjust.AdjgRefNbr = inv.RefNbr;
            arAdjust.AdjgDocType = inv.DocType;
            arAdjust.AdjdDocType = inv.DocType;
            arAdjust.CustomerID = inv.CustomerID;
            arAdjust.AdjdBranchID = branch.BranchID;
            arAdjust.AdjgBranchID = branch.BranchID;
            arAdjust.AdjdDocDate = inv.DocDate;
            arAdjust.AdjdFinPeriodID = inv.FinPeriodID;
            arAdjust.Released = false;
            arAdjust.Voided = false;
            arPaymentEntry.Adjustments.Insert(arAdjust);
            ARAdjust arAdjusted = (ARAdjust) arPaymentEntry.Adjustments.Update(arAdjust);
            arPaymentEntry.Adjustments.Current = arAdjusted;
            var arAdapter =
                new PXAdapter(new DummyView(arPaymentEntry, arPaymentEntry.Document.View.BqlSelect,
                    new List<object> {arPaymentEntry.Document.Current}))
                {

                };
            arPaymentEntry.Save.Press();

            arPaymentEntry.Release(arAdapter);
        }
    }
公共行动发布;
[PXUIField(DisplayName=“Release”,Visible=false)]
[PXButton()]
公共IEnumerable发行版(PXAdapter)
{
变量列表=基本释放(适配器);
var invList=adapter.Get();
foreach(invList中的var inv)
{
ARPaymentEntry ARPaymentEntry=PXGraph.CreateInstance();
ARPayment payment=arpaymentry.Document.Insert();
payment.CustomerID=inv.CustomerID;
payment.CustomerLocationID=inv.CustomerLocationID;
payment.PaymentMethodID=“TM”;
Branch Branch=PXSelect.Select(新建PXGraph());
现金帐户=
PXSelect
.选择
(新的PXGraph(),
branch.BranchID).FirstTableItems.FirstOrDefault();
如果(ca!=null)
{
payment.CashAccountID=ca.CashAccountID;
}
其他的
{
抛出新的PXException(“找不到现金帐户”);
}
payment.ExtRefNbr=“自动”;
payment.Hold=false;
payment.CuryOrigDocAmt=inv.CuryLineTotal;
arpaymentry.Document.Current=付款;
arpaymentry.Document.Cache.Update(arPaymentEntry.Document.Current);
//arpaymentry.Save.Press();
ARAdjust ARAdjust=新的ARAdjust();
arAdjust.AdjdRefNbr=inv.RefNbr;
arAdjust.AdjgRefNbr=inv.RefNbr;
arAdjust.AdjgDocType=inv.DocType;
arAdjust.AdjdDocType=inv.DocType;
arAdjust.CustomerID=inv.CustomerID;
arAdjust.AdjdBranchID=branch.BranchID;
arAdjust.AdjgBranchID=branch.BranchID;
arAdjust.AdjdDocDate=inv.DocDate;
arAdjust.AdjdFinPeriodID=inv.FinPeriodID;
arAdjust.Released=false;
arAdjust.void=false;
arpaymentry.adjusts.Insert(arAdjust);
ARAdjust arAdjusted=(ARAdjust)arpaymentry.adjusts.Update(ARAdjust);
arpaymentry.adjusts.Current=a已调整;
变幅自适应=
新的PXAdapter(新的DummyView)(arPaymentEntry,arPaymentEntry.Document.View.BqlSelect,
新列表{arpaymentry.Document.Current})
{
};
arpaymentry.Save.Press();
arpaymentry.Release(arAdapter);
}
}
谢谢你的支持。

西蒙, 您可以在foreach循环中检查Released标志


foreach(invList中的var inv)
{
如果(库存已发布==真)
{
//您的自定义代码在这里
}
}

西蒙, 您可以在foreach循环中检查Released标志


foreach(invList中的var inv)
{
如果(库存已发布==真)
{
//您的自定义代码在这里
}
}

     public IEnumerable Release(PXAdapter adapter)
    {
       var refNbrList = new Dictionary<string, string>();
       var invList = adapter.Get<ARInvoice>();
        foreach (var inv in invList)
        {
                PXDatabase.Execute("pp_DMS_SO_Invoice_InsertSettleDate",
               new PXSPInParameter("@CompanyID", PXContext.GetSlot<int?>("singleCompanyID")),
               new PXSPInParameter("@InvoiceType", inv.DocType),
               new PXSPInParameter("@InvoiceNBR", inv.RefNbr));
                ARInvoiceEntry invoiceEntry = PXGraph.CreateInstance<ARInvoiceEntry>();
                invoiceEntry.Document.Current = inv;
                invoiceEntry.Document.Cache.Update(invoiceEntry.Document.Current);
                var arInvoiceAdapter =
                               new PXAdapter(new DummyView(invoiceEntry, invoiceEntry.Document.View.BqlSelect,
                                   new List<object> { invoiceEntry.Document.Current }))
                               { };
                invoiceEntry.Release(arInvoiceAdapter);
                PXLongOperation.WaitCompletion(invoiceEntry.UID);
                // create payment here
         }
     }