Appian Community
Site
Search
Sign In/Register
Site
Search
User
DISCUSS
LEARN
SUCCESS
SUPPORT
Documentation
AppMarket
More
Cancel
I'm looking for ...
State
Not Answered
Replies
4 replies
Subscribers
6 subscribers
Views
2207 views
Users
0 members are here
Share
More
Cancel
Related Discussions
Home
»
Discussions
»
Process
We have been taught that we should use byreference() function to pass pvs from p
Keith
over 11 years ago
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
nathan.schmitz
Certified Associate Developer
over 11 years ago
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.
Cancel
Vote Up
0
Vote Down
Sign in to reply
Verify Answer
Cancel
0
Keith
over 11 years ago
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.
Cancel
Vote Up
0
Vote Down
Sign in to reply
Verify Answer
Cancel
0
Mike Cichy
Appian Employee
over 11 years ago
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.
Cancel
Vote Up
0
Vote Down
Sign in to reply
Verify Answer
Cancel
0
nathan.schmitz
Certified Associate Developer
over 11 years ago
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.
Cancel
Vote Up
0
Vote Down
Sign in to reply
Verify Answer
Cancel