In questo post vediamo come estendere un report STD aggiungendo un nuovo parametro alla dialog di lancio. Come nota tecnica aggiungo che la modifica illustrata è valida solo dall'UP23 in poi. Con questo update infatti X++ permette di usare l'attributo [DataMemberAttribute] nelle estensioni:
Vedremo due casi, il primo con un report "semplice" che prevede solo DataContract + DataProvider ( ho preso come esempio il report Vendor transaction in AP --> Inquiries and report --> Vendor transaction) , e il secondo caso più complesso che prevede anche controller e la UIBuilder (ho preso come riferimento il libro giornale Italia). Nel secondo caso segnalo questo link che è stato molto utile:
Per entrambe i casi aggiungeremo alla dialog un flag per decidere se stampare o meno la partita iva in anagrafica:
CASO 1: Vendor transaction:
1) Fare la Coc sulla data contract così:
[ExtensionOf(classstr(VendTransListContract))]
final class LIL_VendTransListContract_Extension
{
private boolean showVatNum;
[
DataMemberAttribute('showVatNum'),
SysOperationLabelAttribute(literalstr("@SYS8946"))
]
public boolean parmShowVatNum(boolean _showVatNum = showVatNum)
{
showVatNum = _showVatNum;
return showVatNum;
}
}
2) Creare l'estensione della tabella VendTransListTmp ed aggiungere il nuovo campo [ExtensionOf(classstr(VendTransListDP))]
final class LIL_VendTransListDP_Extension
{
private boolean showVatNum;
public void processReport()
{
vendTable vendTableLocal;
VendTransListContract contract = this.parmDataContract() as VendTransListContract;
VendTransListTmp vendTransListTmp;
showVatNum = contract.parmShowVatNum();
next processReport();
if(showVatNum)
{
vendTransListTmp = this.getVendTransListTmp();
update_recordset vendTransListTmp
setting LIL_VATNUM = vendTableLocal.VATNum
join vendTableLocal
where vendTableLocal.AccountNum == vendTransListTmp.AccountNum;
}
}
}
class LIL_LedgerFiscalJournalController_IT extends LedgerFiscalJournalController_IT
{
public static void main(Args _args)
{
#ISOCountryRegionCodes
GlobalizationInstrumentationHelper::featureRunByCountryRegionCodes([
[#isoIT, GlobalizationConstants::FeatureReferenceIT00011] ],
funcName()
);
LIL_LedgerFiscalJournalController_IT controller = new LIL_LedgerFiscalJournalController_IT();
controller.parmReportName(ssrsReportStr(LIL_LedgerFiscalJournal_IT, Report));
controller.parmArgs(_args);
controller.startOperation();
}
}
[ExtensionOf(classStr(LedgerFiscalJournalUIBuilder_IT))]
final class LIL_LedgerFiscalJournalUIBuilder_IT_Extension
{
private boolean showVatNum;
private DialogField showVatNumDlg;
private LedgerFiscalJournalContract_IT contract;
public void build()
{
contract = this.dataContractObject() as LedgerFiscalJournalContract_IT;
showVatNumDlg = this.bindInfo().getDialogField(this.dataContractObject(), methodstr(LedgerFiscalJournalContract_IT, parmShowVatNum));
next build();
}
public void getFromDialog()
{
contract = this.dataContractObject() as LedgerFiscalJournalContract_IT;
showVatNumDlg = this.bindInfo().getDialogField(contract,
methodStr(LedgerFiscalJournalContract_IT, parmShowVatNum));
showVatNum = showVatNumDlg.value();
next getfromdialog();
}
}
L'estensione del menuitem LedgerFiscalJournal_IT dovrà avere come object la nuova controller.
Nessun commento:
Posta un commento