This template helps test a feed from IDM to Banner. This is an example of running queries.
Sync data task
Copy data from one database to another so it can easily be joined/queried/tested
Print state of person on both sides of integration
Change a netId
Find example random records
Note, this joins data on both sides so the "syncData" option must have been run recently
Configuration
Script
import java.util.*; import edu.internet2.middleware.grouper.cfg.*; import edu.internet2.middleware.grouper.misc.*; import edu.internet2.middleware.grouper.rules.*; import edu.internet2.middleware.grouper.util.*; import edu.internet2.middleware.grouperClient.jdbc.GcDbAccess; import edu.internet2.middleware.grouper.app.attestation.*; import edu.internet2.middleware.grouper.app.gsh.template.GshTemplateOutput; import edu.internet2.middleware.grouper.attr.assign.*; import edu.internet2.middleware.grouper.attr.finder.*; import edu.internet2.middleware.grouper.attr.value.*; import edu.internet2.middleware.grouper.*; import edu.internet2.middleware.subject.*; import org.apache.commons.lang.*; //uncomment to compile in eclipse (and last line) //public class Test13 { /** * select data from penncomm based on one input * @param pennId * @param pennKey * @param bannerGuid * @return pennid, pennkey, and banner guid */ public static Object[] selectPersonFromPennComm(String pennId, String pennKey, String bannerGuid) { // what kind of identifier // if pennid // select m.penn_id, m.kerberos_principal pennkey, m.BANNER_GUID from comadmin.member m String pennCommSql = "select m.char_penn_id, m.kerberos_principal pennkey, m.BANNER_GUID from comadmin.member m where "; GcDbAccess gcDbAccess = new GcDbAccess().connectionName("pennCommunityTest"); boolean selectFromPennComm = false; if (!StringUtils.isBlank(pennId)) { pennCommSql += " m.penn_id = ?"; gcDbAccess.addBindVar(pennId); selectFromPennComm = true; } else if (!StringUtils.isBlank(pennKey)) { pennCommSql += " m.kerberos_principal = ?"; gcDbAccess.addBindVar(pennKey); selectFromPennComm = true; } else if (!StringUtils.isBlank(bannerGuid)) { pennCommSql += " m.BANNER_GUID = ?"; gcDbAccess.addBindVar(bannerGuid); selectFromPennComm = true; } String pennCommPennId = null; String pennCommPennKey = null; String pennCommBannerGuid = null; Object[] row = null; if (selectFromPennComm) { row = gcDbAccess.sql(pennCommSql).select(Object[].class); } return row; } /** * select data from banner based on one input * @param pidm * @param pennId * @param pennKey * @param bannerGuid * @return pennid, pennkey, and banner guid */ public static Object[] selectPersonFromBanner(String dbLinkPennantStudent, Integer pidm, String pennId, String pennKey, String bannerGuid) { String bannerSql = "select S.SPRIDEN_PIDM , S.SPRIDEN_ID, G.GOBUMAP_UDC_ID, GID.GORADID_ADDITIONAL_ID, "; bannerSql += " case when exists (SELECT 1 FROM SGBSTDN@" + dbLinkPennantStudent + " WHERE SGBSTDN_PIDM = SPRIDEN_PIDM) then 'T' else 'F' end as student "; bannerSql += " from spriden@" + dbLinkPennantStudent + " s, GOBUMAP@" + dbLinkPennantStudent + " g, GORADID@" + dbLinkPennantStudent + " gid "; bannerSql += " where SPRIDEN_CHANGE_IND is null and spriden_id is not null and S.SPRIDEN_PIDM = G.GOBUMAP_PIDM(+) "; bannerSql += " and S.SPRIDEN_PIDM = GID.GORADID_PIDM(+) and GID.GORADID_ADID_CODE(+) = 'PKEY' and REGEXP_LIKE(s.spriden_id, '^[0-9]{8}" + '$' + "') "; GcDbAccess gcDbAccess = new GcDbAccess().connectionName("pennCommunityTest"); boolean selectFromBanner = false; if (pidm != null) { bannerSql += "and S.SPRIDEN_PIDM = ? "; gcDbAccess.addBindVar(pidm); selectFromBanner = true; } else if (!StringUtils.isBlank(pennId)) { bannerSql += "and S.SPRIDEN_ID = ? "; gcDbAccess.addBindVar(pennId); selectFromBanner = true; } else if (!StringUtils.isBlank(pennKey)) { bannerSql += "and GID.GORADID_ADDITIONAL_ID = ? "; gcDbAccess.addBindVar(pennKey); selectFromBanner = true; } else if (!StringUtils.isBlank(bannerGuid)) { bannerSql += "and G.GOBUMAP_UDC_ID = ? "; gcDbAccess.addBindVar(bannerGuid); selectFromBanner = true; } Object[] row = null; if (selectFromBanner) { row = gcDbAccess.sql(bannerSql).select(Object[].class); } return row; } public static void printPerson(GshTemplateOutput gsh_builtin_gshTemplateOutput, String pennCommPennId, String pennCommPennKey, String pennCommBannerGuid, Integer bannerPidm, String bannerPennId, String bannerPennKey, String bannerBannerGuid, Boolean bannerIsStudent) { GcDbAccess gcDbAccess; // print results gsh_builtin_gshTemplateOutput.addOutputLine("Penn community: Penn ID: " + pennCommPennId + ", PennKey: " + pennCommPennKey + ", Banner GUID: " + pennCommBannerGuid); gsh_builtin_gshTemplateOutput.addOutputLine("Banner: Penn ID: " + bannerPennId + ", PennKey: " + bannerPennKey + ", Banner GUID: " + bannerBannerGuid + ", pidm: " + bannerPidm + ", student? " + bannerIsStudent); boolean pennIdMatch = StringUtils.equals(StringUtils.trimToEmpty(pennCommPennId), StringUtils.trimToEmpty(bannerPennId)); boolean pennKeyMatch = StringUtils.equals(StringUtils.trimToEmpty(pennCommPennKey), StringUtils.trimToEmpty(bannerPennKey)); boolean bannerGuidMatch = StringUtils.equals(StringUtils.trimToEmpty(pennCommBannerGuid), StringUtils.trimToEmpty(bannerBannerGuid)); gsh_builtin_gshTemplateOutput.addOutputLine("Identity (overall) match: " + (pennIdMatch && pennKeyMatch && bannerGuidMatch) + ", Penn ID match: " + pennIdMatch + ", PennKey match: " + pennKeyMatch + ", Banner GUID match: " + bannerGuidMatch); // get emails if (!StringUtils.isBlank(pennCommPennId)) { gcDbAccess = new GcDbAccess().connectionName("pennCommunityTest"); List<Object[]> rows = gcDbAccess.sql("select PENN_ID, EMAIL_ADDRESS, SOURCE, IS_PREFERRED, LAST_UPDATED from comadmin.TEMP_NGSS_STU_ID_FULL_V_emails where penn_id = ? order by 3, 2").addBindVar(pennCommPennId).selectList(Object[].class); for (Object[] theRow : rows) { gsh_builtin_gshTemplateOutput.addOutputLine("Penn community email: Penn ID: " + GrouperUtil.stringValue(theRow[0]) + ", email: " + GrouperUtil.stringValue(theRow[1]) + ", source: " + GrouperUtil.stringValue(theRow[2]) + ", pref: " + GrouperUtil.stringValue(theRow[3]) + ", last updated: " + GrouperUtil.stringValue(theRow[4])); } } // get emails if (bannerPidm != null) { gcDbAccess = new GcDbAccess().connectionName("pennCommunityTest"); String bannerEmailSql = "select goremal_pidm as pidm, s.spriden_id as char_penn_id, "; bannerEmailSql += "REGEXP_REPLACE(REGEXP_REPLACE(REGEXP_REPLACE(REGEXP_REPLACE( "; bannerEmailSql += "REGEXP_REPLACE(REGEXP_REPLACE(REGEXP_REPLACE(goremal_email_address, '^(.*)\\.XXX\\.XX\\.[0-9]+" + '$' + "','\\1'), '^(.*)\\.XX\\.[0-9]+" + '$' + "','\\1') "; bannerEmailSql += ", '^(.*)\\.YYY\\.XXX" + '$' + "','\\1'), '^(.*)\\.yyy\\.xxx" + '$' + "','\\1'), '^(.*)\\.XXX" + '$' + "','\\1'), '^(.*)\\.XXXX" + '$' + "','\\1'), '^(.*)XXX" + '$' + "','\\1') as email_Address_real, "; bannerEmailSql += "goremal_email_address as email_Address_obfuscated, "; bannerEmailSql += "goremal_emal_code as emal_code, goremal_preferred_ind as preferred, goremal_status_ind as status "; bannerEmailSql += "from goremal@PENNANT_STUDENT_BANfun.WORLD, spriden@PENNANT_STUDENT_BANfun.WORLD s where goremal_pidm = spriden_pidm and S.SPRIDEN_CHANGE_IND is null "; bannerEmailSql += "and REGEXP_LIKE(s.spriden_id, '^[0-9]{8}" + '$' + "') and goremal_pidm = ?"; List<Object[]> rows = gcDbAccess.sql(bannerEmailSql).addBindVar(bannerPidm).selectList(Object[].class); for (Object[] theRow : rows) { gsh_builtin_gshTemplateOutput.addOutputLine("Banner email: Pidm: " + GrouperUtil.stringValue(theRow[0]) + ", email: " + GrouperUtil.stringValue(theRow[1]) + ", email obfuscated: " + GrouperUtil.stringValue(theRow[2]) + ", email code: " + GrouperUtil.stringValue(theRow[3]) + ", pref: " + GrouperUtil.stringValue(theRow[4]) + ", status: " + GrouperUtil.stringValue(theRow[5])); } } } public static void displayPerson(GshTemplateOutput gsh_builtin_gshTemplateOutput, Map<String, String> envToDbLink, String gsh_input_env, String gsh_input_pennId, String gsh_input_bannerGuid, String gsh_input_pennKey, Integer gsh_input_pidm) { String dbLink = envToDbLink.get(gsh_input_env); String dbLinkPennantStudent = dbLink.toLowerCase().replace("authzadm", "pennant_student"); // String gsh_input_env = "fot"; // String gsh_input_pennId = "10021368"; // String gsh_input_bannerGuid = "abc123"; // Integer gsh_input_pidm = 1234; // String gsh_input_pennKey = "mchyzer"; // what kind of identifier // if pennid // select m.penn_id, m.kerberos_principal pennkey, m.BANNER_GUID from comadmin.member m String pennCommSql = "select m.char_penn_id, m.kerberos_principal pennkey, m.BANNER_GUID from comadmin.member m where "; GcDbAccess gcDbAccess = new GcDbAccess().connectionName("pennCommunityTest"); Object[] row = selectPersonFromPennComm(gsh_input_pennId, gsh_input_pennKey, gsh_input_bannerGuid); String pennCommPennId = null; String pennCommPennKey = null; String pennCommBannerGuid = null; boolean selectFromPennComm = false; if (row != null) { selectFromPennComm = true; pennCommPennId = GrouperUtil.stringValue(row[0]); pennCommPennKey = GrouperUtil.stringValue(row[1]); pennCommBannerGuid = GrouperUtil.stringValue(row[2]); } // get the banner side Integer bannerPidm = null; String bannerPennId = null; String bannerPennKey = null; String bannerBannerGuid = null; Boolean bannerIsStudent = null; row = selectPersonFromBanner(dbLinkPennantStudent, gsh_input_pidm, gsh_input_pennId, gsh_input_pennKey, gsh_input_bannerGuid); boolean selectFromBanner = row != null; if (!selectFromBanner) { row = selectPersonFromBanner(dbLinkPennantStudent, null, pennCommPennId, pennCommPennKey, pennCommBannerGuid); selectFromBanner = row != null; } if (selectFromBanner) { // S.SPRIDEN_PIDM , S.SPRIDEN_ID, G.GOBUMAP_UDC_ID, GID.GORADID_ADDITIONAL_ID bannerPidm = GrouperUtil.intObjectValue(row[0], false); bannerPennId = GrouperUtil.stringValue(row[1]); bannerBannerGuid = GrouperUtil.stringValue(row[2]); bannerPennKey = GrouperUtil.stringValue(row[3]); bannerIsStudent = GrouperUtil.booleanValue(row[4]); } printPerson(gsh_builtin_gshTemplateOutput, pennCommPennId, pennCommPennKey, pennCommBannerGuid, bannerPidm, bannerPennId, bannerPennKey, bannerBannerGuid, bannerIsStudent); } public static void findRandomPennId(GshTemplateOutput gsh_builtin_gshTemplateOutput, String gsh_input_env, Map<String, String> envToDbLink, String sql) { //lets see how many int count = new GcDbAccess().connectionName("pennCommunityTest").sql("select count(1) from " + sql).select(int.class); if (count == 0) { gsh_builtin_gshTemplateOutput.addOutputLine("No records found!"); } else { int rowNum = Math.max(1, (int)(Math.random() * (double)count)); String pennId = new GcDbAccess().connectionName("pennCommunityTest").sql("select penn_id from " + sql + " where row_number = ?").addBindVar(rowNum).select(String.class); displayPerson(gsh_builtin_gshTemplateOutput, envToDbLink, gsh_input_env, pennId, null, null, null); } } // public static void main(String[] args) { // GrouperStartup.startup(); // //syncData, changePennKey, displayState, findPerson // String gsh_input_action = "displayState"; // String gsh_input_env = "fot"; // String gsh_input_pennId = "10021368"; // String gsh_input_bannerGuid = "abc123"; // String gsh_input_oldPennKey = "mchyzer"; // String gsh_input_newPennKey = "mchyzer1"; // Integer gsh_input_pidm = 1234; // String gsh_input_pennKey = "mchyzer"; // personNotInBanner, personInBannerWithoutPennkey, personInBannerWithPennkey, personInBannerIsStudent, personInBannerNotStudent // String gsh_input_dataType = "personNotInBanner"; // GrouperSession gsh_builtin_grouperSession = GrouperSession.startRootSession(); // Subject gsh_builtin_subject = SubjectFinder.findByIdentifierAndSource("mchyzer", "pennperson", true); // GshTemplateOutput gsh_builtin_gshTemplateOutput = new GshTemplateOutput(); // create table TEMP_banner_STU_ID_FULL as select * from TEMP_NGSS_STU_ID_FULL_v where 1=0; // CREATE TABLE TEMP_BANNER_STU_ID_FULL ( PENN_ID NUMBER(8) NOT NULL, KERBEROS_PRINCIPAL VARCHAR2(24 CHAR), BANNER_GUID VARCHAR2(225 CHAR) NOT NULL, LAST_UPDATE DATE ); // grant select on TEMP_BANNER_STU_ID_FULL to ngss_readonly with grant option; // create table TEMP_banner_STU_ID_FULL_EMAILS as select * from TEMP_NGSS_STU_ID_FULL_V_EMAILS where 1=0; // CREATE TABLE TEMP_BANNER_STU_ID_FULL_EMAILS ( PENN_ID NUMBER ), EMAIL_ADDRESS VARCHAR2(100 CHAR), SOURCE VARCHAR2(25 CHAR), IS_PREFERRED VARCHAR2(1 CHAR), LAST_UPDATED TIMESTAMP(6) ); // grant select on TEMP_BANNER_STU_ID_FULL_EMAILS to ngss_readonly with grant option; gsh_builtin_gshTemplateOutput.assignRedirectToGrouperOperation("NONE"); // 1. convert action to boolean boolean actionSyncData = StringUtils.equals(gsh_input_action, "syncData"); boolean actionChangePennKey = StringUtils.equals(gsh_input_action, "changePennKey"); boolean actionDisplayState = StringUtils.equals(gsh_input_action, "displayState"); boolean actionFindPerson = StringUtils.equals(gsh_input_action, "findPerson"); // 2. must have an action we expect if (!actionSyncData && !actionChangePennKey && !actionDisplayState && !actionFindPerson) { gsh_builtin_gshTemplateOutput.addValidationLine("gsh_input_action", "Error: Action cannot be found '" + gsh_input_action + "'!"); } if (actionChangePennKey && StringUtils.isBlank(gsh_input_pennId)) { gsh_builtin_gshTemplateOutput.addValidationLine("gsh_input_pennId", "Error: Penn ID is required when changing PennKey!"); } if (actionChangePennKey && StringUtils.isBlank(gsh_input_bannerGuid)) { gsh_builtin_gshTemplateOutput.addValidationLine("gsh_input_bannerGuid", "Error: Banner GUID is required when changing PennKey!"); } if (actionChangePennKey && StringUtils.isBlank(gsh_input_newPennKey) && StringUtils.isBlank(gsh_input_oldPennKey)) { gsh_builtin_gshTemplateOutput.addValidationLine("gsh_input_newPennKey", "Error: New PennKey or old PennKey is required to change PennKey"); gsh_builtin_gshTemplateOutput.addValidationLine("gsh_input_oldPennKey", "Error: New PennKey or old PennKey is required to change PennKey"); } if (actionDisplayState) { // we need one identifier int identifierCount = 0; identifierCount += !StringUtils.isBlank(gsh_input_pennId) ? 1 : 0; identifierCount += !StringUtils.isBlank(gsh_input_pennKey) ? 1 : 0; identifierCount += gsh_input_pidm != null ? 1 : 0; identifierCount += !StringUtils.isBlank(gsh_input_bannerGuid) ? 1 : 0; if (identifierCount != 1) { gsh_builtin_gshTemplateOutput.addValidationLine( "Error: Enter one and only one identifier: " + identifierCount + ", " + gsh_input_pennId + ", " + gsh_input_pennKey + ", " + gsh_input_pidm + ", " + gsh_input_bannerGuid); } } // 3. get enabled envs, put envs in a map of strings from env to dblink Map<String, String> envToDbLink = new HashMap<String, String>(); RETRIEVE_ENABLED: { // retrieve all enabled envs from database List<Object[]> rows = new GcDbAccess().connectionName("pennCommunityTest").sql("select env, db_link from penn_ngss_sec_comp where enabled = 'T'").selectList(Object[].class); for (Object[] row : rows) { envToDbLink.put((String)row[0], (String)row[1]); } } // 4. validate the env is enabled and in the env table if ((actionSyncData || actionDisplayState || actionFindPerson) && !envToDbLink.containsKey(gsh_input_env)) { gsh_builtin_gshTemplateOutput.addValidationLine("gsh_input_env", "Error: invalid env '" + gsh_input_env + "' is not an enabled env: " + GrouperUtil.join(envToDbLink.keySet().iterator(), ", ")); } // if anything not valid, stop if (GrouperUtil.length(gsh_builtin_gshTemplateOutput.getValidationLines()) > 0) { gsh_builtin_gshTemplateOutput.assignIsError(true); GrouperUtil.gshReturn(); } if (actionSyncData) { String dbLink = envToDbLink.get(gsh_input_env); // run some queries int rows = new GcDbAccess().connectionName("pennCommunityTest").sql("delete from TEMP_BANNER_STU_ID_FULL@" + dbLink).executeSql(); gsh_builtin_gshTemplateOutput.addOutputLine("Deleted " + rows + " from authzadm.TEMP_BANNER_STU_ID_FULL@" + dbLink); String theSql = "insert into TEMP_BANNER_STU_ID_FULL@" + dbLink + " (PENN_ID, KERBEROS_PRINCIPAL, BANNER_GUID, LAST_UPDATE) "; theSql += "(select char_PENN_ID, KERBEROS_PRINCIPAL, BANNER_GUID, LAST_UPDATE from comadmin.TEMP_NGSS_STU_ID_FULL_V)"; rows = new GcDbAccess().connectionName("pennCommunityTest").sql(theSql).executeSql(); gsh_builtin_gshTemplateOutput.addOutputLine("Inserted " + rows + " into authzadm.TEMP_BANNER_STU_ID_FULL@" + dbLink); rows = new GcDbAccess().connectionName("pennCommunityTest").sql("delete from TEMP_BANNER_STU_ID_FULL_EMAILS@" + dbLink).executeSql(); gsh_builtin_gshTemplateOutput.addOutputLine("Deleted " + rows + " into authzadm.TEMP_BANNER_STU_ID_FULL_EMAILS@" + dbLink); theSql = "insert into TEMP_BANNER_STU_ID_FULL_EMAILS@" + dbLink + " (PENN_ID, EMAIL_ADDRESS, SOURCE, IS_PREFERRED, LAST_UPDATED) "; theSql += "(select char_PENN_ID, EMAIL_ADDRESS, SOURCE, IS_PREFERRED, LAST_UPDATED from comadmin.TEMP_NGSS_STU_ID_FULL_V_emails)"; rows = new GcDbAccess().connectionName("pennCommunityTest").sql(theSql).executeSql(); gsh_builtin_gshTemplateOutput.addOutputLine("Inserted " + rows + " into authzadm.TEMP_BANNER_STU_ID_FULL_EMAILS@" + dbLink); } else if (actionChangePennKey) { String sql = "update comadmin.member set KERBEROS_PRINCIPAL "; if (StringUtils.isBlank(gsh_input_newPennKey)) { sql += " = null "; } else { sql += " = ? "; } sql += " where CHAR_PENN_ID = ? and BANNER_GUID = ? and kerberos_principal "; if (StringUtils.isBlank(gsh_input_oldPennKey)) { sql += " is null "; } else { sql += " = ? "; } GcDbAccess gcDbAccess = new GcDbAccess().connectionName("pennCommunityTest").sql(sql); if (!StringUtils.isBlank(gsh_input_newPennKey)) { gcDbAccess.addBindVar(gsh_input_newPennKey); } gcDbAccess.addBindVar(gsh_input_pennId).addBindVar(gsh_input_bannerGuid); if (!StringUtils.isBlank(gsh_input_oldPennKey)) { gcDbAccess.addBindVar(gsh_input_oldPennKey); } int rows = gcDbAccess.executeSql(); if (rows == 1) { gsh_builtin_gshTemplateOutput.addOutputLine("Updated PennKey successfully!"); } else if (rows == 0) { gsh_builtin_gshTemplateOutput.addOutputLine("error", "Could not match on inputs, did not update PennKey!"); } else { gsh_builtin_gshTemplateOutput.addOutputLine("error", "" + rows + " were updated, that is a big problem which should not happen!"); } } else if (actionDisplayState) { displayPerson(gsh_builtin_gshTemplateOutput, envToDbLink, gsh_input_env, gsh_input_pennId, gsh_input_bannerGuid, gsh_input_pennKey, gsh_input_pidm); } else if (actionFindPerson) { String dbLink = envToDbLink.get(gsh_input_env); String dbLinkPennantStudent = dbLink.toLowerCase().replace("authzadm", "pennant_student"); //personNotInBanner, personInBannerWithoutPennkey, personInBannerWithPennkey, personInBannerIsStudent, personInBannerNotStudent if (StringUtils.equals(gsh_input_dataType, "personNotInBanner")) { String sql = " ( select penn_id, row_number() over (order by penn_id) as row_number from authzadm.TEMP_BANNER_STU_ID_FULL@" + dbLinkPennantStudent + " p "; sql += " where not exists (SELECT 1 FROM spriden@" + dbLinkPennantStudent + " s where s.spriden_id = p.penn_id) ) "; findRandomPennId(gsh_builtin_gshTemplateOutput, gsh_input_env, envToDbLink, sql); } else if (StringUtils.equals(gsh_input_dataType, "personInBannerWithoutPennkey")) { String sql = " ( select penn_id, row_number() over (order by penn_id) as row_number from authzadm.TEMP_BANNER_STU_ID_FULL@" + dbLinkPennantStudent + " p , "; sql += " spriden@" + dbLinkPennantStudent + " s where s.spriden_id = p.penn_id and not exists (SELECT 1 FROM gobumap@" + dbLinkPennantStudent + " g where g.gobumap_pidm = s.spriden_pidm) ) "; findRandomPennId(gsh_builtin_gshTemplateOutput, gsh_input_env, envToDbLink, sql); } else if (StringUtils.equals(gsh_input_dataType, "personInBannerWithPennkey")) { String sql = " ( select penn_id, row_number() over (order by penn_id) as row_number from authzadm.TEMP_BANNER_STU_ID_FULL@" + dbLinkPennantStudent + " p , "; sql += " spriden@" + dbLinkPennantStudent + " s where s.spriden_id = p.penn_id and exists (SELECT 1 FROM gobumap@" + dbLinkPennantStudent + " g where g.gobumap_pidm = s.spriden_pidm) ) "; findRandomPennId(gsh_builtin_gshTemplateOutput, gsh_input_env, envToDbLink, sql); } else if (StringUtils.equals(gsh_input_dataType, "personInBannerIsStudent")) { String sql = " ( select penn_id, row_number() over (order by penn_id) as row_number from authzadm.TEMP_BANNER_STU_ID_FULL@" + dbLinkPennantStudent + " p , "; sql += " spriden@" + dbLinkPennantStudent + " s where s.spriden_id = p.penn_id and exists (SELECT 1 FROM SGBSTDN@" + dbLinkPennantStudent + " WHERE SGBSTDN_PIDM = s.SPRIDEN_PIDM) ) "; findRandomPennId(gsh_builtin_gshTemplateOutput, gsh_input_env, envToDbLink, sql); } else if (StringUtils.equals(gsh_input_dataType, "personInBannerNotStudent")) { String sql = " ( select penn_id, row_number() over (order by penn_id) as row_number from authzadm.TEMP_BANNER_STU_ID_FULL@" + dbLinkPennantStudent + " p , "; sql += " spriden@" + dbLinkPennantStudent + " s where s.spriden_id = p.penn_id and not exists (SELECT 1 FROM SGBSTDN@" + dbLinkPennantStudent + " WHERE SGBSTDN_PIDM = s.SPRIDEN_PIDM) ) "; findRandomPennId(gsh_builtin_gshTemplateOutput, gsh_input_env, envToDbLink, sql); } } // done! gsh_builtin_gshTemplateOutput.addOutputLine("Finished running NGSS E201 template!"); // Uncomment to run in java // } //}
Config without script
grouperGshTemplate.ngssE201Testing.displayErrorOutput = true grouperGshTemplate.ngssE201Testing.folderShowOnDescendants = certainFolderAndDescendants grouperGshTemplate.ngssE201Testing.folderShowType = certainFolder grouperGshTemplate.ngssE201Testing.folderUuidToShow = 2f91557345254c9e9c2b744336791be9 grouperGshTemplate.ngssE201Testing.groupUuidCanRun = fb9238d5bf564bb1b603852545e45ff4 grouperGshTemplate.ngssE201Testing.input.0.description = Select the action you want grouperGshTemplate.ngssE201Testing.input.0.dropdownCsvValue = syncData, changePennKey, displayState, findPerson grouperGshTemplate.ngssE201Testing.input.0.dropdownValueFormat = csv grouperGshTemplate.ngssE201Testing.input.0.formElementType = dropdown grouperGshTemplate.ngssE201Testing.input.0.label = Action grouperGshTemplate.ngssE201Testing.input.0.name = gsh_input_action grouperGshTemplate.ngssE201Testing.input.0.required = true grouperGshTemplate.ngssE201Testing.input.1.description = Pick the Banner environment to operate on grouperGshTemplate.ngssE201Testing.input.1.dropdownCsvValue = fot grouperGshTemplate.ngssE201Testing.input.1.dropdownValueFormat = csv grouperGshTemplate.ngssE201Testing.input.1.formElementType = dropdown grouperGshTemplate.ngssE201Testing.input.1.label = Environment grouperGshTemplate.ngssE201Testing.input.1.name = gsh_input_env grouperGshTemplate.ngssE201Testing.input.1.required = true grouperGshTemplate.ngssE201Testing.input.1.showEl = ${gsh_input_action == 'syncData' || gsh_input_action == 'displayState' || gsh_input_action=='findPerson'} grouperGshTemplate.ngssE201Testing.input.2.description = Numeric 8 digit Penn ID grouperGshTemplate.ngssE201Testing.input.2.label = Penn ID grouperGshTemplate.ngssE201Testing.input.2.maxLength = 8 grouperGshTemplate.ngssE201Testing.input.2.name = gsh_input_pennId grouperGshTemplate.ngssE201Testing.input.2.showEl = ${gsh_input_action == 'changePennKey' || gsh_input_action == 'displayState' } grouperGshTemplate.ngssE201Testing.input.2.validationMessage = 8 digit numeric grouperGshTemplate.ngssE201Testing.input.2.validationRegex = ^[0-9]{8}$ grouperGshTemplate.ngssE201Testing.input.2.validationType = regex grouperGshTemplate.ngssE201Testing.input.3.description = Banner GUID grouperGshTemplate.ngssE201Testing.input.3.label = Banner GUID grouperGshTemplate.ngssE201Testing.input.3.maxLength = 40 grouperGshTemplate.ngssE201Testing.input.3.name = gsh_input_bannerGuid grouperGshTemplate.ngssE201Testing.input.3.showEl = ${gsh_input_action == 'changePennKey' || gsh_input_action == 'displayState'} grouperGshTemplate.ngssE201Testing.input.3.validationBuiltin = alphaNumeric grouperGshTemplate.ngssE201Testing.input.3.validationType = builtin grouperGshTemplate.ngssE201Testing.input.4.description = The previous value of this user's PennKey or blank if doesn't have one grouperGshTemplate.ngssE201Testing.input.4.label = Old PennKey grouperGshTemplate.ngssE201Testing.input.4.maxLength = 8 grouperGshTemplate.ngssE201Testing.input.4.name = gsh_input_oldPennKey grouperGshTemplate.ngssE201Testing.input.4.showEl = ${gsh_input_action == 'changePennKey'} grouperGshTemplate.ngssE201Testing.input.4.validationBuiltin = alphaNumeric grouperGshTemplate.ngssE201Testing.input.4.validationType = builtin grouperGshTemplate.ngssE201Testing.input.5.description = The new value of the person's PennKey of blank to remove it grouperGshTemplate.ngssE201Testing.input.5.label = New PennKey grouperGshTemplate.ngssE201Testing.input.5.maxLength = 8 grouperGshTemplate.ngssE201Testing.input.5.name = gsh_input_newPennKey grouperGshTemplate.ngssE201Testing.input.5.showEl = ${gsh_input_action == 'changePennKey'} grouperGshTemplate.ngssE201Testing.input.5.validationBuiltin = alphaNumeric grouperGshTemplate.ngssE201Testing.input.5.validationType = builtin grouperGshTemplate.ngssE201Testing.input.6.description = Banner PIDM for user grouperGshTemplate.ngssE201Testing.input.6.label = PIDM grouperGshTemplate.ngssE201Testing.input.6.name = gsh_input_pidm grouperGshTemplate.ngssE201Testing.input.6.showEl = ${gsh_input_action == 'displayState'} grouperGshTemplate.ngssE201Testing.input.6.type = integer grouperGshTemplate.ngssE201Testing.input.6.validationRegex = ^[0-9]{0,8}$ grouperGshTemplate.ngssE201Testing.input.6.validationType = regex grouperGshTemplate.ngssE201Testing.input.7.description = What data do you want to find grouperGshTemplate.ngssE201Testing.input.7.dropdownCsvValue = personNotInBanner, personInBannerWithoutPennkey, personInBannerWithPennkey, personInBannerIsStudent, personInBannerNotStudent grouperGshTemplate.ngssE201Testing.input.7.dropdownValueFormat = csv grouperGshTemplate.ngssE201Testing.input.7.formElementType = dropdown grouperGshTemplate.ngssE201Testing.input.7.label = Data type grouperGshTemplate.ngssE201Testing.input.7.name = gsh_input_dataType grouperGshTemplate.ngssE201Testing.input.7.required = true grouperGshTemplate.ngssE201Testing.input.7.showEl = ${gsh_input_action == 'findPerson'} grouperGshTemplate.ngssE201Testing.input.8.description = Enter the alphanumeric PennKey, e.g. jsmith grouperGshTemplate.ngssE201Testing.input.8.label = PennKey grouperGshTemplate.ngssE201Testing.input.8.maxLength = 8 grouperGshTemplate.ngssE201Testing.input.8.name = gsh_input_pennKey grouperGshTemplate.ngssE201Testing.input.8.showEl = ${gsh_input_action == 'displayState'} grouperGshTemplate.ngssE201Testing.input.8.validationBuiltin = alphaNumeric grouperGshTemplate.ngssE201Testing.input.8.validationType = builtin grouperGshTemplate.ngssE201Testing.moreActionsLabel = NGSS E201 testing grouperGshTemplate.ngssE201Testing.numberOfInputs = 9 grouperGshTemplate.ngssE201Testing.runAsType = GrouperSystem grouperGshTemplate.ngssE201Testing.securityRunType = specifiedGroup grouperGshTemplate.ngssE201Testing.showInMoreActions = true grouperGshTemplate.ngssE201Testing.showOnFolders = true grouperGshTemplate.ngssE201Testing.templateDescription = When testing E201 these are certain utilities grouperGshTemplate.ngssE201Testing.templateName = NGSS E201 testing