Zenkraft Blog

Run your Logistics and Post-Purchase Experience on the Salesforce Platform.

Matouk Goes Best of Breed With Zenkraft and Rootstock

Published on 23 October 2017 by in  

Matouk & Co. Inc.,is a world renowned textile manufacturer, producing high-end bed and bath linens. Their headquarters, located in Fall River, Massachusetts, is a world-class facility featuring a solar energy system, advanced production technologies, and an environment committed to promoting the health and well being of their employees. At Matouk old world techniques live hand-in-hand with state of the art tools and production philosophies.

When Matouk was transitioning to they realized that, like many companies, they had a unique opportunity to take advantage of the Salesforce ecosystem to build a true best of breed solution. Through their evaluation process they chose Rootstock Software as their Enterprise Resource Planning (ERP) system. Prior to Salesforce, they were using legacy desktop software for their Pick and Pack stations. While this could generate their FedEx labels it couldn’t connect to Rootstock. Matouk fulfils 5,000 orders a month via FedEx alone, so a high level of automation was important.

Zenkraft was identified as the leading shipping service provider. It was recommended that Matouk utilize the Bulk Automation App and FedEx app. This would enable Matouk to:

  • Recreate and enhance the UI of the legacy Pick and Pack station software inside Salesforce.
  • Connect to existing hardware devices including printers, scanners and scales.

In additional to shipping labels, the Zenkraft solution was able to generate custom documentation including:

  • Content packing slips printed using thermal printers.
  • A PDF Packing Slip for each package.
  • A PDF Master Packing document after a shipping session was completed.
  • Custom FedEx shipping labels to include Sales Order Number and Total Weight in the DocTab.

Zenkraft’s Automation App enabled browser-to-peripheral connectivity so that barcode scans could be recognized and auto-packed. This workflow obtained the product weight for the containers from the scales without extra user interaction. Utilising the Rootstock API to update the status of the order and the order items at various stages of the Pick and Pack and Ship process. This included the ability to create full and partial shipments.

As a result of the implementation, Matouk fully transitioned to Salesforce, with full visibility of their inventory, order data and their FedEx packages.

In the future, Matouk plans to integrate with Zenkraft’s UPS app and other niche carriers that are used for occasional shipping.

Continue reading »

Create a scheduled job code to delete any FedEx checkpoints for shipments that have been delivered more than 2 week ago

Published on 04 October 2017 by in  

Todays blog post will show you the code needed to set up a scheduled job that will remove all FedEx checkpoint objects for shipments that have been delivered more than 2 weeks ago.

This is useful if you are coming up against salesforce storage limits and need to clear out some space.

We will need to create two classes and then their respective test classes.


This class creates the list of all the checkpoints that need to be deleted.

Line 7 creates the SELECT query, and Line 15-16 is where the DELETE statement is executed.


This class is needed to execute the RemoveDeliveredCheckpointsBatch above, and will be the class that we use the Schedule Apex on your production instance, once these classes have been deployed.


The test class for RemoveDeliveredCheckpointsBatch


The test class for RemoveDeliveredCheckpointsScheduler

Next you need to create the changeset and deploy these classes into your production environment.

Once in your production environment you need to go to Setup > Develop > Apex Classes and click on the schedule Apex button:

Fill in the details and remember to input RemoveDeliveredCheckpointsScheduler into the Apex class field.

If you want the job to run everyday at 5am then set up the page like so:

Click Save, and you’re finished.

Please let us know if you have any questions and we will be happy to help.

Continue reading »

Bulk Cancel UPS shipments

Published on 18 July 2017 by in  

A quick code snippet for you today, if you want to cancel all UPS shipments that have not been picked up.

Here is the code to run in Developer Console:

Line 4 determines the shipments we want to set as cancelled. For this snippet we have decided to cancel all shipments older than UPS-Shipment-0000001000.

Line 7 then uses our startMassShipmentCancelBatch process that goes through all the shipments and cancels them.

Please contact us if you have any questions and we will be glad to help.

Continue reading »

Using Process Builder to Add FedEx Tracking Number to your Contact Object

Published on 11 July 2017 by in  

Today's blog post will show you how add the FedEx Tracking Number onto the Contact object after you have created a shipment.

Firstly make sure you have the text field available on your contact object:


Next let’s create a Process Builder task to retrieve the tracking number once the shipment has been created.

To access the process builder page, go to Setup > Create > Workflow & Approvals > Process Builder

Click on “New” and give it a name. We want to start this process when “A record changes” , so select that from the dropdown. This is what you should see:

You are now presented with this blank process builder screen.

Click on the “Add Object” button and select the “FedEx Shipment” object. We need to start the process only when a record is created.


The next step is to “Add Criteria”, and we want to ensure that there is a relationship to the contact object. We do this by filling in these fields here.

Here is the closer look at the “Field” value we have chosen


Next we click on “Set Schedule” and set the time for actions to execute at “0 Days After CreatedDate”

We do this as it creates a small delay after the shipment has been created, which ensures the shipment creation process is not blocked.

Next we need to select which records to update. Make sure you select “Recipient Contact”, and not “Recipient Contact >” as there is a big difference.


Next set the field value you want to update on the Contact object, which in our case is “FedEx Tracking Number”.

The Value field we are using is the Master Tracking Number as you can see here.


That’s it, lets activate it and do a test shipment from the contact object, and you should then see the tracking number appear like so:

If you have any issues then please contact us and we would be glad to help.

Continue reading »