Acumatica - привязка отчета на экране клиента - PullRequest
0 голосов
/ 12 июня 2018

Я создал отчет, что единственным параметром является CustomerID из таблицы SOOrder.Параметр CustomerID работает так же, как и исходный отчет истории клиента, за исключением того, что в качестве поля связывания используется SOOrder.CustomerID вместо ARPayment.CustomerID.Я создал эту настройку, чтобы добавить ссылку на отчет:

public override void Initialize()
{
    Base.report.AddMenuAction(NewCustHistory);
}

public PXAction<Customer> NewCustHistory;
[PXUIField(DisplayName = "New Customer History", MapEnableRights = PXCacheRights.Select)]
[PXButton(ImageKey = PX.Web.UI.Sprite.Main.Report)]
public virtual IEnumerable newCustHistory(PXAdapter adapter)
{

  Customer customer = Base.BAccountAccessor.Current;
    if (customer != null)
    {
    Dictionary<string, string> parameters = new Dictionary<string, string>();
    parameters["CustomerID"] = customer.AcctCD;
    throw new PXReportRequiredException(parameters, "IN642501", "New Customer History");
    }
 return adapter.Get();
}

Он прекрасно компилируется, просто когда я пытаюсь запустить отчет после выбора клиента, я получаю эти две ошибки в трассировке:

Object reference not set to an instance of an object. 

   at PX.Data.Reports.BqlSoapCommand.a(PXGraph A_0, StringBuilder A_1, List`1 A_2) 
   at PX.Data.Reports.BqlSoapCommand.Parse(PXGraph graph, List`1 pars, List`1 tables, List`1 fields, List`1 sortColumns, StringBuilder text, Selection selection) 
   at PX.Data.BqlCommand.a(PXGraph A_0, PXView A_1) 
   at PX.Data.BqlCommand.GetText(PXGraph graph, PXView view) 
   at PX.Data.PXDatabaseProviderBase.Select(PXGraph graph, BqlCommand command, Int64 topCount, PXView view, PXDataValue[] pars) 
   at PX.Data.PXDatabaseProvider.Select(PXGraph graph, BqlCommand command, Int64 topCount, PXDataValue[] pars) 
   at PX.Data.PXDatabase.Select(PXGraph graph, BqlCommand command, Int64 topCount, PXDataValue[] pars) 
   at PX.Data.Reports.SoapNavigator.b() 
   at PX.Data.Reports.SoapNavigator.c() 
   at PX.Data.Reports.SoapNavigator.Reset() 
   at PX.Reports.Data.ReportNode.ProcessItem() 
   at PX.Reports.Data.ItemNode.Process(Object dataItem) 
   at PX.Reports.Data.ItemNode.Process() 
   at PX.Reports.Data.ReportNode.Process() 
   at PX.Reports.Data.ReportProcessor.ProcessReport(Report definition) 
   at PX.Data.PXLongOperation.<>c__DisplayClass65_0`1.b__0() 
   at PX.Data.PXLongOperation.<>c__DisplayClass18_0.b__0() 

Как и этот:

Object reference not set to an instance of an object. 

   at PX.Common.Async.Process[Result](String uniqueKey, Method`1 method, Int64 waitTimeout) 
   at PX.Reports.Web.WebReport.Render(HttpResponse response, String format, Int32 pageNumber, Boolean refresh, Boolean isAttacment, String locale) 
   at PX.Reports.Web.PageOperation.PerformOperation(NameValueCollection urlQuery, HttpResponse response) 
   at PX.Reports.Web.HttpHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext context) 
   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 

Вот XML для отчета: XML отчета

Обновление 1: Я обновил код, чтобы повторить ответ, представленный ниже.Ошибка все еще сохраняется.Моя версия Acumatica - 6.10.0755.

1 Ответ

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

Используя пример отчета об истории клиента, найденный на странице клиента, вы можете увидеть, что в качестве параметра отчета для идентификатора клиента используется AcctCD

public PXAction<Customer> customerHistory;
[PXUIField(DisplayName = AR.Messages.CustomerHistory, MapEnableRights = PXCacheRights.Select, MapViewRights = PXCacheRights.Select)]
[PXButton(ImageKey = PX.Web.UI.Sprite.Main.Report)]
public virtual IEnumerable CustomerHistory(PXAdapter adapter)
{
    Customer customer = this.BAccountAccessor.Current;
    if (customer != null && customer.BAccountID > 0L)
    {
        Dictionary<string, string> parameters = new Dictionary<string, string>();
        parameters["CustomerID"] = customer.AcctCD;
        throw new PXReportRequiredException(parameters, "AR652000", AR.Messages.CustomerHistory);
    }
    return adapter.Get();
}

Убедитесь, что в вашем примере для пользовательского отчета верно следующее:

  • Имя параметра отчета для идентификатора клиента должно совпадать, поскольку оно существует в отчете.Убедитесь, что «CustomerID» является правильным значением, а не что-то вроде «Customer_ID
  • ». Подтвердите, что к отчету IN642501 можно получить доступ из карты сайта / URL-адреса без ошибок. Если он недоступен, то ваше перенаправление на отчет не будет работать.
  • Попробуйте использовать Base.BAccountAccessor.Current в качестве источника для записи Customer, как показано в примере.
...