Dynamic Code Blocks

Microsoft Dynamics GP & .NET technical Blog by Tim Wappat

List of Warehouse Management System (WMS) like software for Microsoft Dynamics GP

Generally I think of a warehouse management software as being 3D space aware, so it will have a geographical map of the warehouses and the spaces inside those warehouses. This allows for automation of where product is stored in that space. It also allows directed picks and put away, as well as pick face replenishment in an efficient manner with staff directed around optimal routes.

Most of the solutions below offer data capture capabilities only, falling short of full-on warehouse management. This is ok as often all that is required is automation of receipts, put away, picking and stock takes, these are the common pain points companies try to make more efficient. Hand held devices are used to enter data, these can be dedicated or tablets with sleds attached to them.

Company Software name
Accellos AccellosOne
Albaspectrum Alba360 WMS
Appolis Inc Without Boundaries, Real WMS for Dynamics GP
Asc Software Warehouse Management for Microsoft Dynamics GP
CalSoft CS WMS Star
FoxFire FoxFire WMS
Made4net WMS for Dynamics GP
Manhattan Associates Limited Warehouse Management
m-hance Advanced Data Capture
Panatrack inventory tracking and WMS for GP
SalesPad Data collection for GP
Savant Software Savant Software WMS
Sologlobe SOLOCHAIN Warehouse Management System for
Microsoft Dynamics GP
Supply Chain Network Solutions AUTOMATED DATA COLLECTION

 

I hope to explore more of these solutions in coming weeks.

How to check if MS SQL Server, Linked Server object is in use

Linked server objects allow one SQL server to connect to another at the database engine level. A connection is defined when creating the linked server, with credentials that should be used for that connection. As time passes, the challenge is knowing if that old linked server object is still being used by a report or script or import somewhere, as the original reason for its existence and person responsible may be long gone.

The quickest (not easiest) method to find dependencies on a linked server is to delete the linked server and wait for the phone to ring sometime over the next year. The person ranting on the other end will help you identify what it was used for. If the linked server was involved in a complex integration orchestration, or year/month end reporting, then the fall out from this maverick approach may not be pleasant to resolve nor may the call be in social hours... Instead carefully identify, then remove or correctly document the dependencies on the linked server object.

Here a few tips to help you find those dependencies:

Look for dependencies using SQL inbuilt dependency tracking

Using script from here List All Objects Using Linked Serverinvestigate any objects it returns.

SELECT 
Distinct
referenced_Server_name As LinkedServerName,
referenced_schema_name AS LinkedServerSchema,
referenced_database_name AS LinkedServerDB,
referenced_entity_name As LinkedServerTable,
OBJECT_NAME (referencing_id) AS ObjectUsingLinkedServer
FROM sys.sql_expression_dependencies
WHERE referenced_database_name IS NOT NULL
And referenced_Server_name = 'Enter LinkedServerName here'

Script out objects

In built dependency checking does not work if the dependency is “hidden” in a dynamically generated (sp_executesql) SQL statement or SQL jobs or is used by SQL replication subscriptions etc. If you don’t trust the dependency script above or have older SQL server version, script out all your stored procedures, views, user defined functions, SQL jobs and any other SQL objects that might reference the linked server. Then perform a text search over all the resulting scripts for the linked server name. If you find the text, in turn identify if that object is still in use. If you use notepad++ or similar advanced text editor, they provide multiple file search with regular expression support. The regular expression support is handy if the linked server name is used in other parts of the database, allowing the search to be narrowed down to text patterns likely to be a linked server.  Also do a search on any source code for applications that may be developed against that database.

Use Sql Profiler

Run SQL server Profiler for a month against the target server (on a spare machine) to see if the linked server login name appears, this is the login name of the connection set up in the linked server configuration. I recommend a month as month end scripts or monthly maintenance scripts will be caught, however this won’t catch scripts or reports that are only ran at year end or once in a while. The trick here is to make certain you change the linked server connection to use a uniquely identifiable login name, that way it is possible to use the filter option in SQL profiler to only log events from that LoginName. Changing the login name has to be a considered move as it will change the security context and may thus affect rights to the destination server objects. These approaches all have down sides, but on less complex scenarios this technique works well.

Before deleing the linked server object

In SSMS, right click the object and script out the linked server. Put the resulting create script somewhere easy to find before deleting it, this way it will be quick to put it back again should an urgent need for it occur, say at year end months later. Having the create script helps get things running and buys you time to fix the offending referencing scripts, or document them correctly if it is decided they should exist after all.

Word Template reports format messed up when rendered to PDF Dynamics GP 2015

Dynamics GP2015 Word PDF Alignment wrong

After upgrade to GP2015 it was found the modified reports using Word Templates screwed up when sent to email as PDF.

After a week of investigation and following false leads around the email interaction interfering with formatting, no solution was found.

Then after trying and failing to compensate for the column widths being upset and failing, the solution ended up to be an installation of the version 14.00.095, applying the GP January Hotfix.

Showing GP login box with Version 14.00.0952 shown

Information for the hotfix can be found under this post on the GP blogs… Microsoft Dynamics GP January Hotfix....RELEASED

Dynamics Community logo

There is an example included on this post in the community forums: Alignment issues in PDF version of Word Templates

Exception.ToString() and capturing inner exceptions

It is often worth going back to basics, it turns out quite a few people don’t realise that calling “.ToString” on an exception object in .NET, will provide a nicely formatted output suitable for logging. It will also recursively extract the inner exceptions, if there are any too.  It includes the stack trace. I’ve seen quite a few times now code that replicates the same functionality as this built in function. Here is the description from MSDN.

The default implementation of ToString obtains the name of the class that threw the
current exception, the message, the result of calling ToString on the inner exception,
and the result of calling Environment.StackTrace.
If any of these members is null, its value is not included in the returned string.

[MSDNException.ToString Method ()] 

This is quite helpful as it means no traversing the exception objects extracting the inner exceptions, if they exist as its already implemented in this method.