Material Tags and Passing Data

I need to populate the callContextBpmData.ShortChar01 with the RcvHead.PackSlip number in the Receipt Entry screen.

I have attempted this by first creating a customization in the Receipt Entry (parent) screen and then creating a customization in the Material Tags (child) screen. I then used Process Calling Maintenance to setup the Called Process (Erp.UIRpt.MtlTags), the Called From (Erp.UI.ReceiptEntry) and the menu ID that I created (which points to the customization in the MtlTags Form) under “Processes” in Menu Maintenance.

In the customization for the Receipt Entry screen, I have the following code:

private void baseToolbarsManager_ToolClick(object sender, Infragistics.Win.UltraWinToolbars.ToolClickEventArgs args)
{
LaunchFormOptions opts = new LaunchFormOptions();
opts.ValueIn = (EpiTextBox)csm.GetNativeControlReference(“17fb79b9-2a5d-474a-b9d1-5e5233a16cde”);
ProcessCaller.LaunchForm(oTrans, “UDMT01”, opts);
}

I am sure that I do not have the correct Form Event. I am also not sure when one chooses the Action Menu / Print Tags which Form Event fires.

In the Material Labels dialog I created a customization that includes a text control and have set the epibinding to CallContextBpmData.ShortChar01. I am not quite sure how I go about populating that EpiBound field with the LaunchFormOptions object.

This is my first attempt at writing a customization of this nature and am not sure if I am using the correct approach to what I am trying to accomplish. Any assistance is most appreciated.

You are passing a TextBox object instead of the text of that TextBox.
Try getting the .Text property.
Or, get the data from the EpiDaraView (better choice). You can also look in Object Explorer and you’d find oTrans.PackSlip gives the simpler version.

James, you’re on the right track. A few tips though:

  • You should use the BeforeToolClick event and handle it so it overrides the default MtlTags form call
  • Use the LaunchFormOptions.ValueIn property to pass the parameters normally passed to the base MtlTags form and use LaunchFormOptions.ContextValue to pass the packslip
  • In your MtlTags customization, use the form load to extract your packslip from the ContextValue and set the packslip value in the appropriate dataview

If you give me some time to look up my code, I can give you a detailed walkthrough because I did the exact same thing that you’re trying to do right now.

Thank you Tanesh. The info will help me progress. Can’t thank you enough. I would love to see the code, but don’t rush. Post when it is convenient for you!

Cheers!

In your Receipt Entry customization, add a BeforeToolClick event handler. Populate it with the code below. ShowCustomMtlTags() is where the real magic will happen.

private void ReceiptEntryForm_BeforeToolClick(object sender, Ice.Lib.Framework.BeforeToolClickEventArgs args)
{
	switch (args.Tool.Key)
	{
		case "PrintTagsTool":
			args.Handled = true;
			ShowCustomMtlTags()
			break;
	}
}

In ShowCustomMtlTags(), create the LaunchFormOptions object. ValueIn is how Epicor passes the material tag parameters to the report, so we’ll do the same. ContextValue is what we’ll use for our custom data.

private void ShowCustomMtlTags()
{
	LaunchFormOptions opts = new LaunchFormOptions();
	opts.IsModal = false;
	opts.ValueIn = BuildMtlTagParams();
	opts.ContextValue = "Your packslip value";
	ProcessCaller.LaunchForm(oTrans, "UDMT01", opts);
}

The material tag parameters are passed as a “~” delimited string. BuildMtlTags() simply constructs that for us.

private string BuildMtlTagParams()
{
	string str = "~";
	StringBuilder stringBuilder = new StringBuilder(string.Empty);
	EpiDataView epiDataView = (EpiDataView) null;
	EpiDataView rcvDtlView = ((EpiDataView)(this.oTrans.EpiDataViews["ReceiptRcvDtl"]));
	if (rcvDtlView.Row < 0)
	{
		epiDataView = (EpiDataView) null;
	}
	else
	{
		stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["PartNum"].ToString());
		stringBuilder.Append(str);
		stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["PartDescription"].ToString());
		stringBuilder.Append(str);
		stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["OurQty"].ToString());
		stringBuilder.Append(str);
		stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["OurQty"].ToString());
		stringBuilder.Append(str);
		stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["ReceivedTo"].ToString());
		stringBuilder.Append(str);
		stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["RevisionNum"].ToString());
		stringBuilder.Append(str);
		stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["IUM"].ToString());
		stringBuilder.Append(str);
		stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["JobNum"].ToString());
		stringBuilder.Append(str);
		stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["AssemblySeq"].ToString());
		stringBuilder.Append(str);
		stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["JobSeq"].ToString());
		stringBuilder.Append(str);
		stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["PONum"].ToString());
		stringBuilder.Append(str);
		stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["POLine"].ToString());
		stringBuilder.Append(str);
		stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["PORelNum"].ToString());
		stringBuilder.Append(str);
		stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["VendorNum"].ToString());
		stringBuilder.Append(str);
		stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["PurPoint"].ToString());
		stringBuilder.Append(str);
		stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["ReasonCode"].ToString());
		stringBuilder.Append(str);
		stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["WareHouseCode"].ToString());
		stringBuilder.Append(str);
		stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["BinNum"].ToString());
		stringBuilder.Append(str);
		stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["LotNum"].ToString());
	}

	return stringBuilder.ToString();
}

That takes care of the Receipt Entry customization. Now in the Material Tags customization, use the form load event to to extract the packslip and set callContextBpmData.ShortChar01’s value

private void MtlTagsForm_Load(object sender, EventArgs args)
{
	if (this.MtlTagsForm.LaunchFormOptions != null)
	{
		this.callContextBpmDataView.dataView[this.callContextBpmDataView.Row]["ShortChar01"] = this.MtlTagsForm.LaunchFormOptions.ContextValue.ToString();
	}
}

There might be a few errors in there - I just picked out the relevant parts from my customizations. But it should be enough to get you where you need.

This is excellent information. This will certainly help in many ways as I learn by example. A thousand thanks for your time and efforts Tanesh. Most appreciated.

Tanesh, I am apparently having a problem with the correct placement of the semicolon ; in the BuildMtlTagParams(). I cannot seem to find where I am missing one. Everything appears in place, but apparently isn’t. Do you see anything that is obvious by chance?

private string BuildMtlTagParams()
{
	string str = "~";
	StringBuilder stringBuilder = new StringBuilder(string.Empty);
	EpiDataView epiDataView = (EpiDataView) null;
	EpiDataView rcvDtlView = ((EpiDataView)(this.oTrans.EpiDataViews["ReceiptRcvDtl"]));
	if (rcvDtlView.Row < 0)
	{
		epiDataView = (EpiDataView) null;
	}
	else
	{
		stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["PartNum"].ToString());
		stringBuilder.Append(str);
		stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["PartDescription"].ToString());
		stringBuilder.Append(str);
		stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["OurQty"].ToString());
		stringBuilder.Append(str);
		stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["OurQty"].ToString());
		stringBuilder.Append(str);
		stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["ReceivedTo"].ToString());
		stringBuilder.Append(str);
		stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["RevisionNum"].ToString());
		stringBuilder.Append(str);
		stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["IUM"].ToString());
		stringBuilder.Append(str);
		stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["JobNum"].ToString());
		stringBuilder.Append(str);
		stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["AssemblySeq"].ToString());
		stringBuilder.Append(str);
		stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["JobSeq"].ToString());
		stringBuilder.Append(str);
		stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["PONum"].ToString());
		stringBuilder.Append(str);
		stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["POLine"].ToString());
		stringBuilder.Append(str);
		stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["PORelNum"].ToString());
		stringBuilder.Append(str);
		stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["VendorNum"].ToString());
		stringBuilder.Append(str);
		stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["PurPoint"].ToString());
		stringBuilder.Append(str);
		stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["ReasonCode"].ToString());
		stringBuilder.Append(str);
		stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["WareHouseCode"].ToString());
		stringBuilder.Append(str);
		stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["BinNum"].ToString());
		stringBuilder.Append(str);
		stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["LotNum"].ToString());
	}

	return stringBuilder.ToString();
}

The compile code error message is as follows:

Compiling Custom Code …

----------errors and warnings------------

Error: CS1026 - line 93 (362) - ) expected
Error: CS1002 - line 93 (362) - ; expected
Error: CS1525 - line 93 (362) - Invalid expression term ‘)’
Error: CS1525 - line 97 (366) - Invalid expression term ‘else’

** Compile Failed. **

Probably the < in the if condition. This is what happens when I copy code straight from the XML smh.
Replace it with “<” and you should be good to go.

Thank you Tanesh, that allowed me to complete the customization for the Receipt Entry screen successfully.
Moving on to the Print Material Tags screen, I’ve added the script but am getting a compile error. It references either a directive or assembly reference, but I looked in Assembly Reference Manager and could find nothing related to that function.

Compiling Custom Code …

----------errors and warnings------------

Error: CS1061 - line 57 (152) - ‘Script’ does not contain a definition for ‘callContextBpmDataView’ and no extension method ‘callContextBpmDataView’ accepting a first argument of type ‘Script’ could be found (are you missing a using directive or an assembly reference?)

Error: CS1061 - line 57 (152) - ‘Script’ does not contain a definition for ‘callContextBpmDataView’ and no extension method ‘callContextBpmDataView’ accepting a first argument of type ‘Script’ could be found (are you missing a using directive or an assembly reference?)

** Compile Failed. **

My bad, forgot a piece of the puzzle.

callContextBpmDataView is just a reference to the existing CallContextBpmData EpiDataView in the screen. You can initialize it like so:

callContextBpmDataView = (EpiDataView) this.oTrans.EpiDataViews[(object) "CallContextBpmData"];

Tanesh:

I have added the row per your last response, but am still receiving a compile error when testing the code. Even after researching for examples of code to try to sort it out myself, this is really making me feel like a neophyte; but I still persevere! I have copied the entire code from the Print Material Tags script and pasted below. The compile error message follows the code:

// **************************************************
// Custom code for MtlTagsForm
// Created: 11/11/2019 1:15:39 PM
// **************************************************
using System;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Windows.Forms;
using Erp.Adapters;
using Erp.UI;
using Ice.Lib;
using Ice.Adapters;
using Ice.Lib.Customization;
using Ice.Lib.ExtendedProps;
using Ice.Lib.Framework;
using Ice.Lib.Searches;
using Ice.UI.FormFunctions;

public class Script
{
	// ** Wizard Insert Location - Do Not Remove 'Begin/End Wizard Added Module Level Variables' Comments! **
	// Begin Wizard Added Module Level Variables **

	// End Wizard Added Module Level Variables **

	// Add Custom Module Level Variables Here **

	public void InitializeCustomCode()
	{
		// ** Wizard Insert Location - Do not delete 'Begin/End Wizard Added Variable Initialization' lines **
		// Begin Wizard Added Variable Initialization

		// End Wizard Added Variable Initialization

		// Begin Wizard Added Custom Method Calls
			
		// End Wizard Added Custom Method Calls
	}

	public void DestroyCustomCode()
	{
		// ** Wizard Insert Location - Do not delete 'Begin/End Wizard Added Object Disposal' lines **
		// Begin Wizard Added Object Disposal

		// End Wizard Added Object Disposal

		// Begin Custom Code Disposal

		// End Custom Code Disposal
	}


	private void MtlTagsForm_Load(object sender, EventArgs args)
	{
		// Add Event Handler Code
		callContextBpmDataView = (EpiDataView) this.oTrans.EpiDataViews[(object) "CallContextBpmData"];
			if (this.MtlTagsForm.LaunchFormOptions != null)
			{
				this.callContextBpmDataView.dataView[this.callContextBpmDataView.Row]["ShortChar01"] = this.MtlTagsForm.LaunchFormOptions.ContextValue.ToString();
			}
	}
}

Compiling Custom Code …

----------errors and warnings------------

Error: CS0103 - line 57 (191) - The name ‘callContextBpmDataView’ does not exist in the current context
Error: CS1061 - line 60 (194) - ‘Script’ does not contain a definition for ‘callContextBpmDataView’ and no extension method ‘callContextBpmDataView’ accepting a first argument of type ‘Script’ could be found (are you missing a using directive or an assembly reference?)
Error: CS1061 - line 60 (194) - ‘Script’ does not contain a definition for ‘callContextBpmDataView’ and no extension method ‘callContextBpmDataView’ accepting a first argument of type ‘Script’ could be found (are you missing a using directive or an assembly reference?)

** Compile Failed. **

callContextBpmDataView is an object, so it still needs to be declared.Your first line in MtlTagsForm_Load() should be:

EpiDataView callContextBpmDataView = (EpiDataView) this.oTrans.EpiDataViews[(object) "CallContextBpmData"];

Don’t worry about feeling like a beginner - we’ve all been there. And Epicor sure as heck doesn’t make this easy :laughing:

I concur!!! :grinning:

Simpler code:

EpiDataView callContextBpmDataView = oTrans.Factory("CallContextBpmData");

So, either one of these is correct and should work?

	private void MtlTagsForm_Load(object sender, EventArgs args)
	{
		// Add Event Handler Code
			EpiDataView callContextBpmDataView = (EpiDataView) this.oTrans.EpiDataViews[(object) "CallContextBpmData"];
			callContextBpmDataView = (EpiDataView) this.oTrans.EpiDataViews[(object) "CallContextBpmData"];
			if (this.MtlTagsForm.LaunchFormOptions != null)
			{
				this.callContextBpmDataView.dataView[this.callContextBpmDataView.Row]["ShortChar01"] = this.MtlTagsForm.LaunchFormOptions.ContextValue.ToString();
			}
	}

OR

	private void MtlTagsForm_Load(object sender, EventArgs args)
	{
		// Add Event Handler Code
			EpiDataView callContextBpmDataView = oTrans.Factory("CallContextBpmData");
			callContextBpmDataView = (EpiDataView) this.oTrans.EpiDataViews[(object) "CallContextBpmData"];
			if (this.MtlTagsForm.LaunchFormOptions != null)
			{
				this.callContextBpmDataView.dataView[this.callContextBpmDataView.Row]["ShortChar01"] = this.MtlTagsForm.LaunchFormOptions.ContextValue.ToString();
			}
	}
	private void MtlTagsForm_Load(object sender, EventArgs args)
	{
		// Add Event Handler Code
			EpiDataView callContextBpmDataView = (EpiDataView) this.oTrans.EpiDataViews[(object) "CallContextBpmData"];
			if (this.MtlTagsForm.LaunchFormOptions != null)
			{
				this.callContextBpmDataView.dataView[this.callContextBpmDataView.Row]["ShortChar01"] = this.MtlTagsForm.LaunchFormOptions.ContextValue.ToString();
			}
	}

OR

	private void MtlTagsForm_Load(object sender, EventArgs args)
	{
		// Add Event Handler Code
			EpiDataView callContextBpmDataView = oTrans.Factory("CallContextBpmData");
			if (this.MtlTagsForm.LaunchFormOptions != null)
			{
				this.callContextBpmDataView.dataView[this.callContextBpmDataView.Row]["ShortChar01"] = this.MtlTagsForm.LaunchFormOptions.ContextValue.ToString();
			}
	}

You don’t need to reassign a value to callContextBpmDataView.

Also, I had no idea that the Factory method existed. You learn something new every day!

Finally, I’ve managed to test the code without error. So, both the script in the Receipt Entry and the Print Material Tags dialog are compiling successfully. Now when I bring up a receipt in then Receipt Entry, choose a packing slip and then select Print Tags from the Actions menu, I receive the following error:

Application Error

Exception caught in: Erp.UIRpt.MtlTags

Error Detail 
============
Message: Index was outside the bounds of the array.
Program: Erp.UIRpt.MtlTags.dll
Method: setIncomingParamsFromReceiptEntry

Client Stack Trace 
==================
   at Erp.UI.Rpt.MtlTags.Transaction.setIncomingParamsFromReceiptEntry(String[] parameters)
   at Erp.UI.Rpt.MtlTags.MtlTagsForm.OnFormLoaded()
   at Ice.Lib.Framework.EpiBaseForm.formLoaded()

Any ideas what might be causing this error?

My best guess - it doesn’t like something about the ~ delimited parameters you’re sending over. If you have Visual Studio, you can debug your Receipt Entry customization to see exactly what’s being returned by BuildMtlTagParams()

Tanesh, I believe that in the original code you gave me at the top of this thread, there is a duplicate of “OurQty” in the BuildMtlTagParams(). Should one of them be removed?

I did remove one and ran the customization, now when I launch the Print Material Tags dialog, I am receiving the following different error instead of the ‘Index was outside the bounds of the array’ error:

Application Error

Exception caught in: mscorlib

Error Detail 
============
Message: Input string was not in a correct format.
Program: CommonLanguageRuntimeLibrary
Method: StringToNumber

Client Stack Trace 
==================
   at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
   at System.Number.ParseDecimal(String value, NumberStyles options, NumberFormatInfo numfmt)
   at System.Convert.ToDecimal(String value)
   at Erp.UI.Rpt.MtlTags.Transaction.setIncomingParamsFromReceiptEntry(String[] parameters)
   at Erp.UI.Rpt.MtlTags.MtlTagsForm.OnFormLoaded()
   at Ice.Lib.Framework.EpiBaseForm.formLoaded()

This is my code for the Receipt Entry screen:

// **************************************************
// Custom code for ReceiptEntryForm
// Created: 11/5/2019 8:40:35 AM
// **************************************************

extern alias Erp_Contracts_BO_Receipt;
extern alias Erp_Contracts_BO_ICReceiptSearch;
extern alias Erp_Contracts_BO_SupplierXRef;
extern alias Erp_Contracts_BO_Currency;
extern alias Erp_Contracts_BO_Company;
extern alias Erp_Contracts_BO_Part;
extern alias Erp_Contracts_BO_Vendor;
extern alias Erp_Contracts_BO_VendorPPSearch;
extern alias Erp_Contracts_BO_JobEntry;
extern alias Erp_Contracts_BO_JobAsmSearch;

using System;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Windows.Forms;
using Erp.Adapters;
using Erp.UI;
using Ice.Lib;
using Ice.Adapters;
using Ice.Lib.Customization;
using Ice.Lib.ExtendedProps;
using Ice.Lib.Framework;
using Ice.Lib.Searches;
using Ice.UI.FormFunctions;

public class Script
{
	// ** Wizard Insert Location - Do Not Remove 'Begin/End Wizard Added Module Level Variables' Comments! **
	// Begin Wizard Added Module Level Variables **

	// End Wizard Added Module Level Variables **

	// Add Custom Module Level Variables Here **

	public void InitializeCustomCode()
	{
		// ** Wizard Insert Location - Do not delete 'Begin/End Wizard Added Variable Initialization' lines **
		// Begin Wizard Added Variable Initialization

		this.ReceiptEntryForm.BeforeToolClick += new Ice.Lib.Framework.BeforeToolClickEventHandler(this.ReceiptEntryForm_BeforeToolClick);
		// End Wizard Added Variable Initialization

		// Begin Wizard Added Custom Method Calls

		// End Wizard Added Custom Method Calls
	}

	public void DestroyCustomCode()
	{
		// ** Wizard Insert Location - Do not delete 'Begin/End Wizard Added Object Disposal' lines **
		// Begin Wizard Added Object Disposal

		this.ReceiptEntryForm.BeforeToolClick -= new Ice.Lib.Framework.BeforeToolClickEventHandler(this.ReceiptEntryForm_BeforeToolClick);
		// End Wizard Added Object Disposal

		// Begin Custom Code Disposal

		// End Custom Code Disposal
	}

	private void ReceiptEntryForm_BeforeToolClick(object sender, Ice.Lib.Framework.BeforeToolClickEventArgs args)
	{
		switch (args.Tool.Key)
		{
			case "PrintTagsTool":
				args.Handled = true;
				ShowCustomMtlTags();
				break;
		}
	}

	private void ShowCustomMtlTags()
	{
		LaunchFormOptions opts = new LaunchFormOptions();
		opts.IsModal = false;
		opts.ValueIn = BuildMtlTagParams();
		opts.ContextValue = "txtKeyField";
		ProcessCaller.LaunchForm(oTrans, "UDMT01", opts);
	}

private string BuildMtlTagParams()
	{
		string str = "~";
		System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder(string.Empty);
		EpiDataView epiDataView = (EpiDataView) null;
		EpiDataView rcvDtlView = ((EpiDataView)(this.oTrans.EpiDataViews["ReceiptRcvDtl"]));
		if (rcvDtlView.Row < 0)
			{
			epiDataView = (EpiDataView) null;
			}
			else;
			{
				stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["PartNum"].ToString());
				stringBuilder.Append(str);
				stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["PartDescription"].ToString());
				stringBuilder.Append(str);
				stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["OurQty"].ToString());
				stringBuilder.Append(str);
				stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["ReceivedTo"].ToString());
				stringBuilder.Append(str);
				stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["RevisionNum"].ToString());
				stringBuilder.Append(str);
				stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["JobNum"].ToString());
				stringBuilder.Append(str);
				stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["PONum"].ToString());
				stringBuilder.Append(str);
				stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["POLine"].ToString());
				stringBuilder.Append(str);
				stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["PORelNum"].ToString());
				stringBuilder.Append(str);
				stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["VendorNum"].ToString());
				stringBuilder.Append(str);
				stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["ReasonCode"].ToString());
				stringBuilder.Append(str);
				stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["WareHouseCode"].ToString());
				stringBuilder.Append(str);
				stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["BinNum"].ToString());
				stringBuilder.Append(str);
				stringBuilder.Append(rcvDtlView.dataView[rcvDtlView.Row]["LotNum"].ToString());
			}
			return stringBuilder.ToString();
	}

}

The base Receipt Entry form specifies the “OurQty” parameter twice, so I do the same.

I’m on 10.1.600.9, so if you’re on a different version, it may expect different parameters or expect them in a different order. The best way to figure this out is to look at the parameters being sent and verify that it’s what the Material Tags form expects