Page 1 of 7612345678910...2025303540...Last »

You receive "Could’n retrieve the list of available databases: The connection attempt failed" error when updating Management Reporter 2012

Hi everyone! I’m on the tail-end of upgrading a client to Microsoft Dynamics GP 2015 R2 and came up on an interesting issue when attempting to update Management Reporter 2012 CU6 to CU9.

Background

In order to create my client’s test environment for this upgrade, we cloned their production VMWare environment and went through all the usual server renames, static IP changes, SQL Server renaming, and so forth.

For the Management Reporter 2012 database server, we followed the applicable entries outlined in How to move Microsoft Management Reporter 2012 to a new server (CustomerSource access required), and in particular we removed the Application and Process services then ran the T-SQL script to re-create the certificate and symmetric key.

Once these portions of the configuration were in place, we proceeded to install Management Reporter 2012 CU9, first installing the Application and Process services – which also performed the overall ManagementReporter database update.

Next was to create the Data Mart database.

When we tried to connect to the Dynamics GP server to retrieve a list of the available databases to select the system database, we stumbled upon the following error: “Couldn’t retrieve the list of available databases. The connection attempt failed.

Configuration Console – Dynamics GP Connection information error when clicking on the Database drop-down list

When I checked the Event Viewer, the following entry could be seen:

The encrypted setting, Password, could not be decrypted.
— Exception Dump — 
Caught Exception: [System.Security.Cryptography.CryptographicException] Encrypted data was invalid and cannot be decrypted.
Stack trace:
   at Microsoft.Dynamics.Integration.DataAccessLayer.DataProtection.Decrypt(Byte[] data)
   at Microsoft.Dynamics.Integration.DataAccessLayer.DataProtection.DecryptSettings(XElement settings)

User: DomainMRAdmin
Machine: GPTOOLSTEST

Solution

Clearly, the data source information to the Dynamics GP database server wasn’t being adequately validated somewhere by the installer. Furthermore, the installer was attempting to decrypt the password I was passing in via Microsoft.Dynamics.Integration.DataAccessLayer.DataProtection.Decrypt() method which happens to be a part of the Dexterity Shared Components.

I then recalled that the Management Reporter Server installation process uses the Dexterity Shared Components to validate the connection to the system database. In reviewing the Dexterity Shared Components on the server, I found out that version 14 was installed — version 14 corresponds to the Dexterity Shared Components installed by Dynamics GP 2015. So, I was a bit puzzled. However, further analyzing this issue, I realized that CU9 predates the days of Dynamics GP 2015, so the version of the Dexterity Shared Components it must be looking for were those of Dynamics GP 2013 or earlier. It was a long shot, but I installed the Dexterity Shared Components version 12 from the Dynamics GP 2013 CD.

Once I fired up Configuration Console and attempted the configuration of Data Mart, I was then able to choose the system database from the Dynamics GP server and complete the process just fine.

Additional Notes

In doing some poking around into the ManagementReporter database tables, searching for a potential answer to this issue, I found that the dbo.ControlCompany table contains the GLEntityConnectionInformation column, which stores an XML document with some connection information. If your test environment is a result of cloning a VMWare or Hyper-V image, chances are the data stored in this column will contain the original server information and will need to be edited to reflect the current test environment server information. By simply right-clicking on the table and choosing to Edit the Top 200 rows option, you can edit the server name. The content of the XML document stored in this column looks something like this (server name in red):







GPTOOLSTEST


DDM


TWO


false


sa


AOaPHTA9VkmLvkUcyA053AEAAABurN19cbBVL3sfs/UoYU4o3YPglXB4SSrzLzXjlavUpC+uSNKdDYDDEjS9MfKKlao=


false


So you maybe asking, “why not update from CU6 to CU13+Hotfix directly?”. As it turned out, I found out that this while technically possible, causes some very undesired results with very complex reports. More on this in a follow up post.

Until next post!

MG.-
Mariano Gomez, MVP
Intelligent Partnerships, LLC
http://www.intelligentpartnerships.com/

Excerpt from:
You receive "Could’n retrieve the list of available databases: The connection attempt failed" error when updating Management Reporter 2012

August 27, 2015 · Mariano Gomez · No Comments
Tags: , , , , , , , , , , ,  · Posted in: Blogs I Follow Total Views: 13

You receive "Could’n retrieve the list of available databases: The connection attempt failed" error when updating Management Reporter 2012

Hi everyone! I’m on the tail-end of upgrading a client to Microsoft Dynamics GP 2015 R2 and came up on an interesting issue when attempting to update Management Reporter 2012 CU6 to CU9.

Background

In order to create my client’s test environment for this upgrade, we cloned their production VMWare environment and went through all the usual server renames, static IP changes, SQL Server renaming, and so forth.

For the Management Reporter 2012 database server, we followed the applicable entries outlined in How to move Microsoft Management Reporter 2012 to a new server (CustomerSource access required), and in particular we removed the Application and Process services then ran the T-SQL script to re-create the certificate and symmetric key.

Once these portions of the configuration were in place, we proceeded to install Management Reporter 2012 CU9, first installing the Application and Process services – which also performed the overall ManagementReporter database update.

Next was to create the Data Mart database.

When we tried to connect to the Dynamics GP server to retrieve a list of the available databases to select the system database, we stumbled upon the following error: “Couldn’t retrieve the list of available databases. The connection attempt failed.

Configuration Console – Dynamics GP Connection information error when clicking on the Database drop-down list

When I checked the Event Viewer, the following entry could be seen:

The encrypted setting, Password, could not be decrypted.
— Exception Dump — 
Caught Exception: [System.Security.Cryptography.CryptographicException] Encrypted data was invalid and cannot be decrypted.
Stack trace:
   at Microsoft.Dynamics.Integration.DataAccessLayer.DataProtection.Decrypt(Byte[] data)
   at Microsoft.Dynamics.Integration.DataAccessLayer.DataProtection.DecryptSettings(XElement settings)

User: DomainMRAdmin
Machine: GPTOOLSTEST

Solution

Clearly, the data source information to the Dynamics GP database server wasn’t being adequately validated somewhere by the installer. Furthermore, the installer was attempting to decrypt the password I was passing in via Microsoft.Dynamics.Integration.DataAccessLayer.DataProtection.Decrypt() method which happens to be a part of the Dexterity Shared Components.

I then recalled that the Management Reporter Server installation process uses the Dexterity Shared Components to validate the connection to the system database. In reviewing the Dexterity Shared Components on the server, I found out that version 14 was installed — version 14 corresponds to the Dexterity Shared Components installed by Dynamics GP 2015. So, I was a bit puzzled. However, further analyzing this issue, I realized that CU9 predates the days of Dynamics GP 2015, so the version of the Dexterity Shared Components it must be looking for were those of Dynamics GP 2013 or earlier. It was a long shot, but I installed the Dexterity Shared Components version 12 from the Dynamics GP 2013 CD.

Once I fired up Configuration Console and attempted the configuration of Data Mart, I was then able to choose the system database from the Dynamics GP server and complete the process just fine.

Additional Notes

In doing some poking around into the ManagementReporter database tables, searching for a potential answer to this issue, I found that the dbo.ControlCompany table contains the GLEntityConnectionInformation column, which stores an XML document with some connection information. If your test environment is a result of cloning a VMWare or Hyper-V image, chances are the data stored in this column will contain the original server information and will need to be edited to reflect the current test environment server information. By simply right-clicking on the table and choosing to Edit the Top 200 rows option, you can edit the server name. The content of the XML document stored in this column looks something like this (server name in red):







GPTOOLSTEST


DDM


TWO


false


sa


AOaPHTA9VkmLvkUcyA053AEAAABurN19cbBVL3sfs/UoYU4o3YPglXB4SSrzLzXjlavUpC+uSNKdDYDDEjS9MfKKlao=


false


So you maybe asking, “why not update from CU6 to CU13+Hotfix directly?”. As it turned out, I found out that this while technically possible, causes some very undesired results with very complex reports. More on this in a follow up post.

Until next post!

MG.-
Mariano Gomez, MVP
Intelligent Partnerships, LLC
http://www.intelligentpartnerships.com/

Excerpt from:
You receive "Could’n retrieve the list of available databases: The connection attempt failed" error when updating Management Reporter 2012

August 27, 2015 · Mariano Gomez · No Comments
Tags: , , , , , , , , , , ,  · Posted in: Blogs I Follow Total Views: 0

Solving Performance Problems with Microsoft Dynamics GP and Windows 10 – Part 1

David Meego - Click for blog homepageNow that I am running Windows 10 and am starting to get back to work with developing for Microsoft Dynamics GP and Dexterity, I have been noticing some serious performance issues.

This article takes you through the steps I used to identify the issue and what I did to resolve the issues. After making the changes listed in this and the next article I am happy with my Windows 10 development environment.

The first issue I noticed was that when I exited Dexterity Test mode, there was a significant delay (about one minute) before I was returned to the Dexterity IDE (Integrated Development Environment). I tested this on multiple Dexterity versions and it still occurred. To make sure that it was nothing in my code, I tested using a clean Dynamics.dic and it still occurred.

To test if it was a Dexterity issue or Microsoft Dynamics GP in general, I started testing with multiple versions of Microsoft Dynamics GP and each time there was a minute pause when exiting. The problem was occurring for all current versions (GP 2010, GP 2013 and GP 2015) in both the runtime and development environments.

Note: I did not have this issue on my other Windows 10 machine, so it does not occur for all machines. It just occurred on my primary development machine. :-(

So now I put my Microsoft Escalation Engineer hat back on to troubleshoot and identify the cause. Using a source dictionary in Dexterity, I used the Script Log to capture the scripts running when you exit GP. The excerpt from the script.log file below shows two calls to the script exitDynamics of form Main Menu with a significant 30 second plus time before the next script.

14:12:04  'Main_Menu FORM POST on form Main Menu'
14:12:04      'exitDynamics of form Main Menu'
14:12:40          'SQLPath', 0, 7, 31, ""
14:12:40          'GetClientUIType()', 0
14:12:40          'Add_Successful_Logout_Record'
14:12:40          'DeleteUserMessages of form sySendMessage', "sa"
14:12:40              'SQLPath', 0, 7, 0, ""
14:12:40          'IsCreated() of form syDeferredPassword', 0
14:12:40      'isDynUtils() of form LibSystem', 0
14:12:40      'exitDynamics of form Main Menu'
14:13:12          'GetClientUIType()', 0
14:13:12          'Add_Successful_Logout_Record'
14:13:12          'DeleteUserMessages of form sySendMessage', "sa"
14:13:12          'IsCreated() of form syDeferredPassword', 0
14:13:12      'smDEX_Clear_Locks', 0, 15
14:13:12          'SQLScriptPath', 0, 7, 3069, ""
14:13:13      'ST_CleanupBeforeLogout'

Looking at this script, the issue had to occur between the start of the script and the first call to the GetClientUIType() function. So I placed a breakpoint at the top of the script and stepped through the script until it hit the pause. Below are the lines of code and the command causing the pause was the DDE_IsAppRunning(CONTAIN) call.


if (TEMPCloseOLE of globals) then
    if DDE_IsAppRunning(CONTAIN) then
        set fDummy to OLE_Exit();
    end if;
end if;

Looking at the DDE_IsAppRunning(CONTAIN) call, I could see that it was inside a conditional statement and so if we changed the value of the global variable TEMPCloseOLE of globals it should be possible to avoid the pause on exit issue.

Using the trusty References facility in Dexterity, I located the TEMPCloseOLE global field and asked what it was referenced by. In the global procedure Setup_System_Variables, I found the following lines.


set sFlag to Defaults_Read(DEXINI_OLECLOSE);
set TEMPCloseOLE of globals to (sFlag <> FALSE_STRING); 

This showed that the TEMPCloseOLE of globals variable was set once based on the Dex,ini setting referred to by the constant DEXINI_OLECLOSE (which evaluates to OLEClose).

With this information in hand I added the following Dex.ini setting to my system and tested again:

OLEClose=FALSE

Et Voila, the delay on exit disappeared. First problem solved. I forwarded my research to Microsoft Support in case anyone else was having this issue…. and it turned out that others had seen it.

The delay on exit issue was reported on the partner forum and my “workaround” solution was provided, then my friend Mariano blogged about it. Here are the links:

Hope this information helps take away the frustration I was having.

David

PS: I don’t really speak French, even though I did study it (and Latin) in primary school in the UK before I moved to Australia. I have even been to France, but that did not help.

PPS: Before you ask, I don’t speak Latin either… it is a dead language and even the Italians don’t speak it any more.

PPPS: OK, yes I know that even though Latin is dead, its influence lives on in many European languages.

This article was originally posted on http://www.winthropdc.com/blog.

Filed under: Development, Dexterity, Dynamics, GP, Microsoft, Windows Tagged: Application, Development, Dexterity, GP 2010, GP 2013, GP 2015, Windows 10

Visit site:
Solving Performance Problems with Microsoft Dynamics GP and Windows 10 – Part 1

August 13, 2015 · WinthropDC · No Comments
Tags: , , , , , , , , , , ,  · Posted in: Blogs I Follow Total Views: 34

You experience slow performance exiting Microsoft Dynamics GP 2015 on Windows 10

Today I ran across a very interesting partner forum post, in which the consultant described a slow performance issue when closing (exiting) Microsoft Dynamics GP 2015, which started happenning after his client upgraded their Windows workstations to the newly minted Windows 10 operating system.

A Microsoft support engineer acknowledge that “there have been a few people experiencing this issue“. The recommendation to bypass the slow application closing is to change or add the following Dex.ini setting to see if it resolves the issue on exit. The setting changes a Microsoft Dynamics GP global variable and avoids the pause that seems to be occurring during the exiting process.

OLEClose=FALSE

This Dex.ini setting controls whether the Microsoft Dynamics GP application checks for the OLE Container application being opened at the time of shutdown — a “shutdown” can occur if the user legitimately exits Dynamics GP or simply chooses to open either the Report Writer or Modifier tools. If the Container is open during the shutdown operation, Dynamics GP will attempt a graceful closure of it.

The default value of this setting is TRUE, whether the setting is present in the Dex.ini with a value of true or empty, or simply not present at all. This indicates to GP that it should always attempt to close down the Container if it is found to be open.

Given the fact that most customers are now taking advantage of Document Attachment (Doc Attach) and moving away from the Container application, there should be less and less dependency on Container, which would almost require that the default value for our flag is set to FALSE, rather than it’s current state.

As usual, you must apply these changes to your environment only if you are experiencing this issue.

Until next post!

MG.-
Mariano Gomez, MVP
Intelligent Partnerships, LLC
http://www.intelligentpartnerships.com/

Excerpt from:
You experience slow performance exiting Microsoft Dynamics GP 2015 on Windows 10

August 13, 2015 · Mariano Gomez · No Comments
Tags: , , , , , , ,  · Posted in: Blogs I Follow Total Views: 33

GP2015 R2 Upgrade – “ASI_MSTR_Explorer_Favorites: Number of results columns doesn’t match table definition”

There were couple of exceptions related to GP2015 R2 that I wished to share here. One would be discussed here and other one on the next post.

After upgrading to GP2015 R2, while doing a routine testing, following error message was thrown while trying to open Smartlist:

Screen Shot 2015-07-31 at 6.53.32 PM

Full message as follows:

Unhandled database exception:
A get/change operation on table ‘ASI_MSTR_Explorer_Favorites’ failed accessing SQL data.

Number of results columns doesnt match table definition.

Number of results columns doesnt match table definition.

EXCEPTION_CLASS_DB
DB_ERR_SQL_DATA_ACCESS_ERR

Debugging this error took me to the table Smartlist Favorites Master (ASIEXP81). Strange, however, that number of columns indeed matched.

I remembered this issue happening in GP 10 and GP 2010. Suggested solutions were to run GRANT.SQL on all databases and changing ODBC provider to SQL Native Client. However, in my case, both were already done and confirmed.

To avoid any further delay or issue(s), I decided to backup the records from ASIEXP81, recreate the table using GP SQL Maintenance and push the records back from the backup table.

Resolution: Drop and create the table Smartlist Favorites Master (ASI_MSTR_Explorer_Favorites, ASIEXP81) using GP SQL Maintenance.

Only that, I did not have to reinsert the records. When I opened the Smartlist after recreating the table, it automatically populated all records. Strange, again. But it worked.

Word of caution: Always take backup before you do anything with the data.

VAIDY

Filed under: Uncategorized

More:
GP2015 R2 Upgrade – “ASI_MSTR_Explorer_Favorites: Number of results columns doesn’t match table definition”

August 2, 2015 · Vaidyanathan Mohan · No Comments
Tags: , , , , , , , , ,  · Posted in: Blogs I Follow Total Views: 52

Developing using Dexterity for Microsoft Dynamics GP 2015

David Meego - Click for blog homepageToday, I was contacted by a fellow Dexterity developer who was having trouble getting Dexterity for Microsoft Dynamics GP 2015 to run Dynamics.dic in Test Mode.

In this article, I will take you through the errors you could get and how to resolve them. Some of these you might know from previous versions, others are new to GP 2015.

For this article I am using Microsoft Dynamics GP 2015 R2 and Dexterity 14.00.0084 which comes on the DVD image. I have copied a clean Dynamics.dic from the application folder into a subfolder in the Dexterity folder. I opened the dictionary with Dexterity and selected Debug >> Test Mode (Ctrl-T).

The first error I get is “You need to run Dynamics.dic Utilities before you can run Dynamics.dic. Do you want to launch Dynamics.dic Utilities now?“.

Error1

Note: The name of the dictionary (in this case Dynamics.dic) will be whatever your development dictionary file is called.

This issue is has been around since the beginning and is because the Dynamics code is looking at the Dex.ini file for the settings INITIAL and SYNCHRONIZE and unless it can find those set to FALSE, it will think that it is the first time Dynamics GP is being launched and ask to go to the Utilities to set up the databases and synchronize the dictionary to the account framework.

Solution: The easiest solution is to copy the Dex.ini file from the Application’s Data subfolder to the Dexterity’s Data subfolder. However, be sure to make the couple of changes below:

  • Change DexHelpPath to point to the Dexterity folder.
  • Add ShowResids=TRUE (for pre GP 2015, GP 2015 now shows Resource IDs as default)

Launching into Test Mode again and I get “Unhandled script exception: SCRIPTS – data area EXCEPTION_CLASS_SCRIPT_MEMORY SCRIPT_CMD_EXTERN

Error2

 Clicking OK and the Login window opens, but it is not fully drawn.

 ErrorLogin

The problem here is that script that reads the ODBC Data Sources for the Server drop down list is trying to call an external library. This library is part of Dynamics GP, but not actually part of Dexterity and so is not installed.

Solution: Copy the GPDWIN32.dll from the Application folder to the Dexterity folder. This issue started from Microsoft Dynamics GP 2010 onwards.


Launching Test Mode again and I can login, but get another error just after login. The error is “Could not load file or assembly ‘Microsoft.Dynamics.GP.BusinessIntelligence.Homepage’ or one of its dependencies. The system cannot find the file specified.“.

Error3

This issue was introduced with Microsoft Dynamics GP 2013 when the homepage was changed.

Solution: Copy the following files from the Application folder to the Dexterity folder:

  • Microsoft.Dynamics.GP.BusinessIntelligence.Homepage.dll
  • Microsoft.Dynamics.GP.BusinessIntelligence.Homepage.Framework.dll

However, the error will still occur as GP 2015 now also requires the following file to be copied:

  • GPIcons.dll

Finally, you will also need to copy the following file to the folder where your development dictionary resides to avoid warnings when compiling:

  • Microsoft.Dynamics.GP.BusinessObjects.dll

Depending on your scripts you might also need the following files copied to the development dictionary folder to allow compilation without errors:

  • Microsoft.Dynamics.GP.ManagementReporterServices.dll
  • Microsoft.Dynamics.GP.Svc.Application.dll

Now you should be good to go. Good luck.

 

For more information, see these previous articles from my old blog:

 

Hope this article helps make your life easier.

David

This article was originally posted on http://www.winthropdc.com/blog.

Filed under: 2015, 2015 R2, Development, Dexterity, Dynamics, GP, Microsoft Tagged: Best Practice, Development, Dexterity, GP 2015

Originally posted here:
Developing using Dexterity for Microsoft Dynamics GP 2015

July 24, 2015 · WinthropDC · No Comments
Tags: , , , , , , , , ,  · Posted in: Blogs I Follow Total Views: 64

#GPPT What’s New: GP Power Tools is faster and easier to navigate

David Meego - Click for blog homepageAs mentioned in recent posts, GP Power Tools is almost ready for release. The user guide manual documentation is now completed… all 256 pages of it. If you want to get the code now, you can already install the public beta and upgrade to the final release later.

This is the first article in a series of What’s New posts for GP Power Tools. The aim of this series is to highlight some of the new features of the tool and flesh out more details than the 21 reasons to upgrade article.

When creating GP Power Tools, one of the first changes (other than rebranding) was to change the data storage from a Debugger.xml setup file to tables in the system database on SQL Server.

Performance

A bit of history …. The Debugger.xml file was originally used to avoid the creation of any SQL objects to allow easy installation and removal of the Support Debugging Tool for its role as a troubleshooting tool. As the functionality of the tool grew and more data was stored in the Debugger.xml, performance slowed as the data was written to and read from the Debugger.xml file. To help with the read performance, ctree tables were used to cache the contents of the Debugger.xml. Also, the additional features added to the tool meant that the Debugger.xml needed to be stored in a shared network location. Finally, because the tool has lots more functionality than the original troubleshooting tool, it was being left installed on systems and the ease of removal was no longer important.

SQL Server

When creating GP Power Tools, one of the first changes (other than rebranding) was to change the data storage to use SQL Server tables. You would think that this would be a simple change, but it took about two weeks to complete. To make the Debugger.xml setup file work as a storage system required a large amount of custom code. The windows would read the Debugger.xml contents into temporary tables and then read and write from the temporary tables. When saving or applying, the data was written back the Debugger.xml file and the cache tables. All this code needed to be removed and replaced with more conventional code to use the SQL tables. To complicate the conversion, on some windows, data needed to be stored temporarily and only saved to the physical tables when applied. This meant that additional code was needed to store data in temporary tables until applied.

The end result is that when saving data, there is no longer a noticeable pause as the data is written. Also there is no requirement for a shared location to store the Debugger.xml file, however a shared location is still useful to centralize storage of log and export files. Finally, having the data stored in SQL Server is more secure than a shared location in the file system.

Navigation

One of the areas of feedback received about the Support Debugging Tool was that it was difficult to find the options / windows. Part of the cause of this is that when new features were added, their navigation options were just added to the bottom of the Standard Mode or Advanced Mode features.

So GP Power Tools resolves this by providing multiple options for navigation as well as grouping the features. You can still find the main GP Power Tools Logging Control window on the Tools menus of the application and individual windows (both menu or ribbon style). The Ctrl-D keyboard shortcut is also still available.

GP Power Tools Menu   GP Power Tools Menu Ribbon   GP Power Tools Menu Window

You can also find the options on the Standard Toolbar and Quick links on the home page.

Toolbar    GP Power Tools Quick Links

From the main GP Power Tools window, you can use the Options button drop list or the GP Power Tools window menu to access other features. Both of these menus are now broken down with sub menus into functional areas:

  • Resources and Security
  • Scripting
  • Export and Import
  • Administration

GP Power Tools Options Menu 2   GP Power Tools Options Menu 3

GP Power Tools Options Menu 4    GP Power Tools Options Menu 5

Also, GP Power Tools has been added to the application level menus as a sub menu under Transactions, Inquiry, Reports, Cards, Setup, Utilities and Routines.

GP Power Tools Transaction Menu

Finally, GP Power Tools has its own Area page from the Navigation buttons: GP Power Tools Area Page Button

GP Power Tools Area Page Navigation

The Area Page means that navigation on the Microsoft Dynamics GP Web Client is now simpler.

Access to the windows is controlled by application level security and the four automatically created security roles:

  • GP POWER TOOLS USER – For Standard Mode (User) features
  • GP POWER TOOLS ADMIN – For Advanced Mode (Administrator) features
  • GP POWER TOOLS PASSWORD – For Administrator Password Setup window only
  • GP POWER TOOLS SERVICES – For GP 2015 (or later) Service Enabled Procedures

Note: Access to Advanced Mode features also requires sysadmin or dbo access at the SQL Server level and the System Password or Administrator Password (if enabled). The option to hide Advanced Mode features using a Dex.ini setting is no longer used.

So now you should have no trouble navigating the various windows of GP Power Tools by whatever method you decide.

Enjoy

David

This article was originally posted on http://www.winthropdc.com/blog.

Filed under: 2010, 2013, 2013 R2, 2015, 2015 R2, Dynamics, GP, GP Power Tools, Microsoft, Products Tagged: GP 2010, GP 2013, GP 2015, GP Power Tools, GPPT

Originally posted here:
#GPPT What’s New: GP Power Tools is faster and easier to navigate

July 20, 2015 · WinthropDC · No Comments
Tags: , , , , , , , , ,  · Posted in: Blogs I Follow Total Views: 50