Dear Community Members,

I need to develop a custom taskbox for a BPT process. Does anyone have a simple working sample of custom taskbox?

I could find one in the below link, but the process flow isn't clear for me.

https://www.outsystems.com/forums/discussion/6311/bpt-custom-taskbox/

Regards,

Smitha

Hi Smitha,

You have several examples of Custom Taskboxes on that thread... the latest post has a Support provided example attached (BPTCustomUserProvider.oml). They even point to a Forge application that implements it as well: Credit Request.

Hi Jorge,

Thanks for your revert. I have tried the oml, which invloves customers and projects, but couldnt make out the exact flow of the process w.r.to the custom taskbox. 

Couldnt publish BPTCustomUserProvider.oml, usre login error for some strange reason.

Will look into "Credit request" component.

Is there a simpler way, wherein the EPA_taskbox, can be dragged on to the web page where it can displayed?

Regards


Hi Smitha.

There is a component in forge, the TaskboxPlus, it is built in the OutSystems 8, but it works on 10 and 11. It looks similar to the default.

Hope that it helps.

Regards,

  Jorge

Hello Jorge,

For the component TaskboxPlus, is there any documentation available regarding its usage, couldn't find one.

Regards

Hi.

This is a copy of the message from @David Farinha 

If you open the module of the component, you will be able to verify in one of the web blocks the primary information needed to make the component work.


Below you can check the screenshots of my test, showing the task box in only one page, and the end result of it. 

Although, we would like to suggest that you either insert the mentioned web block in the footer of your Layout, to make it appear in all the screens or only in the pages you want to see the task box. 



Hello Jorge,

Taskboxplus more clear now, thanks for that.

However, this also is a popup. I actually need to display the taskbox in a regular table/grid on the webpage, clicking on which the user should be able to complete his tasks.

Is that possible?

Regards

Solution

Then, use the forge component Credit Request:

https://www.outsystems.com/forge/component-overview/616/credit-request

There you have a Taskbox list with 3 different tables with Tasks that you can click to complete.

Regards,

  Jorge

Solution

Hi Jorge,

Ya, the "Custom Taskbox" as in the forge component "Credit Request" is similar to my requirement.

But the flow is complex and seems a bit difficult to simulate. I have raised a query in the forge for the documentation of this, to understand the flow.

By any chance, if you have a simpler example, pls do share.

Regards



Dear All,

I managed to replicate the custom taskbox refering to "Credit Request" Component.

However,  I have a one small issue, as in the GetUserActivities SQL returns multiple rows for the same activity.

What could I be doing wrong here?

SyntaxEditor Code Snippet

SELECT
    {Activity}.[Id] AS IActivityId,
    coalesce({Activity_Definition_Lang}.[Label], {Activity_Definition}.[Label]) AS Label,
    {Activity}.[Inbox_Detail] AS Detail,
    {Activity}.[Created] AS StartDate,
    {Activity}.[Due_Date] AS DueDate,
    0 DaysOverdue,
    coalesce({Activity_Definition_Lang}.[Inbox_Instructions], {Activity_Definition}.[Inbox_Instructions]) AS InboxInstructions,
    {Activity_Definition}.[Skippable] AS Skippable,
    {Process}.[Id] AS ProcessId,
    coalesce({Process_Definition_Lang}.[Label], {Process_Definition}.[Label]) AS ProcessLabel,
    {User}.[Id] UserMasterId,
    {User}.[Name] UserName,
    {Group}.[Id] GroupId,
    {Group}.[Name] GroupName,
    {ACTIVITY_INBOX}.*
    

    
  FROM {Activity}
  INNER JOIN {Activity_Status} ON {Activity}.[Status_Id] = {Activity_Status}.[Id] AND {Activity_Status}.[Appears_In_Inbox] = 1
  INNER JOIN {Activity_Definition} ON {Activity}.[Activity_Def_Id] = {Activity_Definition}.[Id] AND {Activity_Definition}.[Is_Active] = 1 
  INNER JOIN {Process} ON {Activity}.[Process_Id] = {Process}.[Id] AND {Process}.[Status_Id] = 1 
  INNER JOIN {Process_Status} ON {Process}.[Status_Id] = {Process_Status}.[Id] AND {Process_Status}.[Is_Terminal] = 0
  INNER JOIN {Process_Definition} ON {Activity_Definition}.[Process_Def_Id] = {Process_Definition}.[Id] AND {Process_Definition}.[Is_Active] = 1 AND {Process_Definition}.[Is_Locked] = 0
  INNER JOIN {Tenant} ON {Activity}.[Tenant_Id] = {Tenant}.[Id] AND {Tenant}.[Is_Active] = 1
  INNER JOIN {Espace} ON {Process_Definition}.[Espace_Id] = {Espace}.[Id] AND {Espace}.[Is_Active] = 1 AND {Espace}.[Is_Locked] = 0
  INNER JOIN {Process_VisaProcess} ON {Process_VisaProcess}.[Process_Id] = {Process}.[Id]
     INNER JOIN {ApplicantInfo} ON {ApplicantInfo}.[IDNo] = {ApplicantInfo}.[IDNo]
   LEFT JOIN {Activity_Definition_Lang} ON {Activity_Definition}.[Id] = {Activity_Definition_Lang}.[Activity_Def_Id] AND {Activity_Definition_Lang}.[Locale] = @Locale 
  LEFT JOIN {Process_Definition_Lang} ON {Process_Definition}.[Id] = {Process_Definition_Lang}.[Process_Def_Id] AND {Process_Definition_Lang}.[Locale] = @Locale 
  LEFT JOIN {User} ON {User}.[Id] = {Activity}.[User_Id]
  LEFT JOIN {Group} ON {Group}.[Id] = {Activity}.[Group_Id]
  LEFT JOIN {ACTIVITY_INBOX} ON {ACTIVITY_INBOX}.[ACTIVITYId] = {Activity}.[Id]
  
  WHERE (
    {Activity}.[User_Id] = @UserId 
  OR (  {Activity}.[User_Id] IS NULL 
    AND ({Activity}.[Group_Id] IS NULL OR EXISTS (
            SELECT 1
            FROM {Group_User}
            WHERE {Group_User}.[User_Id] = @UserId AND {Group_User}.[Group_Id] = {Activity}.[Group_Id]
            )
        )
    AND ({Activity_Definition}.[Requires_Permission] = 0 OR EXISTS (
            SELECT 1
            FROM {Activity_Def_Role}
            INNER JOIN {User_Effective_Role} 
                ON {User_Effective_Role}.[User_Id] = @UserId AND  {Activity_Def_Role}.[Role_Id] = {User_Effective_Role}.[Role_Id] 
            WHERE {Activity_Def_Role}.[Activity_Def_Id] = {Activity_Definition}.[Id]
            )
        )
    )
  )
/* Custom Filters */
  AND 1 = 1
/* End of Custom Filters */

ORDER BY 
    [DaysOverdue] DESC,
    [DueDate],
    [StartDate]

Dear All,

The issue is resolved.

Thanks for all reverts.

Regards,

Smitha