Exportfile for AOT version 1.0 or later Formatversion: 1 ***Element: CLS ; Microsoft Dynamics AX Class: DocTemplatingFeaturesOverviewDsProvider unloaded ; -------------------------------------------------------------------------------- CLSVERSION 1 CLASS #DocTemplatingFeaturesOverviewDsProvider PROPERTIES Name #DocTemplatingFeaturesOverviewDsProvider Extends #DocDataSourceProviderMailMerge Origin #{7E64575B-689A-4BC5-980E-29169B1659EE} ENDPROPERTIES METHODS SOURCE #classDeclaration #class DocTemplatingFeaturesOverviewDsProvider extends DocDataSourceProviderMailMerge #{ #} ENDSOURCE SOURCE #description #public ClassDescription description() #{ # return 'Templating features DS provider'; #} ENDSOURCE SOURCE #generateXmlDataSource #protected void generateXmlDataSource(DocXmlRecordBuilder _recordBuilder) #{ # PurchRFQCaseTable rfqCaseTable; # PurchRFQTable rfqTable; # PurchRFQLine rfqLine; # PurchRFQReplyLine rfqReplyLine; # ProjTable projTable; # VendTable vendTable; # HcmWorker hcmWorker; # int imageResource; # Image axImage; # LogisticsPostalAddress address; # PurchReqTable purchReqTable; # Filename fileNameSubdocument; # # # // NOTE #1: The following data are fetched only to demonstrate how to use _recordBuilder # // to build a rich and structured report/document data source, to reshape the data and to show # // the templating possibilities/techniques when designing a template using such data source. # # // NOTE #2: In real case scenarios please use label IDs instead of literal strings. # # select firstOnly rfqCaseTable where rfqCaseTable.StatusHigh == PurchRFQStatus::Received; # # // Add a record. # _recordBuilder.addRecord(rfqCaseTable); # # // Add fields. # _recordBuilder.addField(fieldStr(PurchRFQCaseTable, RFQCaseId)); # _recordBuilder.addField(fieldStr(PurchRFQCaseTable, RFQType)); # _recordBuilder.addField(fieldStr(PurchRFQCaseTable, DeliveryDate)); # # // Add a dimension field. # _recordBuilder.addField(fieldStr(PurchRFQCaseTable, DefaultDimension)); # # // Add a field group. # _recordBuilder.addFieldGroup(tableFieldGroupStr(PurchRFQCaseTable, Inventory)); # # // Add a field group as a child record. # _recordBuilder.addFieldGroupAsChildRecord(tableFieldGroupStr(PurchRFQCaseTable, Payment)); # # // Add calculated fields. # _recordBuilder.addCalculatedField('InventSiteName', InventSite::find(rfqCaseTable.InventSiteId).Name); # _recordBuilder.addField(fieldStr(PurchRFQCaseTable, ProjId)); # projTable = ProjTable::find(rfqCaseTable.ProjId); # _recordBuilder.addCalculatedField('ProjectName', projTable.Name, 'Project name'); # # // Add a calculated field with sys label from the other field. # hcmWorker = HcmWorker::find(rfqCaseTable.ResponsibleWorkerId); # _recordBuilder.addCalculatedFieldSysLbl('ResponsibleWorker', hcmWorker.name(), fieldStr(PurchRFQCaseTable, ResponsibleWorkerId)); # # // Add a dimension filed. # _recordBuilder.addField(fieldStr(PurchRFQCaseTable, DefaultDimension)); # # // Add calculated field for barcode demo purpose. # _recordBuilder.addCalculatedField('BarcodeDemoField', '100055511188'); # # // Add a child record with ALL fields. # address = LogisticsPostalAddress::findRecId(rfqCaseTable.DeliveryPostalAddress); # _recordBuilder.addRecordWithAllFields(address); # # // Navigate one level up. # _recordBuilder.goToParentRecord(); # # // Add a record with title fields. # select firstonly purchReqTable; # _recordBuilder.addRecordWithTitleFields(purchReqTable); # _recordBuilder.addFieldGroup(tableFieldGroupStr(PurchReqTable, Date)); # _recordBuilder.addFieldGroup(tableFieldGroupStr(PurchReqTable, Purpose)); # _recordBuilder.goToParentRecord(); # # // Add sublines. # imageResource = 12577; // We are using some embedded resources to fake article images. # while select rfqTable # where rfqTable.RFQCaseId == rfqCaseTable.RFQCaseId # { # // Add record. # _recordBuilder.addRecord(rfqTable); # # // Add title fields. # _recordBuilder.addTitleFields(); # # // Add display method. # _recordBuilder.addDisplayMethod(tableMethodStr(PurchRFQTable, vendorStatus)); # # // Add calculated field with sys label from the other field. # vendTable = rfqTable.vendTable(); # _recordBuilder.addCalculatedFieldSysLbl('VendorName', vendTable.name(), fieldStr(PurchRFQTable, VendAccount)); # # // Add fields. # _recordBuilder.addField(fieldStr(PurchRFQTable, VendAccount)); # _recordBuilder.addCalculatedField('VendorAddress', vendTable.address_BR()); # _recordBuilder.addCalculatedFieldSysLbl('VATNum', vendTable.VATNum, fieldStr(PurchRFQTable, VATNum)); # _recordBuilder.addField(fieldStr(PurchRFQTable, ValidityDateStart)); # _recordBuilder.addField(fieldStr(PurchRFQTable, ValidityDateEnd)); # # // Add calculated field of type and sys label from an EDT. # _recordBuilder.addCalculatedFieldEdt('TotalAmount', extendedTypeStr(PurchRFQGrossAmount), # PurchRFQReplyTable::find(rfqTable.RFQId).totalBalance()); # _recordBuilder.addField(fieldStr(PurchRFQTable, CurrencyCode)); # _recordBuilder.addCalculatedField('CurrencySymbol', Currency::find(rfqTable.CurrencyCode).Symbol); # # // Add calculated field of type and sys label from an enum. # _recordBuilder.addCalculatedFieldEnum('RFQTableStatus', enumStr(PurchRFQStatusVendor), PurchRFQStatusVendor::Received); # # // Add sub sublines. # while select ItemName, Status from rfqLine # join rfqReplyLine # where rfqLine.RFQId == rfqTable.RFQId && # rfqReplyLine.RFQLineRecId == rfqLine.RecId # { # // Add record. # _recordBuilder.addRecord(rfqReplyLine); # # // Add fields. # _recordBuilder.addField(fieldStr(PurchRFQReplyLine, LineNum)); # _recordBuilder.addCalculatedField('ItemName', rfqLine.ItemName); # _recordBuilder.addField(fieldStr(PurchRFQReplyLine, PurchQty)); # _recordBuilder.addField(fieldStr(PurchRFQReplyLine, PurchUnit)); # _recordBuilder.addField(fieldStr(PurchRFQReplyLine, PurchPrice)); # _recordBuilder.addField(fieldStr(PurchRFQReplyLine, LineAmount)); # _recordBuilder.addCalculatedFieldEnum('Status', enumStr(PurchRFQStatus), rfqLine.Status); # # // Add display methods. # _recordBuilder.addDisplayMethod(tableMethodStr(PurchRFQReplyLine, displayNetPriceQty)); # # // Add calculated field - an image from EmbeddedResource location. # axImage = new Image(); # axImage.loadResource(imageResource); # imageResource++; # axImage.saveType(ImageSaveType::PNG); # _recordBuilder.addCalculatedField('ItemImage', axImage.getData()); # } # # // Navigate one level up. # _recordBuilder.goToParentRecord(); # } # # // Navigate one level up. # _recordBuilder.goToTopRecord(); # # # /* EXAMPLE OF USE: Reshaping data */ # // Add calculated record. # _recordBuilder.addCalculatedRecord('PaymentSlip'); # // Add calculated fields. # _recordBuilder.addCalculatedField('PayerName', 'Jure Knez, Ljubljanska c. 2, 4000 Kranj'); # _recordBuilder.addCalculatedField('Purpose', 'Donation - School Supplies'); # _recordBuilder.addCalculatedField('Amount', 100.00); # _recordBuilder.addCalculatedField('RecipientIban', 'SI56 1234 1234 1234 123'); # _recordBuilder.addCalculatedField('RecipientIban2', 'SI56123412341234123'); # _recordBuilder.addCalculatedField('RecipientReference', '903005'); # _recordBuilder.addCalculatedField('RecipientName', 'Slovenian National Federation of the Blind'); # _recordBuilder.addCalculatedField('IbanPayer', 'SI56222211113333444'); # _recordBuilder.addCalculatedField('PurposeCode', 'CHAR'); # _recordBuilder.addCalculatedField('PaymentDueDate', today()); # _recordBuilder.addCalculatedField('RecipientBIC', 'LJBASI2X'); # _recordBuilder.addCalculatedField('RecipientAddress', 'Ulica Slavka Gruma 54a, 8000 Novo Mesto'); # # _recordBuilder.goToTopRecord(); # # /* EXAMPLE OF USE: Subdocument */ # fileNameSubdocument = @'C:\Temp\SubDocument.docx'; # if (DocFileMngHelper::fileExistsClientServer(fileNameSubdocument)) # { # _recordBuilder.addCalculatedRecord('Subdocument'); # _recordBuilder.addCalculatedField('SubdocumentContent', DocFileMngHelper::getFileContentAsContainer(fileNameSubdocument)); # # _recordBuilder.goToTopRecord(); # } # # /* EXAMPLE OF USE: Horizontal rendering, Conditional rendering and Rendering per page */ # imageResource = 12187; # while (imageResource <= 12209) # { # _recordBuilder.addCalculatedRecord('Item'); # _recordBuilder.addCalculatedField('Name', int2str(imageResource) + '_ResourceId'); # _recordBuilder.addCalculatedField('Description', 'Conditionally written description'); # # if (imageResource mod 3 == 0) # { # _recordBuilder.addCalculatedField('ShowDescription', true); # } # else # { # _recordBuilder.addCalculatedField('ShowDescription', false); # } # # axImage = new Image(); # axImage.loadResource(imageResource); //ID of some image # imageResource++; # axImage.saveType(ImageSaveType::PNG); # _recordBuilder.addCalculatedField('ItemImage', axImage.getData()); # # imageResource++; # } # # /* EXAMPLE OF USE: Dumping of _recordBuilder's resulting XML */ # //info(_recordBuilder.exportToXmlStr()); # //_recordBuilder.exportToXmlFile(@'C:\Temp\TemplatingFeaturesOverviewDS.xml'); #} ENDSOURCE SOURCE #primaryTableId #public TableId primaryTableId() #{ # return tableNum(PurchTable); #} ENDSOURCE ENDMETHODS ENDCLASS ***Element: END