Today I want to share with you an solution for very unclear error which can occurs when we use Web Forms For Marketers in multisite solution.
You will see this error inside Experience Editor when you will be able to select forms:
Regarding to Sitecore documentation if you will add “formsRoot” parameter to the “site” node in configuration file – you will be able to define different forms root for every page.
But what will happen if ID which you will define will not exist in content tree or you will make a typo and it will not be properly ID? You will see following error:
Index (zero based) must be greater than or equal to zero and less than the size of the argument list.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.FormatException: Index (zero based) must be greater than or equal to zero and less than the size of the argument list.
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
[FormatException: Index (zero based) must be greater than or equal to zero and less than the size of the argument list.]
System.Text.StringBuilder.AppendFormatHelper(IFormatProvider provider, String format, ParamsArray args) +14649723
System.String.FormatHelper(IFormatProvider provider, String format, ParamsArray args) +105
System.String.Format(String format, Object args) +103
Sitecore.Data.DataProviders.Sql.SqlDataApi.CreateCommand(String sql, Object parameters) +189
Sitecore.Data.DataProviders.NullRetryer.Execute(Func`1 action, Action recover) +286
Sitecore.Data.DataProviders.Sql.SqlDataApi.CreateReader(String sql, Object parameters) +281
Sitecore.Data.DataProviders.Sql.SqlDataProvider.ResolvePaths(String itemPath) +406
Sitecore.Data.DataProviders.Sql.SqlDataProvider.SelectSingleID(String query, CallContext context) +126
Sitecore.Data.DataProviders.DataProvider.SelectSingleID(String query, CallContext context, DataProviderCollection providers) +118
Sitecore.Data.DataManager.SelectSingleItem(String query, Boolean& processed) +66
Sitecore.Data.DefaultDatabase.SelectSingleItem(String query) +74
Sitecore.Forms.Shell.UI.CreateFormWizard.OnLoad(EventArgs e) +1109
Sitecore.Forms.Shell.UI.InsertFormWizard.OnLoad(EventArgs e) +99
[TargetInvocationException: Exception has been thrown by the target of an invocation.]
System.RuntimeMethodHandle.InvokeMethod(Object target, Object arguments, Signature sig, Boolean constructor) +0
System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object parameters, Object arguments) +128
System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object parameters, CultureInfo culture) +146
Sitecore.Reflection.ReflectionUtil.InvokeMethod(MethodInfo method, Object parameters, Object obj) +89
Sitecore.Web.UI.Sheer.ClientPage.OnLoad(EventArgs e) +593
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3811
Do not loose your time for debugging – just check IDs for ALL sites – it is not important which site you are editing at the moment.
You can have there typo or root item does not exist in content tree. You have to verify all sites because during opening InsertFormWizard control – WFFM loads all configuration nodes.
If you have been using Visual Studio 2015 and now you want to start new project with Sitecore 9 you might have a small issue with supported by VS .Net Versions because VS2015 by default supports .Net up to 4.6.1 and Sitecore 9 works only with .Net 4.6.2.
There is an easy solution for this issue – install following “Microsoft .NET Framework 4.6.2 Developer Pack” which will add 4.6.2 support into yours Visual Studio 2015.
I’ve noticed that many people have many issues with set up of SSL for SOLR instance. In this blog post you will find everything what you need to know to do this. Just follow all steps which you will find below.
- Download SOLR 6.2.2
If you want to install SOLR on Windows get zip file from following page: http://ftp.ps.pl/pub/apache/lucene/solr/6.6.2/
then extract files into (you can choose different directory if you want).
- Download Not Sucking Service Manager and install Solr as a service
You will find zip here: https://nssm.cc/download – just extract it somewhere and go to this path in your PowerShell window. Then call
.\nssm.exe install NameOfSolrService
and you will see new window with some settings. Set there following values:
- Path: C:\solr\solr-6.6.2\bin\solr.cmd
- Startup Directory: C:\solr\solr-6.6.2\bin
- Arguments: start -p 662 -f -v
After form submission you should see new service on the list of services (Windows > Run > Services) . If your service is not running – just run it from services windows – it will start automatically after restart.
We have chosen port 662 so our SOLR instance currently will be available under url http://localhost:662/solr/
- Generate SOLR Certificates
We use approach from this website https://lucene.apache.org/solr/guide/6_6/enabling-ssl.html#EnablingSSL-BasicSSLSetup
At the beginning you should check if you have JRE installed – if not install it and then in the path
C:\Program Files (x86)\Java\jre1.8.0_141\bin\keytool.exe
you will find keytool.exe which will generate certificates for you (you might have different path – depends on version of JRE).
Then open again PowerShell and enter into SOLR directory
and run following command
& 'C:\Program Files (x86)\Java\jre1.8.0_141\bin\keytool.exe' -genkeypair -alias solr-ssl -keyalg RSA -keysize 2048 -keypass secret -storepass secret -validity 9999 -keystore solr-ssl.keystore.jks -ext SAN=DNS:localhost,IP:127.0.0.1 -dname "CN=localhost, OU=Organizational Unit, O=Organization, L=Location, ST=State, C=Country"
You should notice that we have got there keypass equal to “secret” which can be changed on local, and should be changed on other environments.
Then we need to convert key to PEM format with command:
& 'C:\Program Files (x86)\Java\jre1.8.0_141\bin\keytool.exe' -importkeystore -srckeystore solr-ssl.keystore.jks -destkeystore solr-ssl.keystore.p12 -srcstoretype jks -deststoretype pkcs12
You will be asked few times for password – use “secret” or your own.
Then we need to convert generated key for next format with OpenSSL – download OpenSSL from here https://indy.fulgan.com/SSL/openssl-0.9.8r-x64_86-win64-rev2.zip and extract into
C:\Program Files (x86)\OpenSSL
and run command:
& 'C:\Program Files (x86)\OpenSSL\openssl.exe' pkcs12 -in solr-ssl.keystore.p12 -out solr-ssl.pem
- Import certificate to the trusted certificates
Opem “Windows > Run > mmc” and manage certificates. Import created certificate to the list of trusted ones.
- Change SOLR settings
In final step you need to change yours configuration for SOLR. Open SOLR server directory
and open to edit of solr.in.cmd file. Then add at the end following settings:
REM Require clients to authenticate
REM Enable clients to authenticate (but not require)
To test if it works you need to restart yours SOLR service. After restart SOLR will not longer work with http protocol – so you need to go into “https://localhost:662/solr” to check how your SSL works.
And now you are ready to install Sitecore 9 and xConnect. Have a good fun with it!