Saviynt unveils its cutting-edge Intelligence Suite products to revolutionize Identity Security!
Click HERE to see how Saviynt Intelligence is transforming the industry.
Saviynt Copilot Icon

Java Jar sendMail from template in workflow action

travemole
Regular Contributor
Regular Contributor

Dear All,

 

As Saviynt is not able to send an e-mail to a list of people without triggering an approval ... I've decided ti create a class in java that will do that workflow action.

travemole_0-1724756176729.png

Question is:

1- How can I get the body template via code from my existing templates?

2- Is there any place where we have java Jar working examples? I've seen in many posts some code here and there but nowhere any clear example end-to-end.

3- Is there any official documentation on the available java classes and functions that we can use from within the Saviynt product or we need to rise a ticket every time that we have any specific request?

4- If I cannot call directly the sendmail function from jar and I need to call the rest endpoint how do i get current sav url, token and all other needed parameters?

Kind regards,

Albert.

27 REPLIES 27

rushikeshvartak
All-Star
All-Star
  • 1- How can I get the body template via code from my existing templates?

    • You can't get existing email template body. You need to maintain separate email body in java code. 
  •  

    2- Is there any place where we have java Jar working examples? I've seen in many posts some code here and there but nowhere any clear example end-to-end.

    • No there is no example, Create simple java program and load jar and restart application

    •  
    • rushikeshvartak_0-1724772477225.png

       


      3- Is there any official documentation on the available java classes and functions that we can use from within the Saviynt product or we need to rise a ticket every time that we have any specific request? You can use any java functions supported in jdk 1.8

      4- If I cannot call directly the sendmail function from jar and I need to call the rest endpoint how do i get current sav url, token and all other needed parameters? - Its supported 

  • Refer Saviynt API Documentation

    https://docs.saviyntcloud.com/bundle/API-Reference-Guide/page/Content/API-References.htm

Regards,
Rushikesh Vartak
If this helped you move forward, click 'Kudos'. If it solved your query, select 'Accept As Solution'.

Hello @rushikeshvartak ,

Ok, I managed to get a class workking but now I need to send the Map paramter that the workflow is expecting as parameters

Error:
"org.jbpm.pvm.internal.wire.WireException: method sendEmail('arg':'test')(java.util.HashMap)


What is the right format so it's accepted by Sav as paramter? If I don't put anything it works fine but I need the parameter to send the e-mail to that person.

Kind regards,

Albert.

 

Share code to suggest changes.


Regards,
Rushikesh Vartak
If this helped you move forward, click 'Kudos'. If it solved your query, select 'Accept As Solution'.


    public static void sendEmail(Map<String, String> jobInputs) throws Exception {
        Logger logger = Logger.getLogger(MyAccessUtils.class.getName());
        logger.info("[MyAccessUtils] sendEmail(Map<String, String> jobInputs)!");
        executeProcess(jobInputs);
        logger.info("[MyAccessUtils] sendEmail(Map<String, String> jobInputs) => FINISHED");
    }

    public static void sendEmail(HashMap<String, String> jobInput) throws Exception {
        Logger logger = Logger.getLogger(MyAccessUtils.class.getName());
        logger.info("[MyAccessUtils] sendEmail(HashMap<String, String> jobInputs)!");
        Map<String, String> m = new HashMap<String, String>();
        m = (Map<String,String>)jobInput;
        sendEmail((Map<String,String>)m);
        logger.info("[MyAccessUtils] sendEmail(HashMap<String, String> jobInputs) => FINISHED");
    }

    public static void sendEmail() throws Exception {
        Logger logger = Logger.getLogger(MyAccessUtils.class.getName());
        logger.info("[MyAccessUtils] sendEmail()!");
        Map<String, String> m = new HashMap<String, String>();
        m.put("mailTemplate", "mailTemplate TO BE USED");
        m.put("emailList", "emailList TO BE USED");
        sendEmail(m);
        logger.info("[MyAccessUtils] sendEmail() => FINISHED");
    }

    public static void sendEmail(String s) throws Exception {
        Logger logger = Logger.getLogger(MyAccessUtils.class.getName());
        logger.info("[MyAccessUtils] sendEmail(String s)!");
        logger.info("[MyAccessUtils] "+s);
        Map<String, String> m = new HashMap<String, String>();
        m.put("mailTemplate", "mailTemplate TO BE USED");
        m.put("emailList", "emailList TO BE USED");
        sendEmail(m);
        logger.info("[MyAccessUtils] sendEmail(String s) => FINISHED");
    }
 
 
travemole_0-1724945508860.png

 

 

All tests just to see that it executes the right method ... I don't mind to pass all as a Sing or whatever I'll do the split later on if needed.

public static void sendEmail(Object obj) throws Exception {
    Logger logger = Logger.getLogger(MyAccessUtils.class.getName());
    logger.info("[MyAccessUtils] sendEmail(Object obj)!");

    Map<String, String> jobInputs;

    if (obj instanceof Map) {
        jobInputs = (Map<String, String>) obj;
    } else {
        throw new IllegalArgumentException("Expected a Map<String, String> as input");
    }

    // Proceed with sending the email
    executeProcess(jobInputs);
    logger.info("[MyAccessUtils] sendEmail(Object obj) => FINISHED");
}

Regards,
Rushikesh Vartak
If this helped you move forward, click 'Kudos'. If it solved your query, select 'Accept As Solution'.

I'll test now what you sent me. I've also tested with the next parameters --> {"A":"B"} and I'm getting below error which is strange because map is declared.

"2024-08-29T15:44:25.731+00:00","ecm-worker","jobs.ExternalJarJob","quartzScheduler_Worker-4-vlcdq","DEBUG","Lets Invoke Class Namecom.myaccess.MyAccessUtils method sendEMail"
"2024-08-29T15:44:25.732+00:00","ecm-worker","jobs.ExternalJarJob","quartzScheduler_Worker-4-vlcdq","DEBUG","arguments: {"A":"B"}"
"2024-08-29T15:44:25.732+00:00","ecm-worker","jobs.ExternalJarJob","quartzScheduler_Worker-4-vlcdq","DEBUG","argumentsMap:[A:B]"
"2024-08-29T15:44:25.733+00:00","ecm-worker","jobs.ExternalJarJob","quartzScheduler_Worker-4-vlcdq","ERROR","Error: "
"2024-08-29T15:44:26.106+00:00","ecm-worker","","null-vlcdq","","java.lang.NoSuchMethodException: com.myaccess.MyAccessUtils.sendEMail(java.util.Map) at java.lang.Class.getMethod(Class.java:1814) at ExternalJarJob.execute(ExternalJarJob.groovy:87) at org.quartz.core.JobRunShell.run(JobRunShell.java:199) at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:546)"

travemole
Regular Contributor
Regular Contributor

hello @rushikeshvartak ,

Same error as before with the new method:
"2024-08-29T16:04:25.104+00:00","ecm-worker","jobs.ExternalJarJob","quartzScheduler_Worker-10-pv5dt","DEBUG","START ExternalJarJob"
"2024-08-29T16:04:25.120+00:00","ecm-worker","jobs.ExternalJarJob","quartzScheduler_Worker-2-pv5dt","DEBUG","START ExternalJarJob"
"2024-08-29T16:04:25.139+00:00","ecm-worker","jobs.ExternalJarJob","quartzScheduler_Worker-10-pv5dt","DEBUG","Lets Invoke Class Namecom.myaccess.MyAccessUtils method sendEMail"
"2024-08-29T16:04:25.139+00:00","ecm-worker","jobs.ExternalJarJob","quartzScheduler_Worker-2-pv5dt","DEBUG","Lets Invoke Class Namecom.myaccess.MyAccessUtils method sendEMail"
"2024-08-29T16:04:25.144+00:00","ecm-worker","jobs.ExternalJarJob","quartzScheduler_Worker-10-pv5dt","DEBUG","arguments: {"A":"B"}"
"2024-08-29T16:04:25.144+00:00","ecm-worker","jobs.ExternalJarJob","quartzScheduler_Worker-2-pv5dt","DEBUG","arguments: {"A":"B"}"
"2024-08-29T16:04:25.150+00:00","ecm-worker","jobs.ExternalJarJob","quartzScheduler_Worker-10-pv5dt","DEBUG","argumentsMap:[A:B]"
"2024-08-29T16:04:25.150+00:00","ecm-worker","jobs.ExternalJarJob","quartzScheduler_Worker-2-pv5dt","DEBUG","argumentsMap:[A:B]"
"2024-08-29T16:04:25.151+00:00","ecm-worker","jobs.ExternalJarJob","quartzScheduler_Worker-10-pv5dt","ERROR","Error: "
"2024-08-29T16:04:25.421+00:00","ecm-worker","","null-pv5dt","","java.lang.NoSuchMethodException: com.myaccess.MyAccessUtils.sendEMail(java.util.Map) at java.lang.Class.getMethod(Class.java:1814) at ExternalJarJob.execute(ExternalJarJob.groovy:87) at org.quartz.core.JobRunShell.run(JobRunShell.java:199) at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:546)"
"2024-08-29T16:04:25.151+00:00","ecm-worker","jobs.ExternalJarJob","quartzScheduler_Worker-2-pv5dt","ERROR","Error: "
"2024-08-29T16:04:25.421+00:00","ecm-worker","","null-pv5dt","","java.lang.NoSuchMethodException: com.myaccess.MyAccessUtils.sendEMail(java.util.Map) at java.lang.Class.getMethod(Class.java:1814) at ExternalJarJob.execute(ExternalJarJob.groovy:87) at org.quartz.core.JobRunShell.run(JobRunShell.java:199) at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:546)"

Kind regards,

Albert.

NM
Honored Contributor II
Honored Contributor II

Hi @travemole , try giving the argument in double quotes ..

So currently the Java code is not able to read the input too?

travemole
Regular Contributor
Regular Contributor

Hi @NM ,

I've managed to make it work in the jobs using a deprecated method and now I'm trying to figure out the right way of writing it in the workflows. NOTE: Workflows do not accept as parameter the " so you can only use single ' or maybe \". I'm testing all possibilities now... It would be GREAT to have this kind of things documented as I've seen a LOT of posts asking for the same but no clear answer in any of them.

My current error is:

"2024-08-29T16:29:56.250+00:00","ecm","services.WorkflowService","http-nio-8080-exec-8-nj4vq","ERROR","Exception in workflow service"
"2024-08-29T16:29:56.282+00:00","ecm","","null-nj4vq","","org.jbpm.pvm.internal.wire.WireException: method sendEmail({'A':'B'})(java.util.HashMap) is not available on object com.myaccess.MyAccessUtils@50c9a017 (com.myaccess.MyAccessUtils) at org.jbpm.pvm.internal.wire.descriptor.ObjectDescriptor.invokeMethod(ObjectDescriptor.java:202) at org.jbpm.jpdl.internal.activity.JavaActivity.perform(JavaActivity.java:76) at org.jbpm.jpdl.internal.activity.JpdlAutomaticActivity.execute(JpdlAutomaticActivity.java:15) at org.jbpm.pvm.internal.model.op.ExecuteActivity.perform(ExecuteActivity.java:60) at org.jbpm.pvm.internal.model.ExecutionImpl.performAtomicOperationSync(ExecutionImpl.java:672) at org.jbpm.pvm.internal.model.ExecutionImpl.fire(ExecutionImpl.java:582) at org.jbpm.pvm.internal.model.ExecutionImpl.take(ExecutionImpl.java:487) at org.jbpm.jpdl.internal.activity.ForEachActivity.execute(ForEachActivity.java:123) at org.jbpm.jpdl.internal.activity.ForEachActivity.execute(ForEachActivity.java:53) at org.jbpm.pvm.internal.model.op.ExecuteActivity.perform(ExecuteActivity.java:60) at org.jbpm.pvm.internal.model.ExecutionImpl.performAtomicOperationSync(ExecutionImpl.java:672) at org.jbpm.pvm.internal.model.ExecutionImpl.performAtomicOperation(ExecutionImpl.java:632) at org.jbpm.pvm.internal.model.ExecutionImpl.start(ExecutionImpl.java:217) at org.jbpm.pvm.internal.cmd.StartProcessInstanceInLatestCmd.execute(StartProcessInstanceInLatestCmd.java:63) at org.jbpm.pvm.internal.cmd.StartProcessInstanceInLatestCmd.execute(StartProcessInstanceInLatestCmd.java:36) at org.jbpm.pvm.internal.svc.DefaultCommandService.execute(DefaultCommandService.java:42) at org.jbpm.pvm.internal.tx.SpringCommandCallback.doInTransaction(SpringCommandCallback.java:45) at org.jbpm.pvm.internal.tx.SpringTransactionInterceptor.execute(SpringTransactionInterceptor.java:49) at org.jbpm.pvm.internal.svc.EnvironmentInterceptor.executeInNewEnvironment(EnvironmentInterceptor.java:53) at org.jbpm.pvm.internal.svc.EnvironmentInterceptor.execute(EnvironmentInterceptor.java:40) at org.jbpm.pvm.internal.svc.RetryInterceptor.execute(RetryInterceptor.java:56) at org.jbpm.pvm.internal.svc.ExecutionServiceImpl.startProcessInstanceByKey(ExecutionServiceImpl.java:71) at com.saviynt.ecm.services.WorkflowService.workflowaccessreqStart(WorkflowService.groovy:1070) at com.saviynt.ws.JbpmapiService.workflowaccessreqStartMS(JbpmapiService.groovy:64) at com.saviynt.ecm.ws.JbpmapiController$_closure4.doCall(JbpmapiController.groovy:61) at grails.plugin.springsecurity.rest.RestTokenValidationFilter.processFilterChain(RestTokenValidationFilter.groovy:118) at grails.plugin.springsecurity.rest.RestTokenValidationFilter.doFilter(RestTokenValidationFilter.groovy:84) at grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter.doFilter(GrailsAnonymousAuthenticationFilter.java:53) at com.saviynt.webservice.SaviyntRestAuthenticationFilter.doFilter(SaviyntRestAuthenticationFilter.groovy:158) at grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter.doFilter(MutableLogoutFilter.java:62) at grails.plugin.springsecurity.web.SecurityRequestHolderFilter.doFilter(SecurityRequestHolderFilter.java:59) at com.mrhaki.grails.plugin.xframeoptions.web.XFrameOptionsFilter.doFilterInternal(XFrameOptionsFilter.java:69) at com.brandseye.cors.CorsFilter.doFilter(CorsFilter.java:82) at java.lang.Thread.run(Thread.java:750)"

If you know the answer please do not hesitate to say it ... as It's very painful to test.

Did you tested with string as input ?


Regards,
Rushikesh Vartak
If this helped you move forward, click 'Kudos'. If it solved your query, select 'Accept As Solution'.

Same thing ... not sure anymore if it's even possible as I've tried all possible combinations.


"2024-08-29T17:10:01.282+00:00","ecm","","null-nj4vq","","org.jbpm.pvm.internal.wire.WireException: method sendEmail('test')(java.util.HashMap) is not available on object com.myaccess.MyAccessUtils@42d54f9 (com.myaccess.MyAccessUtils) at org.jbpm.pvm.internal.wire.descriptor.ObjectDescriptor.invokeMethod(ObjectDescriptor.java:202) at org.jbpm.jpdl.internal.activity.JavaActivity.perform(JavaActivity.java:76) at org.jbpm.jpdl.internal.activity.JpdlAutomaticActivity.execute(JpdlAutomaticActivity.java:15) at org.jbpm.pvm.internal.model.op.ExecuteActivity.perform(ExecuteActivity.java:60) at org.jbpm.pvm.internal.model.ExecutionImpl.performAtomicOperationSync(ExecutionImpl.java:672) at org.jbpm.pvm.internal.model.ExecutionImpl.performAtomicOperation(ExecutionImpl.java:632) at org.jbpm.pvm.internal.model.ExecutionImpl.start(ExecutionImpl.java:217) at org.jbpm.pvm.internal.cmd.StartProcessInstanceInLatestCmd.execute(StartProcessInstanceInLatestCmd.java:63) at org.jbpm.pvm.internal.cmd.StartProcessInstanceInLatestCmd.execute(StartProcessInstanceInLatestCmd.java:36) at org.jbpm.pvm.internal.svc.DefaultCommandService.execute(DefaultCommandService.java:42) at org.jbpm.pvm.internal.tx.SpringCommandCallback.doInTransaction(SpringCommandCallback.java:45) at org.jbpm.pvm.internal.tx.SpringTransactionInterceptor.execute(SpringTransactionInterceptor.java:49) at org.jbpm.pvm.internal.svc.EnvironmentInterceptor.executeInNewEnvironment(EnvironmentInterceptor.java:53) at org.jbpm.pvm.internal.svc.EnvironmentInterceptor.execute(EnvironmentInterceptor.java:40) at org.jbpm.pvm.internal.svc.RetryInterceptor.execute(RetryInterceptor.java:56) at org.jbpm.pvm.internal.svc.ExecutionServiceImpl.startProcessInstanceByKey(ExecutionServiceImpl.java:71) at com.saviynt.ecm.services.WorkflowService.workflowaccessreqStart(WorkflowService.groovy:1070) at com.saviynt.ws.JbpmapiService.workflowaccessreqStartMS(JbpmapiService.groovy:64) at com.saviynt.ecm.ws.JbpmapiController$_closure4.doCall(JbpmapiController.groovy:61) at grails.plugin.springsecurity.rest.RestTokenValidationFilter.processFilterChain(RestTokenValidationFilter.groovy:118) at grails.plugin.springsecurity.rest.RestTokenValidationFilter.doFilter(RestTokenValidationFilter.groovy:84) at grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter.doFilter(GrailsAnonymousAuthenticationFilter.java:53) at com.saviynt.webservice.SaviyntRestAuthenticationFilter.doFilter(SaviyntRestAuthenticationFilter.groovy:158) at grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter.doFilter(MutableLogoutFilter.java:62) at grails.plugin.springsecurity.web.SecurityRequestHolderFilter.doFilter(SecurityRequestHolderFilter.java:59) at com.mrhaki.grails.plugin.xframeoptions.web.XFrameOptionsFilter.doFilterInternal(XFrameOptionsFilter.java:69) at com.brandseye.cors.CorsFilter.doFilter(CorsFilter.java:82) at java.lang.Thread.run(Thread.java:750)"

I am working on this POC will get back to you with working JAR


Regards,
Rushikesh Vartak
If this helped you move forward, click 'Kudos'. If it solved your query, select 'Accept As Solution'.

Feel free to use my java class if you want. It does not have anything special.

I compile it using: openjdk-8u422-b05-x64

Just an update simple code with logger is working for me. Now will test with Login 

 

rushikeshvartak_1-1724960093556.png

 


Regards,
Rushikesh Vartak
If this helped you move forward, click 'Kudos'. If it solved your query, select 'Accept As Solution'.

I am also getting same error for with parameter but without parameter how you have configured in workflow


Regards,
Rushikesh Vartak
If this helped you move forward, click 'Kudos'. If it solved your query, select 'Accept As Solution'.

@rushikeshvartak can you show me how you have sent the simple parameter? which was the format?

travemole_0-1725004530511.png

sendEmail({'TEST'})??

They are upgrading me to 24.7 just now... maybe later all will work 😄

Kind regards,

Albert.

Parameters are not working for me also. Can you show how you made worked without parameter


Regards,
Rushikesh Vartak
If this helped you move forward, click 'Kudos'. If it solved your query, select 'Accept As Solution'.

Without using parameter just like this works fine for me:

travemole_0-1725032094066.png

In case that you want to use the same csv file that i use the contents must be (WorkflowAPIParameters.csv --> NO COLUMN NAMES):
USERNAME;;PASSWORD;;SAV_URL;;FROM_EMAIL;;TO_EMAIL;;INFORMATION E-MAIL SUBJECT;;MAIL_TEMPLATE_CSV_FILE_UPLOADED

 

2024-08-30T12:11:17-04:00-ecm----2024-08-30T16:11:16.774365717Z stdout F org.jbpm.pvm.internal.wire.WireException: method justCall(java.util.HashMap) is not available on object vartak.rushikesh.RushikeshVartakSaviyntAuthentication.SaviyntApp@11977869 (vartak.rushikesh.RushikeshVartakSaviyntAuthentication.SaviyntApp)

I tried same getting error

rushikeshvartak_0-1725034417667.png

same works with jar connector

 


Regards,
Rushikesh Vartak
If this helped you move forward, click 'Kudos'. If it solved your query, select 'Accept As Solution'.

Hello @rushikeshvartak ,

You need to declare it with hasmap but empty also so it get's called as it's expecting it in the declaration even tough later is not used as you cannot send any parameter.

This is what I found after a lot of testing. For me sincerely is a problem to be addressed via new implementation idea or via bug as not being able to pass parameters to a function is really limiting a lot the capabilities of a workflow.

Also the documentation of what can be done and what cannot be done via workflow and other methods should be much more clear in the documentation as nothing is specified there of what are the capabilities ... it says you can call a function and that's all it says.

Please let me know if there's anything I can do to help on this matter. I've also opened a ticket so they can check with engineering team.


Kind regards,

Albert.


Kind regards,
Albert. 

Finally my code is working.

below are default parameters you get 

  • REQUESTID
  • USER_NAME
  • REQUESTOR


  • I used your code with modifications 
  •  checking window directory also so i can run from local
  • also created .csv property file and .csv body file
  • added showlogs variables to control debugging logs 
  • rushikeshvartak_0-1725215157928.png

    public static void sendEmail(HashMap<String, String> wfInput)

you don’t need and can’t pass parameters from workflow 


Regards,
Rushikesh Vartak
If this helped you move forward, click 'Kudos'. If it solved your query, select 'Accept As Solution'.

Hello @rushikeshvartak ,

 

Wonderful news, can you share the code or the changes you did in order to see them so I can apply the same?

Kind regards,

Albert.

Your code has some loopholes so fixed those 

  • password as plaintext
  • .txt body file but we can’t upload in data files 
  • used property file as .csv so easy to view and maintain.
  • as mentioned, only above-mentioned keys are given by product in block, and we can’t send any new .
  • you get request key based on it, you can hit apis to get request more details

Code Snippets 

Code :

 

rushikeshvartak_0-1725233841414.png

Property File:

rushikeshvartak_5-1725234410572.png

rushikeshvartak_6-1725234427743.png

 

 

 

Property Files Content :

Password is Base 64 : https://www.base64encode.org/

rushikeshvartak_7-1725234488845.png

 

Workflow Block

rushikeshvartak_2-1725233909110.png

Logs Validation

rushikeshvartak_3-1725234116879.png

 

Output :

From Saviynt:

rushikeshvartak_8-1725234609909.png

From Windows:

rushikeshvartak_9-1725234653150.png

rushikeshvartak_10-1725234663273.png

 

 

Code: High Level 

rushikeshvartak_4-1725234232993.png

Class: RushikeshVartakSaviyntWorkflowActionEvent

This class is designed to execute a workflow action, fetch configurations from a CSV file, authenticate with an API, and send an email based on a template. The class is equipped to handle both Windows and Unix-based file paths and includes options for detailed logging.

Method Descriptions

  1. listOfFiles(File dirPath):

    • Purpose: Recursively lists all files within a given directory, including its subdirectories.
    • Key Activities:
      • Checks if the directory exists.
      • Lists files and directories, and if a directory is found, it recursively lists its contents.
      • Logs each file's absolute path.
  2. getDefaultConfig():

    • Purpose: Reads configuration values from a CSV file, validating that all required fields are present.
    • Key Activities:
      • Searches for the configuration file in both Windows and default file paths.
      • Reads the CSV file and populates a map with key-value pairs.
      • Validates that required fields are present and logs any missing fields.
      • Returns a map of the configurations.
  3. executeWorkflowAction(Map<String, String> wfInputMap):

    • Purpose: Executes the workflow action by generating a token, reading an email template, and sending an email based on the template.
    • Key Activities:
      • Fetches configuration values and user inputs.
      • Decodes a Base64-encoded password.
      • Reads the email template file and constructs the email body.
      • Authenticates with the API and generates an access token.
      • Sends an email using the generated token.

 

 

 


Regards,
Rushikesh Vartak
If this helped you move forward, click 'Kudos'. If it solved your query, select 'Accept As Solution'.

NM
Honored Contributor II
Honored Contributor II

Hi @rushikeshvartak , we are only allowed to pass below 3 right?

  • REQUESTID
  • USER_NAME
  • REQUESTOR

and utilize the same in jar code

travemole
Regular Contributor
Regular Contributor

Hello @rushikeshvartak ,

Please upload the java class so everyone can benefit from the info. I'm missing the functions you are calling in that snippet so I'm not sure if they are custom or already existing in the prodduct.

 

Kind regards,

Albert.

I can’t upload java code unfortunately due to security reason . I have give logic all and your code had all things. If you still face issue happy to help


Regards,
Rushikesh Vartak
If this helped you move forward, click 'Kudos'. If it solved your query, select 'Accept As Solution'.

You can rename it as .txt like I did before to send you the code. The idea is to have something that people can use when they see the post as this is a recurrent question in the forum.

 

Kind regards,

Albert.