Hi Techies,
This is how we can avoid over-layering while creating workflow on standard form.
-> Extension of ‘CanSubmitToWorkflow’ method in standard table which is not overridden by standard:
‘CanSubmitToWorkflow’ is being called from FormDataUtil:: CanSubmitToWorkflow() method for which post event handler can be written, which is purely extension.
Following is the code snippet:
/// <summary>
/// Can submit to workflow
/// </summary>
/// <param name="args"></param>
[PostHandlerFor(classStr(FormDataUtil), staticMethodStr(FormDataUtil, canSubmitToWorkflow))]
public static void FormDataUtil_Post_canSubmitToWorkflow(XppPrePostArgs args)
{
Common record = args.getArg(identifierStr(_record));
SalesTable salesTable = record as SalesTable;
boolean ret = args.getReturnValue();
if (record.TableId == tableNum(SalesTable))
{
if (salesTable.WorkFlowStatus == VersioningDocumentState::Draft)
{
ret = boolean::true;
}
else
{
ret = boolean::false;
}
}
args.setReturnValue(ret);
}
-> Changing workflow properties in standard form through extension:
· Copy On Initializing event handler of form events.
· Paste it in your event handler class
· Write body of the method as follows (replace workflow datasource and workflow type)
/// <summary>
/// Triggering workflow dynamically
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
[FormEventHandler(formStr(SalesTableListPage), FormEventType::Initializing)]
public static void SalesTableListPage_OnInitializing(xFormRun sender, FormEventArgs e)
{
FormRun SalesTableListPage = sender;
FormBuildDesign SalesTableListPageDesign = SalesTableListPage.form().design();
SalesTableListPageDesign.workflowEnabled(true);
SalesTableListPageDesign.workflowDatasource(tableStr(SalesTable));
SalesTableListPageDesign.workflowType(workflowTypeStr(SalesOrderWFType));
}
Hope it helped... :)
Thanks & regards,
Satish Kakileti.








