When trying to build the MPOS solution on my laptop, I got the below error.
Error APPX0501 Validation error. error C00CE169: App manifest validation error: The app manifest must be valid as per schema: Line 10, Column 50, Reason: —————‘ violates pattern constraint of ‘(CN|L|O|OU|E|C|S|STREET|T|G|I|SN|DC|SERIALNUMBER|Description|PostalCode|POBox|Phone|X21Address|dnQualifier|(OID\.(0|[1-9][0-9]*)(\.(0|[1-9][0-9]*))+))=(([^,+=”<>#;])+|”.*”)(, ((CN|L|O|OU|E|C|S|STREET|T|G|I|SN|DC|SERIALNUMBER|Description|PostalCode|POBox|Phone|X21Address|dnQualifier|(OID\.(0|[1-9][0-9]*)(\.(0|[1-9][0-9]*))+))=(([^,+=”<>#;])+|”.*”)))*’. The attribute ‘Publisher’ with value ————- failed to parse. Pos.App ” 1
App manifest validation error: The app manifest must be valid as per schema: Line 10, Column SO, Reason: ‘xxxx’ violates pattern constraint of ‘(CNILIOIOUIEICISISTREETITIGIIISNIDCI
PhoneIX21 . The attribute ‘Publisher’ with value ‘xxx’ failed to parse.
It took me a while to figure it out but this was happening because certain features in Visual Studio were not installed, the Retail SDK Handbook helped me to confirm which features were needed to be installed. After installing the highlighted features, I restarted the machine and the solution built successfully.
In this post, I would like to draw your attention to RetailCdxSeedData class.
The RetailCdxSeedData class is called when you trigger the following option in Dynamics 365 for Operations
Retail and commerce->Headquarters setup -> Retail scheduler ->Initialise retail scheduler
If you have added some custom tables that need to be synced between your HQ and Channel Database using CDX (Commerce Data eXchange), then you should customize the RetailCdxSeedData class to include the custom tables. If you do not not customize the RetailCdxSeedData class, you will need to do the CDX table mapping manually in all the environments and in every DB refresh and increasing the chances of missing out some fields if you have a lot of tables.
Please refer the following link from Microsoft on how you can customise this class with an extension.
If you decide to refactor or rename a Commerce Runtime (CRT) entity (lets say OldEntityName to NewEntityName) inheriting from CommerceEntity, one issue that I have faced is in Retail Server extension assembly the build fails with errors due to the RetailProxy classes relying on the definition of your old entity name.
Example of the error messages that you would see in this scenario are as follows-
Could not load type OldEntityName from assembly… and the command ‘bin\CommerceProxyGenerator.exe’ ..
The solution to this issue is a little tricky one. You need to compile the CRT data dlls keeping the OldEntityName in the References folder.
You need to then comment any reference to NewEntityName in the Retail Server Extension assembly. Then do a clean and a build of the solution.
If this succeeds with no errors, you can now go ahead to uncomment all references to NewEntityName in the Retail Server Extension assembly.
<Update>This article is based on 7.1 Retail SDK </Update>