Form-in triggers
Use the form-in trigger type to create triggers that fire
when a user attempts to send a form to the server, but before the form is
parsed by the
Helix Core Server.
Example
All users permitted to edit jobs have been placed in a designated group called jobbers. The following Python script runs p4 group -o jobbers with the -G (Python marshaled objects) flag to determine if the user who triggered the script is in the jobbers group.
import sys, os, marshal
# Configure for your environment
tuser = "triggerman" # trigger username
job_group = "jobbers" # Perforce group of users who may edit jobs
# Get trigger input args
user = sys.argv[1]
# Get user list
# Use global -G flag to get output as marshaled Python dictionary
CMD = "p4 -G -u %s -p 1666 group -o %s" % \
(tuser, job_group)
result = {}
result = marshal.load(os.popen(CMD, 'r'))
job_users = []
for k in result.keys():
if k[:4] == 'User': # user key format: User0, User1, ...
u = result[k]
job_users.append(u)
# Compare current user to job-editing users.
if not user in job_users:
print "\n\t>>> You don't have permission to edit jobs."
print "\n\t>>> You must be a member of '%s'.\n" % job_group
sys.exit(1)
else: # user is in job_group -- OK to create/edit jobs
sys.exit(0)
This form-in trigger fires on job forms
only. To use the trigger, add the following line to the trigger
table:
sample8 form-in job "python jobgroup.py %user%"
If the user is in the jobbers group, the
form-in trigger succeeds, and the changed job is passed to
the
Helix Core Server
for parsing. Otherwise, an error message is displayed, and changes to
the job are rejected.
For detailed guidance for using the flag for Python marshaled objects, see the Perforce Knowledge Base article, Using p4 -G.






