Передача параметров из пользовательского меню в отчеты - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь создать меню, очень похожее на меню «Отчеты» в форме «Счета / Заметки» в форме «Контакт».

Я успешно добавил кнопку меню и заполнил ее одним элементом (через «Шаги автоматизации»), чтобы меню появилось вместе с моим пунктом меню и успешно запустило мой отчет.

Мой отчет имеет параметр 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.

Я попал туда, где нахожусь, свободно интерпретируя пост здесь .

Может ли кто-нибудь мне помочь? Буду признателен за это!

1 Ответ

0 голосов
/ 27 июня 2018

Для передачи значения параметра в отчет необходимо использовать имя параметра. В вашем примере это просто «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;
...