D365 Sending hyperlinks from email - Activites form

Because the system can not query data of activities by "Recid", we have to change it to query with the activity number. We will use Coc for class FormRunDataHelper when users press the link from the email.
 
using Microsoft.Dynamics.AX.Framework.Utilities.UrlHelper;

[ExtensionOf(classStr(FormRunDataHelper))] final class FormRunDataHelper_C_DEV_Extension { /// <summary> /// ApplyRequestQueryParameter /// </summary> /// <param name = "_requestQueryParameter">_requestQueryParameter</param> /// <param name = "logger">logger</param> /// <returns>can apply/not</returns> public boolean ApplyRequestQueryParameter(RequestQueryParameter _requestQueryParameter, IRecordContextLogger logger) { boolean apply; smmActivities smmActivities; apply = next ApplyRequestQueryParameter(_requestQueryParameter, logger); FormRun formRunInstance = this.formRun(); if (formRunInstance) { FormDataSource fds = this.FindDataSource(_requestQueryParameter.DataSource); if(fds.table() == tableNum(smmActivities)) { for (int i = 0; i < _requestQueryParameter.GetFieldValueCount(); i++) { str field = _requestQueryParameter.getField(i); str value = _requestQueryParameter.getValue(i); smmActivities = smmActivities::findWithRecId(str2Num(value)); value = smmActivities.ActivityNumber; int fieldid = fieldName2Id(fds.table(), 'ActivityNumber'); str tableName = tableId2Name(fds.table()); FormDataSource masterDataSource = fds.masterObjectSet(); Query query = null; if (masterDataSource) { query = masterDataSource.queryRun().query(); } fds.queryRunQueryBuildDataSource().addRange(fieldid).value(value); apply = true; } } } return apply; } } Generate a deep link for the "Get a link" from the activities form. using Microsoft.Dynamics.AX.Framework.Utilities; [ExtensionOf(formStr(FormRunGetLinkAction))] final class FormRunGetLinkAction_F_DEV_Extension { /// <summary> /// run /// </summary> public void run() { str linkGenerate; smmActivities smmActivities; next run(); // DEV_Phase2_BugFix - Start if (this.args() && this.args().caller() && this.args().callerType() == UtilElementType::Form) { FormRun callingForm = this.args().caller(); if ( this.args().dataset() == tableNum(smmActivities) && callingForm.isRootNavigable() && callingForm.isListDetailsStyle() && (callingForm.getViewOption() == FormViewOption::Details || callingForm.getViewOption() == FormViewOption::Header) ) { smmActivities = smmActivities::findWithRecId(this.args().record().RecId); linkGenerate = CreateDeepLinkBSL::buildAXURL(callingForm.args().menuItemName(), callingForm.args().menuItemType(), formDataSourceStr(smmActivities,smmActivities), fieldstr(smmActivities, ActivityNumber), smmActivities.ActivityNumber ); Link.text(linkGenerate); } } // DEV_Phase2_BugFix - End } }

Comments

Popular posts from this blog

Build HTML and send email in D365 FO with X++

How to customize electronic reporting in D365

Batch parallelism or multithreading in Dynamics 365 for Finance and Operations

How to Enable/Disable a Form Button with X++

How to create and run the Runbase batch class in D365

Difference between InMemory and TempDB tables in D365 F&O

How to create and run the Runbase class in D365

Customize the standard excel template in D365FO

How to apply a package in LCS Dynamics 365 F&O

Conditional Statements in X++