[Rt-commit] rt branch 5.0/add-documented-api-for-scrip-stage-data-sharing created. rt-5.0.3-126-g0d4f93a3ba

BPS Git Server git at git.bestpractical.com
Tue Oct 4 01:12:24 UTC 2022

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "rt".

The branch, 5.0/add-documented-api-for-scrip-stage-data-sharing has been created
        at  0d4f93a3ba80aa3a56e4d5ef4d96e0b5938f6592 (commit)

- Log -----------------------------------------------------------------
commit 0d4f93a3ba80aa3a56e4d5ef4d96e0b5938f6592
Author: Brian Conry <bconry at bestpractical.com>
Date:   Mon Oct 3 19:28:31 2022 -0500

    Add RT::Scrip::DataCache
    This change adds the DataCache accessor method to RT::Scrip objects for
    use in safely passing information from one phase of scrip processing to
    others, e.g. from Condtion code to a template.
    Each Scrip object is created with a new empty hashref for its DataCache.
    This is a transient cache and no data is preserved when the object is
    destroyed.  This cache is not used for any other purpose so that there
    is no concern about conflict with current or future RT Scrip attributes
    or methods.

diff --git a/docs/customizing/scrip_conditions_and_action.pod b/docs/customizing/scrip_conditions_and_action.pod
index 2e7de72111..6c40b861c2 100644
--- a/docs/customizing/scrip_conditions_and_action.pod
+++ b/docs/customizing/scrip_conditions_and_action.pod
@@ -262,6 +262,28 @@ transactions, as is the case with C<SetOwner>. When this action runs,
 the set owner transaction will fire the default On Owner Change Notify
 Owner scrip, if it is enabled.
+=head1 Passing data from Conditions to Actions and Templates
+Sometimes data is calculated in a condition that needs to be used in an action,
+or a template that it references.
+All of these objects are associated with a single instance of an RT::Scrip
+object that is unique to that instance of that scrip on that transaction.
+This can be referenced from conditions and actions as:
+    $self->ScripObj
+It can also be referenced from templates loaded by any of the core RT Actions,
+including C<Create Tickets>, C<Send Forward>, and all of the C<Notify> actions,
+    $ScripObj
+The Scrip object has a C<DataCache> method that returns a hashref that can be
+used safely to pass arbitrary data from one phase of Scrip processing to
 When writing actions and conditions, it's helpful to look at the actions
diff --git a/lib/RT/Scrip.pm b/lib/RT/Scrip.pm
index dd488f6730..6d3e11f004 100644
--- a/lib/RT/Scrip.pm
+++ b/lib/RT/Scrip.pm
@@ -199,6 +199,8 @@ sub Create {
     return ( $id, $msg ) unless $id;
+    $self->{_data_cache} = {};
     (my $status, $msg) = RT::ObjectScrip->new( $self->CurrentUser )->Add(
         Scrip     => $self,
         Stage     => $args{'Stage'},
@@ -1072,6 +1074,18 @@ Returns the current value of LastUpdated.
+=head2 DataCache
+Returns the hashref for the instance datacache, which can be used to share data
+between the Condtion, Action, and Template associated with this Scrip instance
+being applied to a transaction.
+sub DataCache {
+    my $self = shift;
+    return $self->{_data_cache};
 sub _CoreAccessible {

commit dcfa8170a5e6e75f20e1fc3f0f1d640f4fe22cbd
Author: Brian Conry <bconry at bestpractical.com>
Date:   Mon Oct 3 18:05:31 2022 -0500

    Pass ScripObj to Action template parsing
    This change makes the ScripObj available to tempaltes parsed by the
    RT::Action subclasses CreateTickets, SendEmail, SendForward, and their
    This allows IsApplicable code, whether from CustomIsApplicableCode or
    from Conditions added by plugins/extensions, to store data on the
    ScripObj for use by a template, as it can already be used by
    CustomPrepareCode, CustomCommitCode, or the respective methods on
    Action subclasses.

diff --git a/lib/RT/Action/CreateTickets.pm b/lib/RT/Action/CreateTickets.pm
index 9e1cf5e6bf..22bcf1fac9 100644
--- a/lib/RT/Action/CreateTickets.pm
+++ b/lib/RT/Action/CreateTickets.pm
@@ -308,6 +308,7 @@ sub Prepare {
         Content        => $self->TemplateObj->Content,
+        ScripObj       => $self->ScripObj,
         _ActiveContent => $active,
     return 1;
diff --git a/lib/RT/Action/SendEmail.pm b/lib/RT/Action/SendEmail.pm
index 2c54a86598..5eae6dcfe8 100644
--- a/lib/RT/Action/SendEmail.pm
+++ b/lib/RT/Action/SendEmail.pm
@@ -139,6 +139,7 @@ sub Prepare {
     unless ( $self->TemplateObj->MIMEObj ) {
         my ( $result, $message ) = $self->TemplateObj->Parse(
             Argument       => $self->Argument,
+            ScripObj       => $self->ScripObj,
             TicketObj      => $self->TicketObj,
             TransactionObj => $self->TransactionObj
diff --git a/lib/RT/Action/SendForward.pm b/lib/RT/Action/SendForward.pm
index ac5d6d04fd..33296fbe63 100644
--- a/lib/RT/Action/SendForward.pm
+++ b/lib/RT/Action/SendForward.pm
@@ -73,6 +73,7 @@ sub Prepare {
     my ( $result, $message ) = $self->TemplateObj->Parse(
         Argument           => $self->Argument,
+        ScripObj           => $self->ScripObj,
         Ticket             => $self->TicketObj,
         Transaction        => $self->ForwardedTransactionObj,
         ForwardTransaction => $self->TransactionObj,



More information about the rt-commit mailing list