Acumatica-需要通过自定义操作更新项目报价屏幕PM304500中的活动的帮助吗

Acumatica-需要通过自定义操作更新项目报价屏幕PM304500中的活动的帮助吗,acumatica,Acumatica,我在网格视图的Quotes选项卡中的屏幕CR304000-OpportunityMaint上有一个自定义操作,它将CRQuote DAC中名为IsPrimary的字段标记为Quotes视图中当前记录的true。这些项目报价与当前opportunity以及PMQuoteMain BLC中的相关PMQoute相关联。pmquoteMain BLC有一个名为activities的视图,其中包含与PMQuote关联的所有活动。我在CRActivity中创建了一个名为IsPrimary的自定义字段,并将其

我在网格视图的Quotes选项卡中的屏幕CR304000-OpportunityMaint上有一个自定义操作,它将CRQuote DAC中名为IsPrimary的字段标记为Quotes视图中当前记录的true。这些项目报价与当前opportunity以及PMQuoteMain BLC中的相关PMQoute相关联。pmquoteMain BLC有一个名为activities的视图,其中包含与PMQuote关联的所有活动。我在CRActivity中创建了一个名为IsPrimary的自定义字段,并将其添加到pmquoteMain BLC网格中的Activities视图中

我的目标是覆盖OpportunityMaint中的操作,根据OpportunityMaint中的操作切换的内容,将CraActivity中的IsPrimary字段更新为true或false。但是,PMQuoteMaint中的IsPrimary字段没有切换。我的代码尝试获取当前Quote OpportunityMain,然后创建pmQuoteMain图并设置当前记录。然后遍历Activies视图,并相应地设置IsPrimary字段。正如我所说,没有成功是因为我不确定我的代码是否成功地检索到了正确的活动

可能有更好的方法来访问与PMQuote关联的CRActivity,但我不确定。任何帮助都将不胜感激。以下是代码:


    public virtual IEnumerable PrimaryQuote(PXAdapter adapter)
        {
            foreach (CROpportunity opp in adapter.Get())
            {
                if (Quotes.Current?.IsPrimary != true)
                {
                    var selectExistingPrimary = new PXSelect<CRQuote, Where<CRQuote.quoteID, 
                    Equal<Required<CRQuote.quoteID>>>>(this);

                    CRQuote primary = selectExistingPrimary.Select(opp.DefQuoteID);
                    if (primary != null && primary.QuoteID != Quotes.Current.QuoteID && primary.Status == 
                    PM.PMQuoteStatusAttribute.Closed)
                    {
                        throw new PXException(PM.Messages.QuoteIsClosed, opp.OpportunityID, 
                        primary.QuoteNbr);
                    }


                    var quoteID = Quotes.Current.QuoteID;
                    var opportunityID = this.Opportunity.Current.OpportunityID;
                    this.Persist();
                    PXDatabase.Update<Standalone.CROpportunity>(
                    new PXDataFieldAssign<Standalone.CROpportunity.defQuoteID>(quoteID),
                    new PXDataFieldRestrict<Standalone.CROpportunity.opportunityID>(PXDbType.VarChar, 
                    255, opportunityID, PXComp.EQ)
                        );
                    this.Cancel.Press();
                    CROpportunity rec = this.Opportunity.Search<CROpportunity.opportunityID> 
                    (opportunityID);
                    yield return rec;
                }
                yield return opp;
          }


``` My OverRide


        public PXAction<CROpportunity> primaryQuote;
        [PXUIField(DisplayName = Messages.MarkAsPrimary)]
        [PXButton]
        public virtual IEnumerable PrimaryQuote(PXAdapter adapter)
        {
            // this is currently selected record in quotes grid
            var currQuoteNbr = Base.Quotes.Current.QuoteNbr;
            bool isPrimary2;
            foreach (CRQuote quote in Base.Quotes.Select())
            { 
                var quoteNbr = quote.QuoteNbr;
                if(quoteNbr.Trim() == currQuoteNbr.Trim())
                {
                    isPrimary2 = true;
                }
                else
                {
                    isPrimary2 = false;
                }
                PXTrace.WriteInformation(string.Format("Quote: {0} Value: 
                {1}",quoteNbr.ToString(),isPrimary2.ToString()));
                var PMQuoteMaintGraph = PXGraph.CreateInstance<PMQuoteMaint>();
                PMQuoteMaintGraph.Quote.Current = PMQuoteMaintGraph.Quote.Search<PMQuote.quoteNbr> 
                (quoteNbr.Trim()); // this is the current quote

                foreach (CRActivity activity in PMQuoteMaintGraph.Activities.Select())
                 {

                    CRActivityExt itemExt = PXCache<CRActivity>.GetExtension<CRActivityExt>(activity);
                    itemExt.UsrPrimary = isPrimary2;
                    PMQuoteMaintGraph.Activities.Cache.Persist(PXDBOperation.Update);
                    PXDatabase.Update<CRActivity>(new PXDataFieldAssign<CRActivityExt.usrPrimary> 
                    (isPrimary2));
                  }
              }

            return Base.primaryQuote.Press(adapter);
         }


公共虚拟IEnumerable PrimaryQuote(PXAdapter)
{
foreach(适配器中的CROpportunity opp.Get())
{
if(Quotes.Current?.IsPrimary!=true)
{
var selectExistingPrimary=新PXSelect(此);
CRQuote primary=selectExistingPrimary.Select(opp.DefQuoteID);
if(primary!=null&&primary.QuoteID!=Quotes.Current.QuoteID&&primary.Status==
PM.PMQuoteStatusAttribute.Closed)
{
抛出新的PXException(PM.Messages.QuoteIsClosed、opp.OpportunityID、,
一级.QuoteNbr);
}
var quoteID=Quotes.Current.quoteID;
var opportunityID=this.Opportunity.Current.opportunityID;
这个。Persist();
PXDatabase.Update(
新的PXDataFieldAssign(quoteID),
新的PXDataFieldRestrict(PXDbType.VarChar,
255,机会主义ID,PX公司等式)
);
这个。取消。按();
CROpportunity rec=this.Opportunity.Search
(机会主义);
收益率收益率;
}
收益率opp;
}
```我的超控
公共行动纲领;
[PXUIField(DisplayName=Messages.markaPrimary)]
[按钮]
公共虚拟IEnumerable PrimaryQuote(PXAdapter)
{
//这是当前在引号网格中选择的记录
var currQuoteNbr=Base.Quotes.Current.QuoteNbr;
bool-isPrimary2;
foreach(Base.Quotes.Select()中的CRQuote quote)
{ 
var quoteNbr=quote.quoteNbr;
如果(quoteNbr.Trim()==currQuoteNbr.Trim())
{
isPrimary2=真;
}
其他的
{
isPrimary2=假;
}
PXTrace.WriteInformation(string.Format(“引号:{0}值:
{1} “,quoteNbr.ToString(),isPrimary2.ToString());
var PMQuoteMaintGraph=PXGraph.CreateInstance();
PMQuoteMaintGraph.Quote.Current=PMQuoteMaintGraph.Quote.Search
(quoteNbr.Trim());//这是当前的引号
foreach(PMQuoteMaintGraph.Activities.Select()中的CRActivity活动)
{
CRActivityExt itemExt=PXCache.GetExtension(活动);
itemExt.UsrPrimary=isPrimary2;
PMQuoteMaintGraph.Activities.Cache.Persist(PXDBOperation.Update);
PXDatabase.Update(新的PXDataFieldAssign
(i主要2));
}
}
返回Base.primaryQuote.Press(适配器);
}