Nope. So long as you have edit access to the data, you should be able to Field Calculate with no issue; the issue is specific to update cursors.
Caveat here is whenever I'm working with versioned data, I'm using the python window to access a layer in my map, rather than accessing the datasource directly. (Connecting to an enterprise GDB outside of a map makes my head spin lol).
This was something I wrote a bit ago. We mass-added records to monitoring tables but didn't have anything set up to relate the records together; when appending into a table, the relIDs don't populate. So I wrote this to populate the relIDs based on the shared nestID in each table.
Further caveat is that I do not use a best practice here: it is not advised to nest cursors like I did. It did work, though, and now I know better.
aprx = arcpy.mp.ArcGISProject("CURRENT")
mp = aprx.activeMap
tbl = mp.listTables("RaptorMonitoring")[0]
lay = mp.listLayers("NestPoints")[0]
valDict = {}
checkList =[]
with arcpy.da.SearchCursor(tbl, ['Nest_ID','UUID']) as cursor:
for row in cursor:
#print(row[0])
clause= f"Nest_ID = {row[0]}"
with arcpy.da.SearchCursor(lay, ['Nest_ID', 'GlobalID']) as c2rsor:
for r2w in c2rsor:
#print(r2w[0])
if(r2w[0] == row[0]):
valDict[row[0]] = r2w[1]
if (r2w[0] == f"0{row[0]}"):
checkList.append(r2w)
#print(valDict)
#print("Checklist: ", checkList)
arcpy.management.CalculateField(tbl,
'UUID',
f"valDict.get(!Nest_ID!, !UUID!)",
expression_type= 'PYTHON3')
Anyway, I beat my head against the update cursor a bunch before giving up, especially when dealing with opening an edit session. Calculating from a dictionary works great.