Acumatica 如何访问操作委托上的DAC扩展

Acumatica 如何访问操作委托上的DAC扩展,acumatica,Acumatica,这也许是个愚蠢的问题,但它确实给我带来了很多痛苦。 需求是从Opportunity添加创建请求按钮。执行验证以确保从未为当前opportunity创建任何请求。我在CROpportunity DAC上添加了自定义字段UsrReqNbr,以建立机会和请求之间的关系。尝试使用以下所有方法读取扩展字段: 1. CROpportunityExt oppExt = opportunity.GetExtension<CROpportunityExt>(); 2. CROpportunityExt

这也许是个愚蠢的问题,但它确实给我带来了很多痛苦。 需求是从Opportunity添加创建请求按钮。执行验证以确保从未为当前opportunity创建任何请求。我在CROpportunity DAC上添加了自定义字段UsrReqNbr,以建立机会和请求之间的关系。尝试使用以下所有方法读取扩展字段:

1. CROpportunityExt oppExt = opportunity.GetExtension<CROpportunityExt>();
2. CROpportunityExt oppExt = Base.Opportunity.Cache.GetExtension<CROpportunityExt>(opportunity);
3. CROpportunityExt oppExt = Base.Caches[typeof(CROpportunity)].GetExtension<CROpportunityExt>(opportunity);
1。CropportUnityText-oppExt=opportunity.GetExtension();
2.CropportUnityText-oppExt=Base.Opportunity.Cache.GetExtension(Opportunity);
3.croportunityExt optext=Base.Caches[typeof(croportunity)].GetExtension(opportunity);
但是没有成功。需要关于如何阅读行动代表的DAC扩展的建议吗

代码定义如下:

public PXAction<PX.Objects.CR.CROpportunity> createRQRequest;

[PXButton(CommitChanges = true)]
[PXUIField(DisplayName = "Create Request")]
public virtual IEnumerable CreateRQRequest(PXAdapter adapter)
{
  foreach (CROpportunity opportunity in adapter.Get())
  {
    Customer customer = (Customer)PXSelect<Customer, Where<Customer.bAccountID, Equal<Current<CROpportunity.bAccountID>>>>.Select(Base, opportunity.BAccountID);
    if (customer == null)
    {
      throw new PXException("Prospect Not Customer");
    }


    CROpportunityExt oppExt = PXCache<CROpportunity>.GetExtension<CROpportunityExt>(opportunity);
    if (!string.IsNullOrEmpty(oppExt.UsrReqNbr))
    {
      throw new PXException("Yess, successfully read");
      RQRequest req = PXSelect<RQRequest,
        Where<RQRequest.orderNbr, Equal<Current<CROpportunityExt.usrReqNbr>>>>.Select(Base, oppExt.UsrReqNbr);

      if (req == null)
      {
        WebDialogResult result = Base.Opportunity.View.Ask(opportunity, PXMessages.LocalizeFormatNoPrefix("Create Request Confirmation"), PXMessages.LocalizeFormatNoPrefix("Create Request for this Opportunity?"), MessageButtons.YesNo, MessageIcon.Question);
        if (result == WebDialogResult.Yes)
        {
          oppExt.UsrReqNbr = null;
        }
      }
      else
      {
        WebDialogResult result = Base.Opportunity.View.Ask(opportunity, PXMessages.LocalizeFormatNoPrefix("Create Request Confirmation"), Messages.OrderView, MessageButtons.YesNo, MessageIcon.Question);
        if (result == WebDialogResult.Yes)
        {
          RQRequestEntry docgraph = PXGraph.CreateInstance<RQRequestEntry>();
          docgraph.Document.Current = req;
          throw new PXRedirectRequiredException(docgraph, "");
        }
        throw new PXException(Messages.OrderAlreadyCreated);
      }
    }
    else
    { 
      throw new PXException("Nooo, can't read the extensions");
    }
public PXAction createRQRequest;
[PXButton(CommitChanges=true)]
[PXUIField(DisplayName=“创建请求”)]
公共虚拟IEnumerable CreateRQRequest(PXAdapter适配器)
{
foreach(adapter.Get()中的CROpportunity opportunity)
{
Customer Customer=(Customer)PXSelect.Select(Base,opportunity.BAccountID);
如果(客户==null)
{
抛出新的PXException(“潜在客户而非客户”);
}
CropportUnityText-oppExt=PXCache.GetExtension(opportunity);
如果(!string.IsNullOrEmpty(optext.UsrReqNbr))
{
抛出新的PXException(“是,成功读取”);
RQRequest req=PXSelect.Select(Base,optext.UsrReqNbr);
if(req==null)
{
WebDialogResult=Base.Opportunity.View.Ask(Opportunity,PXMessages.LocalizeFormatNoPrefix(“创建请求确认”),PXMessages.LocalizeFormatNoPrefix(“创建此Opportunity的请求?”),MessageButtons.YesNo,MessageIcon.Question);
if(result==WebDialogResult.Yes)
{
optext.UsrReqNbr=null;
}
}
其他的
{
WebDialogResult=Base.Opportunity.View.Ask(Opportunity,PXMessages.LocalizeFormatNoPrefix(“创建请求确认”)、Messages.OrderView、MessageButtons.YesNo、MessageIcon.Question);
if(result==WebDialogResult.Yes)
{
RQRequestEntry docgraph=PXGraph.CreateInstance();
docgraph.Document.Current=req;
抛出新的PXRediredException(docgraph,“”);
}
抛出新的PXException(Messages.OrderAlreadyCreated);
}
}
其他的
{ 
抛出新的PXException(“Nooo,无法读取扩展”);
}

我在您的代码中没有发现任何错误或奇怪的地方。当请求CROpportunity DAC扩展实例时,是否会引发任何错误?或者您的代码是否总是为null而不是DAC扩展


有时我会遇到一些奇怪的事情,我想,这是因为Acumatica运行时编译和.Net运行时是如何工作的。通常,重新启动IIS有助于完全解决此类问题。请在开发人员计算机上重新启动IIS,如果问题仍然存在,请使用其他详细信息更新问题?

我总是得到空值。重新启动IIS已经并始终获得空值。我是否应该使用AddHandler来处理选定事件以使逻辑完美执行?好的,这是另一件奇怪的事情。在重新启动IIS无效后,重新启动开发服务器修复了问题。