Get last element from arryalist using drools DRL file - list

I am trying the following code
rule "Last activity"
salience 1
when
$notification : NotificationVO()
lastActivityOffset:Integer()
from $notification.offsetChngesInterval.
get($notification.offsetChngesInterval.size()-1)
then
System.out.println("Hello--"+$notification.offsetChngesInterval.size());
end
It gives error java.lang.reflect.InvocationTargetException.
Can anyone let me know what is causing this problem on the line
$notification.offsetChngesInterval.
get($notification.offsetChngesInterval.size()-1)
It does not allow me to get the last element from the list

It is advisable to write
$notification : NotificationVO( offsetChngesIntervall != null && offsetChngesInterval.size() > 0 )
to make sure that the list isn't empty. Perhaps also a check that it is not null.

Related

oracle.jdbc.OracleDatabaseException: ORA-01722: invalid number

Getting the above error but the offending column is not a number. Somehow it is related to the cycle_code column which is a string. My query is hacky since I dont have full control over building it so I have to append another condition at the end ( "!= 'ABC'"). If I remove that condition the query works. I dont understand why im getting an invalid number error though?
select * from my_view WHERE ... CYCLE_CODE IN ( 'XYZ' ) AND CYCLE_CODE != 'ABC';

MIT AppInventor list Error : Attempt to get item number 0, of the list [5]

" Select list item: Attempt to get item number 0, of the list [5]. The minimum valid item number is 1.
Note: You will not see another error reported for 5 seconds. "
Hey Guys,
The message on top appear when the app open the app not crashing but I need to click somewhere on screen few times till it disappear..
The idea is to search a value of var 'UID' in firebase.database and when it found it I need to get the value of is brother key..
I want you please to help me to clear this message I tried a few ways to get the result but nothing yet..
Thanks a lot for helpers :)
When Screen Open.
This is how I tried to get the uid && employeeKey.
for your help me I set var 'UID' = to uid value of employee number 1
'UID' get the value from firebase.auth form on screen 1..
The index in list block returns 0, if the "thing" has not been found in the list and in this case you are trying to get the value from the 0th item from the empKey list, which does not make sense.
Therefore you will have to add an if statement... if the returned index is 0, then do not search for the empKey.
Btw. the better place to ask questions like this would be the MIT App Inventor community...

To append an element into a list without generating any other elements

Trying to append an element into an empty list as follows, while appending it also adds a character 'u' like [u'slice'] into the empty list while adding an element into the list, however expected is ['slice']
Code as follows:
type = slice # value for type
value = []
value.append(type)
Output:
value = [u'slice']
Requesting people for help to get output as ['slice'].
For some reason the output is in Unicode, hence the u. Try re-encoding it to ascii
by using .encode("ascii"). Sorry I don't know why it's doing that though.

Nested IF, INDEX and MATCH in Google Sheets

I'm trying to return a value in Google sheets.
This is done using an Index Match as follows, which does work:
=iferror(index(Data!B:B, match(B5339,Data!G:G,0)),"Not Found")
I'd now like to expand this, so that if this first test fails, try looking up that same data in another sheet....
=iferror(if(index(Data!B:B, match(B5340,Data!G:G,0),if(index(HeadOfficeLeads!B:B, match(B5340,HeadOfficeLeads!A:A,0))))),"Not found")
This outputs the fail msg of "Not Found".
However, although the first test is indeed false, the second test is true (this second data set does in fact hold a match).
NB - the data containing this correct match on the 2nd sheet is created by a UNIQUE ( FILTER, FWIW....
For some reason, it doesnt look like the second IF statement is being run - and the whole thing doesnt work, giving the error "Wrong number of arguments".
I have a feeling the argument issue is that the first test doesnt have an "if false" clause - but believe the "IFERROR" parent should handle this?
If not, where would I put the "if false clause" for the IF's?
You don't need any if, because iferror already contains an if statement in its logic (as its name suggests). Here is an example of nested iferror statements, simplified for clarity:
=iferror(match("a", A1:A5, 0), iferror(match("a", B1:B5", 0), "not found"))
This will return the position of "a" in column A, if it's there; otherwise, it will return its position in column B if it's there, otherwise it returns "not found".
Works the same with index or anything else around match function.

TypeError during executemany() INSERT statement using a list of strings

I am trying to just do a basic INSERT operation to a PostgreSQL database through Python via the Psycopg2 module. I have read a great many of the questions already posted regarding this subject as well as the documentation but I seem to have done something uniquely wrong and none of the fixes seem to work for my code.
#API CALL + JSON decoding here
x = 0
for item in ulist:
idValue = list['members'][x]['name']
activeUsers.append(str(idValue))
x += 1
dbShell.executemany("""INSERT INTO slickusers (username) VALUES (%s)""", activeUsers
)
The loop creates a list of strings that looks like this when printed:
['b2ong', 'dune', 'drble', 'drars', 'feman', 'got', 'urbo']
I am just trying to have the code INSERT these strings as 1 row each into the table.
The error specified when running is:
TypeError: not all arguments converted during string formatting
I tried changing the INSERT to:
dbShell.executemany("INSERT INTO slackusers (username) VALUES (%s)", (activeUsers,) )
But that seems like it's merely treating the entire list as a single string as it yields:
psycopg2.DataError: value too long for type character varying(30)
What am I missing?
First in the code you pasted:
x = 0
for item in ulist:
idValue = list['members'][x]['name']
activeUsers.append(str(idValue))
x += 1
Is not the right way to accomplish what you are trying to do.
first list is a reserved word in python and you shouldn't use it as a variable name. I am assuming you meant ulist.
if you really need access to the index of an item in python you can use enumerate:
for x, item in enumerate(ulist):
but, the best way to do what you are trying to do is something like
for item in ulist: # or list['members'] Your example is kinda broken here
activeUsers.append(str(item['name']))
Your first try was:
['b2ong', 'dune', 'drble', 'drars', 'feman', 'got', 'urbo']
Your second attempt was:
(['b2ong', 'dune', 'drble', 'drars', 'feman', 'got', 'urbo'], )
What I think you want is:
[['b2ong'], ['dune'], ['drble'], ['drars'], ['feman'], ['got'], ['urbo']]
You could get this many ways:
dbShell.executemany("INSERT INTO slackusers (username) VALUES (%s)", [ [a] for a in activeUsers] )
or event better:
for item in ulist: # or list['members'] Your example is kinda broken here
activeUsers.append([str(item['name'])])
dbShell.executemany("""INSERT INTO slickusers (username) VALUES (%s)""", activeUsers)