May 2023 we moved from AIX to RHEL, that was a sad day as we are finding a lot of quirks when it comes to our RHEL environment. We went from Physical Hardware to VM, and found that the VM environment wasn't as thought out like we wanted.

Our VM Hosts were not organized, and we have had 3 unexpected downtimes since because of resource contention.

May want to look at other Linux OS's outside of RHEL if you can, as the updates/patches aren't as dynamic as they were in our old environment meaning we didn't have to reboot too often. If we had the choice, we would of went with Ubuntu or SUSE as at least the updates/patches don't require reboots as often.

Now we get notified at the drop of a hat when there is a patch, that security needs us to reboot. You just can't take it down at a moment's notice.

Just thoughts, and pain points. Each environment is different and hopefully you don't run into as many issues as we have.

It all depends on your learning style.

For me I rather learn as I am building so it was trial by fire as we were migrating from SeeBeyond eGate to InterSystems Ensemble (2014.1) at the time by a certain deadline. I learned a lot on the fly by reading the Developer Community posts, reaching out as needed, and just playing around with the code as I was building it. I also had my company by Cache Objectscript and MUMPS, at least so I can search for a Reference when figuring out syntax. 

The Learning site as a lot of good and informational courses you can take as well.

With some help we created a function to loop through a repeating field and verify values against a single string, and a variation against a Lookup Table...

ClassMethod DoesSingleValueExistRepeatingSegmentFields(pHL7Msg As EnsLib.HL7.Message, pSegment As %String, pField As %String, pSubField As %String, pInputValue As %String) As %Boolean

{

   #dim tSeg as EnsLib.HL7.Segment

   set tSegCount = pHL7Msg.SegCountGet()

   set i = 1

   set j = 1

   Set tFound = 0

   //get new values

   set tval=""

   while ((i <= tSegCount) && (tval="")) {

     set tSeg = pHL7Msg.GetSegmentAt(i)

     if (tSeg.Name = pSegment) {

      set pField2 = pField_"(*)"

      set tRepCount = tSeg.GetValueAt(pField2)

      while ((j <= tRepCount) && (tval="")) {

        set tID = tSeg.GetValueAt(pField_"("_j_")"_"."_pSubField)

        if (pInputValue = tID) {

         set tval = 1

        }

       set j = j + 1

      }

     }

     set i = i + 1

   }

   if (tval '= "")

   {

      Q 1

   }

   quit 0

}

I am wondering if the Query against LDAP is taking too long and timing out in a response, even though he is getting an Invalid Username/password error returned but this happens when he tries to sign in from VS Code using /api/atelier. I tried increasing the timeout, but it doesn't seem to make a difference. I tried adjusting the Base DN search, and the Nested Group search to no avail.