15 December 2017

1. Structure Browser

1.1. Context Menu

It is configurable to have row remain selected when we perform action through context click. This can either be done globally via init-parameter tvc.structurebrowser.rememberSelectedRow (default false) or by overriding the page config parameter rememberSelectedRow:

<init-param>
    <param-name>tvc.structurebrowser.rememberSelectedRow</param-name>
    <param-value>true</param-value>
</init-param>
<Parameter name="rememberSelectedRow" value="true" />

1.2. Adding Object(s) to a Collection

It is possible to add "add to collection" function in the context menu by adding command AddToCollectionFromMenu.

Below is an example on how to configure this:

<Menu>
    <Command ref="tvc:command:sb:collection/AddToCollectionFromMenu.xml"/>
</Menu>
AddToCollectionFromMenu command in context menu required the page config parameter rememberSelectedRow or init-parameter tvc.structurebrowser.rememberSelectedRow (default false) should be true.

1.3. Tooltip for Search Forms

It is possible to provide tooltip for search form fields using TooltipLabel and TooltipContent.

<TooltipLabel>MyLabelText</TooltipLabel>
<TooltipContent>Some Text</TooltipContent>

1.4. Restriction based on assignment in PersonField

It is possible to restrict the persons in PersonField on the basis of assignments. Only persons having any one of the specified assignments will be choosable.

<Setting name="assignment" value="group_ShippingDepartment\|role_DesignEngineer"/>

1.5. User preferred timezone on date field for Create/Edit Forms

It is possible to take date input in user preferred timezone for create and edit forms.

<Field>
    <Label>ED</Label>
    <MapsTo>attribute_EffectivityDate</MapsTo>
    <Setting name="Timezone Aware">true</Setting>
</Field>

2. Grid Browser

2.1. Localization using String Resources

It is possible to support localization using string resources at following places:-

  • Column Labels

  • Row/Col Labels

  • Legends

  • Intersection

  • Element Actions

  • Global Actions

3. Graphic Reporting

3.1. Workflow

3.1.1. Add Adhoc Task in Workflow

An adhoc task can be added in active workflow by using "Add Task" workflow operation by the workflow owner. When add task operation is executed, it is displaying the + icon on appropriate nodes and branches in workflow graph where task can be added. Through node’s add task operation, parallel tasks are created while thorugh branch serial tasks are created.

image
Figure 1. Adding Task in workflow

On clicking the + icon, Add Task form is opened with all task configuration. Any configuration can be choosen to create the adhoc task.

image
Figure 2. Add Task Form

3.1.2. Provider Configuration and Workflow Mode

New Provider configuration "config" is added which enables posibility to run Workflow in different mode than Discussion using new mode configuration.

tvc.collaboration.providerClass=config
tvc.collaboration.workflow.mode=enovia

3.1.3. Workflow PublicAPI

Essential Workflow APIs are annotated with TVC’s @PublicAPI annotation and API reference are available as Javadoc.

Existing Workflow code are extensively refactored to provide simple/nice PublicAPI. Hence there are breaking changes related to WorkflowEngine, ReadContext and TriggerResult APIs.
ReadContext’s Builder needs the corresponding CollaborationDAOFactory. Ex: new ReadContext.Builder(factory) .setEnv(env).setPerson(person).setIncludeRelated(true).build();
TriggerResults like SuccessResult.RESULT, ErrorResult.RESULT, DoneResult.RESULT, IgnoreResult.RESULT are replaced by TriggerResult.SUCCESS, TriggerResult.ERROR, TriggerResult.DONE, TriggerResult.IGNORE respectively. TriggerResult can be created using Builder API as well. new TriggerResult.Builder(TriggerStatus.SUCCESS).setData(result).build().

3.1.4. Workflow and Task DAO API

Workflow and Task DAO APIs are formalized and exposed as PublicAPI. It is now possible to perform Workflow and Task Operations using Java code.

WorkflowDAOFactory factory = DAOFactory.getInstance().getWorkflowFactory();
WorkflowDAO workflowDAO = factory.getSetDAO();

Workflow workflow = workflowDAO.read(factory.getConfigDAO().resolveId(workflowId), ctx);
WorkflowContext wctx = new WorkflowContext.Builder(ctx).setWorkflow(workflow).build();

ActionResult result = workflowDAO.stop(wctx); // workflowDAO.terminate(wctx)
workflowDAO.notify(new NotificationContext.Builder(ctx).setNotifications(result.getNotifications()).build());

3.1.5. Workflow Engine Extension

It is now possible to extend builtin WorkflowEngine to have custom logic or processing.

<WorkflowConfigs>
    ....
    <WorkflowEngine className="com.foo.bar.workflow.CustomWorkflowEngine" />
    ....
</WorkflowConfigs>
public class CustomWorkflowEngine extends DefaultWorkflowEngine implements WorkflowEngine {

    @Override
    public EngineResult start(WorkflowContext wctx) throws TVCException {
        EngineResult result = super.start(wctx);
        // custom processing
        return result;
    }
    ....
}

3.1.6. Workflow Operation Email Notifications

Workflow watchers are notified (Email and Custom) when Workflow level operations (Stop, Restart, Terminate) are performed.

3.1.7. Workflow Operations as service executable

It is now possible to write custom Workflow/Task operations to perform server side operation without custom JavaScript and AjaxService.

public class TestOperation extends AbstractOperation {

    @Override
    public Command include(OperationContext ctx) throws TVCException {
        return new TestCommand(ctx);
    }

    @Override
    public OperationResult execute(OperationContext ctx) throws TVCException {
        // executed after command clicked in client side
    }
}

3.1.8. Labeling builtin Workflow Operations

Builtin Workflow Operations can be easily re-labelled per WorkflowConfig.

{
...
   "operations": [
         {
             "id": "operation-done",
              "base": "complete",
              "label": "Done Task or tvx.custom.operation.done",
         }
   ]
...
}

3.1.9. Workflow Resources

It now possible to include custom resources like <JavaScript/>, <Template/>, <StyleSheet/> and <AjaxService/> in TVCWorkflowConfig.xml

....
<WorkflowAction>
    <Resources>
        <AjaxService service="tvxCollaborationService"/>
        <JavaScript src="/tvx/collaboration/inboxCustomScript.js"/>
        <StyleSheet src="/tvx/collaboration/inboxCustomStyles.css"/>
    </Resources>
</WorkflowAction>
....

3.1.10. WorkflowConfig Sorter

It is now possible to custom sort the WorkflowConfigs available in Workflow Create Form.

<WorkflowConfigs>
    ....
    <WorkflowConfigSorter className="com.technia.tvc.collaboration.workflow.test.ReverseWorkflowConfigSorter" />
    ....
</WorkflowConfigs>

3.1.11. Workflow DataModel

Workflow DataModel is documented in TVC Workflow Admin guide.

3.1.12. Workflow XSD

Workflow Schema definition available in WorkflowConfig.xsd.

4. Collaboration

4.1. Provider Configuration and Discussion Mode

New Provider configuration "config" is added which enables posibility to run Discussion in different mode than Workflow using new mode configuration.

tvc.collaboration.providerClass=config
tvc.collaboration.discussion.mode=exalead

4.2. Collaboration PublicAPI

Essential Discussion APIs are annotated with TVC’s @PublicAPI annotation and API reference are available as Javadoc.

ColumnType "discussion-link" can be used in Helium table along with optional helium specific template.

<Column>
    <Name>discussion-link</Name>
    <ColumnType>discussion-link</ColumnType>

    <!-- an optional helium specific Template to have icon over image and rich tooltip -->
    <Setting name="Template" value="helium/templates/collaboration/discussion-link" />
</Column>

4.4. Inline Form Watcher(s)

Duplicate Watcher display in inline form mode is fixed.

4.5. TinyMCE Table Style

Table layout with style is retained in TinyMCE Rich TextEditor.

image
Figure 3. TinyMCE Table Style