Broken BPM After Upgrade (Pilot)

I know that .net is being tossed in favor of more robust services. But I figured that Epicor would do some work to make the transition easier. Today, I am trying to look at a BPM in Pilot, and I get this error:
Capture
After I click OK the BPM designer shows up with another error, and no widgets.
Did the “upgrade” disable the BPM editor? I assume this error message is not what Epicor wants you to do. Anyone else see this?

Did you install the .NET 6.0 Hosting Bundle?

I don’t install anything. We have a dedicated cloud tenancy, so I have no server access. Wouldn’t that be on Epicor to do?

sounds like a ticket to the cloud team is in order maybe?

Yep! I did submit a ticket. I will report back with any official explanation.

1 Like

Does Kinetic use .NET Core now? It was .NET Standard 4.8. This is new.

We faced the same and we install it as suggested on the local machine and restarted the local PC, Issue will get resolved.

That’s interesting because I’m running 2022.1 on my machine without .NET 6.0 Runtime installed on my client with no issues.

That explains why it works for me, we’re still on 2021.2.13 in our Pilot environment.

Server is using .NET6

Client still using .NET Framework 4.8. But BPM is special - it needs .NET 6 on client for editor to work. this is what the message suggests you to do - install .NET6 on your machine

4 Likes

Any reason it lets me do it without .NET 6 on my machine?

'cuz you’re special @hmwillett :wink: :upside_down_face:

@Olga thanks for the clarification and I’ll make sure we install it when we upgrade our Kinetic.

It is interesting that the BPM runs just fine. My dashboard that utilizes a UBAQ and BPM to update records on a UD table works just fine. I just can’t actually look at the BPM. Still waiting on the official reply from support. But from the sounds of it we will need to install this file just on my machine.

BPM runs on server, so its execution should work as before.

2 Likes

I can confirm Epicor support directed me to install the software on my client and check back if I have issues.

Since BPM works with code that will eventually be compiled for the server, it works better with the .NET 6 SDK installed on the client so that it can do a better job of validating the code. The message is letting you know this although it may be more scary than necessary. We’ll look at rewording it.

If the .NET 6 SDK is not installed on the client, the BPM designer will gracefully fall back to using .NET Framework 4.8 after giving the warning.

To reiterate what was posted above, the server runs on .NET 6 and the (non-web) client remains on .NET Framework 4.8.

The issue reported above with the empty designer is likely unrelated and should be reported to support.

4 Likes

I hear that many ports from .NET Standard to Core have seen some pretty good performance improvements. Looking forward to see how that translates to Kinetic. Thanks @Epic_Santiago!

2 Likes

Support asked me to install the .net 6 runtime. I went to this page that they linked for me and picked one of the links. The first error is no longer appearing, now I only get this second one when the BPM editor actually opens (without any widgets).

Application Error

Exception caught in: mscorlib

Error Detail 
============
Message: Could not load file or assembly 'System.Runtime, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.
Program: CommonLanguageRuntimeLibrary
Method: ResolveType

Client Stack Trace 
==================
   at System.ModuleHandle.ResolveType(RuntimeModule module, Int32 typeToken, IntPtr* typeInstArgs, Int32 typeInstCount, IntPtr* methodInstArgs, Int32 methodInstCount, ObjectHandleOnStack type)
   at System.ModuleHandle.ResolveTypeHandleInternal(RuntimeModule module, Int32 typeToken, RuntimeTypeHandle[] typeInstantiationContext, RuntimeTypeHandle[] methodInstantiationContext)
   at System.Reflection.RuntimeModule.ResolveType(Int32 metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
   at System.Reflection.CustomAttribute.FilterCustomAttributeRecord(CustomAttributeRecord caRecord, MetadataImport scope, Assembly& lastAptcaOkAssembly, RuntimeModule decoratedModule, MetadataToken decoratedToken, RuntimeType attributeFilterType, Boolean mustBeInheritable, Object[] attributes, IList derivedAttributes, RuntimeType& attributeType, IRuntimeMethodInfo& ctor, Boolean& ctorHasParameters, Boolean& isVarArg)
   at System.Reflection.CustomAttribute.GetCustomAttributes(RuntimeModule decoratedModule, Int32 decoratedMetadataToken, Int32 pcaCount, RuntimeType attributeFilterType, Boolean mustBeInheritable, IList derivedAttributes, Boolean isDecoratedTargetSecurityTransparent)
   at System.Reflection.CustomAttribute.GetCustomAttributes(RuntimeAssembly assembly, RuntimeType caType)
   at System.Reflection.RuntimeAssembly.GetCustomAttributes(Type attributeType, Boolean inherit)
   at System.Attribute.GetCustomAttributes(Assembly element, Type attributeType, Boolean inherit)
   at System.Xaml.MS.Impl.XmlNsInfo.LoadPrefixes()
   at System.Xaml.XamlSchemaContext.UpdatePreferredPrefixes(XmlNsInfo newNamespaces, ConcurrentDictionary`2 prefixDict)
   at System.Xaml.XamlSchemaContext.InitializePreferredPrefixes()
   at System.Xaml.XamlSchemaContext.GetPreferredPrefix(String xmlns)
   at System.Xaml.XamlObjectReader.SerializerContext.FindPrefix(String ns)
   at System.Xaml.XamlObjectReader.ObjectMarkupInfo.FindNamespace(SerializerContext context)
   at System.Xaml.XamlObjectReader.MemberMarkupInfo.FindNamespace(SerializerContext context)
   at System.Xaml.XamlObjectReader.ObjectMarkupInfo.FindNamespace(SerializerContext context)
   at System.Xaml.XamlObjectReader..ctor(Object instance, XamlSchemaContext schemaContext, XamlObjectReaderSettings settings)
   at System.Xaml.XamlServices.Save(XamlWriter writer, Object instance)
   at System.Xaml.XamlServices.Save(XmlWriter writer, Object instance)
   at System.Xaml.XamlServices.Save(Object instance)
   at Ice.Lib.Bpm.Model.NetCoreReadyDirective2Persister.Save(DirectiveDefinition2 instance)
   at Ice.UI.Bpm.Designer.NaiveUndoRedoEngine.StoreState(DirectiveDefinition2 definition, Boolean isDirty)
   at Ice.UI.Bpm.Designer.DesignerTransaction.StoreUndoState(Boolean isDirty)
   at Ice.UI.Bpm.Designer.DesignSurfaceViewModel.LoadWorkflow()
   at Ice.UI.Bpm.Designer.Controls.DesignerCanvas.DesignerCanvas_Loaded(Object sender, RoutedEventArgs e)

I expect that I need to install something else, right?

I’m having exactly the same issue and waiting to hear from support. Interestingly it’s only me, and not others using the same system.

Support recognized this as a new bug and is tracking under: PRB0246010 Interesting they called it a cosmetic issue with a workaround. It’s not cosmetic for me, and there is no working workaround. I can’t edit BPMs until they fix it.