Solved

Email signature in Events

  • 23 November 2021
  • 3 replies
  • 168 views

Userlevel 1

Hello:

I have a requirement to generate a “signature” in the body of an Event in Acumatica as a default when creating a new Event.  There does not appear to be an option to select the “source” for an Event, so I am attempting to code it.  I have been able to get the currently logged in users name and set it using the below code:

namespace PX.Objects.EP
{
  public class EPEventMaint_Extension : PXGraphExtension<EPEventMaint>
  {
    #region Event Handlers
    protected void CRActivity_Body_FieldDefaulting(PXCache cache, PXFieldDefaultingEventArgs e)
    {
      //var row = (CRActivity)e.Row;
      var userId= PXAccess.GetUserID();
      var displayName = PXAccess.GetUserDisplayName();
      e.NewValue = "<br /><b>Name:" + displayName + "</b><br /><b>Phone:</b><br /><b>URL:</b>";
    }
    #endregion
  }
 };

However, I am also needing to get the currently logged in employee’s Business 1 phone number and Web address to complete.  I imagine this would be some sort of BQL search using the PXAccess.GetUserID() value to walk the EPEmployee table and the BAccount table, but I dont know how to code this.  It seems to me that there might be some inbuilt function for collecting currently logged in users’ employee values, but I cant seem to find anything out there on this.  Can anyone provide an assist?  Thanks in advance!

 

 

icon

Best answer by jinin 23 November 2021, 09:59

View original

3 replies

Userlevel 7
Badge +11

Hi @scalhoon40,

 

please try with the below BQL,

 var userId = ServiceLocator.Current.GetInstance<ICurrentUserInformationProvider>().GetUserId();   // PXAccess.GetUserID();

           PXResult<EPEmployee,BAccount,Contact> result = (PXResult<EPEmployee, BAccount, Contact>)PXSelectJoin<EPEmployee,
                                        InnerJoin<BAccount, On<EPEmployee.bAccountID, Equal<BAccount.bAccountID>>,
                                        InnerJoin<Contact, On<Contact.contactID, Equal<BAccount.defContactID>>>>,
                                        Where<EPEmployee.userID, Equal<Required<EPEmployee.userID>>>>.Select(Base, userId);

            Contact objContact = result;

            string Phone1 = objContact.Phone1;
            string website = objContact.WebSite;

Userlevel 1

jinin:

 

Thank you so very much for the reply!  This worked with one exception; when using 

var userId = ServiceLocator.Current.GetInstance<ICurrentUserInformationProvider>().GetUserId();

when I publish, it generates an error:

error CS0103: The name 'ServiceLocator' does not exist in the current context

So, I switched to 

var userId = PXAccess.GetUserID();


and it worked perfectly.  Thank you again for your help on this one and hopefully someone else can get value out of this!

Userlevel 7
Badge +11

Hi @scalhoon40 

We need to add the namespace “CommonServiceLocator” to use the ServiceLocator.

 

Thanks for your update.

Reply


About Acumatica ERP system
Acumatica Cloud ERP provides the best business management solution for transforming your company to thrive in the new digital economy. Built on a future-proof platform with open architecture for rapid integrations, scalability, and ease of use, Acumatica delivers unparalleled value to small and midmarket organizations. Connected Business. Delivered.
© 2008 — 2024  Acumatica, Inc. All rights reserved