Thursday, March 28, 2019

Dynamics 365 Business Central April Upgrade Scheduling - Important Notes!

By Steve Endow

If you haven't read the post on the Business Central for Partners blog about "Scheduling your April 2019 Upgrade for Business Central", I recommend reading it thoroughly.

https://community.dynamics.com/business/b/businesscentraldevitpro/archive/2019/03/27/scheduling-your-spring-2019-upgrade-for-business-central


It has several very valuable points about enhancements to the Business Central version upgrade process.


Some of the key points are:

Beginning with the April '19 release, we will also send notifications for preview version availability, upgrade scheduling, extension validation, and upgrade failures.

Saturday, March 16, 2019

Troubleshooting a Dynamics GP SQL Posting Error

By Steve Endow

I recently had a call with my friend Windi Epperson to troubleshoot an odd SQL error that was occurring when posting a Dynamics GP batch.



Here is a video discussing the error and our journey to identify the cause and resolve the issue.


Thursday, March 7, 2019

C# SqlException: Procedure or function has too many arguments specified

By Steve Endow

I've been fighting this error for years in my Data Access class. Only yesterday did I figure out the cause.

It's related to the design of my Data Access class, and specific cases where I need to make multiple calls to the database in a single method.

This is the error:

SqlException: Procedure or function has too many arguments specified

This is an example of a stored procedure call that leads up to the error.

Assembling SQL Parameters for a Stored Procedure

Sunday, February 17, 2019

3 Fun Stories About Strings and C#

By Steve Endow

Whenever you work with data, an integration, or code, you will invariably work with strings. Usually lots of strings.

In some cases, every data field you work with will be a string. In other cases, you'll need to convert strings to numbers, dollars, or dates.  And sometimes you'll need to format strings, whether composing data into XML, formatting social security numbers, or working with different date formats.

In this video, I share 3 stories about working with strings in C# that I encountered recently on projects.




Thursday, January 24, 2019

Dynamics GP Document Attach Record Type (Origin Description) Codes

By Steve Endow

I have been working on a few Dynamics GP Document Attach projects lately, and I haven't been able to find a complete list of the record type codes used in the Doc Attach tables.

CO00101 Table

Here's the partial list that I've compiled so far for a US installation of Dynamics GP.  As I test additional record types, I'll update this list.

If anyone knows of a complete list or has updates, let me know.


Record Type
Code
Customer
CC
Vendor **
Vendor (Creditor)
Item
IC
GL Transaction
GL
PM Transaction
PM
Purchase Order
PO
Purchase Requisition
REQ
PO Shipment
PS
PO Shipment/Invoice
PSI
Receivables Transaction
RM
Note
NOTES


**NOTE: It appears that some of the Doc Attach record type codes may vary by region.  For example, UK installations use "Creditor" instead of "Vendor".  But "CC" is still used for UK Customers, rather than "Debtor".



Steve Endow is a Microsoft MVP in Los Angeles.  He is the owner of Precipio Services, which provides Dynamics GP integrations, customizations, and automation solutions.

You can also find him on Twitter and YouTube


Sunday, January 6, 2019

"I don't want to bother turning on Two Factor Authentication"

By Steve Endow


January 2019 Update:  A security researcher has developed a tool that can intercept logins and 2FA codes through a man-in-the-middle attack. 

https://www.zdnet.com/article/new-tool-automates-phishing-attacks-that-bypass-2fa/

This type of attack can apparently defeat most, if not all code based 2FA systems.  

I have a separate blog post discussing YubiKeys / U2F tokens, which are touted as being more secure than code-based 2FA authentication schemes.

The article mentions that the tool "is inefficient against U2F-based schemes that rely on hardware security keys."  I am not sure if author did mean inefficient, or if he meant ineffective, but I don't think U2F tokens would prevent the browser from authenticating with a YubiKey with the MITM in place.  

If anyone has information indicating that U2F validates the URL and / or can prevent this type of MITM proxy attack, I would love to read about it.



The other day I received a Skype message from a friend.  It was an abbreviated URL using the Google URL shortener.

It looked something like this:

          https://goo.gl/zADTrqeUItixixqazsva&34525?id=username


Since it was from a friend I knew well, I was about to click on it.

Then I paused.

The URL format seemed a bit odd.  After a moment of reflection, I realized it looked suspicious.  Then I realized that the message appeared in Skype.  And this friend doesn't message me on Skype.  And I vaguely recall receiving a similar message on Skype from a customer a few years ago.

I messaged my friend through another app and let him know that his Skype account had been compromised.

He was able to login to his Skype account and confirm it had been compromised.  He was able to see several logins from other countries.




He let me know that he reset his password, and considered the problem resolved.

I then recommended enabling two factor authentication on the account.

His response:  "I don't regularly use the account, so I don't want to deal with the potential hassle of 2FA".


I propose looking at 2FA differently.

Installing Windows from a USB Flash Drive

By Steve Endow


UPDATE:  Ian Grieve informed me that there is a Microsoft tool that will help you create a bootable USB drive from an ISO image.  

Here is his article about the "Windows USB/DVD Download Tool":

http://www.azurecurve.co.uk/2013/01/how-to-make-a-bootable-windows-8-usb-drive/


Here is the current Microsoft link to download the tool (as of Jan 2019):

https://www.microsoft.com/en-us/download/details.aspx?id=56485



I'm currently building a new dedicated Windows server for running Dynamics 365 Business Central Docker images.


Since I only build a new machine every 2-3 years, I always have to lookup how to setup a bootable USB flash drive with the Windows installation files.

I am confident that I will forget this information in 2 weeks, so I'm posting this for posterity.


Here are the two articles that I used.

I initially tried to use Windows Disk Manager, but it didn't allow me to set the USB partition to "Active".  So I had to use the steps from this first article to set the active partition.


Prepare the USB drive using DiskPart:

https://docs.microsoft.com/en-us/windows-server-essentials/install/create-a-bootable-usb-flash-drive


Insert USB flash drive
Administrator Command Prompt
diskpart
list disk
select disk <#>         (make sure to select the correct disk for your USB drive!!!!)
clean
create part pri
select part 1
format fs=fat32 quick
active
exit


And because Windows ISO images now have files larger than 4GB, you can't copy them to FAT32 file systems.  So I had to use the commands from this article to copy the Windows installation files to the USB drive.

After mounting the Windows ISO file so that it shows up as a new drive letter, run the two commands listed at the bottom of the article.  Make sure to set the drive letters to match your source and destination drive letters.


Copy the files to the USB drive using Robocopy and DISM: (commands at bottom)

https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/install-windows-from-a-usb-flash-drive


robocopy D: E: /s /max:3800000000

Dism /Split-Image /ImageFile:D:\sources\install.wim /SWMFile:E:\sources\install.swm /FileSize:3800



Steve Endow is a Microsoft MVP in Los Angeles.  He is the owner of Precipio Services, which provides Dynamics GP integrations, customizations, and automation solutions.

You can also find him on Twitter and YouTube





C# and SQL and Dynamics GP: Sending a List to a Stored Procedure

By Steve Endow This is a discussion of how to send a list of values to a SQL stored procedure parameter. Specifically, how can a .NET ap...