将参数从自定义菜单传递到报告

时间:2018-06-27 17:07:27

标签: c# acumatica

我正在尝试创建一个与“联系人”表单上的“发票/备忘录”表单上的“报告”菜单非常相似的菜单。

我已经成功添加了菜单按钮,并在其中添加了一项(通过“自动化步骤”),以便该菜单与我的菜单项一起显示并成功启动了我的报告。

我的报告有一个ContactID参数,如图所示:

image1

我有一个使用以下代码创建的自定义项:

namespace PX.Objects.CR
{
    public class ContactMaint_Extension : PXGraphExtension<ContactMaint>
    {
        public PXAction<Contact> letters;
        [PXUIField(DisplayName = "Letters", MapEnableRights = PXCacheRights.Select)]
        [PXButton(SpecialType = PXSpecialButtonType.Report)]
        protected virtual IEnumerable Letters(PXAdapter adapter, string reportID)
        {
            PXReportRequiredException ex = null;

            Contact contact = Base.Caches[typeof(Contact)].Current as Contact;

            var parameters = new Dictionary<string, string>();     

            parameters["Contact.ContactID"] = contact.ContactID.ToString();

            ex = PXReportRequiredException.CombineReport(ex, reportID, parameters);

            //this.Save.Press();
            if (ex != null) throw ex;

            return adapter.Get();
        }
    }
}

但是,结果报告似乎没有传递Contact.ContactID参数。

通过松散地解释帖子here,我已经到了我的位置。

有人可以帮我吗?我将不胜感激!

1 个答案:

答案 0 :(得分:1)

要将参数值传递给报表,您需要使用参数名称。在您的示例中,它只是“ ContactID”,因此您可以像这样设置它...

parameters["ContactID"] = contact.ContactID.ToString();

如果需要使用DAC.Field的非参数字段,我认为您需要将它们添加到报表的“查看器字段”中。然后,您可以像使用它一样使用它(parameters["MyDac.MyFieldName"] = "somevalue")。

我最近必须添加查看器字段,才能通过非参数字段调用报告。这是我可以使它起作用的唯一方法。否则,参数仅需要按参数名称进行调用。

以下是供应商维护部门调用供应商报告的示例,其中该报告具有名为“ VendorID”的参数:

Dictionary<string, string> parameters = new Dictionary<string, string>();
parameters["VendorID"] = vendor.AcctCD;
throw new PXReportRequiredException(parameters, "AP632500", AP.Messages.BalanceByVendor);

我最近用来调用不使用参数(使用查看器字段)的报告的示例是装运确认报告。它调用多个货件,这就是为什么单个参数不起作用的原因。它使用PXReportRequiredException.CombineReport调用将多个货件追加到单个报告调用/异常中。样本:

//SOShipementEntry.Report(PXAdapter,string)
PXReportRequiredException ex = null;
// Loop on shipments
// ...
parameters["SOShipment.ShipmentNbr"] = order.ShipmentNbr;
// ...
ex = PXReportRequiredException.CombineReport(ex, actualReportID, parameters);
// ...
// End shipments loop
if (ex != null) throw ex;