Acumatica-需要通过自定义操作更新项目报价屏幕PM304500中的活动的帮助吗
我在网格视图的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,但我不确定。任何帮助都将不胜感激。以下是代码:Acumatica-需要通过自定义操作更新项目报价屏幕PM304500中的活动的帮助吗,acumatica,Acumatica,我在网格视图的Quotes选项卡中的屏幕CR304000-OpportunityMaint上有一个自定义操作,它将CRQuote DAC中名为IsPrimary的字段标记为Quotes视图中当前记录的true。这些项目报价与当前opportunity以及PMQuoteMain BLC中的相关PMQoute相关联。pmquoteMain BLC有一个名为activities的视图,其中包含与PMQuote关联的所有活动。我在CRActivity中创建了一个名为IsPrimary的自定义字段,并将其
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(适配器);
}