I got an error as following :
Traceback (most recent call last):
pymongo.errors.OperationFailure: command SON([('mapreduce',
u'tweets'), ('map', Code('function() { emit(this.via, 1); }',
{})), ('reduce', Code(' function(key,value) {\n var res =
0;\n values.forEach(function(v) {res += 1 })\n return
{count: res};\n }\n ', {})), ('out', 'via_count')]) on namespace
Corpus.$cmd failed: ns doesn't exist
The codes are :
from pymongo import MongoClient
from bson.code import Code
con = MongoClient()
db = con.Corpus
tweets = db.tweets
map = Code("function() { emit(this.via, 1); }")
reduce = Code(""" function(key,value) {
var res = 0;
values.forEach(function(v) {res += 1 })
return {count: res};
}
""")
result = tweets.map_reduce(map, reduce, "via_count")
for doc in db.via_count.find():
print(doc)
on namespace Corpus.$cmd failed: ns doesn't exist
It means you don't have collection named 'tweets' or 'via_count' in Corpus.
Not like a raw query in mongodb, map_reduce function doesn't make a new collection if it's not exist.
Even if the database does not exists drops the same error
Related
I am attempting (and can successfully do so) to connect to an API and loop through several iterations of the API call in order to grab the next_page value, put it in a list and then call the list.
Unfortunately, when this is published to the PBI service I am unable to refresh there and indeed 'Data Source Settings' tells me I have a 'hand-authored query'.
I have attempted to follow Chris Webbs' blog post around the usage of query parameters and relative path, but if I use this I just get a constant loop of the first page that's hit.
The Start Epoch Time is a helper to ensure I only grab data less than 3 months old.
let
iterations = 10000, // Number of MAXIMUM iterations
url = "https://www.zopim.com/api/v2/" & "incremental/" & "chats?fields=chats(*)" & "&start_time=" & Number.ToText( StartEpochTime ),
FnGetOnePage =
(url) as record =>
let
Source1 = Json.Document(Web.Contents(url, [Headers=[Authorization="Bearer MY AUTHORIZATION KEY"]])),
data = try Source1[chats] otherwise null, //get the data of the first page
next = try Source1[next_page] otherwise null, // the script ask if there is another page*//*
res = [Data=data, Next=next]
in
res,
GeneratedList =
List.Generate(
()=>[i=0, res = FnGetOnePage(url)],
each [i]<iterations and [res][Data]<>null,
each [i=[i]+1, res = FnGetOnePage([res][Next])],
each [res][Data])
Lookups
If Source1 exists, but [chats] may not, you can simplify
= try Source1[chats] otherwise null
to
= Source1[chats]?
Plus it you don't lose non-lookup errors.
m-spec-operators
Chris Web Method
should be something closer to this.
let
Headers = [
Accept="application/json"
],
BaseUrl = "https://www.zopim.com", // very important
Options = [
RelativePath = "api/v2/incremental/chats",
Headers = [
Accept="application/json"
],
Query = [
fields = "chats(*)",
start_time = Number.ToText( StartEpocTime )
],
Response = Web.Contents(BaseUrl, Options),
Result = Json.Document(Response) // skip if it's not JSON
in
Result
Here's an example of a reusable Web.Contents function
helper function
let
/*
from: <https://github.com/ninmonkey/Ninmonkey.PowerQueryLib/blob/master/source/WebRequest_Simple.pq>
Wrapper for Web.Contents returns response metadata
for options, see: <https://learn.microsoft.com/en-us/powerquery-m/web-contents#__toc360793395>
Details on preventing "Refresh Errors", using 'Query' and 'RelativePath':
- Not using Query and Relative path cause refresh errors:
<https://blog.crossjoin.co.uk/2016/08/23/web-contents-m-functions-and-dataset-refresh-errors-in-power-bi/>
- You can opt-in to Skip-Test:
<https://blog.crossjoin.co.uk/2019/04/25/skip-test-connection-power-bi-refresh-failures/>
- Debugging and tracing the HTTP requests
<https://blog.crossjoin.co.uk/2019/11/17/troubleshooting-web-service-refresh-problems-in-power-bi-with-the-power-query-diagnostics-feature/>
update:
- MaybeErrResponse: Quick example of parsing an error result.
- Raw text is returned, this is useful when there's an error
- now response[json] does not throw, when the data isn't json to begin with (false errors)
*/
WebRequest_Simple
= (
base_url as text,
optional relative_path as nullable text,
optional options as nullable record
)
as record =>
let
headers = options[Headers]?, //or: ?? [ Accept = "application/json" ],
merged_options = [
Query = options[Query]?,
RelativePath = relative_path,
ManualStatusHandling = options[ManualStatusHandling]? ?? { 400, 404, 406 },
Headers = headers
],
bytes = Web.Contents(base_url, merged_options),
response = Binary.Buffer(bytes),
response_metadata = Value.Metadata( bytes ),
status_code = response_metadata[Response.Status]?,
response_text = Text.Combine( Lines.FromBinary(response,null,null, TextEncoding.Utf8), "" ),
json = Json.Document(response),
IsJsonX = not (try json)[HasError],
Final = [
request_url = metadata[Content.Uri](),
response_text = response_text,
status_code = status_code,
metadata = response_metadata,
IsJson = IsJsonX,
response = response,
json = if IsJsonX then json else null
]
in
Final,
tests = {
WebRequest_Simple("https://httpbin.org", "json"), // expect: json
WebRequest_Simple("https://www.google.com"), // expect: html
WebRequest_Simple("https://httpbin.org", "/headers"),
WebRequest_Simple("https://httpbin.org", "/status/codes/406"), // exect 404
WebRequest_Simple("https://httpbin.org", "/status/406"), // exect 406
WebRequest_Simple("https://httpbin.org", "/get", [ Text = "Hello World"])
},
FinalResults = Table.FromRecords(tests,
type table[
status_code = Int64.Type, request_url = text,
metadata = record,
response_text = text,
IsJson = logical, json = any,
response = binary
],
MissingField.Error
)
in
FinalResults
I need to read FASTQ file into AWS Glue Job Script but I'am getting this error:
Traceback (most recent call last): File "/opt/amazon/bin/runscript.py", line 59, in runpy.run_path(script, run_name='main') File "/usr/lib64/python3.7/runpy.py", line 261, in run_path
code, fname = _get_code_from_file(run_name, path_name) File "/usr/lib64/python3.7/runpy.py", line 236, in _get_code_from_file
code = compile(f.read(), fname, 'exec') File "/tmp/test20200930", line 24 datasource0 = spark.createDataset(sc.textFile("s3://sample-genes-data/fastq/S_Sonnei_short_reads_1.fastq").sliding(4, 4).map {
^ SyntaxError: invalid syntax During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/opt/amazon/bin/runscript.py", line 92, in
while "runpy.py" in new_stack.tb_frame.f_code.co_filename: AttributeError: 'NoneType' object has no attribute 'tb_frame'
This is my code:
import org.apache.spark.mllib.rdd.RDDFunctions._
datasource0 = spark.createDataset(sc.textFile("s3://sample-genes-data/fastq/S_Sonnei_short_reads_1.fastq").sliding(4, 4).map {
case Array(id, seq, _, qual) => (id, seq, qual)
}).toDF("identifier", "sequence", "quality")
datasource1 = DynamicFrame.fromDF(datasource0, glueContext, "nullv")
I followed this link:
Read FASTQ file into a Spark dataframe
I was able to run the code by wrapping it inside a GlueApp object. You can use below code by replacing the S3 path of yours.
import com.amazonaws.services.glue.GlueContext
import com.amazonaws.services.glue.util.GlueArgParser
import com.amazonaws.services.glue.util.Job
import org.apache.spark.SparkContext
import org.apache.spark.sql.Dataset
import org.apache.spark.sql.SparkSession
import com.amazonaws.services.glue.DynamicFrame
import org.apache.spark.mllib.rdd.RDDFunctions._
object GlueApp {
def main(sysArgs: Array[String]) {
val spark: SparkContext = new SparkContext()
val glueContext: GlueContext = new GlueContext(spark)
val sparkSession: SparkSession = glueContext.getSparkSession
import sparkSession.implicits._
val datasource0 = sparkSession.createDataset(spark.textFile("s3://<s3path>").sliding(4, 4).map {
case Array(id, seq, _, qual) => (id, seq, qual)
}).toDF("identifier", "sequence", "quality")
val datasource1 = DynamicFrame(datasource0, glueContext)
datasource1.show()
datasource1.printSchema()
Job.commit()
}
}
Passed Input :
#seq1
AGTCAGTCGAC
+
?##FFBFFDDH
#seq2
CCAGCGTCTCG
+
?88ADA?BDF8
Output:
{"identifier": "#seq1", "sequence": "AGTCAGTCGAC", "quality": "?##FFBFFDDH"}
{"identifier": "#seq2", "sequence": "CCAGCGTCTCG", "quality": "?88ADA?BDF8"}
I'm playing with the New Data API for Amazon Aurora Serverless
Is it possible to get the table column names in the response?
If for example I run the following query in a user table with the columns id, first_name, last_name, email, phone:
const sqlStatement = `
SELECT *
FROM user
WHERE id = :id
`;
const params = {
secretArn: <mySecretArn>,
resourceArn: <myResourceArn>,
database: <myDatabase>,
sql: sqlStatement,
parameters: [
{
name: "id",
value: {
"stringValue": 1
}
}
]
};
let res = await this.RDS.executeStatement(params)
console.log(res);
I'm getting a response like this one, So I need to guess which column corresponds with each value:
{
"numberOfRecordsUpdated": 0,
"records": [
[
{
"longValue": 1
},
{
"stringValue": "Nicolas"
},
{
"stringValue": "Perez"
},
{
"stringValue": "example#example.com"
},
{
"isNull": true
}
]
]
}
I would like to have a response like this one:
{
id: 1,
first_name: "Nicolas",
last_name: "Perez",
email: "example#example.com",
phone: null
}
update1
I have found an npm module that wrap Aurora Serverless Data API and simplify the development
We decided to take the current approach because we were trying to cut down on the response size and including column information with each record was redundant.
You can explicitly choose to include column metadata in the result. See the parameter: "includeResultMetadata".
https://docs.aws.amazon.com/rdsdataservice/latest/APIReference/API_ExecuteStatement.html#API_ExecuteStatement_RequestSyntax
Agree with the consensus here that there should be an out of the box way to do this from the data service API. Because there is not, here's a JavaScript function that will parse the response.
const parseDataServiceResponse = res => {
let columns = res.columnMetadata.map(c => c.name);
let data = res.records.map(r => {
let obj = {};
r.map((v, i) => {
obj[columns[i]] = Object.values(v)[0]
});
return obj
})
return data
}
I understand the pain but it looks like this is reasonable based on the fact that select statement can join multiple tables and duplicated column names may exist.
Similar to the answer above from #C.Slack but I used a combination of map and reduce to parse response from Aurora Postgres.
// declarative column names in array
const columns = ['a.id', 'u.id', 'u.username', 'g.id', 'g.name'];
// execute sql statement
const params = {
database: AWS_PROVIDER_STAGE,
resourceArn: AWS_DATABASE_CLUSTER,
secretArn: AWS_SECRET_STORE_ARN,
// includeResultMetadata: true,
sql: `
SELECT ${columns.join()} FROM accounts a
FULL OUTER JOIN users u ON u.id = a.user_id
FULL OUTER JOIN groups g ON g.id = a.group_id
WHERE u.username=:username;
`,
parameters: [
{
name: 'username',
value: {
stringValue: 'rick.cha',
},
},
],
};
const rds = new AWS.RDSDataService();
const response = await rds.executeStatement(params).promise();
// parse response into json array
const data = response.records.map((record) => {
return record.reduce((prev, val, index) => {
return { ...prev, [columns[index]]: Object.values(val)[0] };
}, {});
});
Hope this code snippet helps someone.
And here is the response
[
{
'a.id': '8bfc547c-3c42-4203-aa2a-d0ee35996e60',
'u.id': '01129aaf-736a-4e86-93a9-0ab3e08b3d11',
'u.username': 'rick.cha',
'g.id': 'ff6ebd78-a1cf-452c-91e0-ed5d0aaaa624',
'g.name': 'valentree',
},
{
'a.id': '983f2919-1b52-4544-9f58-c3de61925647',
'u.id': '01129aaf-736a-4e86-93a9-0ab3e08b3d11',
'u.username': 'rick.cha',
'g.id': '2f1858b4-1468-447f-ba94-330de76de5d1',
'g.name': 'ensightful',
},
]
Similar to the other answers, but if you are using Python/Boto3:
def parse_data_service_response(res):
columns = [column['name'] for column in res['columnMetadata']]
parsed_records = []
for record in res['records']:
parsed_record = {}
for i, cell in enumerate(record):
key = columns[i]
value = list(cell.values())[0]
parsed_record[key] = value
parsed_records.append(parsed_record)
return parsed_records
I've added to the great answer already provided by C. Slack to deal with AWS handling empty nullable character fields by giving the response { "isNull": true } in the JSON.
Here's my function to handle this by returning an empty string value - this is what I would expect anyway.
const parseRDSdata = (input) => {
let columns = input.columnMetadata.map(c => { return { name: c.name, typeName: c.typeName}; });
let parsedData = input.records.map(row => {
let response = {};
row.map((v, i) => {
//test the typeName in the column metadata, and also the keyName in the values - we need to cater for a return value of { "isNull": true } - pflangan
if ((columns[i].typeName == 'VARCHAR' || columns[i].typeName == 'CHAR') && Object.keys(v)[0] == 'isNull' && Object.values(v)[0] == true)
response[columns[i].name] = '';
else
response[columns[i].name] = Object.values(v)[0];
}
);
return response;
}
);
return parsedData;
}
I am running into an issue with calling the customer record from a passed value on my mapped section of my mapreduce script. It is sending me a debug error of "TypeError: Cannot find function load in object 262059". Where 262059 is the internal ID of the customer passed from the getInputData function.
NetSuite debug image...
Here is the coding of the function that is throwing this error.
function removeLine(r,recordId){
try{
log.audit({title:"removeLine"});
var customerRecord = r.Load({
"type": r.Type.CUSTOMER,
"id": recordId,
"isDynamic": true
});
log.debug({details:"recordId = " + recordId});
var index = rec.getLineCount('item');
log.debug({detaisl:"index = " + index});
for (var cnt = 0; cnt < lineCount; cnt++)
{
log.audit({details:"Round " + cnt})
rec.selectLine({
sublistId: "item",
line: cnt
});
rec.removeLine({
sublistId: "item",
line: cnt
});
}
log.debug(recordId + " Item Pricing has been removed.");
record.save();
}catch(exception){
log.debug("removeLine Error Message:",exception);
}
}
What am I missing or not understanding? I appreciate your guidance.
Brad
I believe the problem lies where you load the record:
var customerRecord = r.Load({
"type": r.Type.CUSTOMER,
"id": recordId,
"isDynamic": true
});
It should be r.load, not r.Load as JavaScript is case-sensitive.
Code:
isc.RestDataSource.create({
ID: "restDS",
dataFormat: "xml",
fetchDataURL: "http://192.168.1.21:8282/uom/username=vikash%7C214057357158656/password=gbadmin/ModifiedOn=0",
fields: [
{name:"UOMId"},
{name:"UOMCode"},
{name:"UOMName"}
,
{name:"UOMType"},
{name:"UOMNoOfDecimals"},
{name:"UOMStatus"}
]
});
isc.ListGrid.create({
ID: "restList",
width:800, height:224, alternateRecordStyles:true,
dataSource: restDS,
fields:[
{name:"UOMId"},
{name:"UOMCode"},
{name:"UOMName"}
,
{name:"UOMType"},
{name:"UOMNoOfDecimals"},
{name:"UOMStatus"}
],
autoFetchData:true,
autoDraw: true
});
This Error I'm getting in browser
XML Parsing Error: no element found Location: moz-nullprincipal:{bc0868f9-b8df-4acd-b155-e58c50373d1b} Line Number 1, Column 1:
WebService Content
<ResponseJSON><Body><Datalist><UOMId>-1499999999</UOMId><UOMCode>MPM</UOMCode><UOMName>Meters Per Minute</UOMName><UOMType>2</UOMType><UOMNoOfDecimals>4</UOMNoOfDecimals><UOMStatus>1</UOMStatus></Datalist><Datalist><UOMId>-1499999997</UOMId><UOMCode>MM</UOMCode><UOMName>Milli Metres</UOMName><UOMType>0</UOMType><UOMNoOfDecimals>4</UOMNoOfDecimals><UOMStatus>1</UOMStatus></Datalist><Datalist><UOMId>-1499999996</UOMId><UOMCode>GSM</UOMCode><UOMName>Grammes per Square Metre</UOMName><UOMType>6</UOMType><UOMNoOfDecimals>4</UOMNoOfDecimals><UOMStatus>1</UOMStatus></Datalist><Datalist><UOMId>-1499999994</UOMId><UOMCode>LPM</UOMCode><UOMName>Litres Per Minute</UOMName><UOMType>2</UOMType><UOMNoOfDecimals>4</UOMNoOfDecimals><UOMStatus>1</UOMStatus></Datalist><Datalist><UOMId>-1499999993</UOMId><UOMCode>GRADE</UOMCode><UOMName>Grade</UOMName><UOMType>6</UOMType><UOMNoOfDecimals>4</UOMNoOfDecimals><UOMStatus>1</UOMStatus></Datalist><Datalist><UOMId>-1499999992</UOMId><UOMCode>GRAM</UOMCode><UOMName>Gram</UOMName><UOMType>1</UOMType><UOMNoOfDecimals>4</UOMNoOfDecimals><UOMStatus>1</UOMStatus></Datalist><Datalist><UOMId>-1499999991</UOMId><UOMCode>Degree</UOMCode><UOMName>Degree</UOMName><UOMType>6</UOMType><UOMNoOfDecimals>4</UOMNoOfDecimals><UOMStatus>1</UOMStatus></Datalist><Datalist><UOMId>-1499999990</UOMId><UOMCode>SET</UOMCode><UOMName>Set</UOMName><UOMType>6</UOMType><UOMNoOfDecimals>4</UOMNoOfDecimals><UOMStatus>1</UOMStatus></Datalist><Datalist><UOMId>-1499999989</UOMId><UOMCode>VOLT</UOMCode><UOMName>Volts</UOMName><UOMType>6</UOMType><UOMNoOfDecimals>4</UOMNoOfDecimals><UOMStatus>1</UOMStatus></Datalist><Datalist><UOMId>-1499999988</UOMId><UOMCode>AMPERE</UOMCode><UOMName>Ampere</UOMName><UOMType>6</UOMType><UOMNoOfDecimals>4</UOMNoOfDecimals><UOMStatus>1</UOMStatus></Datalist><Datalist><UOMId>-1499999987</UOMId><UOMCode>CELSIUS</UOMCode><UOMName>Celsius</UOMName><UOMType>6</UOMType><UOMNoOfDecimals>4</UOMNoOfDecimals><UOMStatus>1</UOMStatus></Datalist><Datalist><UOMId>-1499999986</UOMId><UOMCode>HZ</UOMCode><UOMName>Hertz</UOMName><UOMType>6</UOMType><UOMNoOfDecimals>4</UOMNoOfDecimals><UOMStatus>1</UOMStatus></Datalist><Datalist><UOMId>-1499999985</UOMId><UOMCode>HRS</UOMCode><UOMName>Hours</UOMName><UOMType>6</UOMType><UOMNoOfDecimals>4</UOMNoOfDecimals><UOMStatus>1</UOMStatus></Datalist><Datalist><UOMId>-1499999984</UOMId><UOMCode>LITERS</UOMCode><UOMName>Liters</UOMName><UOMType>6</UOMType><UOMNoOfDecimals>4</UOMNoOfDecimals><UOMStatus>1</UOMStatus></Datalist><Datalist><UOMId>-1499999983</UOMId><UOMCode>KWh</UOMCode><UOMName>KiloWatt Per Hour</UOMName><UOMType>6</UOMType><UOMNoOfDecimals>4</UOMNoOfDecimals><UOMStatus>1</UOMStatus></Datalist><Datalist><UOMId>-1499999982</UOMId><UOMCode>GRAVITY</UOMCode><UOMName>Gravity</UOMName><UOMType>6</UOMType><UOMNoOfDecimals>4</UOMNoOfDecimals><UOMStatus>1</UOMStatus></Datalist><Datalist><UOMId>-1499999981</UOMId><UOMCode>PRSR</UOMCode><UOMName>Pressure</UOMName><UOMType>6</UOMType><UOMNoOfDecimals>4</UOMNoOfDecimals><UOMStatus>1</UOMStatus></Datalist><Datalist><UOMId>-1499999980</UOMId><UOMCode>KVARh</UOMCode><UOMName>KVARh</UOMName><UOMType>6</UOMType><UOMNoOfDecimals>4</UOMNoOfDecimals><UOMStatus>1</UOMStatus></Datalist><Datalist><UOMId>-1499999979</UOMId><UOMCode>KVAh</UOMCode><UOMName>KVAh</UOMName><UOMType>6</UOMType><UOMNoOfDecimals>4</UOMNoOfDecimals><UOMStatus>1</UOMStatus></Datalist><Datalist><UOMId>-1499999978</UOMId><UOMCode>kVA</UOMCode><UOMName>kVA</UOMName><UOMType>6</UOMType><UOMNoOfDecimals>4</UOMNoOfDecimals><UOMStatus>1</UOMStatus></Datalist><Datalist><UOMId>-1499999977</UOMId><UOMCode>KW</UOMCode><UOMName>Kilo Watt</UOMName><UOMType>6</UOMType><UOMNoOfDecimals>4</UOMNoOfDecimals><UOMStatus>1</UOMStatus></Datalist><Datalist><UOMId>-1499999976</UOMId><UOMCode>VL</UOMCode><UOMName>V Line</UOMName><UOMType>6</UOMType><UOMNoOfDecimals>4</UOMNoOfDecimals><UOMStatus>1</UOMStatus></Datalist><Datalist><UOMId>-1499999975</UOMId><UOMCode>IL</UOMCode><UOMName>I Line</UOMName><UOMType>6</UOMType><UOMNoOfDecimals>4</UOMNoOfDecimals><UOMStatus>1</UOMStatus></Datalist><Datalist><UOMId>-1499999974</UOMId><UOMCode>TR</UOMCode><UOMName>TR</UOMName><UOMType>6</UOMType><UOMNoOfDecimals>4</UOMNoOfDecimals><UOMStatus>1</UOMStatus></Datalist><Datalist><UOMId>-1499999973</UOMId><UOMCode>PSIG</UOMCode><UOMName>PSIG</UOMName><UOMType>6</UOMType><UOMNoOfDecimals>4</UOMNoOfDecimals><UOMStatus>1</UOMStatus></Datalist><Datalist><UOMId>-1499999972</UOMId><UOMCode>FH</UOMCode><UOMName>Fahrenheit</UOMName><UOMType>6</UOMType><UOMNoOfDecimals>4</UOMNoOfDecimals><UOMStatus>1</UOMStatus></Datalist><Datalist><UOMId>-1499999971</UOMId><UOMCode>Y/N</UOMCode><UOMName>Y/N</UOMName><UOMType>6</UOMType><UOMNoOfDecimals>4</UOMNoOfDecimals><UOMStatus>1</UOMStatus></Datalist><Datalist><UOMId>-1499999970</UOMId><UOMCode>KL</UOMCode><UOMName>KL</UOMName><UOMType>6</UOMType><UOMNoOfDecimals>4</UOMNoOfDecimals><UOMStatus>1</UOMStatus></Datalist><Datalist><UOMId>-1499999969</UOMId><UOMCode>INR</UOMCode><UOMName>INR</UOMName><UOMType>1</UOMType><UOMNoOfDecimals>2</UOMNoOfDecimals><UOMStatus>1</UOMStatus></Datalist><Datalist><UOMId>-1499999968</UOMId><UOMCode>RKVAH</UOMCode><UOMName>RKVAH</UOMName><UOMType>1</UOMType><UOMNoOfDecimals>2</UOMNoOfDecimals><UOMStatus>1</UOMStatus></Datalist><Datalist><UOMId>-1499999967</UOMId><UOMCode>UNITS</UOMCode><UOMName>UNITS</UOMName><UOMType>1</UOMType><UOMNoOfDecimals>2</UOMNoOfDecimals><UOMStatus>1</UOMStatus></Datalist><Datalist><UOMId>-1499999966</UOMId><UOMCode>SQFT</UOMCode><UOMName>SQFT</UOMName><UOMType>1</UOMType><UOMNoOfDecimals>2</UOMNoOfDecimals><UOMStatus>1</UOMStatus></Datalist><Datalist><UOMId>-1499999965</UOMId><UOMCode>MTS</UOMCode><UOMName>Minutes</UOMName><UOMType>1</UOMType><UOMNoOfDecimals>2</UOMNoOfDecimals><UOMStatus>1</UOMStatus></Datalist><Datalist><UOMId>269758049027601</UOMId><UOMCode>rt</UOMCode><UOMName>rt12</UOMName><UOMType>2</UOMType><UOMNoOfDecimals>1</UOMNoOfDecimals><UOMStatus>1</UOMStatus></Datalist><Datalist><UOMId>-1500000000</UOMId><UOMCode>NOS</UOMCode><UOMName>Numbers</UOMName><UOMType>6</UOMType><UOMNoOfDecimals>3</UOMNoOfDecimals><UOMStatus>1</UOMStatus></Datalist><Datalist><UOMId>-1499999998</UOMId><UOMCode>PPM</UOMCode><UOMName>Parts Per Million</UOMName><UOMType>3</UOMType><UOMNoOfDecimals>4</UOMNoOfDecimals><UOMStatus>1</UOMStatus></Datalist><Datalist><UOMId>-1499999995</UOMId><UOMCode>%</UOMCode><UOMName>Percentage</UOMName><UOMType>3</UOMType><UOMNoOfDecimals>4</UOMNoOfDecimals><UOMStatus>1</UOMStatus></Datalist><Datalist><UOMId>301246830151381</UOMId><UOMCode>cccc</UOMCode><UOMName>cccc</UOMName><UOMType>0</UOMType><UOMNoOfDecimals>1</UOMNoOfDecimals><UOMStatus>1</UOMStatus></Datalist><Datalist><UOMId>306495824922361</UOMId><UOMCode>sd</UOMCode><UOMName>sd</UOMName><UOMType>1</UOMType><UOMNoOfDecimals>4</UOMNoOfDecimals><UOMStatus>1</UOMStatus></Datalist><Datalist><UOMId>301243241629396</UOMId><UOMCode>asdf</UOMCode><UOMName>aaaa</UOMName><UOMType>0</UOMType><UOMNoOfDecimals>2</UOMNoOfDecimals><UOMStatus>1</UOMStatus></Datalist><Datalist><UOMId>545196525553078</UOMId><UOMCode>YTY</UOMCode><UOMName>QYRDY</UOMName><UOMType>1</UOMType><UOMNoOfDecimals>3</UOMNoOfDecimals><UOMStatus>1</UOMStatus></Datalist></Body><Status>200</Status><Total>41.0</Total></ResponseJSON>
plz help
Thank You
Your webservice returns incorrect response for RestDataSource. Example of expected response you can see in documentation here: RestDataSource
Another option that you have is to override response parsing. In your case it will be something like this:
isc.RestDataSource.create({
ID: "restDS",
dataFormat: "xml",
fetchDataURL: "http://192.168.1.21:8282/uom/username=vikash%7C214057357158656/password=gbadmin/ModifiedOn=0",
xmlRecordXPath:"/ResponseJSON/Body/*",
fields: [
{name:"UOMId"},
{name:"UOMCode"},
{name:"UOMName"},
{name:"UOMType"},
{name:"UOMNoOfDecimals"},
{name:"UOMStatus"}
] ,
transformResponse : function (dsResponse, dsRequest, data) {
var totalRows = data.selectNumber("//Total");
if (totalRows != null) dsResponse.totalRows = totalRows;
var startRow = data.selectNumber("//startRow");
if (startRow != null) dsResponse.startRow = startRow;
var endRow = data.selectNumber("//endRow");
if (endRow != null) dsResponse.endRow = endRow;
return dsResponse;
}
});
Note that I overwritten xmlRecordPath property and transformResponse method.