internal final class RunnableClass1 { /// /// Runs the class with the specified arguments. /// The specified arguments. public static void main(Args _args) { DocuType docuType; select firstonly * from docuType where docuType.PrintMgmtDocumentType == PrintMgmtDocumentType::SalesOrderInvoice; str URI = docuType.sharePointUrl(); System.UriBuilder builder = new System.UriBuilder(URI); str extId = xUserInfo::getExternalId(); Microsoft.Dynamics.AX.Framework.FileManagement.SharePointDocumentStorageProvider provider; Microsoft.Dynamics.AX.Framework.FileManagement.DocumentLocation documentLocation = new Microsoft.Dynamics.AX.Framework.FileManagement.DocumentLocation(); provider = new Microsoft.Dynamics.AX.Framework.FileManagement.SharePointDocumentStorageProvider(docuType.Host, docuType.Site, docuType.FolderPath, extId); System.Byte[] reportBytes = new System.Byte[0](); System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding(); reportBytes = RunnableClass1::renderReportToBinaryArray("100002"); // reportBytes = enc.GetBytes("YOUR STRING/TEXT"); System.IO.MemoryStream memoryStream = new System.IO.MemoryStream(reportBytes); //memoryStream = comma.getStream(); documentLocation = provider.SaveFile(newGuid(), '100002.PDF', System.Web.MimeMapping::GetMimeMapping('100002.PDF'), memoryStream); } public static System.Byte[] renderReportToBinaryArray(SalesInvoiceId _salesInvoiceId) { str ret; CustInvoiceJour custInvoiceJour; System.Byte[] reportBytes; select firstonly custInvoiceJour where custInvoiceJour.InvoiceId == _salesInvoiceId; if (custInvoiceJour) { str ext = SRSPrintDestinationSettings::findFileNameType(SRSReportFileFormat::PDF, SRSImageFileFormat::BMP); PrintMgmtReportFormatName printMgmtReportFormatName = PrintMgmtDocType::construct(PrintMgmtDocumentType::SalesOrderInvoice).getDefaultReportFormat(); SalesInvoiceContract salesInvoiceContract = new SalesInvoiceContract(); salesInvoiceContract.parmRecordId(custInvoiceJour.RecId); SrsReportRunController srsReportRunController = new SrsReportRunController(); srsReportRunController.parmReportName(printMgmtReportFormatName); srsReportRunController.parmExecutionMode(SysOperationExecutionMode::Synchronous); srsReportRunController.parmShowDialog(false); srsReportRunController.parmReportContract().parmRdpContract(salesInvoiceContract); srsReportRunController.parmReportContract().parmReportExecutionInfo(new SRSReportExecutionInfo()); srsReportRunController.parmReportContract().parmReportServerConfig(SRSConfiguration::getDefaultServerConfiguration()); SRSPrintDestinationSettings printerSettings = srsReportRunController.parmReportContract().parmPrintSettings(); printerSettings.printMediumType(SRSPrintMediumType::File); printerSettings.fileFormat(SRSReportFileFormat::PDF); printerSettings.parmFileName(custInvoiceJour.InvoiceId + ext); printerSettings.overwriteFile(true); SRSReportRunService srsReportRunService = new SrsReportRunService(); srsReportRunService.getReportDataContract(srsReportRunController.parmReportContract().parmReportName()); srsReportRunService.preRunReport(srsReportRunController.parmReportContract()); Map reportParametersMap = srsReportRunService.createParamMapFromContract(srsReportRunController.parmReportContract()); Microsoft.Dynamics.AX.Framework.Reporting.Shared.ReportingService.ParameterValue[] parameterValueArray = SrsReportRunUtil::getParameterValueArray(reportParametersMap); SRSProxy srsProxy = SRSProxy::constructWithConfiguration(srsReportRunController.parmReportContract().parmReportServerConfig()); reportBytes = srsproxy.renderReportToByteArray(srsReportRunController.parmreportcontract().parmreportpath(), parameterValueArray, printerSettings.fileFormat(), printerSettings.deviceinfo()); //if (reportBytes) //{ // using (System.IO.MemoryStream memoryStream = new System.IO.MemoryStream(reportBytes)) // { // ret = System.Convert::ToBase64String(memoryStream.ToArray()); // } //} } return reportBytes; } }
This blog is contains coding reference related to Microsoft AX 2012 and D365 finance and operations and Power platform
Monday, January 23, 2023
Export SSRS report to SharePoint using X++
pass marked records to another form in D365FO
[DataSource]
class ActivityLogDetails
{
/// <summary>
///
/// </summary>
public void init()
{
super();
if (element.args() && element.args().caller() && element.args().record())
{
this.query().dataSourceTable(tableNum(ActivityLogDetails)).clearDynalinks();
helper= MultiSelectionHelper::createFromCaller(element.args().caller());
helper.createQueryRanges(this.query().dataSourceTable(tablenum(ActivityLogDetails)),fieldstr(ActivityLogDetails, RecId));
if (element.args().menuItemName() == menuItemDisplayStr(MarkSalesActivityLogReserved))
{
activityLogStatus = ActivityLogStatus::Reserved;
}
else if (element.args().menuItemName() == menuItemDisplayStr(MarkSalesActivityLogRejected))
{
activityLogStatus = ActivityLogStatus::Rejected;
}
else
{
throw error("@SYS22996");
}
}
else
{
throw error(Error::missingRecord(tableId2PName(tableNum(ActivityLogDetails))));
}
Ok.enabled(false);
}
}
Send Email from D365FO
public void sendMail() { SysMailerMessageBuilder messageBuilder = new SysMailerMessageBuilder(); Email toEmail; Email fromEmail; try { FromEmail = "fromemail@xyz.com"; toEmail = "toemail@xyz.com"; messageBuilder.setBody("Hello from D365", false); messageBuilder.setSubject("Email Test from D365"); messageBuilder.addTo(toEmail); // Note: not calling setFrom() defaults to the current user for SMTP client, whereas // when sent to Outlook any setFrom() value will be ignored since profiles on the client are used messageBuilder.setFrom(fromEmail); // Open the generated email in the configured client // Sends a message interactively, allowing the user to view and modify the message before SysMailerFactory::sendNonInteractive(messageBuilder.getMessage()); // Try using sendNonInteractive method too } catch (Exception::Error) { throw error("@SYS33567"); } }
Simple dialog with with field in D365FO
[Control("Button")]
class BtnMarkAsReserved
{
/// <summary>
///
/// </summary>
public void clicked()
{
//Declare dialog variables
Dialog dialog;
DialogField fieldfMemo;
Notes notes;
;
dialog = new Dialog("Comment");
//define fields to show on the dialog
fieldfMemo = dialog.addField(extendedTypeStr(Notes));
dialog.run();
if (dialog.closedOk())
{
//get values from the dialog fields
notes = fieldfMemo.value();
ActivityLogDetails_DIS logDetails;
MultiSelectionHelper helper = MultiSelectionHelper::construct();
helper.parmDatasource(ActivityLogDetails_DS);
logDetails= helper.getFirst();
while (logDetails.RecId != 0)
{
info(logDetails.ItemID);
logDetails= helper.getNext();
}
}
super();
}
}
D365FO: Update inventory marking
if (updateMarking) { InventDim inventDim = InventDim::find(currInventTransferLine.inventDimId); InventDimParm inventDimParm; inventDimParm.initFromInventDim(inventDim); InventTransOriginId receiptInventTransOriginId = InventTransOrigin::findByInventTransId(currInventTransferLine.InventTransId).RecId; InventTransOriginId issueInventTransOriginId = InventTransOrigin::findByInventTransId(currPurchLine.InventTransId).RecId; qty markedQty = InventTransOrigin::updateMarking( receiptInventTransOriginId, issueInventTransOriginId, -currInventTransferLine.QtyTransfer, '', SortOrder::Ascending, false, inventDim, inventDimParm); if (markedQty) { markedQty = InventTransOrigin::updateMarking( issueInventTransOriginId, receiptInventTransOriginId, currInventTransferLine.QtyTransfer, '', SortOrder::Ascending, false, inventDim, inventDimParm); } }
update_recordset using queryrun class in D365FO
//intialize the query Query salesActivityLineQuery = new Query(); QueryBuildDataSource SalesActivityLineDS = salesActivityLineQuery.addDataSource(tableNum(SalesActivityLine)); SalesActivityLineDS.addRange(fieldNum(SalesActivityLine_DIS, RecId)).value(con2Str(conSalesActivityLineRecId)); //Initialize Map and specify the field and field value to be updated Map fieldSetMap1 = new Map(Types::String, Types::String); fieldSetMap1.insert(fieldStr(SalesActivityLine_DIS, Status), any2Str(ActivityLineStatus_DIS::Rejected)); //Update Query::update_recordset(fieldSetMap1, salesActivityLineQuery);
Subscribe to:
Comments (Atom)