Custom Datasets

I am trying to create a custom "local!" dataset within a "with" scope.

In my case I have for example a local!datsubSet like this :

local!datasubSet: a!queryEntity(
entity: cons!entity,
query: a!query(
selection: a!querySelection(columns: {
a!queryColumn(field: "A"),
a!queryColumn(field: "B"),
a!queryColumn(field: "C"),
}),
logicalExpression: local!logicalExpression,
pagingInfo: local!pagingInfo
)
)

Now this dataset is shown in a grid. I would like to add additional data displayed in the grid without changing the entity structure being queried. Let's say I want to add a column "D" and I already have an array for it that is local!Dvalues in the with scope.

How can I create a 4th column in the local!datasubset with the name "D" that will have as values local!Dvalues.

Is this possible? I tried with merge() and a!datasub...

OriginalPostID-241479

  Discussion posts and replies are publicly visible

Parents
  • @karlg I believe you may do something as follows in order to accomplish the requirement:

    1. Update the data. Either you can generate the cdt using a combination of apply and merge or update the existing data using updatecdt() function at http://bit.ly/28MEhax.

    local!datasubSet: a!queryEntity(
    entity: cons!entity,
    query: a!query(
    selection: a!querySelection(columns: {
    a!queryColumn(field: "A"),
    a!queryColumn(field: "B"),
    a!queryColumn(field: "C"),
    }),
    logicalExpression: local!logicalExpression,
    pagingInfo: local!pagingInfo
    )
    ),
    \t
    local!updatedData: apply(
    \t/*You can go ahead with the usage of existing CDT provided if you have a field in your CDT that matches the data type of D and is not being used in the current implementation. Or have a look at 'CDT Manipulation' plugin at http://bit.ly/28MEhax to see how to add a new field to CDT without actually creating a formatted CDT. Creation of formatted CDT or array of label-value pairs is also another option though and this way you can refrain from usage of plugin.*/
    \ttype!myCdt(
    \ tA:_,
    \ tB:_,
    \ tC:_,
    \ tD:_
    \t),
    \tmerge(
    \ tlocal!datasubSet.data.A,
    \ tlocal!datasubSet.data.B,
    \ tlocal!datasubSet.data.C,
    \ tindex(local!D,local!pagingInfo.startIndex+enumerate(local!pagingInfo.batchSize),{})
    \ t/*Assuming that local!D has got the exact values as many as totalCount in the local!datasubSet. Or you may need to handle this, for instance you may fill the array with default values in case if it's length doesn't match the totalCount of queried datasubset or a rule that will return a null value when a value doesn't exist while we are forming the CDT list.*/
    \t)
    ),

    2. Update the DataSubset.

    local!updateDataSubset: a!dataSubset(
    startIndex: local!pagingInfo.startIndex,
    batchSize: local!pagingInfo.batchSize,
    sort: local!pagingInfo.sortInfo,
    totalCount: local!datasubSet.totalCount,
    data: local!updatedData,
    identifiers: index(local!datasubSet.data,"A",{})
    )
Reply
  • @karlg I believe you may do something as follows in order to accomplish the requirement:

    1. Update the data. Either you can generate the cdt using a combination of apply and merge or update the existing data using updatecdt() function at http://bit.ly/28MEhax.

    local!datasubSet: a!queryEntity(
    entity: cons!entity,
    query: a!query(
    selection: a!querySelection(columns: {
    a!queryColumn(field: "A"),
    a!queryColumn(field: "B"),
    a!queryColumn(field: "C"),
    }),
    logicalExpression: local!logicalExpression,
    pagingInfo: local!pagingInfo
    )
    ),
    \t
    local!updatedData: apply(
    \t/*You can go ahead with the usage of existing CDT provided if you have a field in your CDT that matches the data type of D and is not being used in the current implementation. Or have a look at 'CDT Manipulation' plugin at http://bit.ly/28MEhax to see how to add a new field to CDT without actually creating a formatted CDT. Creation of formatted CDT or array of label-value pairs is also another option though and this way you can refrain from usage of plugin.*/
    \ttype!myCdt(
    \ tA:_,
    \ tB:_,
    \ tC:_,
    \ tD:_
    \t),
    \tmerge(
    \ tlocal!datasubSet.data.A,
    \ tlocal!datasubSet.data.B,
    \ tlocal!datasubSet.data.C,
    \ tindex(local!D,local!pagingInfo.startIndex+enumerate(local!pagingInfo.batchSize),{})
    \ t/*Assuming that local!D has got the exact values as many as totalCount in the local!datasubSet. Or you may need to handle this, for instance you may fill the array with default values in case if it's length doesn't match the totalCount of queried datasubset or a rule that will return a null value when a value doesn't exist while we are forming the CDT list.*/
    \t)
    ),

    2. Update the DataSubset.

    local!updateDataSubset: a!dataSubset(
    startIndex: local!pagingInfo.startIndex,
    batchSize: local!pagingInfo.batchSize,
    sort: local!pagingInfo.sortInfo,
    totalCount: local!datasubSet.totalCount,
    data: local!updatedData,
    identifiers: index(local!datasubSet.data,"A",{})
    )
Children
No Data