Open Forum

Expand all | Collapse all

IDLE Users - Users who appear active

  • 1.  IDLE Users - Users who appear active

    Posted Jan 15, 2019 02:22 PM
    Edited by Michael Barnes Jan 15, 2019 03:40 PM

    I have found several ways to guesstimate user activity as an expression of idle time.

    We are managing to a limited license count and have attached it to a server job that runs every 15 minutes and if at a particular % of capacity, it emails me the results of this script. To date it has worked well to find some obvious offenders who go to lunch and not logout or at the end of the day. Education and puritan shaming is how we manage it now without invoking another add on.

    We just discovered that however our results are inaccurate in that we have many uses who APPEAR active.
    I have used one script  I cobbled together and compared it to others, including the only one I was able to find here on GPUG only to find each provide the SAME results sets.

    So the question is -
    Are there add ons or ISV solutions that create "ghost activity" or behavior as a side effect that would emulate a user actively working in GP ?
    RDC vs Desktop Client Installation ?

    Here are two slightly different scripts that yield the same results for me, both show several users active when clearly off the property and their workstations locked..

    Here is mine:

    SELECT SY01500.INTERID AS SQL_DB, sysProc.spid AS SQL_SPID, SY01500.CMPNYNAM AS Company, Activity.USERID AS Login_ID, Usr.USERNAME AS User_Name,
    
    sysproc.login_time as Login_Timestamp,
    
    DATEDIFF(hour, sysproc.login_time, GETDATE()) as Approx_Hours_LoggedIn,
    
    DATEDIFF(minute, sysproc.last_batch, GETDATE()) as Inactive_Minutes
    
    FROM   DYNAMICS..ACTIVITY Activity (NOLOCK)
    
    INNER JOIN DYNAMICS..SY01400 Usr (NOLOCK) ON Activity.USERID = Usr.USERID
    
    INNER JOIN DYNAMICS..SY01500 SY01500 ON Activity.CMPNYNAM = SY01500.CMPNYNAM
    
    LEFT OUTER JOIN tempdb..DEX_SESSION DexSession ON Activity.SQLSESID = DexSession.session_id
    
    LEFT OUTER JOIN master..sysprocesses sysproc ON DexSession.sqlsvr_spid = sysproc.spid AND Activity.USERID = sysproc.loginame
    
    ORDER BY CASE WHEN sysproc.last_batch IS NULL THEN 9999999 ELSE DATEDIFF(minute, sysproc.last_batch, GETDATE()) END , Activity.USERID​

    Here is another (not mine and avail here on the GPUG site) :

    declare @IdleMinutes int
    set @IdleMinutes = 0 /*Set the number of minutes. If the idle minutes are greater than this, the users will appear in the results. */
    
    
    SELECT 
    	A.USERID as USERID,
    	rtrim(u.USERNAME) as USERNAME,
    	convert(varchar(10), logindat, 101) as LOGIN_DATE,
    	ltrim(substring(convert(varchar(20), logintim, 100), 13, len(convert(varchar(20), logintim, 100)))) as LOGIN_TIME,
    	CASE 
    		WHEN DATEDIFF(mi, P.last_batch, GETDATE()) >= 60 then	
    		cast(( CASE 
    						WHEN DATEDIFF(mi, P.last_batch, GETDATE()) > 1
    						THEN DATEDIFF(mi, P.last_batch, GETDATE())
    						ELSE 0
    					END ) / 60 as varchar(5)) + ' hours(2), ' 
    				+ RIGHT('0' + cast(( CASE 
    												WHEN DATEDIFF(mi, P.last_batch, GETDATE()) > 1
    												THEN DATEDIFF(mi, P.last_batch, GETDATE())
    												ELSE 0
    											END )%60 as varchar(2)), 2) + ' minute(s)'
    		WHEN DATEDIFF(mi, P.last_batch, GETDATE()) < 60 then	
    		RIGHT('0' + cast(( CASE 
    											WHEN DATEDIFF(mi, P.last_batch, GETDATE()) > 1
    											THEN DATEDIFF(mi, P.last_batch, GETDATE())
    											ELSE 0
    										END )%60 as varchar(2)), 2) + ' minute(s)'
    		else ''
    	end as IdleTime,	
    	CASE 
    		WHEN DATEDIFF(mi, P.last_batch, GETDATE()) > 1
    		THEN DATEDIFF(mi, P.last_batch, GETDATE())
    		ELSE 0
    	END AS IDLE_TIME,
    	rtrim(A.CMPNYNAM) as COMPANY_NAME,
    	GETDATE() as Run_Date_Time
    
    FROM DYNAMICS..ACTIVITY A
    	LEFT JOIN DYNAMICS..SY01400 U 
    		ON A.USERID = U.USERID
    	LEFT JOIN DYNAMICS..SY01500 C 
    		ON A.CMPNYNAM = C.CMPNYNAM
    	LEFT JOIN tempdb..DEX_SESSION S 
    		ON A.SQLSESID = S.session_id
    	LEFT JOIN master..sysprocesses P
    		ON S.sqlsvr_spid = P.spid
    		AND ecid = 0
    	LEFT JOIN master..sysdatabases D 
    		ON P.dbid = D.dbid
    where 
    	( CASE 
    		WHEN DATEDIFF(mi, P.last_batch, GETDATE()) > 1
    		THEN DATEDIFF(mi, P.last_batch, GETDATE())
    		ELSE 0
    	END ) >= @IdleMinutes
    order by IDLE_TIME desc





    ------------------------------
    Michael Barnes
    IT Manager, Enterprise Systems
    Kenco Group, Inc
    Chattanooga GA
    ------------------------------


  • 2.  RE: IDLE Users - Users who appear active

    TOP CONTRIBUTOR
    Posted Jan 15, 2019 03:16 PM
    Hi @Michael Barnes

    1) Your script is more accurate than the one you found.  I like it.
    2) The table DYNAMICS..SY00800 will show you if a user is in a transaction
    3) However, no table can show you if a user is in an inquiry window or running SmartLists, etc.

    To your question: Any third party that would show "ghost activity" would have a dedicated log-in (generally).

    I ran your script, and while I have GP Open on my desktop I have not used in in several hours - however your script did say that I'd been inactive for 1 minute.  Just ran it again having not touched my computer for a few minutes and it still does not show I'm idle.

    I've never really looked at how to do this, but I feel your pain.

    I was a GP Admin at one company that had this issue and since it was so "behavioral" we ended up just sending out a message twice a day and around 4pm in the evening.  You can send all users logged in to GP a message from within the application.



    Best of luck and if you do perfect a script I know a lot of people would love to see it!!

    ------------------------------
    Kindest Regards,
    Jo deRuiter , MCP, DCP
    "That GP Red Head"
    AISLING DYNAMICS CONSULTING, LLC
    WEBSITE: https://aislingdynamics.com/
    BLOG: https://community.dynamics.com/gp/b/gplife
    GPUG Academy Instructor
    Dynamics GP Credentialing Council-Vice Chair
    770-906-4504 (Cell)

    ------------------------------



  • 3.  RE: IDLE Users - Users who appear active

    Posted Jan 15, 2019 03:47 PM
    We are looking to implement the FASTPATH pseudo "single sign on" tool-set that includes as an extra feature the auto logout for idle users. My concern is whatever behavior shows this as not idle in these scripts, will spoof such ISV solutions as well.

    In any event
    if Jo DeRuiter says she feels my pain, then I must be on a doomed quest.  ;-)


    ------------------------------
    Michael Barnes
    IT Manager, Enterprise Systems
    Kenco Group, Inc
    Chattanooga GA
    ------------------------------



  • 4.  RE: IDLE Users - Users who appear active

    TOP CONTRIBUTOR
    Posted Jan 15, 2019 03:57 PM
    LOL @Michael Barnes

    Fastpath is an awesome tool and I think they have different types of querying and background checking for idleness - I know they use AD and other non-SQL processing as well to determine this.

    I don't think you'd need to worry about them!  But, definitely voice your concerns as you go through a discovery process.​

    ------------------------------
    Kindest Regards,
    Jo deRuiter , MCP, DCP
    "That GP Red Head"
    AISLING DYNAMICS CONSULTING, LLC
    WEBSITE: https://aislingdynamics.com/
    BLOG: https://community.dynamics.com/gp/b/gplife
    GPUG Academy Instructor
    Dynamics GP Credentialing Council-Vice Chair
    770-906-4504 (Cell)

    ------------------------------



  • 5.  RE: IDLE Users - Users who appear active

    GPUG ALL STAR
    Posted Jan 15, 2019 05:15 PM
    @Michael Barnes,

    I had a similar concern when I developed my GP Admin Dashboard. That single inactivity number of minutes didn't seem to give me much.

    So I figured out a way to get the number of minutes since the next-to-last activity. Here's the query I use:

    SELECT RTRIM(um.USERNAME) AS [User Name]
       , CASE um.UserType
          WHEN 1 THEN 'Full'
          WHEN 2 THEN 'Limited'
          WHEN 4 THEN 'Self-serve'
          ELSE '---'
       END AS [Type]
       , RTRIM(da.CMPNYNAM) AS Company
       , FORMAT(da.LOGINDAT, 'yyyy-MM-dd', 'en-us') + ' '
          + FORMAT(da.LOGINTIM, 'HH:mm', 'en-us') AS [Logged in at]
       , CONVERT(varchar, ABS(DATEDIFF(minute, da.LOGINDAT + da.LOGINTIM, GETDATE())))
          + ' minutes' AS [For how long?]
       , da.SQLSESID AS [Session]
       , S.sqlsvr_spid AS GP_spid
       , (
          SELECT COUNT(*)
          FROM [master].sys.sysprocesses AS ms
          WHERE (loginame = da.USERID)
       ) AS Spid_count
       , CASE ISNULL(om.USERID, '---')
          WHEN '---' THEN 'OK'
          ELSE 'No SQL session'
       END AS [Status]
       , ISNULL(RTRIM(P.[status]), 'No match') AS [Proc status]
       , ISNULL(
          ( SELECT FORMAT(MIN(last_batch), 'h:mm tt', 'en-us') AS LastBatch
          FROM (
             SELECT TOP (1) last_batch
             FROM [master].sys.sysprocesses
             WHERE (loginame = da.USERID)
             ORDER BY last_batch DESC
          ) AS m
       ), 'xxx' ) AS [Last]
       , ISNULL(DATEDIFF(mi,  (
          SELECT MIN(m_3.last_batch) AS LastBatch
          FROM (
             SELECT TOP (1) last_batch
             FROM [master].sys.sysprocesses
             WHERE (loginame = da.USERID)
             ORDER BY last_batch DESC
          ) AS m_3
       ), GETDATE() ), - 999 ) AS [Mins.]
       , ISNULL(
          ( SELECT FORMAT(MIN(m_2.last_batch), 'h:mm tt', 'en-us') AS LastBatch
          FROM (
             SELECT TOP (2) last_batch
             FROM [master].sys.sysprocesses
             WHERE (loginame = da.USERID)
             ORDER BY last_batch DESC
          ) AS m_2
       ), 'xxx' ) AS [2nd Last]
       , ISNULL(DATEDIFF(mi,  (
          SELECT MIN(m_1.last_batch) AS LastBatch
          FROM (
             SELECT TOP (2) last_batch
             FROM [master].sys.sysprocesses
             WHERE (loginame = da.USERID)
             ORDER BY last_batch DESC
          ) AS m_1
       ), GETDATE()), - 999 ) AS [Mins. 2nd]
       , ISNULL(b.batch_count, 0) AS B
       , ISNULL(r.resource_count, 0) AS R
       , ISNULL(t.table_locks, 0) AS T
    FROM DYNAMICS..ACTIVITY AS da
    LEFT OUTER JOIN (
       SELECT USERID
       FROM DYNAMICS..ACTIVITY
       WHERE USERID NOT IN (
          SELECT DISTINCT loginame
          FROM [master].sys.sysprocesses
       )
    ) AS om
       ON da.USERID = om.USERID
    LEFT OUTER JOIN DYNAMICS..SY01400 AS um
       ON da.USERID = um.USERID
    LEFT OUTER JOIN tempdb.dbo.DEX_SESSION AS S
       ON da.SQLSESID = S.session_id
    LEFT OUTER JOIN [master].sys.sysprocesses AS P
       ON S.sqlsvr_spid = P.spid
       AND da.USERID = P.loginame
    LEFT OUTER JOIN (
       SELECT USERID
          , COUNT(*) AS batch_count
       FROM DYNAMICS..SY00800
       GROUP BY USERID
    ) AS b
       ON da.USERID = b.USERID
    LEFT OUTER JOIN (
       SELECT USERID
          , COUNT(*) AS resource_count
       FROM DYNAMICS..SY00801
       GROUP BY USERID
    ) AS r
       ON da.USERID = r.USERID
    LEFT OUTER JOIN (
       SELECT session_id
          , COUNT(*) AS table_locks
       FROM tempdb.dbo.DEX_LOCK
       GROUP BY session_id
    ) AS t
       ON da.SQLSESID = t.session_id
    ORDER BY [Mins.]
       , [Mins. 2nd]
       , [User Name];

    Just another possibility.

    Regards,

    ------------------------------
    "Sparkly" Steve Erbach - Green Bay, WI
    Co-Chair, GPUG WI (Green Bay) Chapter
    Blog: https://www.gpug.com/blogs/steve-erbach
    Twitter: twitter.com/serbach
    2018-12-06_08_06_34-Mozilla_Firefox.jpg
    ───────────────
    Excel Webinar List
    ------------------------------



  • 6.  RE: IDLE Users - Users who appear active

    TOP CONTRIBUTOR
    Posted Jan 16, 2019 08:12 AM
    @Steve Erbach

    I'm definitely going to try this script - it's exciting!

    Thanks for sharing!​

    ------------------------------
    Kindest Regards,
    Jo deRuiter , MCP, DCP
    "That GP Red Head"
    AISLING DYNAMICS CONSULTING, LLC
    WEBSITE: https://aislingdynamics.com/
    BLOG: https://community.dynamics.com/gp/b/gplife
    GPUG Academy Instructor
    Dynamics GP Credentialing Council-Vice Chair
    770-906-4504 (Cell)

    ------------------------------



  • 7.  RE: IDLE Users - Users who appear active

    GPUG ALL STAR
    Posted Jan 16, 2019 08:58 AM
    @Jo deRuiter,

    I did not expect to get that kind of reaction!

    Regards,​

    ------------------------------
    "Sparkly" Steve Erbach - Green Bay, WI
    Co-Chair, GPUG WI (Green Bay) Chapter
    Blog: https://www.gpug.com/blogs/steve-erbach
    Twitter: twitter.com/serbach
    2018-12-06_08_06_34-Mozilla_Firefox.jpg
    ───────────────
    Excel Webinar List
    ------------------------------



  • 8.  RE: IDLE Users - Users who appear active

    TOP CONTRIBUTOR
    Posted Jan 16, 2019 09:05 AM
    LOL..

    @Steve Erbach  then might I inquire as to WHAT reaction you were expecting??​

    ------------------------------
    Kindest Regards,
    Jo deRuiter , MCP, DCP
    "That GP Red Head"
    AISLING DYNAMICS CONSULTING, LLC
    WEBSITE: https://aislingdynamics.com/
    BLOG: https://community.dynamics.com/gp/b/gplife
    GPUG Academy Instructor
    Dynamics GP Credentialing Council-Vice Chair
    770-906-4504 (Cell)

    ------------------------------



  • 9.  RE: IDLE Users - Users who appear active

    GPUG ALL STAR
    Posted Jan 16, 2019 09:43 AM
    @Jo deRuiter,

    Dunno. None, I suppose. I kinda like this geeky sort of discussion about wringing more information out of GP than it, apparently, is able to give.​

    Regards,

    ------------------------------
    "Sparkly" Steve Erbach - Green Bay, WI
    Co-Chair, GPUG WI (Green Bay) Chapter
    Blog: https://www.gpug.com/blogs/steve-erbach
    Twitter: twitter.com/serbach
    2018-12-06_08_06_34-Mozilla_Firefox.jpg
    ───────────────
    Excel Webinar List
    ------------------------------



  • 10.  RE: IDLE Users - Users who appear active

    GPUG ALL STAR
    Posted Jan 22, 2019 02:11 PM
    @Jo deRuiter

    It turns out that the timed process for sending messages runs every minute and accesses the tables in SQL which resets the last_batch from sys.sysprocesses value meaning that at the SQL level, it will always look like there is activity even if the user has done nothing.

    I am trying to work a way around this without just kiling the "Check for User Messages" Timed process in the Process Monitor.​

    @Michael Barnes This is your ghost process. Or at least one of them.

    Any ideas @Steve Erbach or @Beat Bucher

    David
    ​​​

    ------------------------------
    David Musgrave MVP, GPUG All-Star

    Managing Director
    Winthrop Development Consultants

    Perth, Western Australia

    http://www.winthropdc.com
    ------------------------------



  • 11.  RE: IDLE Users - Users who appear active

    Posted Jan 23, 2019 02:37 AM
    I was doing the same exercise late last year, and got to pretty much the same point as @Steve Erbach​.

    Will be nice to see if anybody can get something more

    ------------------------------
    Gavin 'Yoda' Hundermark
    Technical Support Specialist
    African Global Operations (Pty) Ltd
    Krugersdorp South Africa
    ------------------------------



  • 12.  RE: IDLE Users - Users who appear active

    GPUG ALL STAR
    Posted Jan 23, 2019 12:25 PM
    Edited by Frank Heslin Jan 23, 2019 04:55 PM
    I've been using this script that I got from FastPath (I removed a couple of lines that are related to FastPath's Config AD product that we use):

    SELECT DISTINCT
          a.USERID ,
    	  a.CMPNYNAM Company_Name,
    	  p.last_batch [Last Batch Time],
          datediff(mi, p.last_batch, getdate()) as [MinutesInactive],
         c.USERID [SY00800],
          d.USERID [SY00801],
          a.SQLSESID
    	  
    FROM DYNAMICS..ACTIVITY a    
    INNER JOIN tempdb..DEX_SESSION s
          on a.SQLSESID = s.session_id  
    INNER JOIN sys.sysprocesses p
          on s.sqlsvr_spid = p.spid and ecid = 0  
    LEFT JOIN DYNAMICS..SY00800 c on c.USERID = a.USERID
    LEFT JOIN DYNAMICS..SY00801 d on d.USERID = a.USERID
    ORDER BY [MinutesInactive] DESC, USERID​


    It seems to be very accurate.



    ------------------------------
    Frank Heslin
    Financial Systems Administrator
    ExamWorks, Inc.
    Atlanta GA

    GPUG Advisory Committee Member
    Summit Track Leader
    GPUG All Star 2016

    GP2018
    MR CU16
    ------------------------------



  • 13.  RE: IDLE Users - Users who appear active

    Posted Jan 23, 2019 04:20 PM

    Thanks for sharing it,
    It has however created for me a bit of concern considering we are looking at implementing FastPath here.

    It is producing nearly the same output as mine (+/- 60 sec) and same record count which suggests the "Check User Messaging" is corrupting the results even in their solution... I had yet again today a handful of people with locked workstations who have been at lunch for a period of time, showing up as only 1 min idle.



    ------------------------------
    Michael Barnes
    IT Manager, Enterprise Systems
    Kenco Group, Inc
    Chattanooga GA
    ------------------------------



  • 14.  RE: IDLE Users - Users who appear active

    GPUG ALL STAR
    Posted Jan 24, 2019 12:50 PM
    Hi @Michael Barnes,
    I've been using reliably the Timeout feature from the Rockton Toolbox for many years and had only 16 concurrent licenses shared among over 100 GP users, granted that my average users are only logging into GP about 1 or 2 times a month, but my core GP users (about 20-30) were in GP every day and never had to fight for a license thanks to the RSTB.
    Another company I had worked for several years ago had roughly the same total GP user count, but kept buying licenses to fill the need for a growing business, but never wanted to look at the RSTB option.. which would probably saved them a lot of cash.​

    ------------------------------
    Beat Bucher
    Business Analyst, Dynamics GP SME
    Montreal QC/Canada
    @GP_Beat http://www.gp-geek.com
    Montreal QC GPUG Chapter Leader
    MBS MVP (2015-2018)
    All-Star 2013
    ------------------------------



  • 15.  RE: IDLE Users - Users who appear active

    Posted Jan 24, 2019 01:10 PM
    Similar ratios here, just a whole lot more of them both in user head count and avail licenses.

    I am leaning to the FastPath toolset for this because we are looking also at their pseudo "single signon" as an added bonus.
    Off topic a bit here but, much of the issue of people remaining in is due to the tedium and time of our three step process to get to GP via Remote Desktop. Added to that, they have a hard time separating in their minds when to use AD and GP user ID and passwords leading to a high number of support cases each month regarding locked user accounts.

    Thanks again for your and all the replies here.

    ------------------------------
    MB Barnes
    IT Manager, Enterprise Systems
    Kenco Group, Inc
    Chattanooga TN
    ------------------------------



  • 16.  RE: IDLE Users - Users who appear active

    GPUG ALL STAR
    Posted Jan 24, 2019 01:15 PM
    @Michael Barnes,

    Is it an option for you in your situation to encourage users to manually synch their GP passwords to their AD/WIndows login passwords? I've only worked for companies with fewer than 10 GP licenses and that's what we've done. Whenever AD/Windows demands that a user change her/his password, the users know to change it in GP, too.

    Sincerely,​

    ------------------------------
    "Sparkly" Steve Erbach - Green Bay, WI
    Co-Chair, GPUG WI (Green Bay) Chapter
    Blog: https://www.gpug.com/blogs/steve-erbach
    Twitter: twitter.com/serbach

    ───────────────
    Excel Webinar List
    ------------------------------



  • 17.  RE: IDLE Users - Users who appear active

    Posted Jan 24, 2019 01:27 PM
    Great question. We have over 100 users in disparate locations and, a high degree of turnover in one company that unfortunately generate the bulk of these issues. They now choose what passwords to use on reset however, to date only some finance users (as needed for some situations in Mgt reporter and SSRS) manage AD user name formats as the same.
    So as one part of an initiative to improve user experience, we will  sync up with all new user accounts (matching AD identities) once we migrate over to the FP option.

    ------------------------------
    MB Barnes
    IT Manager, Enterprise Systems
    Kenco Group, Inc
    Chattanooga TN
    ------------------------------



  • 18.  RE: IDLE Users - Users who appear active

    GPUG ALL STAR
    Posted Jan 24, 2019 01:20 PM
    @Michael Barnes,
    I fully get that and that's why larger corporation tend to buy solutions like FastPath AD, because all their users access GP from remote locations around the globe and thus FP AD allows them to truly use SSO, which works well once it's configured properly. I've have seen cases where you have to re-install / re-configure FP AD after a GP upgrade or a server move, but that might be normal due to the ID changes.
    I wasn't aware that FP AD had a timeout feature, but you need to be careful to not have a conflicting process with another similar tool (like Rockton Toolbox).​

    ------------------------------
    Beat Bucher
    Business Analyst, Dynamics GP SME
    Montreal QC/Canada
    @GP_Beat http://www.gp-geek.com
    Montreal QC GPUG Chapter Leader
    MBS MVP (2015-2018)
    All-Star 2013
    ------------------------------



  • 19.  RE: IDLE Users - Users who appear active

    TOP CONTRIBUTOR
    Posted Jan 28, 2019 02:14 PM
    @Michael Barnes we are in the process of implementing Willoware GP PowerPack. It includes a "inactivity" login monitor. It functions similar to what Rockton's Tool Box offers. I love that it will gently log users off (including a message) and only when they are not in a transaction, running a report, posting, etc. Any of these ISVs are worth the investment compared to always adding on unnecessary GP licenses.​

    ------------------------------
    Aleiha Hanson
    Royal Basket Trucks, Inc - IT Manager
    GPUG Milwaukee WI Chapter Leader
    ahanson@royal-basket.com
    ------------------------------



  • 20.  RE: IDLE Users - Users who appear active

    Posted Feb 12, 2019 02:03 PM
    Our company has also developed a solution that meets this need:
      - Properly disconnect inactive users. The detection is done on the client side and makes sure that the user is not currently posting.
      - It also enables the ability to manage licenses by "departments" to reserve a minimum and limit the maximum number of licenses for each of them.
      - And it includes several reports to see, among other things, user activtity by hour and day.

    The solution is currently running for several of our customers but we don't have any web page for that product yet.

    We have a full version and a limited version that includes only the reports.

    If you need more detail you can contact me.


    ------------------------------
    Guillaume Simard
    InMind Technologies
    Montréal QC
    ------------------------------



  • 21.  RE: IDLE Users - Users who appear active

    GPUG ALL STAR
    Posted Feb 12, 2019 10:32 PM
    Hi everyone

    Just wanted to let you know that GP Power Tools Build 26 has been released. It includes awesome Automatic Logout functionality with many options and features.

    #GPPT GP Power Tools build 26 released
    https://winthropdc.wordpress.com/2019/02/12/gppt-gp-power-tools-build-26-released/


    #GPPT Automatic Logout for Microsoft Dynamics GP
    https://winthropdc.wordpress.com/2019/02/13/gppt-automatic-logout-for-microsoft-dynamics-gp/


    ​Regards

    David​

    ------------------------------
    David Musgrave MVP, GPUG All-Star

    Managing Director
    Winthrop Development Consultants

    Perth, Western Australia

    http://www.winthropdc.com
    ------------------------------



If you've found this thread useful, dive deeper into User Group community content by role