我正在尝试创建一个与“联系人”表单上的“发票/备忘录”表单上的“报告”菜单非常相似的菜单。
我已经成功添加了菜单按钮,并在其中添加了一项(通过“自动化步骤”),以便该菜单与我的菜单项一起显示并成功启动了我的报告。
我的报告有一个ContactID
参数,如图所示:
我有一个使用以下代码创建的自定义项:
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,我已经到了我的位置。
有人可以帮我吗?我将不胜感激!
答案 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;