【发布时间】:2018-04-19 13:25:08
【问题描述】:
我认为我之前列出的一个问题运行良好,直到我注意到我需要的是 InventoryCD 而不是 InventoryID。在 KitAssembly 屏幕 (IN307000) 或 DAC 上找不到inventoryCD。因此,我创建了一个名为 UsrInventoryCD 的新 Usr 字段,并在填充 KitAssemblyID 字段时提取相同的 InventoryCD。这工作正常。接下来,我想获取此字段并将值从按钮传递到报告参数中。这是我目前所拥有的:
protected void INKitRegister_UsrInventoryCD_FieldSelecting(PXCache cache, PXFieldSelectingEventArgs e)
{
var item = (INKitRegister)e.Row;
if (item == null) return;
var invitem = (InventoryItem)PXSelect<InventoryItem,
Where<InventoryItem.inventoryID, Equal<Current<INKitRegister.kitInventoryID>>>>.Select(Base, item.InventoryID);
if (invitem != null)
{
e.ReturnValue = invitem.InventoryCD;
}
}
public class KitAssemblyEntry_Extension:PXGraphExtension<KitAssemblyEntry>
{
public override void Initialize()
{
Report.AddMenuAction(Report1);
Report.AddMenuAction(Report2);
Report.AddMenuAction(Report3);
Report.AddMenuAction(Report5);
Report.AddMenuAction(Report6);
Report.MenuAutoOpen = true;
}
#region Event Handlers
public PXAction<INKitRegister> Report;
[PXButton]
[PXUIField(DisplayName = "Go To", MapEnableRights = PXCacheRights.Select)]
protected void report()
{ }
public PXAction<INKitRegister> Report1;
[PXUIField(DisplayName = "Report1", MapEnableRights = PXCacheRights.Select)]
[PXLookupButton]
public virtual IEnumerable report1(PXAdapter adapter)
{
INKitRegister item = Base.Document.Current;
var style = item.GetExtension<INKitRegisterExt>().UsrInventoryCD;
INKitRegister doc = Base.Document.Current;
if (doc != null)
{
Dictionary<string, string> parameters = new Dictionary<string, string>();
parameters["ItemNumber"] = style.ToString();
throw new PXReportRequiredException(parameters, "IN610002", "Report1");
}
return adapter.Get();
}
public PXAction<INKitRegister> Report2;
[PXUIField(DisplayName = "Report2", MapEnableRights = PXCacheRights.Select)]
[PXLookupButton]
public virtual IEnumerable report2(PXAdapter adapter)
{
INKitRegister item = Base.Document.Current;
var style = item.GetExtension<INKitRegisterExt>().UsrInventoryCD;
INKitRegister doc = Base.Document.Current;
if (doc != null)
{
Dictionary<string, string> parameters = new Dictionary<string, string>();
parameters["ItemNumber"] = style.ToString();
throw new PXReportRequiredException(parameters, "IN610003", "Report2");
}
return adapter.Get();
}
public PXAction<INKitRegister> Report3;
[PXUIField(DisplayName = "Report3", MapEnableRights = PXCacheRights.Select)]
[PXLookupButton]
public virtual IEnumerable report3(PXAdapter adapter)
{
INKitRegister item = Base.Document.Current;
var style = item.GetExtension<INKitRegisterExt>().UsrInventoryCD;
INKitRegister doc = Base.Document.Current;
if (doc != null)
{
Dictionary<string, string> parameters = new Dictionary<string, string>();
parameters["ItemNumber"] = style.ToString();
throw new PXReportRequiredException(parameters, "IN610001", "Report3");
}
return adapter.Get();
}
public PXAction<INKitRegister> Report4;
[PXUIField(DisplayName = "Report4", MapEnableRights = PXCacheRights.Select)]
[PXLookupButton]
public virtual IEnumerable report4(PXAdapter adapter)
{
INKitRegister item = Base.Document.Current;
var style = item.GetExtension<INKitRegisterExt>().UsrInventoryCD;
INKitRegister doc = Base.Document.Current;
if (doc != null)
{
Dictionary<string, string> parameters = new Dictionary<string, string>();
parameters["ItemNumber"] = style.ToString();
throw new PXReportRequiredException(parameters, "IN610005", "Report4");
}
return adapter.Get();
}
public PXAction<INKitRegister> Report5;
[PXUIField(DisplayName = "Report5", MapEnableRights = PXCacheRights.Select)]
[PXLookupButton]
public virtual IEnumerable report5(PXAdapter adapter)
{
INKitRegister item = Base.Document.Current;
var style = item.GetExtension<INKitRegisterExt>().UsrInventoryCD;
INKitRegister doc = Base.Document.Current;
if (doc != null)
{
Dictionary<string, string> parameters = new Dictionary<string, string>();
parameters["ItemNumber"] = style.ToString();
throw new PXReportRequiredException(parameters, "IN610006", "Report5");
}
return adapter.Get();
}
#endregion
}
它编译得很好,但是当我尝试单击已添加到屏幕上的报告按钮之一时出现此错误。
An unhandled exception has occurred in the function 'MoveNext'. Please see the trace log for more details.
这是跟踪日志:
An unhandled exception has occurred in the function 'MoveNext'. Please see the trace log for more details.
System.NullReferenceException: Object reference not set to an instance of an object.
at PX.Objects.IN.KitAssemblyEntry_Extension.report1(PXAdapter adapter)
at PX.Data.PXAction`1.a(PXAdapter A_0)
at PX.Data.PXAction`1.d__31.MoveNext()
at PX.Data.PXAction`1.d__31.MoveNext()
at PX.Data.PXAction`1.d__31.MoveNext()
at PX.Data.PXAction`1.d__31.MoveNext()
at PX.Web.UI.PXBaseDataSource.tryExecutePendingCommand(String viewName, String[] sortcolumns, Boolean[] descendings, Object[] searches, Object[] parameters, PXFilterRow[] filters, DataSourceSelectArguments arguments, Boolean& closeWindowRequired, Int32& adapterStartRow, Int32& adapterTotalRows)
at PX.Web.UI.PXBaseDataSource.ExecuteSelect(String viewName, DataSourceSelectArguments arguments, PXDSSelectArguments pxarguments)
这是我问过的上一个问题是否与任何可能有用的信息有关:Acumatica - Add Reports dropdown to Kit Assembly Screen
【问题讨论】:
-
我已经更改了上面的代码以适应我在一些文档中找到的更好的 DAC 扩展拉取。但是我仍然遇到同样的错误,我不知道我错过了什么,我知道这通常发生在它想要返回 null 或找不到它时。这不是从数据库本身中提取的,我的意思是如果保存被击中,它可以是,但它没有任何区别。无论哪种方式,我仍然会遇到相同的错误。