We have been taught that we should use byreference() function to pass pvs from p

We have been taught that we should use byreference() function to pass pvs from process to process. This saves memory. As it relates to a CDT, we are being instructed not to pass a CDT to a sub process as a byreference() function. 1. Why is this? 2. If we do not use byreference() then additional memory will be used in the sub process - this defeats the memory savings.
After reading on the forum it seems that many will create a CDT with many fields in them and then processes using the CDT will only use some of the fields. If you create a CDT specific for a process, wouldn't it make send to pass the CDT to the sub processes as a byreference()?
Keith...

OriginalPostID-83512

OriginalPostID-83512

  Discussion posts and replies are publicly visible

  • 0
    Certified Associate Developer
    Passing CDTs byreference() will cause errors to occur when the version of the CDT is different between the two processes. Thus if you pass CDTs by reference in long running processes, and you update the CDT, the inflight processes will throw an error when it triggers a new sub process that attempts to use the newest version of the CDT.
  • Are you saying that the memory savings is now not as important? We have what is called a parent process that then calls the worker task process where all the tasks live and this sub will archive in 30 days. When a process is started the calling to the sub process is rather immediate. With this use case, I do not think a byreference call to this sub process is an issue. I agree, if we have another sub process call later that uses a CDT that has been changed, we could have an issue.
    Even if you do not byreference, passing a CDT to a sub process will cause an issue if the CDT in the sub process does not match the same CDT version of the calling process. How do you deal with this scenario??? It seems your still doomed to have an error for longer running processes that call a sub process.
  • Keith, it is not that you *could* have an issue, you *will* have an issue. None of your existing instances calling subprocesses are going to work and there is no way to back out of it. You would have to delete all existing instances and start new ones. We cannot stress more what the impact of this is.
    As for passing CDTs by value, as long as the new CDT has supported changed (additional fields, removed restrictions) then your subprocesses are going to work fine with old CDTs cast into their new version in subprocess.
  • 0
    Certified Associate Developer
    Once you pass a CDT by reference in a long running instance, you'll never be able to update that CDT without breaking your existing instances. There are some workarounds but they often require significant effort to implement.