Multiple Content Picker Macro Parameter Not Resolving in Courier
I have a macro with a single parameter field of the Multiple Content Picker type.
After I sync between environments via Courier, if any of the ID's of the selected items are different between environments, the macro doesn't display the items correctly. The IDs aren't resolving properly, as they would (and do, I've tested) if I used the plain Content Picker macro parameter type.
So, I've ensured that both macrosAreDependencies and macroParametersAreDependencies are true in my courier.config, and I also checked the macroPropertyTypeResolvers section of courier.config. It is as follows:
<macroPropertyTypeResolvers>
<contentPickers>
<!-- Macro Property Types, that store Content IDs, to link to media or content -->
<add key="contentPicker">Umbraco.ContentPickerAlias</add>
<add key="contentPicker2">Umbraco.ContentPicker2</add>
<add key="multiplemediaPicker">Umbraco.MultipleMediaPicker</add>
<add key="mediaPicker">Umbraco.MediaPicker</add>
<add key="mediaPicker2">Umbraco.MediaPicker2</add>
<add key="MNTP-CSV">Umbraco.MultiNodeTreePicker</add>
</contentPickers>
As you can see, I have added the MultiNodeTreePicker to this section, but it's still not resolving.
Am I missing something here? Any help would be appreciated.
To add a bit more context, I found the following in the Courier log file after turning on debugging.
System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> Could not proceed, no content type found with alias USNBlogPost
at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
at System.Web.Services.Protocols.SoapHttpClientProtocol.EndInvoke(IAsyncResult asyncResult)
at Umbraco.Courier.RepositoryProviders.WebServiceProvider.RepositoryWebservice.EndGetHashes(IAsyncResult asyncResult)
at Umbraco.Courier.RepositoryProviders.CourierWebserviceRepositoryProvider.GetHashes(ItemIdentifier[] itemIds)
at Umbraco.Courier.Core.Packaging.RevisionPackaging.GetTargetHashes(IPackagingTarget2 target, IEnumerable`1 ids)
at Umbraco.Courier.Core.Packaging.RevisionPackaging.PackageBatch()
at Umbraco.Courier.Core.Packaging.RevisionPackaging.Package()
at Umbraco.Courier.Core.Tasks.PackagingTask.Run()
at Umbraco.Courier.Core.BackgroundTaskRunner`1.ConsumeTaskInternal(T task)
So the issue seems to be that Courier can't find the USNBlogPost type, but I have checked and that it exists as a document type on both environments.
Further, I added a parameter to my macro using a plain Content Picker and picked a document of the USNBlogPost type that didn't exist on the target, and that resolved just fine, so Courier is apparently able to handle that document type fine.
Having the same problem here with macros using document types with Multi-node Content Tree pickers - I'm assuming you've not managed to resolve this one yet?
Unfortunately I never was able to find a solution or a way to make Courier play nice with the Multi-Node Tree Picker, I ended up splitting the single field into 4 individual content pickers in this case.
I know that's not a real solution to the problem all in all, but it at least allowed the client to do what they needed to do in that case.
Thanks for coming back - I fear that's probably the case here as well.
Digging a lot deeper, I can see that Courier seems to be trying to resolve the content items as "media" rather than content, and even though it successfully retrieves the content item from the database, it fails to find the correct ContentType for the item because it can't seem to create an ItemIdentifier.
Seeing as Umbraco have removed the "lite" version of Courier, I'm hoping I'll be able to get some more tangible support for this from them.
Rather interestingly I've found Umbraco.MultiNodeTreePicker2 as a potential content provider, and using that seems to send it as a Document rather than Media item, which seems to help:
<macroPropertyTypeResolvers>
<contentPickers>
<!-- Macro Property Types, that store Content IDs, to link to media or content -->
<add key="contentPicker">Umbraco.ContentPickerAlias</add>
<add key="multiplemediaPicker">Umbraco.MultipleMediaPicker</add>
<add key="mediaPicker">Umbraco.MediaPicker</add>
<!-- Add this using alias "2" if linking to Content rather than Media -->
<add key="MNTP2-CSV">Umbraco.MultiNodeTreePicker2</add>
</contentPickers>
</macroPropertyTypeResolvers>
Multiple Content Picker Macro Parameter Not Resolving in Courier
I have a macro with a single parameter field of the Multiple Content Picker type.
After I sync between environments via Courier, if any of the ID's of the selected items are different between environments, the macro doesn't display the items correctly. The IDs aren't resolving properly, as they would (and do, I've tested) if I used the plain Content Picker macro parameter type.
So, I've ensured that both macrosAreDependencies and macroParametersAreDependencies are true in my courier.config, and I also checked the macroPropertyTypeResolvers section of courier.config. It is as follows:
As you can see, I have added the MultiNodeTreePicker to this section, but it's still not resolving.
Am I missing something here? Any help would be appreciated.
Going to give this as a bump. I have since narrowed this down to being an issue when using the following line in contentPickers
If I have that as a field type for a macro, Courier gives a 500 error with no visible stack trace to help out as it tries to resolve items selected.
Any ideas as to next steps to diagnose this?
To add a bit more context, I found the following in the Courier log file after turning on debugging.
So the issue seems to be that Courier can't find the USNBlogPost type, but I have checked and that it exists as a document type on both environments.
Further, I added a parameter to my macro using a plain Content Picker and picked a document of the USNBlogPost type that didn't exist on the target, and that resolved just fine, so Courier is apparently able to handle that document type fine.
Having the same problem here with macros using document types with Multi-node Content Tree pickers - I'm assuming you've not managed to resolve this one yet?
Unfortunately I never was able to find a solution or a way to make Courier play nice with the Multi-Node Tree Picker, I ended up splitting the single field into 4 individual content pickers in this case.
I know that's not a real solution to the problem all in all, but it at least allowed the client to do what they needed to do in that case.
Thanks for coming back - I fear that's probably the case here as well.
Digging a lot deeper, I can see that Courier seems to be trying to resolve the content items as "media" rather than content, and even though it successfully retrieves the content item from the database, it fails to find the correct ContentType for the item because it can't seem to create an ItemIdentifier.
Seeing as Umbraco have removed the "lite" version of Courier, I'm hoping I'll be able to get some more tangible support for this from them.
Rather interestingly I've found
Umbraco.MultiNodeTreePicker2
as a potential content provider, and using that seems to send it as a Document rather than Media item, which seems to help:I had tried that as well and it still wasn't enough to fully resolve on my end, but please let me know if you have better luck.
Hmm, ok, I'll hold back on my excitement and promises then ;)
Yep, that didn't work. I've reached out to support who've confirmed that it appears to be a bug.
I've raised the following issue:
https://github.com/umbraco/Umbraco.Courier.Issues/issues/10
is working on a reply...