Для передачи значения параметра в отчет необходимо использовать имя параметра. В вашем примере это просто «ContactID», так что вы можете установить его следующим образом ...
parameters["ContactID"] = contact.ContactID.ToString();
Если вам нужно использовать непараметрические поля DAC.Field, я думаю, вам нужно добавить их в поля просмотра в вашем отчете. Тогда вы можете использовать его, как у вас (parameters["MyDac.MyFieldName"] = "somevalue"
).
Мне пришлось недавно добавить поля просмотра, чтобы вызвать отчет по непараметрическим полям. Это единственный способ заставить это работать. В противном случае параметры просто требуют вызова по имени параметра.
Вот пример из Vendor Maintenance, вызывающий отчет поставщика, в котором отчет имеет параметр с именем «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;