Acumatica 访问联接表数据

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

这是修改后的代码和我得到的错误。使用debug,我已确认它发生在:

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

如果我将其分配给另一个不同类型的变量“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特征有关。

查看使用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()上。请参阅原始帖子中上面修改的代码。