Ошибка при построении отчета Jasper: Property 'idrkk' has no getter method
Возникает ошибка
Property
'idrkk'has no getter method in class'class DataSetApprovalOfBankDocMPNew$ReportRow'
хотя gettеr объявлен для idrkk.
В чем может быть проблема?
idrkk получаю в методе ReportRow, в отчет должен прилетать именно Object idrkk
public class DataSetApprovalOfBankDocMPNew implements ReportDS {
private static final Logger log = getLogger(DataSetApprovalOfBankDocMPNew.class);
private final CollectionsService collectionService = BeansUtils.getBean("collectionsService");
private final CrudService crud = BeansUtils.getBean("crudService");
private static final String DIALOG_PERIOD_START = "DATE_PARAM.Start";
private static final String DIALOG_PERIOD_END = "DATE_PARAM.End";
private static final String DIALOG_TYPE = "DocumentType";
private static final String DIALOG_SP = "SP_EMP";
private static final String DIALOG_GO = "FIL_GO";
private static final String IDRKK = "id";
private static final String RKKTYPE = "rkktype";
private static final String SUBJECT = "subject";
private static final String LIFECYCLE = "lifecycle";
private static final String ALLNOVISA = "allnoVisa";
private static final String ALLYESVISA = "allyesVisa";
private static final String ALLINTERM = "allinterm";
private static final String YESINTERM = "yesinterm";
private static final String SPECINTERM = "specinterm";
private static final String NOINTERM = "nointerm";
private static final String ALLEX = "allex";
private static final String YESEX = "yesex";
private static final String SPECEX = "specex";
private static final String NOEX = "noex";
private static final String DEPPARTY = "depparty";
private static final String QUERY_BEARD_UNID = "SELECT SUBSTRING(beard.cmjunid, 0, 33) AS unid\n" +
"FROM so_beard beard\n" +
"WHERE beard.id = {0}";
private static final String QUERY_BASE ="with datas_s0 as (select distinct * from (\n" +
" select\n" +
" rkkbase.id as idrkk,\n" +
" aprList.id as idlist,\n" +
" nullif(rkk.type, '') as rkktype,\n" +
" rkk.createversiondate as regdate,\n" +
" aprresult.answer as answer,\n" +
" aprList.\"begin\" as begindate,\n" +
" aprList.inprocess as status,\n" +
" sb.hierparent sp,\n" +
" rkkbase.id,\n" +
" rkkbase.subject AS subject,\n" +
"((((select string_agg(COALESCE(SO_StructureUnit.shortname, so_beard.orig_shortname) ,', ') from so_beard left join SO_StructureUnit on SO_StructureUnit.beard = so_beard.id where so_beard.id = sb.hierparent ) || ' (' ||(aprresult.participantname) || ')'))) as depparty,\n" +
"(CASE WHEN aprresult.\"time\" = '0001-01-01 00:00:00.000000' THEN NULL ELSE DATE(aprresult.\"time\") END) AS timevisa,\n" +
" av.duedate as duedate,\n" +
"case when aprListorTemp.typevisa = '3' then (av.refvisareplicaid || ':' || av.refvisadocid || '%' || tmpcurstage_comb.comb_cur_stage)\n" +
" else (av.refvisareplicaid || ':' || av.refvisadocid || '%' || opt.idx) end as unidVisa,\n" +
"case WHEN (rkk.apprIsUnder = 1 AND rkk.apprReplicaId NOT IN (SELECT replica FROM SS_Module ss_m JOIN SS_ModuleType ss_t on ss_m.type=ss_t.id WHERE ss_t.alias='ApproveIssueFixing')) THEN 'На согласовании'\n" +
"WHEN (rkk.apprIsUnder = 1 AND rkk.apprReplicaId IN (SELECT replica FROM SS_Module ss_m JOIN SS_ModuleType ss_t on ss_m.type=ss_t.id WHERE ss_t.alias='ApproveIssueFixing')) THEN 'Снятие замечаний'\n" +
"WHEN((SELECT tfs.value AS v FROM tn_field_decimal tfs JOIN tn_field ON tn_field.id = tfs.id WHERE tn_field.\"owner\" = rkk.id AND tn_field.owner_type = rkk.id_type AND tn_field.cmjfield = 'isOnRework') = 1) THEN 'На доработке'\n" +
" when rkk.appraddstatus = 'APPROVED_POSITIVE' then 'Согласовано'\n" +
" when rkk.appraddstatus = 'APPROVED_COMMENTS' then 'Согласовано с замечаниями'\n" +
" when rkk.appraddstatus = 'APPROVED_NEGATIVE' then 'Не согласовано'\n" +
" when rkk.appraddstatus = 'INTERRUPT_INIT' then 'Согласование прекращено инициатором'\n" +
" when rkk.appraddstatus = 'INTERRUPT_ADMIN' then 'Согласование прекращено администратором'\n" +
" when rkk.appraddstatus = 'INTERRUPT_EXPIRED' then 'Согласование прекращено из-за истечения максимально допустимого времени'\n" +
" when rkk.appraddstatus = 'INTERRUPT_NEGATIVE' then 'Согласование прекращено по отрицательной визе'\n" +
" when rkk.appraddstatus = 'IF_APPROVED_POSITIVE' then 'Замечания учтены'\n" +
" when rkk.appraddstatus = 'IF_APPROVED_NEGATIVE' then 'Замечания не учтены'\n" +
" when rkk.appraddstatus = 'IF_INTERRUPT_INIT' then 'Снятие замечаний прекращено инициатором'\n" +
" when rkk.appraddstatus = 'IF_INTERRUPT_ADMIN' then 'Снятие замечаний прекращено администратором'\n" +
" when rkk.appraddstatus = 'IF_INTERRUPT_EXPIRED' then 'Снятие замечаний прекращено из-за истечения максимально допустимого времени'\n" +
" when rkk.appraddstatus = 'IF_INTERRUPT_NEGATIVE' then 'Снятие замечаний прекращено по отрицательной визе'\n" +
" when EXISTS(SELECT 1 FROM MP_Memo memo WHERE memo.\"owner\" = rkk.id AND memo.signissentto = 1) then 'На подписании'\n" +
" when EXISTS(SELECT 1 FROM MP_Memo memo WHERE memo.\"owner\" = rkk.id AND memo.signisrejected = 1) then 'Отказано в подписании'\n" +
" when rkk.docstate = 'ON_SECRETARY_APPROBATION' then 'На одобрении УОБ'\n" +
" when rkk.docstate = 'ON_SECRETARY_CONFIRMATION' then 'На утверждении УОБ'\n" +
" when rkk.docstate = 'SECRETARY_APPROBATION_SUCCESS' then 'Одобрено УОБ'\n" +
" when rkk.docstate = 'SECRETARY_APPROBATION_COMMENTS' then 'Одобрено (есть комментарии)'\n" +
" when rkk.docstate = 'SECRETARY_CONFIRMATION_SUCCESS' then 'Утверждено УОБ'\n" +
" when rkk.docstate = 'SECRETARY_CONFIRMATION_COMMENTS' then 'Утверждено (есть комментарии)'\n" +
" when rkk.docstate = 'ON_SECRETARY_ADJUSTMENT' then 'Корректировка выполнена'\n" +
" when rkk.docstate = 'PROTOCOL_CREATED' then 'Создан Протокол'\n" +
" when rkk.docstate = 'REJECTED_UOB' then 'Отказано УОБ'\n" +
" when rkk.docstate = 'ON_REVISION' then 'На доработке'\n" +
" when rkk.docstate = 'ON_PUBLICATION' then 'На публикации'\n" +
" when rkk.docstate = 'ON_PUBLICATION_ACCEPTED' then 'На публикации'\n" +
" when rkk.docstate = 'SENT_TO_REGISTER' then 'На регистрации'\n" +
" when rkk.docstate = 'PUBLISHED' then 'Опубликовано'\n" +
" when rkk.docstate = 'RETURNED' then 'Возвращено'\n" +
" else 'Проект'\n" +
" end as lifecycle\n" +
" from mp_meetingspack rkk\n" +
" JOIN mp_meetingspackbase rkkbase ON rkkbase.id = rkk.id\n" +
" JOIN ss_module module ON module.id = rkkbase.module\n" +
" join ss_moduletype moduletype on moduletype.id = module.type\n" +
" join apr_list aprList on aprList.HierParent = rkk.id\n" +
" --Ответ\n" +
" join aprmeetpack_vores av on aprList.id = av.RefVisa\n" +
" join aprmeetpack_vores_reply aprresult on aprresult.\"owner\" = av.id\n" +
"--Автор\n" +
" left join apr_answer on apr_Answer.HierParent = av.refvisa AND aprresult.participant = apr_Answer.realvise\n" +
" LEFT JOIN apr_appranswer appranswer ON apr_answer.id = appranswer.id\n" +
" left join so_beard beard_answere on beard_answere.id = Apr_Answer.idauthor_answere\n" +
" left join SS_Module SS_ModuleA on SS_ModuleA.id = apr_Answer.module\n" +
" left join SS_ModuleType SS_ModuleTypeA on SS_ModuleA.type = SS_ModuleTypeA.id\n" +
" left join ( select\n" +
" aprresult.\"owner\" as aprresultOwner,\n" +
" string_agg(case when aprresult.time = '0001-01-01 00:00:00.000000' then null else '1' end, '') as aprresultisVisa\n" +
" from aprmeetpack_vores_reply aprresult\n" +
" group by aprresultOwner\n" +
" ) as aprresulttmp on aprresultOwner = av.id\n" +
" join apr_listortempl aprListorTemp on aprList.id = aprListorTemp.id\n" +
" join so_beard sbInit on sbInit.id = aprListorTemp.idauthor\n" +
" join apr_apprlist_options opt on opt.\"owner\" = aprList.id and opt.sendtosh = aprresult.participant\n" +
" join so_beard sb on sb.id = aprresult.participant\n" +
"left join lateral(with recursive recursive_data as (\n" +
"select\n" +
"so_beard.id,\n" +
"so_beard.orig_shortname,\n" +
"so_beard.hierparent,\n" +
"0 as level,\n" +
"'' as tmp\n" +
"from so_beard\n" +
"where so_beard.id = sb.id\n" +
"union all\n" +
"select\n" +
"so_beard.id,\n" +
"so_beard.orig_shortname,\n" +
"so_beard.hierparent,\n" +
"case\n" +
" when so_beard.orig_type = 1 then recursive_data.level + 2\n" +
" else recursive_data.level + 5\n" +
" end as level,\n" +
"case\n" +
" when so_structureunit.id is not null then (case when tmp = '' then so_beard.orig_shortname else so_beard.orig_shortname || '_' || tmp end)\n" +
" else ''\n" +
" end as tmp\n" +
" from recursive_data\n" +
" left join so_beard on so_beard.id = recursive_data.hierparent\n" +
" left join so_structureunit on so_structureunit.beard = so_beard.id\n" +
" left join so_department on so_structureunit.id = so_department.id\n" +
" where level < 10 and so_beard.id is not null\n" +
")\n" +
"select rd.orig_shortname as v,rd.level,rd.id as id,rd.tmp,rd.hierparent as parent\n" +
" from recursive_data rd\n" +
"order by rd.level desc\n" +
"limit 1\n" +
" ) partsp on 1 = 1\n" +
"\n" +
"left join lateral (select case when sb.orig_type in (4, 2, 0) then aprresult.participantname when partsp.v = '' OR partsp.v is null then coalesce(sb.orig_departmentname, sb.orig_shortname)\n" +
" when partsp.v='АО «Россельхозбанк»' then 'Головной офис' else partsp.v end as v) as sb_dep on 1=1\n" +
"left join lateral ( select\n" +
" group_last.idx as comb_cur_stage,\n" +
" opt_last.idx as comb_idx,\n" +
" opt_last.sendtooptions as comb_opts\n" +
" from apr_apprlist_options opt_last\n" +
" join apr_listortempl_last group_last on group_last.\"owner\" = aprList.id and opt_last.sendtosh_id = group_last.lastingroup\n" +
" where opt_last.\"owner\" = aprList.id and opt_last.idx >= opt.idx\n" +
" order by group_last.idx\n" +
" limit 1\n" +
" ) as tmpcurstage_comb on aprListorTemp.typevisa = '3'\n" +
"where rkkbase.isdeleted <> 1 and (case when aprresulttmp.aprresultisVisa is null then aprList.inprocess <> 'Stoped' else 1 = 1 end)\n" +
"AND ( ({4}) LIKE rkk.type)\n" +
"AND (sb.hierparent IN ({2}))\n" +
"and ((aprList.\"begin\")::date BETWEEN ({0}) AND ({1})) and ( SS_ModuleTypeA.alias is null OR SS_ModuleTypeA.alias = 'ApprovingDocs')\n" +
"\n" +
") s\n" +
"\n" +
"order by idrkk),\n" +
"datas_s1 as (\n" +
" SELECT idrkk, idlist\n" +
" FROM datas_s0\n" +
" order by idrkk)\n" +
"select*from datas_s0 order by datas_s0.idrkk";
@Override
public JRDataSource getJRDataSource(Connection connection, Map<String, Object> params) throws Exception {
final Date periodStart = (Date) params.get(DIALOG_PERIOD_START);
final Date periodEnd = (Date) params.get(DIALOG_PERIOD_END);
final Id sp = (Id) params.get(DIALOG_SP);
final Id go = (Id) params.get(DIALOG_GO);
final String documentType = (String) params.get(DIALOG_TYPE);
final List<Value<?>> filter = new ArrayList<>();
filter.add(new DateTimeValue(periodStart));
filter.add(new DateTimeValue(periodEnd));
filter.add(new ReferenceValue(sp));
if (go != null) {
filter.add(new ReferenceValue(go));
}
filter.add(new StringValue(documentType));
log.error("filter: {}", filter);
final List<ReportRow> result = new ArrayList<>(queryBase(filter));
return new JRBeanCollectionDataSource(result);
}
private List<ReportRow> queryBase(final List<Value<?>> filter) {
final List<ReportRow> result = new ArrayList<>();
final boolean sessionAlreadyOpen = AFSession.isDefinedOrOpened();
if (!sessionAlreadyOpen) {
AFSession.Manual.defineLocalUser();
}
IdentifiableObjectCollection collection = collectionService.findCollectionByQuery(QUERY_BASE, filter);
int allnoVisa = 0;
int allyesVisa = 0;
int allinterm = 0;
int yesinterm = 0;
int specinterm = 0;
int nointerm = 0;
int allex = 0;
int yesex = 0;
int specex = 0;
int noex = 0;
for (IdentifiableObject o : collection) {
String unidAndStage = o.getString("unidVisa");
String depparty = o.getString(DEPPARTY);
String answer = o.getString("answer");
String rkktype = o.getString(RKKTYPE);
String subject = o.getString(SUBJECT);
String lifecycle = o.getString(LIFECYCLE);
Object idrkk = o.getReference(IDRKK);
String id = "";
Id idanswer = o.getReference("id");
log.error("o.classQ: {}", o.getClass());
log.error("oQR: {}", o);
if (isBeginStage(unidAndStage)) {
id += ((RdbmsId) idanswer).getId();
AFDate dateVisa = null;
if ("".equals(answer)) {
allnoVisa++;
} else {
allyesVisa++;
}
TimelessDate timevisa = o.getTimelessDate("timevisa");
if (timevisa != null) {
dateVisa = AFDate.fromJavaDate(timevisa.toDate(), false);
}
AFDate dueDate = getDueDateForStage(unidAndStage);
if (dateVisa != null && dueDate != null && dateVisa.compareTo(dueDate) <= 0) {
allinterm++;
if ("1".equals(answer)) {
yesinterm++;
} else if ("2".equals(answer)) {
nointerm++;
} else if ("3".equals(answer)) {
specinterm++;
}
} else if (dateVisa != null && dueDate != null && dateVisa.compareTo(dueDate) > 0) {
allex++;
if ("1".equals(answer)) {
yesex++;
} else if ("2".equals(answer)) {
noex++;
} else if ("3".equals(answer)) {
specex++;
}
}
}
ReportRow reportRow = new ReportRow();
reportRow.setDepparty(depparty);
reportRow.setAllnoVisa(Integer.toString(allnoVisa));
reportRow.setAllyesVisa(Integer.toString(allyesVisa));
reportRow.setAllinterm(Integer.toString(allinterm));
reportRow.setYesinterm(Integer.toString(yesinterm));
reportRow.setSpecinterm(Integer.toString(specinterm));
reportRow.setNointerm(Integer.toString(nointerm));
reportRow.setAllex(Integer.toString(allex));
reportRow.setYesex(Integer.toString(yesex));
reportRow.setSpecex(Integer.toString(specex));
reportRow.setNoex(Integer.toString(noex));
reportRow.setIdrkk(idrkk);
reportRow.setLifecycle(lifecycle);
reportRow.setSubject(subject);
reportRow.setRkktype(rkktype);
reportRow.setId(id);
log.error("RR:{}", reportRow.getDepparty());
log.error("RR:{}", reportRow.getAllnoVisa());
log.error("RR:{}", reportRow.getAllnoVisa());
log.error("RR:{}", reportRow.getAllinterm());
log.error("RR:{}", reportRow.getYesinterm());
log.error("RR:{}", reportRow.getSpecinterm());
log.error("RR:{}", reportRow.getNointerm());
log.error("RR:{}", reportRow.getAllex());
log.error("RR:{}", reportRow.getYesex());
log.error("RR:{}", reportRow.getSpecex());
log.error("RR:{}", reportRow.getNoex());
log.error("RR:{}", reportRow.getIdrkk());
log.error("RR:{}", reportRow.getLifecycle());
log.error("RR:{}", reportRow.getSubject());
log.error("RR:{}", reportRow.getId());
result.add(reportRow);
}
if (!sessionAlreadyOpen) {
close();
}
return result;
}
private static class ReportRow {
private Object idrkk;
private String id;
private String rkktype;
private String subject;
private String lifecycle;
private String depparty;
private String allnoVisa;
private String allyesVisa;
private String allinterm;
private String yesinterm;
private String specinterm;
private String nointerm;
private String allex;
private String yesex;
private String specex;
private String noex;
public Object getIdrkk() {
return idrkk;
}
public void setIdrkk(Object idrkk) {
this.idrkk = idrkk;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getRkktype() {
return rkktype;
}
public void setRkktype(String rkktype) {
this.rkktype = rkktype;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getLifecycle() {
return lifecycle;
}
public void setLifecycle(String lifecycle) {
this.lifecycle = lifecycle;
}
public String getDepparty() {
return depparty;
}
public void setDepparty(String depparty) {
this.depparty = depparty;
}
public String getAllnoVisa() {
return allnoVisa;
}
public void setAllnoVisa(String allnoVisa) {
this.allnoVisa = allnoVisa;
}
public String getAllyesVisa() {
return allyesVisa;
}
public void setAllyesVisa(String allyesVisa) {
this.allyesVisa = allyesVisa;
}
public String getAllinterm() {
return allinterm;
}
public void setAllinterm(String allinterm) {
this.allinterm = allinterm;
}
public String getYesinterm() {
return yesinterm;
}
public void setYesinterm(String yesinterm) {
this.yesinterm = yesinterm;
}
public String getSpecinterm() {
return specinterm;
}
public void setSpecinterm(String specinterm) {
this.specinterm = specinterm;
}
public String getNointerm() {
return nointerm;
}
public void setNointerm(String nointerm) {
this.nointerm = nointerm;
}
public String getAllex() {
return allex;
}
public void setAllex(String allex) {
this.allex = allex;
}
public String getYesex() {
return yesex;
}
public void setYesex(String yesex) {
this.yesex = yesex;
}
public String getSpecex() {
return specex;
}
public void setSpecex(String specex) {
this.specex = specex;
}
public String getNoex() {
return noex;
}
public void setNoex(String noex) {
this.noex = noex;
}
}
private ListValue createIdListValue(final List<Id> ids) {
final List<ReferenceValue> values = ids.stream().map(ReferenceValue::new).collect(Collectors.toList());
return ListValue.createListValue(values);
}
private ListValue createStringListValue(final List<String> values) {
final List<StringValue> refvalues = values.stream()
.map(StringValue::new)
.collect(Collectors.toList());
return ListValue.createListValue(refvalues);
}
private Id idFromKey(String key) {
if (key == null) {
return null;
}
final String[] keyPare = key.split("_");
if (keyPare.length != 2) {
return null;
}
final int typeId = parseInt(keyPare[1]);
final long id = parseLong(keyPare[0]);
return new RdbmsId(typeId, id);
}
public Boolean isBeginStage(String unidAndStage) {
Boolean isBeginStage = true;
AFDate startDate = null;
AFDate currDate = new AFDate(Calendar.getInstance());
SimpleDateFormat formatter = new SimpleDateFormat("dd.MM.yyyy");
String startDateStr = getStartDateForStage(unidAndStage);
try {
startDate = AFDate.fromJavaDateSafeTZ(formatter.parse(startDateStr), false);
} catch (ParseException e) {
throw new RuntimeException(e);
}
if (startDate.toJavaDate().after(currDate.toJavaDate())) {
isBeginStage = false;
}
return isBeginStage;
}
public AFDate getDueDateForStage(String unidAndStage) {
AFDate dueTime = null;
String unid = unidAndStage.split("%")[0];
Integer stage = Integer.parseInt(unidAndStage.split("%")[1]);
ARApplicationApproving arApplication = AFSession.get().getApplication(ARApplicationApproving.class);
ARListApproving arList = arApplication.getEntityByUNID(unid);
if (ARStagesApproving.ProcessType.PARALLEL.equals(arList.stages().getProcessType())) {
dueTime = arList.getGlobalDueDate();
} else {
dueTime = arList.stages().get(stage).getFinishTime().toAFDate();
}
return dueTime;
}
public String getStartDateForStage(String unidAndStage) {
String startTimeStr = "";
String unid = unidAndStage.split("%")[0];
Integer stage = Integer.parseInt(unidAndStage.split("%")[1]);
ARApplicationApproving arApplication = AFSession.get().getApplication(ARApplicationApproving.class);
ARListApproving arList = arApplication.getEntityByUNID(unid);
if (ARStagesApproving.ProcessType.PARALLEL.equals(arList.stages().getProcessType())) {
startTimeStr = arList.getStartTime().toAFDate().toString();
} else {
startTimeStr = arList.stages().get(stage).getStartTime().toAFDate().toString();
}
return startTimeStr;
}
}
Log
Caused by: java.lang.NoSuchMethodException: Property 'idrkk' has no getter method in class 'class DataSetApprovalOfBankDocMPNew$ReportRow' at org.apache.commons.beanutils.PropertyUtilsBean.getSimpleProperty(PropertyUtilsBean.java:1275) at org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:809) at org.apache.commons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean.java:885) at org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:464) at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getBeanProperty(JRAbstractBeanDataSource.java:185)
Ответы (1 шт):
Скорее всего, проблема с ограниченным доступом к самому классу ReportRow, который объявлен как private static.
Он должен иметь публичный доступ, чтобы не падал доступ по рефлексии:
public class DataSetApprovalOfBankDocMPNew implements ReportDS {
// ...
public static class ReportRow {
// ...
}
}
Аналогичный вопрос на основном SO: Java PropertyUtils.getProperty throws no getter method in class