Acumatica-需要对象引用或非静态字段、方法或属性

Acumatica-需要对象引用或非静态字段、方法或属性,acumatica,Acumatica,嗨,有人遇到这个错误吗?每次我在foreach循环中使用PXSelect时,在另一个源代码上使用PXSelect,但在我的代码上不使用PXSelect,有人能找出原因吗?下面的代码也是Acumatica的原始源代码,但我只是将Datamember从PaymentCharges更改为OtherCharges [PXOverride] public void VoidCheckProc(ARPayment doc) { foreach (PXResult<

嗨,有人遇到这个错误吗?每次我在foreach循环中使用PXSelect时,在另一个源代码上使用PXSelect,但在我的代码上不使用PXSelect,有人能找出原因吗?下面的代码也是Acumatica的原始源代码,但我只是将Datamember从PaymentCharges更改为OtherCharges

    [PXOverride]
    public void VoidCheckProc(ARPayment doc)
    {
        foreach (PXResult<ARPaymentChargeTran> paycharge in PXSelect<ARPaymentChargeTran, Where<ARPaymentChargeTran.docType, Equal<Required<ARPayment.docType>>, And<ARPaymentChargeTran.refNbr, Equal<Required<ARPayment.refNbr>>>>>.
            Select(this, doc.DocType, doc.RefNbr))
        {
            ARPaymentChargeTran charge = PXCache<ARPaymentChargeTran>.CreateCopy((ARPaymentChargeTran)paycharge);
            charge.DocType = Document.Current.DocType;
            charge.CuryTranAmt = -1 * charge.CuryTranAmt;
            charge.Released = false;
            charge.CuryInfoID = Document.Current.CuryInfoID;
            charge.CashTranID = null;
            //PaymentCharges.Insert(charge);
            OtherCharges.Insert(charge);
        }
    }
[PXOverride]
公共作废作废检查程序(ARPayment doc)
{
foreach(PXResult)在PXSelect中支付费用。
选择(此,doc.DocType,doc.RefNbr))
{
ARPaymentChargeTran charge=PXCache.CreateCopy((ARPaymentChargeTran)paycharge);
charge.DocType=Document.Current.DocType;
charge.CuryTranAmt=-1*charge.CuryTranAmt;
指控。释放=虚假;
charge.CuryInfoID=Document.Current.CuryInfoID;
charge.CashTranID=null;
//付款费用。插入(费用);
其他费用。插入(费用);
}
}

正如错误消息所说,
Select
方法是非静态的,但是您可以在
PXSelect
-类型上调用它。您需要具有该类型的实例


根据Hybridzz的回答,我假设您使用了错误的
Select
-方法重载。您的参数可能没有正确的类型,因此编译器会选择最适合的方法重载。在这种情况下,它选择仅接受参数
params object[]o
,该参数是非静态的。对您使用的API的设计有点误导。

我相信,您是在为基本BLC编写扩展时编写此方法的


因此,不要使用“this”,而是使用“this.Base

您的“this”可能是一个静态类。请将(相关)代码添加为文本而不是图像,一些用户由于工作场所策略等原因无法查看图像。也包括为什么你的研究到目前为止没有解决你的问题yet@KarmaEDV,它是一个对象方法,因此
这个
是可以的。@PatrikEckebrecht是的,但我们看不到包含的类是否是静态的image@KarmaEDV,那没关系<代码>此
在非静态类中不会被概括为错误。无论如何,这里的问题是
Select
是在
PXSelect
-类型上调用的,而不是它的实例。该类必须是非静态的,因为编译器将该方法概括为实例成员是错误的。谢谢!我从未想过,您也可以调用该命令的Base blc..Select()方法,该方法需要PXGraph的实例作为第一个参数,当您编写扩展时,它不是从PXGraph继承的,而是从PXGraphExtension继承的,因此这里您可以使用this.Base,它是Base graph的实例作为第一个参数。