Appian Community
Site
Search
Sign In/Register
Site
Search
User
DISCUSS
LEARN
SUCCESS
SUPPORT
Documentation
AppMarket
More
Cancel
I'm looking for ...
State
Not Answered
Replies
8 replies
Subscribers
9 subscribers
Views
4084 views
Users
0 members are here
Share
More
Cancel
Related Discussions
Home
»
Discussions
»
General
Custom Datasets
karlg
over 8 years ago
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
0
sikhivahans
over 8 years ago
@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",{})
)
Cancel
Vote Up
0
Vote Down
Sign in to reply
Verify Answer
Cancel
Reply
0
sikhivahans
over 8 years ago
@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",{})
)
Cancel
Vote Up
0
Vote Down
Sign in to reply
Verify Answer
Cancel
Children
No Data