Acumatica 访问联接表数据
这是修改后的代码和我得到的错误。使用debug,我已确认它发生在:Acumatica 访问联接表数据,acumatica,Acumatica,这是修改后的代码和我得到的错误。使用debug,我已确认它发生在: var ret = cmd.Select(); 这是完整的代码 [PXFilterable] public PXFilteredProcessing<EDASNShipProj, EDCreateASNFilter> Shipment; protected virtual IEnumerable shipment() { int ii = 0; foreach (var row in Shipm
var ret = cmd.Select();
这是完整的代码
[PXFilterable]
public PXFilteredProcessing<EDASNShipProj, EDCreateASNFilter> Shipment;
protected virtual IEnumerable shipment()
{
int ii = 0;
foreach (var row in Shipment.Cache.Cached)
{
ii++;
yield return row;
}
if (ii == 0)
{
var cmd = new PXSelectJoin<SOShipment,
LeftJoin<SOOrderShipment, On<SOShipment.shipmentNbr, Equal<SOOrderShipment.shipmentNbr>>,
LeftJoin<SOOrder, On<SOOrder.orderNbr, Equal<SOOrderShipment.orderNbr>>>>,
Where2<Where2<Where2<Where2<Where2<Where2<Where2<
Where<Current<EDCreateASNFilter.customerID>, IsNull,
Or<SOOrderExt.usrEDICustomerId, Equal<Current<EDCreateASNFilter.customerID>>>>,
And<Where<Current<EDCreateASNFilter.startDate>, IsNull,
Or<SOShipment.shipDate, GreaterEqual<Current<EDCreateASNFilter.startDate>>>>>>,
And<Where<SOShipment.shipDate, LessEqual<Current<EDCreateASNFilter.endDate>>>>>,
And<Where<Current<EDCreateASNFilter.shipVia>, IsNull,
Or<SOShipment.shipVia, Equal<Current<EDCreateASNFilter.shipVia>>>>>>,
And<Where<Current<EDCreateASNFilter.truckNbr>, IsNull,
Or<SOShipmentExt.usrTruckNbr, Equal<Current<EDCreateASNFilter.truckNbr>>>>>>,
And<Where<SOShipment.status, Equal<SOShipmentStatus.open>>>>,
And<Where<SOShipmentExt.usrEDIStatus, Equal<SOShipmentEDIStatus.truckAssigned>,
Or<SOShipmentExt.usrEDIStatus, Equal<SOShipmentEDIStatus.newStat>>>>>,
And<Where<SOOrder.customerRefNbr, IsNotNull>>>,
OrderBy<Asc<SOShipment.customerID,
Asc<SOOrderExt.usrEDICustomerId,
Asc<SOOrderExt.usrEDICustomerVendorId,
Asc<SOShipment.shipVia,
Asc<SOShipmentExt.usrTruckNbr,
Asc<SOShipment.customerLocationID>>>>>>>>(this);
cmd.View.Clear();
var ret = cmd.Select();
if (ret != null)
{
EDASNShipProj shipProj = new EDASNShipProj();
foreach (PXResult<SOShipment, SOOrderShipment, SOOrder> record in ret)
{
shipProj = new EDASNShipProj();
SOShipment shipment = (SOShipment)record;
SOShipmentExt soShipmentExt = shipment.GetExtension<SOShipmentExt>();
SOOrder soOrder = (SOOrder)record;
SOOrderExt soOrderExt = soOrder.GetExtension<SOOrderExt>();
shipProj.OrderNbr = soOrder.OrderNbr;
shipProj.CustomerRefNbr = soOrder.CustomerRefNbr;
shipProj.CustomerOrderNbr = soOrder.CustomerOrderNbr;
shipProj.UsrTruckNbr = soShipmentExt.UsrTruckNbr;
shipProj.UsrEDICustomerId = soOrderExt.UsrEDICustomerId;
shipProj.UsrEDICustomerVendorId = soOrderExt.UsrEDICustomerVendorId;
shipProj.UsrEDIStatus = soShipmentExt.UsrEDIStatus;
shipProj.CustomerID = shipment.CustomerID;
shipProj.CustomerLocationID = shipment.CustomerLocationID;
shipProj.ShipVia = shipment.ShipVia;
shipProj.ShipmentNbr = shipment.ShipmentNbr;
shipProj.ShipDate = shipment.ShipDate;
shipProj = Shipment.Insert(shipProj);
Shipment.Cache.SetStatus(shipProj, PXEntryStatus.Held);
yield return shipProj;
}
}
Shipment.Cache.IsDirty = false;
[PXFilterable]
公共PXFilteredProcessing装运;
受保护的虚拟IEnumerable装运()
{
int ii=0;
foreach(shipping.Cache.Cached中的var行)
{
ii++;
收益返回行;
}
如果(ii==0)
{
var cmd=new PXSelectJoin,
OrderBy>(本);
cmd.View.Clear();
var ret=cmd.Select();
如果(ret!=null)
{
EDASNShipProj shipProj=新的EDASNShipProj();
foreach(ret中的PXResult记录)
{
shipProj=新的EDASNShipProj();
SoShipping Shipping=(SoShipping)记录;
SOShipmentExt SOShipmentExt=shipping.GetExtension();
SOOrder SOOrder=(SOOrder)记录;
SOOrderExt SOOrderExt=soOrder.GetExtension();
shipProj.OrderNbr=soOrder.OrderNbr;
shipProj.CustomerRefNbr=soOrder.CustomerRefNbr;
shipProj.CustomerOrderNbr=soOrder.CustomerOrderNbr;
shipProj.UsrTruckNbr=soShipmentExt.UsrTruckNbr;
shipProj.UsrEDICustomerId=soOrderExt.UsrEDICustomerId;
shipProj.UsrEDICustomerVendorId=soOrderExt.UsrEDICustomerVendorId;
shipProj.usredistus=soShipmentExt.usredistus;
shipProj.CustomerID=shipping.CustomerID;
shipProj.CustomerLocationID=shipping.CustomerLocationID;
shipProj.ShipVia=shipping.ShipVia;
shipProj.ShipmentNbr=shipping.ShipmentNbr;
shipProj.ShipDate=Shipping.ShipDate;
shipProj=装运。插入(shipProj);
Shipping.Cache.SetStatus(shipProj,PXEntryStatus.Hold);
收益回报率;
}
}
shipping.Cache.IsDirty=false;
其思想是Select()返回主DAC的PXResultset。然后,您可以循环此项并强制转换到已联接的DAC
以下是一个例子:
//调用static Select()方法来执行BQL命令。
PXResultset结果=
PXSelectJoin.Select(这个);
//迭代结果集:
//PXResult应专用于所有联接表的DAC
//能够对这些DAC进行强制转换。
foreach(结果中的PXResult记录)
{
//将结果集记录强制转换到OrderDetail DAC:
OrderDetail=(OrderDetail)记录;
//将结果集记录强制转换到SalesOrder DAC:
SalesOrder=(SalesOrder)记录;
...
}
有关更多信息,请参阅本文
其思想是Select()返回主DAC的PXResultset。然后,您可以循环此项并强制转换到已连接的DAC
以下是一个例子:
//调用static Select()方法来执行BQL命令。
PXResultset结果=
PXSelectJoin.Select(这个);
//迭代结果集:
//PXResult应专用于所有联接表的DAC
//能够对这些DAC进行强制转换。
foreach(结果中的PXResult记录)
{
//将结果集记录强制转换到OrderDetail DAC:
OrderDetail=(OrderDetail)记录;
//将结果集记录强制转换到SalesOrder DAC:
SalesOrder=(SalesOrder)记录;
...
}
有关更多信息,请参阅本文
查看使用var时推断的类型: 在本例中,“a”的类型为“PXResultset
PXResult<ARSalesPerTran, ARSalesPerTranExt, ARRegister> b = a;
PXResult
但是,编译器将允许显式强制转换:
PXResult<ARSalesPerTran, ARSalesPerTranExt, ARRegister> b = (PXResult< ARSalesPerTran, ARSalesPerTranExt, ARRegister>)a;
PXResult b=(PXResult)a;
简而言之,这与C#推断类型系统(var)的工件有关,而不是与Acumatica特征有关。查看使用var时推断的类型:
在本例中,“a”的类型为“PXResultset”
如果我将其分配给另一个不同类型的变量“b”,如“PXResultset”,编译器将报告它不能隐式地将“PXResultset”强制转换为“PXResult”
PXResult<ARSalesPerTran, ARSalesPerTranExt, ARRegister> b = a;
PXResult
但是,编译器将允许显式强制转换:
PXResult<ARSalesPerTran, ARSalesPerTranExt, ARRegister> b = (PXResult< ARSalesPerTran, ARSalesPerTranExt, ARRegister>)a;
PXResult b=(PXResult)a;
简而言之,这与C#推断类型系统(var)的一个工件有关而不是Acumatica功能。好的!我想我在您的帮助下解决了这个问题。我原以为foreach循环变量将是select中的主DAC,但显式键入所有DAC似乎效果更好。谢谢。我已将代码更新为类似于此示例,但现在我遇到了一个关于我不是eve的字段的奇怪错误n使用。错误发生在实际cmd.Select()上。请参阅原始帖子中上面修改的代码。好的!我想我在您的帮助下解决了这个问题。我原以为foreach循环变量将是select中的主DAC,但显式键入所有DAC似乎效果更好。谢谢。我已将代码更新为类似于此示例,但现在我遇到了一个关于fiel的奇怪错误我甚至没有使用。错误发生在实际的cmd.Select()上。请参阅原始帖子中上面修改的代码。