APInvoiceImpl UpdateMaster Method parameter

I am trying to create a BPM when the GLAccount on an Invoice is a particular value. I am not able to see the parameter name in the BPM preprocessing method parameters. Is there a reference I need to include to see them in the code? Or am I reading the trace log wrong. Any guidance would be great.

The BPM is if the GLAccount 01-587000 then prompt user.

  <localTime>5/1/2017 14:47:24:3856321 PM</localTime>
    <parameter name="Company" type="System.String"><![CDATA[EmbedTek]]></parameter>
    <parameter name="COACode" type="System.String"><![CDATA[ETCOA]]></parameter>
    **<parameter name="GLAccount" type="System.String"><![CDATA[01-999000]]></parameter>**
    <parameter name="CallContext" type="Ice.Bpm.Context.ContextDataSet">
      <ContextDataSet xmlns="http://www.epicor.com/Ice/300/Bpm/Context">
    <returnParameter name="result" type="System.String"><![CDATA[]]></returnParameter>
    <returnParameter name="grpTotalInvAmt" type="System.Decimal"><![CDATA[3000.000]]></returnParameter>
    <returnParameter name="requiresUserInput" type="System.Boolean"><![CDATA[False]]></returnParameter>
    <returnParameter name="opMessage" type="System.String"><![CDATA[]]></returnParameter>
    <returnParameter name="opMsgChkBankRef" type="System.String"><![CDATA[]]></returnParameter>
    <returnParameter name="opChkRevMsg" type="System.String"><![CDATA[]]></returnParameter>
    <returnParameter name="lEnableGenLegalNum" type="System.Boolean"><![CDATA[False]]></returnParameter>
    <returnParameter name="lUpdateRan" type="System.Boolean"><![CDATA[True]]></returnParameter>
    <returnParameter name="opDUAMsg" type="System.String"><![CDATA[]]></returnParameter>
    <returnParameter name="ds" type="APInvoiceTableset">
      <APInvoiceDataSet xmlns="http://www.epicor.com/Ice/300/BO/APInvoice/APInvoice">

I think the data you are looking for will be contained in the dataset:

<returnParameter name="ds" type="APInvoiceTableset">

The ds is listed as an in/out parameter in the preprocessing method. Have you tried running your trace with the ‘Write Full DataSet’ option enabled?

My first post is with full dataset option enabled.

I think I see the issue. Just don’t know how to get around it.

Here is the code am creating. It looks through each ttAPInvExp to see if it is a particular GLAccount. If it is in the subset then I check the APInvDtl to make sure a field has an entry.

If there APInvDtl field is blank I prompt an error.

All good up to this point.

How do I reset the ttAPInvExp to the previous account so that the user can go back to the APInvDtl (detail screen) and enter the value?


string strVendorNum = “”;
string strInvoiceNum = “”;
string strInvoiceLine = “”;
bool blnStop = false;
string strRelNeedFix = “The following Expense Items need an EWO:\r\n”;

//Epicor.Customization.Bpm.InfoMessage.Publish("FirstLoop: " + rAPInvDtl.UDField<System.String>(“EWO_c”));
foreach(var RelTranGLC in (from ThisTranGLC in ttAPInvExp where
((ThisTranGLC.GLAccount == “587000|01”)
|| (ThisTranGLC.GLAccount == “588100|01”)
|| (ThisTranGLC.GLAccount == “588200|01”)
|| (ThisTranGLC.GLAccount == “588500|01”)
|| (ThisTranGLC.GLAccount == “641300|01|3000”)
|| (ThisTranGLC.GLAccount == “641400|01|3000”)
|| (ThisTranGLC.GLAccount == “643050|01|3000”)
|| (ThisTranGLC.GLAccount == “651000|01|3000”)
|| (ThisTranGLC.GLAccount == “651100|01|3000”))
select ThisTranGLC))

/*Here we will get the current record */
foreach (var rAPInvDtl in (from ThisAPInvDtl in ttAPInvDtl where
(RelTranGLC.VendorNum == ThisAPInvDtl.VendorNum && ThisAPInvDtl.InvoiceLine == RelTranGLC.InvoiceLine RelTranGLC.InvoiceNum == ThisAPInvDtl.InvoiceNum) select ThisAPInvDtl))
//Epicor.Customization.Bpm.InfoMessage.Publish( RelTranGLC.GLAccount);

			if (rAPInvDtl.EWO_c == "")
					strRelNeedFix = strRelNeedFix + rAPInvDtl.EWO_c + " Line: " + RelTranGLC.InvoiceLine + "\r\n";
					blnStop = true;

	if (blnStop)
			var message = strRelNeedFix +"EWO field cannot be blank when GL Account is one of the following:\r\n•	01-587000\r\n•	01-588100\r\n•	01-588200\r\n•	01-588500\r\n•	01-641300-3000\r\n•	01-641400-3000\r\n•	01-643050-3000\r\n•	01-651000-3000\r\n•	01-651100-3000";

			throw new Ice.Common.BusinessObjectException(
			new Ice.Common.BusinessObjectMessage(message)
				Type = Ice.Common.BusinessObjectMessageType.Error,


I’m not sure I understand about resetting the temp table, but if you want to get back to a previous record, could you keep a last account variable and update it as you progress? You could hopefully use it to find a specific record in the temp table.