LaunchFormOptions Basic Steps

LFO Basics

In ValueIn you can pass in whatever you like, for example.

Form 1 Button Code:

LaunchFormOptions lfo = new LaunchFormOptions();
lfo.IsModal = true; // true will basically not allow the user to do anything on Form1 until Form2 is closed.
lfo.ValueIn = "Hey Mark Wonsil, Got Anymore Dad Jokes?";
ProcessCaller.LaunchForm(oTrans, "UDDMR", lfo);

I mean anything…

lfo.ValueIn = this.oTrans; // lets just passed all of oTrans - not recommended but yeah you could
lfo.ValueIn = 123;
lfo.ValueIn = new List<int>() { 2, 3, 7 };

Then on the Form you are calling, you can capture the lfo object and read the value, then you do with it whatever you wish on the other side.

Form 2 Example (The Form you are Launching):
I did mine on the _Shown Event because I wanted to seperate my _Load code and dedicate an event of its own.

private void UD100Form_Shown(object sender, EventArgs e)
{
	// Check for Called
	if (UD100Form.LaunchFormOptions != null && UD100Form.LaunchFormOptions.Sender != null && UD100Form.LaunchFormOptions.ValueIn != null)
	{

		string lfoValue = UD100Form.LaunchFormOptions.ValueIn.ToString();
		string lfoSenderName = UD100Form.LaunchFormOptions.Sender.ToString();

		switch (lfoSenderName)
		{
			case "Erp.UI.Rpt.PackingSlipPrint.Transaction":
				DataSet dsShipDtl = ShipDtlSearchAdapter(lfoValue);

				foreach (DataRow ShipDtlRow in dsShipDtl.Tables[0].Rows)
				{
					jobNum = ShipDtlRow["JobNum"].ToString();
					AutoCreateRecordsByJobNum(jobNum);
				}

				break;

			case "Erp.UI.App.JobEntry.Transaction":
				jobNum = lfoValue;
				AutoCreateRecordsByJobNum(jobNum);
				break;
		}
	}
}

To Simplify all you really need on the other side to get started it:

	if (UD100Form.LaunchFormOptions != null && UD100Form.LaunchFormOptions.Sender != null && UD100Form.LaunchFormOptions.ValueIn != null)
	{
		string lfoValue = UD100Form.LaunchFormOptions.ValueIn.ToString();
       EpiMessageBox.Show("The Value Passed in is " + lfoValueIn, "Hi", MessageBoxButtons.OK, MessageBoxIcon.Error);
	}

Extra Credit 1 - Communicate Closed Event

You can also communicate between the 2 forms and even detect the closing of the Form Called.

Form 1:

private void btnTest_Click(object sender, System.EventArgs args)
{
	LaunchFormOptions lfo 	= new LaunchFormOptions();
	lfo.ValueIn				= this.oTrans._packNum;
	//lfo.ContextValue		= this.CreateParamsList(whereClauseUD100A);
	lfo.IsModal				= true;
	lfo.SuppressFormSearch 	= true;
	lfo.LaunchedFormClosed += new EventHandler(lfo_LaunchedFormClosed);
	//lfo.CallBackMethod = CallBackHandlerBAQReport;
	ProcessCaller.LaunchForm(oTrans, "UEVQRT01", lfo);
}

void lfo_LaunchedFormClosed(object sender, EventArgs e)
{
	if (((EpiBaseForm)sender).DialogResult == System.Windows.Forms.DialogResult.OK)
	{
		// Do MAGIC Here the sender or e object will have the called form data and LFO Object Result, it literally will send over the entire Object, oTrans info etc... 
	}
}

Form 2:

UD100Form.DialogResult = DialogResult.OK;
UD100Form.LaunchFormOptions.Result = "HELLO WORLD";

I actually use this when I have a BAQ Form and I want to “Auto-Print” I Launch it, hidden or even visible and then return result and close it.


Extra Credit 2 - Call Back Methods

You can also register a CallBack Method, so Form2 can actually call a Method on Form1. This is one trick I learned from @josecgomez

lfo.CallBackMethod = CallBackHandlerBAQReport;

Form 1:

/**
* Helper which listens to Communication from the BAQ Report
* Invoke from the BAQ Report for example to Refresh UI
* After Printing has happened so the Shape shows up
*/
void CallBackHandlerBAQReport(object sender, object CallBackArgs)
{
	// Verify CallBack args exist
	if (CallBackArgs == null) {
		return;
	}

	// We are passing back a string
	switch (CallBackArgs.ToString())
	{
		case "Refresh":
			this.oTrans.Refresh();
			break;
	}
}

Form 2: (One being Launched):

if (BAQReportForm.LaunchFormOptions != null)
{
	if (BAQReportForm.LaunchFormOptions.CallBackMethod != null) {
		BAQReportForm.LaunchFormOptions.CallBackMethod(oTrans, "Refresh");
	}
}

Basically you can pass back anything as well

BAQReportForm.LaunchFormOptions.CallBackMethod(oTrans, "ANYTHING_I_WISH_HERE");

My Use Case for this is when I Update my Form1 Data using its Adapter on Form2 and then I send a refresh to the background form and it updates. But you can actually do that with the previous discussed method Extra Credit 1 - Communicate Closed Event as well.

The same methods are used for example when you Print a Packing Slip and then the Customer Shipment Form updates with the green shape “Printed” or shows a Message Box…

20 Likes