Skip to main content
Solved

How do I get roles for the user in an API?

  • January 4, 2024
  • 7 replies
  • 232 views

abhijit
Varsity I
Forum|alt.badge.img

I want to list the roles for a specific user. I have modified the webservice endpoints to include “Roles: ContactRoles” under Users.

I am able to get the user information, but I am unable to get the Roles. I have tried the $expand in the URL. 
1) Setup for endpoint.

Acumatica Setup


2) Call in POSTMAN

Postman Call

 

Best answer by Vignesh Ponnusamy

Hi @abhijit,

I tested your approach of fetching the Roles without GI and it works for me. Following is the screenshot of endpoint extension and the details of the API call,

 

 

 

 

Request Method: GET

Request URL: https://localhost/A23.200/entity/DefaultExt/22.200.001/Users/AcumaticaSupport?$expand=Roles

I didn’t filter in the request, instead using the Login field to fetch the record. Its strange, it isn’t working for you. What is the Acumatica version you are using?

If you are setup is different from my setup, you can try the above approach. Good Luck, 

7 replies

Vignesh Ponnusamy
Acumatica Moderator
Forum|alt.badge.img+5

Hi @abhijit,

Check the suggestion by @jinin in the following thread,

Good Luck,


abhijit
Varsity I
Forum|alt.badge.img
  • Author
  • January 4, 2024

I am following that suggestion. With that suggestion, I created a generic inquiry. I then created a node that links to this generic inquiry. When I attempt to make a REST call, get this error message.

 

{

    "message": "An error has occurred.",

    "exceptionMessage": "Operation failed",

    "exceptionType": "PX.Data.PXInvalidOperationException",

    "stackTrace": "   at PX.Api.ContractBased.EntityService.Put(ISystemContract systemContract, String version, String name, EntityImpl entity, CbOperationContext operationContext, Boolean throwOnError)\r\n   at PX.Api.ContractBased.Soap.SoapFacadeBase.PutImpl(EntityImpl entity, Boolean throwOnValidationError)\r\n   at PX.Api.ContractBased.SystemContracts.V2.RestController.PutEntity(EntityImpl entity, String select, String filter, String expand, String custom)\r\n   at lambda_method(Closure , Object , Object[] )\r\n   at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass6_2.<GetExecutor>b__2(Object instance, Object[] methodParameters)\r\n   at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary`2 arguments, CancellationToken cancellationToken)\r\n--- End of stack trace from previous location where exception was thrown ---\r\n   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n   at System.Web.Http.Controllers.ApiControllerActionInvoker.<InvokeActionAsyncCore>d__1.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n   at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__6.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n   at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__6.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n   at System.Web.Http.Filters.ActionFilterAttribute.<ExecuteActionFilterAsyncCore>d__5.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n   at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__6.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n   at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__6.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n   at System.Web.Http.Filters.ActionFilterAttribute.<ExecuteActionFilterAsyncCore>d__5.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n   at System.Web.Http.Controllers.ActionFilterResult.<ExecuteAsync>d__5.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n   at System.Web.Http.Filters.AuthorizationFilterAttribute.<ExecuteAuthorizationFilterAsyncCore>d__3.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n   at System.Web.Http.Controllers.ExceptionFilterResult.<ExecuteAsync>d__6.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n   at System.Web.Http.Controllers.ExceptionFilterResult.<ExecuteAsync>d__6.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n   at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__15.MoveNext()",

    "innerException": {

        "message": "An error has occurred.",

        "exceptionMessage": "Object reference not set to an instance of an object.",

        "exceptionType": "System.NullReferenceException",

        "stackTrace": "   at PX.Data.GenericResultCache.GetObjectHashCode(Object data)\r\n   at PX.Data.PXCollection`1.GetStatus(T value)\r\n   at PX.Data.PXCache`1.FillWithValues(TNode item, TNode copy, IDictionary values, PXCacheOperation operation, Boolean externalCall)\r\n   at PX.Data.PXCache`1.Locate(IDictionary keys)\r\n   at PX.Api.SyImportProcessor.SyStep.CommitChangesInt(Object itemToBypass, PXFilterRow[] targetConditions, PXFilterRow[] filtersForAction, SyImportRowResult importResult)\r\n   at PX.Api.SyImportProcessor.SyStep.CommitChanges(Object& itemToBypass, PXFilterRow[] targetConditions, PXFilterRow[] filtersForAction)\r\n   at PX.Api.SyImportProcessor.ExportTableHelper.ExportTable(CancellationToken token)"

    }

}


Vignesh Ponnusamy
Acumatica Moderator
Forum|alt.badge.img+5

Hi @abhijit,

I tested your approach of fetching the Roles without GI and it works for me. Following is the screenshot of endpoint extension and the details of the API call,

 

 

 

 

Request Method: GET

Request URL: https://localhost/A23.200/entity/DefaultExt/22.200.001/Users/AcumaticaSupport?$expand=Roles

I didn’t filter in the request, instead using the Login field to fetch the record. Its strange, it isn’t working for you. What is the Acumatica version you are using?

If you are setup is different from my setup, you can try the above approach. Good Luck, 


abhijit
Varsity I
Forum|alt.badge.img
  • Author
  • January 4, 2024

I am using Acumatica 2023 R1 Build 23.112.0032


Vignesh Ponnusamy
Acumatica Moderator
Forum|alt.badge.img+5

@abhijit, Seem to work in 23.112 as well.

For you to try, I have attached the customization package with the endpoint extension.


abhijit
Varsity I
Forum|alt.badge.img
  • Author
  • January 4, 2024

There is a small difference I have noticed. Your node says “Roles:Roles[]”, while mine says “Roles:ContactRoles[]”.

On further observation, I don’t seem to get the Roles[] at all and it defaults to ContactRoles[].


abhijit
Varsity I
Forum|alt.badge.img
  • Author
  • January 5, 2024

@abhijit, Seem to work in 23.112 as well.

For you to try, I have attached the customization package with the endpoint extension.

This works for me after publishing it. I am curious as to how you got the Roles:Roles[] node.