![]() |
#1 |
Участник
|
SSRS параметр не передается в DP класс
D365 10.0.5 pu29
Доброго времени суток. Знаю, вопрос древний как Аксапта. но я просто не вижу что не так: отчет должен запускаться из строки журнала платежей с TransId платежа. Правильное значение TransId видно в контроллере и контракте, а вот в дата провайдере, к сожалению, значения нет. Последний раз правильное значение видно в дебаггере в SRSReportRdpDataContractmemberInfo.setpropertyValue() при вызове из SysOperationDataContractInfo.unpackDataContractInfo(). Крайне подозреваю, что просто не вижу что-то очевидное. Посмотрите свежим глазом, пожалуйстка! X++: class TSTReceiptController_Ext extends SrsReportRunController { public void preRunModifyContract() { super(); TSTReceiptContract_Ext contract = this.parmReportContract().parmRdpContract() as TSTReceiptContract_Ext; TSTTrans TSTTrans = this.parmArgs().record() as TSTTrans; contract.parmTransId(TSTtrans.TransId); //вижу правильное значение тут } public static void main(Args _args) { TSTReceiptController_Ext controller_ = new TSTReceiptController_Ext(); TempStr reportName; TSTTrans TSTTrans; ; if (_args.record()) { TSTTrans = _args.record(); } controller_.parmArgs(_args); controller_.parmReportName(ssrsReportStr(TSTReceiptWithFee_Ext, ReportWithFee)); controller_.parmShowDialog(false); controller_.startOperation(); } } //---------------------------------------- [ DataContractAttribute, SysOperationGroupAttribute('PrintOptions', "@SYS24353", "2") ] class TSTReceiptContract_Ext { TSTTransId transId; [DataMemberAttribute("TSTTransactionId")] public TSTTransId parmTransId(TSTTransId _transId = transId) { transId =_transId; return transId; //вижу правильное значение тут тоже } } //---------------------------------------- SRSReportParameterAttribute(classstr(TSTReceiptContract_Ext))] class TSTReceiptDP_Ext extends SRSReportDataProviderBase { TSTReceiptTmp_Ext TSTReceiptTmp; TSTTransId transId; [SRSReportDataSetAttribute(tablestr('TSTReceiptTmp_Ext'))] public TSTReceiptTmp_Ext getCustReportRDPDemoTmp() { select * from TSTReceiptTmp; return TSTReceiptTmp; } public void processReport() { TSTTrans tstTrans; TSTReceiptContract_Ext dataContract = this.parmDataContract(); // а вот тут параметр в контракте пустой... transId = dataContract.parmTransId(); tstTrans = TSTTrans::find(transId); //some logic } } |
|
![]() |
#2 |
северный Будда
|
Насколько я помню, для ssrs есть какая-то табличка, в которой хранится кэш запусков отчётов. Попробуйте найти и почистить её.
__________________
С уважением, Вячеслав |
|
![]() |
#3 |
Участник
|
В all usage data все связанное с отчетом удалено - с другим отчетом на прошлой неделе это помогло, но тот отчет работал как надо из-под другого пользователя.
Этот отчет генерируется с одинаково пустым transid для обоих пользователей. Если же в дебаггере заполнить transid параметр вручную в дата контракт объекте, бизнес логика в DP классе выполняется как надо и генерируется нормальный отчет. То есть единственная неработающая вещь это непередающийся из контроллер в дата провайдер параметр. ![]() |
|
![]() |
#4 |
Участник
|
попробуй сковырнуть rdl отчёта, рестартануть reporting services и задеплоить отчёт снова - это-то уж точно поможет!
__________________
Felix nihil admirari |
|
![]() |
#5 |
Участник
|
Если "сковырнуть" значило удалить, то не помогло. Application pools и сервис в IIS тоже рестартанула, на всяк случай.
|
|
![]() |
#6 |
Участник
|
Возможно у вас как то криво работает сериализация контракта. Покопал бы в этом направлении.
|
|
![]() |
#7 |
Участник
|
Цитата:
[DataMemberAttribute("TSTTransactionId")]
public TSTTransId parmTransId(TSTTransId _transId = transId) |
|
![]() |
#8 |
Участник
|
|
|
![]() |
#9 |
Участник
|
Получилось!
По совету коллеги передобавила датасорс в отчете и заново задеплоила. Виртуальная машина ночью перегружалась. Может, это тоже как-то повлияло. Спасибо всем! |
|