Handheld Change Workstation

Here’s a trace when I open the change workstation form.

Expand to show full trace

<tracePacket>
  <businessObject>Ice.Proxy.Lib.ClassAttributeImpl</businessObject>
  <methodName>GetAttributes</methodName>
 

 <appServerUri>net.tcp://<your app server here>/EpicorERPTest/</appServerUri>
  <returnType>Ice.Tablesets.ClassAttributeTableset</returnType>
  <localTime>14/03/2019 12:26:53:8898445 PM</localTime>
  <threadID>1</threadID>
  <executionTime total="34" roundTrip="30" channel="0" bpm="0" other="4" />
  <retries>0</retries>
  <parameters>
    <parameter name="classNames" type="System.String"><![CDATA[Workstation]]></parameter>
    <parameter name="nameSpace" type="System.String"><![CDATA[Erp.BO]]></parameter>
  </parameters>
</tracePacket>

<tracePacket>
  <businessObject>Ice.Proxy.Lib.ClassAttributeImpl</businessObject>
  <methodName>GetAttributes</methodName>
  <appServerUri>net.tcp://<your app server here>/EpicorERPTest/</appServerUri>
  <returnType>Ice.Tablesets.ClassAttributeTableset</returnType>
  <localTime>14/03/2019 12:26:53:9368434 PM</localTime>
  <threadID>1</threadID>
  <executionTime total="26" roundTrip="24" channel="0" bpm="0" other="2" />
  <retries>0</retries>
  <parameters>
    <parameter name="classNames" type="System.String"><![CDATA[Workstation]]></parameter>
    <parameter name="nameSpace" type="System.String"><![CDATA[Erp.BO]]></parameter>
  </parameters>
</tracePacket>

<tracePacket>
  <businessObject>Erp.Proxy.BO.WorkStationImpl</businessObject>
  <methodName>GetList</methodName>
  <appServerUri>net.tcp://<your app server here>/EpicorERPTest/</appServerUri>
  <returnType>Erp.Tablesets.WorkstationListTableset</returnType>
  <localTime>14/03/2019 12:26:53:9638476 PM</localTime>
  <threadID>1</threadID>
  <executionTime total="15" roundTrip="14" channel="0" bpm="0" other="1" />
  <retries>0</retries>
  <parameters>
    <parameter name="whereClause" type="System.String"><![CDATA[ BY WorkStationID]]></parameter>
    <parameter name="pageSize" type="System.Int32"><![CDATA[0]]></parameter>
    <parameter name="absolutePage" type="System.Int32"><![CDATA[0]]></parameter>
    <parameter name="morePages" type="System.Boolean"><![CDATA[False]]></parameter>
  </parameters>
</tracePacket>

<tracePacket>
  <businessObject>Ice.Proxy.Lib.ClassAttributeImpl</businessObject>
  <methodName>GetAttributes</methodName>
  <appServerUri>net.tcp://<your app server here>/EpicorERPTest/</appServerUri>
  <returnType>Ice.Tablesets.ClassAttributeTableset</returnType>
  <localTime>14/03/2019 12:26:53:9788416 PM</localTime>
  <threadID>1</threadID>
  <executionTime total="27" roundTrip="23" channel="0" bpm="0" other="4" />
  <retries>0</retries>
  <parameters>
    <parameter name="classNames" type="System.String"><![CDATA[Workstation]]></parameter>
    <parameter name="nameSpace" type="System.String"><![CDATA[Erp.BO]]></parameter>
  </parameters>
</tracePacket>

<tracePacket>
  <businessObject>Ice.Proxy.Lib.SessionModImpl</businessObject>
  <methodName>SetWorkstation</methodName>
  <appServerUri>net.tcp://<your app server here>/EpicorERPTest/</appServerUri>
  <returnType>System.Void</returnType>
  <localTime>14/03/2019 12:26:57:4714094 PM</localTime>
  <threadID>1</threadID>
  <executionTime total="71" roundTrip="30" channel="39" bpm="0" other="2" />
  <retries>0</retries>
  <parameters>
    <parameter name="newWorkstationID" type="System.String"><![CDATA[PACK]]></parameter>
    <parameter name="workstationDescription" type="System.String"><![CDATA[]]></parameter>
  </parameters>
</tracePacket>

Thats pretty much how everyone has been doing it thus far. You assign a Handheld to a Station / Plant. Then they login with a Generic User HH01 let’s say for Receiving and it will prompt them for their Employee ID but that Employee has no UserID Link.

Same like MES Stations. We have Forklift drivers, jump off and use any MES Station they want, but then their Labels Print back in Shipping because their ID is tied to that Printer. So the rule always is, use the proper Workstation.

Then you tie the Devices to HH01 and HH02 etc… I know it’s not as practical, but thats what Epicor has been preaching.

I retested that today and yes that is how I have it setup now. Logging out and back in is a bit of a pain to be honest, particularly where you have the same person preforming different tasks in different areas. There is a lot to be said
for portable label printers.

Being able to swap workstations in the app would have resolved this issue and save the additional admin of setting up extra AD users and tieing them to specific workstations.

C’est la vie.

On to more interesting things like playing with Mycoft.

You could add a Menu Item to the HH Menu and then switch in there… It is possible. Just not ouf of the Box :slight_smile:

I was thinking of that, but just was not sure on the best approach.

The only thing I guess a HH Menu that Opens up a UD20 screen for example and then you have dropdown and a button. As Simple as Possible.

You can do this.oTrans.Session.SetPlantID(“12334”); and it will swtich it or even change users in there with .SetUserID(…);

SetCompanyID(CompanyID).SetPlantID(PlantID).SetUserID(UserID).SetEmployeeID(EmployeeID)

If I recall you can even do SetWorkstation - Perhaps just make a Workstation Switcher.

1 Like

I agree with that. How about a dashboard and the change on the row select?

@Chris_Conn did some heavy research on the HH Menu and struggled with it, I wonder if he can give you a boiler plate code.

I did heavy customization to the way workstation printing worked, this was mainly in MES, not HH though. With that said, the same approach could be applied.

The crux of the whole thing was avoiding using AutoPrint (with Bartender) and instead, writing my own logic to generate the BT files. That opened up a huge amount of flexibility, and ultimately, I made it such that the selected printer would default based on the workstation, but the user had the entire selection of (label) printers at their disposal. That way, if my forklift was on the otherside of the building, I could look at the name tagged on the side of the printer (could even barcode and scan) to select the proper printer.

Also, the user had the ability to set copies, reprints, etc.

2 Likes

I’ve got labels working as custom code bpms, I ended up testing for the assembly as we had specific labels based on customer forms, so that works, I’ve also added a menu based on some of your direction in other posts. I’m thinking Iight ba able to advance button to the menu to drive the workstation change, but at least we have the fallback of multiple AD users… @Chris_Conn sounds like you were in the same situation as us, not having the numbers of employees to only perform only one part of the process as Epicor expects.
Thanks for the advice, and suggestions.

Not sure if it can be done…but probably can:

var ses = ((Ice.Core.Session)oTrans.Session);
ses.WorkstationID = "MyDesiredWorkStation";

Make a screen to display all WorkStations and Associated printers.
When user selects one, try to set the workstation in the current session.
Print to your newly selected printer

1 Like

This is my attempt. Created a simple BAQ/Dashboard with a tracker deployed, added a button to the assembly as a customisation, Modified the Erp.Menu.Handheld to add a new button and label so show the workstation. Then used the process calling example to tell the menu that the form has workstation was changed, then just @Chris_Conn/@hkeric.wci code to refresh the Workstation label.

Dashboard is a bit clunky but it appears to work. Just need to check the prn parameter in the bartender reports to confirm it is picking things up correctly, but I think it will be.

HHChangeWorkstation

Thanks again for all the advice and historical posts.

Also meant to mention theirs a setButtonImage method in the Erp.Menu.Handheld assembly

5 Likes

Looks very good! Nice work… Someone tag Epicor to Learn from it :slight_smile: hehe

What image did you use for setButtonImage? for that Monitor

@Hally you are violating the Golden Rule… That those who help get the source code. :smiley: Right @Chris_Conn

1 Like

Full steps to replicate will come in due course :grin:. Thought I might make it “A one way to do it” how to… Was going to put it in code review, I’m sure there are some refinements that can be made, but for a first attempt I was chuffed it worked pretty much first go!

On the menu the new button I added for the workstation (second button from the bottom)

Any thoughts on using Bluetooth/iBeacon to find the closest printer? You can buy USB BLE Beacons for about $30.

1 Like

Never heard of them before. Intetesting. I took a quick look, that might work with an Android App or windows client, but not the Epicor handheld app running on RDS, don’t think you could get a Bluetooth beacon to reach our RDS servers in Azure :grin: Nice thought @Mark_Wonsil even better than having the user to remember to change workstation. Perhaps a prompt after printing saying “Printed to…” With an option to suppress until the device changes printers, of course we have printers that have different stock, just to complicate things…

1 Like

Would be pretty cool, you could also potentially use RFID at chokepoints (ala walmart theft deterrents) to determine the zone a user was in.

Hell if you’re using wifi, I wonder if you could just determine what AP your on.

Not sure how that would work with RDP, obviously the RDP Server itself isn’t moving. You almost need to create a Native App on Windows Mobile to use Hardware API?

Im surprised @hmwillett hasnt chimed in on this Post. He probably busy with St. Patricks Day.

2 Likes