Job Closing Updatable Dashboard

I’m trying to build a Job Closing dashboard and I’m not finding any good instructions on what update processing is necessary to get the dashboard to work like the Job Closing window.

I currently have a BAQ and Dashboard setup and I’m able to close jobs, but I’m using “BPM update” as the processing method and using the BO of JobEntry since that’s the only one that had an “UpdateExt” method that also had the proper fields. This will close, but when you click the closed box the date isn’t populated, and it allows you to save it without a date at all, as well as if there is a qty miss match from the original production qty you’re not prompted about that. I’m fearing that not everything that needs to be processed is happening with the method I’m using.

Any Insight on this would be appreciated.

Run a trace when you are closing a job and see what method is called when you close jobs from the close job screen. Use that method and it should do what you need it to do. I probably would shy away from the updateext as it could possibly to skip some of the validations that you are looking.

See that’s part of the problem. I’ve done the trace and all I could find was the BO of JobClosing being used. Now when you are using the updatable dashboard configuration when you go pick the BO to use, its LOCKED on searching for a UpdateExt method. I can’t change that, and “JobClosing” does not have an UpdateExt method so you can’t choose that BO.

This is why I’m asking for more concise instructions on how to do this. I’m extremely green when it comes to updatable dashboards so I don’t know how to configure those. I have one other one out there but that uses the Job Entry UpdateExt as well since it’s only checking off custom boxes placed on the Job form.

This is a trace for Clicking on the closed box, It auto populates the date, and I clicked on the save button. This BO is not selectable when configuring the BAQ unless there is some special way of doing it.

<tracePacket>
  <businessObject>Erp.Proxy.BO.JobClosingImpl</businessObject>
  <methodName>OnChangeJobClosed</methodName>
  <appServerUri>net.tcp:///Epicor905Conv/</appServerUri>
  <returnType>System.Void</returnType>
  <localTime>3/11/2021 09:48:47:8200482 AM</localTime>
  <threadID>1</threadID>
  <executionTime total="12" roundTrip="6" channel="0" bpm="0" other="6" />
  <retries>0</retries>
  <parameters>
    <parameter name="ds" type="Erp.BO.JobClosingDataSet">
      <JobClosingDataSet xmlns="http://www.epicor.com/Ice/300/BO/JobClosing/JobClosing" />
    </parameter>
  </parameters>
  <serverTrace>
    <Op Utc="2021-03-11T14:48:47.8368220Z" act="Erp:BO:JobClosing/JobClosingSvcContract/OnChangeJobClosed" dur="0.9561" cli=":53703" usr="jonc" machine="" pid="10660" tid="386" xmlns="" />
  </serverTrace>
</tracePacket>

<tracePacket>
  <businessObject>Erp.Proxy.BO.JobClosingImpl</businessObject>
  <methodName>PreCloseJob</methodName>
  <appServerUri>net.tcp:///Epicor905Conv/</appServerUri>
  <returnType>System.Void</returnType>
  <localTime>3/11/2021 09:48:50:9895831 AM</localTime>
  <threadID>1</threadID>
  <executionTime total="12" roundTrip="6" channel="0" bpm="0" other="6" />
  <retries>0</retries>
  <parameters>
    <parameter name="ds" type="Erp.BO.JobClosingDataSet">
      <JobClosingDataSet xmlns="http://www.epicor.com/Ice/300/BO/JobClosing/JobClosing" />
    </parameter>
    <parameter name="RequiresUserInput" type="System.Boolean"><![CDATA[False]]></parameter>
  </parameters>
  <serverTrace>
    <Op Utc="2021-03-11T14:48:51.0055194Z" act="Erp:BO:JobClosing/JobClosingSvcContract/PreCloseJob" dur="1.0249" cli=":53703" usr="jonc" machine="" pid="10660" tid="270" xmlns="" />
  </serverTrace>
</tracePacket>

<tracePacket>
  <businessObject>Erp.Proxy.BO.JobClosingImpl</businessObject>
  <methodName>CloseJob</methodName>
  <appServerUri>net.tcp:///Epicor905Conv/</appServerUri>
  <returnType>System.Void</returnType>
  <localTime>3/11/2021 09:48:51:0100163 AM</localTime>
  <threadID>1</threadID>
  <executionTime total="44" roundTrip="38" channel="0" bpm="0" other="6" />
  <retries>0</retries>
  <parameters>
    <parameter name="ds" type="Erp.BO.JobClosingDataSet">
      <JobClosingDataSet xmlns="http://www.epicor.com/Ice/300/BO/JobClosing/JobClosing" />
    </parameter>
    <parameter name="pcMessage" type="System.String"><![CDATA[]]></parameter>
  </parameters>
  <serverTrace>
    <Op Utc="2021-03-11T14:48:51.0261075Z" act="Erp:BO:JobClosing/JobClosingSvcContract/CloseJob" dur="31.656" cli=":53703" usr="jonc" machine="" pid="10660" tid="386" xmlns="">
      <BpmCustomization Source="DB" BpMethodCode="Erp.JobHead" Type="In Transaction Trigger" Duration="2">
        <BpmDirective Type="0" ID="1cdfd69a-8152-4bee-9340-1c4a454a87d8" Name="Job Head Change Log" VisibilityScope="0" Duration="2" />
      </BpmCustomization>
    </Op>
  </serverTrace>
</tracePacket>

You might not be able to to that with the basic update, you might have to use the advance BPM and make it yourself, unfortunately.

And I am unable to do that without knowing all of the things that happen when you close the job, or how to write something like that. This is why I was asking on here. I was hoping for more instruction or examples from others who have done this.

Well, the trace just showed you what’s happening. But it looks like you started too late with that one.

Do you have the BL tester set up? This will show you the methods that are available. Just looking at the list, you will start with GetNewJobClosing(), then call OnChangeJobNum()… etc.

Should should be able to call all of this with widgets in the bpm. Start your trace from right when you open the screen and go until after you closed it. You can leave out the searches, but call everything else.

I do not have the BL tester setup.
After further review it seems like creating an exportable Dashboard of jobs that need to be closed and then using the DMT to process the list of jobs that they want to close is going to be the easiest way to accomplish this. I can test that process in a matter of min vs having to dissect what is going on during the job closing process and then replicating that in the dashboard.

thanks for the help even though I didn’t go that route… Sorry that’s all way over my head.

I have written dashboards and BPMs to auto close jobs under very specific conditions. The only fields that I found that needed to be set was the following:

                        JobHead.JobComplete = true;
                        JobHead.obCompletionDate = DateTime.Today;
                        JobHead.JobClosed = true;
                        JobHead.ClosedDate = DateTime.Today;

I also found that when this happened, there is some form of data trigger that executes and does the rest of the job closing.

1 Like