Orbeon - how to get or set checkboxes - orbeon

I have a simple questio: how to get/set checkbox from checkboxes in orbeon?
Something like this:
/myCheckboxes[value="itemVal"].isChecked()

That's right, the values are space-separated. To extract them, instead of contains() use this to check if value 42 is included:
tokenize(../myCheckboxGroup, '\s+') = '42'
This splits the value on spaces with the \s+ regexp and returns a string sequence.
By the way you don't need to write:
if (condition) true() else false()
You can always just write:
condition

i've made something like this:
to set: simply set value of checkbox group as a string compound by all items values i want to have checked separated by a space.
To check if checkbox is checked i`ve made something like this:
if(contains(../myCheckboxGroup, '2')) then true() else false()
but its not good solution for example because it's making that max items is 10 if i want to add values as a successive integers.

Related

Add prefix to filter function

Is there a Way to add a prefix to the filter function so the result looks like this:
Prefix Value1
Prefix Value2
Prefix Value3
I already tried things like:
="Prefix "&FILTER(Data;condition1;condition2)
which resulted in just the first value of the filter getting returned with the prefix the rest didn't get returned.
Prefix Value1
also tried this:
=TEXTJOIN("Prefix ";FILTER(Data;condition1;condition2))
This resulted in:
Prefix ReturnValue1ReturneValue2ReturnValue3
so my current workaround is to just Filter in another column and in the column I want the prefix with the filter I just say
="Prefix "&B1
="Prefix "&B2
="Prefix "&B3
...
This results in about 8000 Cells that need to be recalculated each time something changes.
If you want to add the Prefix to the already filtered data you can use ARRAYFORMULA:
=ARRAYFORMULA("Prefix "&FILTER(Q:Q,Q:Q>3))
(Obviously, change the filter, it's just an example)
You can use the concatenate function or the '&' operator in your filter.
Function: https://support.google.com/docs/answer/3094123?hl=en
=FILTER([Range], CONCATENATE("Prefix ", [Range])="filtervalue")
=FILTER([Range], "Prefix " & [Range]="filtervalue")
use:
=INDEX("Prefix "&FILTER(Data; condition1; condition2))
example:
=INDEX("Prefix "&FILTER(A:C; B:B<>""; C:C<>""))
but you can use only FILTER too if you do it like:
=FILTER({"Prefix "&A:A\ B:C}; B:B<>""; C:C<>""))

How do i remove rows based on comma-separated list of values in a Power BI parameter in Power Query?

I have a list of data with a title column (among many other columns) and I have a Power BI parameter that has, for example, a value of "a,b,c". What I want to do is loop through the parameter's values and remove any rows that begin with those characters.
For example:
Title
a
b
c
d
Should become
Title
d
This comma separated list could have one value or it could have twenty. I know that I can turn the parameter into a list by using
parameterList = Text.Split(<parameter-name>,",")
but then I am unsure how to continue to use that to filter on. For one value I would just use
#"Filtered Rows" = Table.SelectRows(#"Table", each Text.StartsWith([key], <value-to-filter-on>))
but that only allows one value.
EDIT: I may have worded my original question poorly. The comma separated values in the parameterList can be any number of characters (e.g.: a,abcd,foo,bar) and I want to see if the value in [key] starts with that string of characters.
Try using List.Contains to check whether the starting character is in the parameter list.
each List.Contains(parameterList, Text.Start([key], 1)
Edit: Since you've changed the requirement, try this:
Table.SelectRows(
#"Table",
(C) => not List.AnyTrue(
List.Transform(
parameterList,
each Text.StartsWith(C[key], _)
)
)
)
For each row, this transforms the parameterList into a list of true/false values by checking if the current key starts with each text string in the list. If any are true, then List.AnyTrue returns true and we choose not to select that row.
Since you want to filter out all the values from the parameter, you can use something like:
= Table.SelectRows(#"Changed Type", each List.Contains(Parameter1,Text.Start([Title],1))=false)
Another way to do this would be to create a custom column in the table, which has the first character of title:
= Table.AddColumn(#"Changed Type", "FirstChar", each Text.Start([Title],1))
and then use this field in the filter step:
= Table.SelectRows(#"Added Custom", each List.Contains(Parameter1,[FirstChar])=false)
I tested this with a small sample set and it seems to be running fine. You can test both and see if it helps with the performance. If you are still facing performance issues, it would probably be easier if you can share the pbix file.
This seems to work fairly well:
= List.Select(Source[Title], each Text.Contains(Parameter1,Text.Start(_,1))=false)
Replace Source with the name of your table and Parameter1 with the name of your Parameter.

Replacing empty cells in a variable with values from another

I have a dataset with a number of columns. Two of them are practically the same however in variable column 1 there are string data that I would like to extract and replace in empty cells of variable column 2.
I tried using the syntax
If
variable_2 = "".
Compute variable_1 = variable_2.
End If
But do not get anything. Please, could someone help with this?
Much appreciated.
This should be either
if var2="" var2=var1.
(no period after the condition, no "end if")
OR
do if var2="".
compute var2=var1.
end if.
(this is a "do if" and not just an "if" - enables you to add commands after the condition, and not needed here).
In any case, if variable_2 is empty you want to run variable_2=variable_1 and not the reverse.

Erlang: getting record field values

I would like to know if there's an internal function in Erlang, similar to the one posted below, that will give me the record field values instead of the record field names.
record_info(fields, RecordName).
A record in Erlang is really a tuple with it's first element being the name of the record. After compilation is done, the record will be seen as a tuple.
If you have this record definition:
-record(name, [field, anotherfield]).
Then you can define a value of that record type like so:
#name{ field = value1, anotherfield = value2 }.
However, the actual representation for this under the hood is this:
{name, value1, value2}.
Note that the field names are actually gone here.
Now, if you want a list of the values for each field in the record, you can use tuple_to_list:
[name, value1, value2] = tuple_to_list(Record).
So, as jj1bdx pointed out, if you want a ; separated string of all the values, you could do something like this:
string:join([lists:flatten(io_lib:format("~p", [T])) || T <- tl(tuple_to_list(Record))], ";").
This last code snippet is stolen directly from jj1bdx.
Record in record_info(fields, Record) -> [Field] cannot be a variable, because it must be fixed at the compile time.
If you need to handle the elements in a key-value structure dynamically, use maps.

XPages repeat from array value field

I have a field which value is an array of strings.
Example: Mom, dad, son, etc.
It is possible to repeat a link with those values?
Example:
Mom
dad
son
And when I click on the link to have a href=www."fieldvalue".com.
EDIT: it is not vector, it is Array.
Create your repeat control. For the value add in your field name. Something like :
document1.getItemValue("myMultiValueField")
I THINK that should repeat your field assuming it is a real multi-value. The comma deliminated string would require more work. So I'm not talking about that...
Make sure the collection name / var name of the repeat is something like "rowData"
rowData should then be a String.
Drop a link control inside the repeat.
Compute the label to be simple "rowData". (no quotes in the code)
Compute the URL - which I THINK is "value" in all properties of the link
That's just javaScript so you should be able to do something like:
return "http://" + rowData + ".com"
That's rough - you'll have to play with it but if I follow you correctly should work.
For a comma deliminated String... in the repeat control you'd need to use SSJS or #functions to break that into an array so the repeat can work on it.
In your repeat you'll need to map the value attribute to the Vector and set a var property, which is how you will reference each element. Note: a comma-separated string is a single value, and a repeat requires multiple values. So you'll need to convert it to a Vector or some other multi-value object.
Within the repeat you can use any other control and compute the value as you would elsewhere. To access each element in your repeat control's source (i.e. each String in your Vector, in this case), use the variable name you've defined in the var property.

Resources