How to fetch Customer Payments from Netsuite using mulesoft connector - mule

I want to search Netsuite customer payments using mulesoft Netsuite connector
%dw 2.0
output application/xml
ns ns0 urn:messages.platform.webservices.netsuite.com
ns ns01 urn:sales.transactions.webservices.netsuite.com
ns ns02 urn:common.platform.webservices.netsuite.com
ns ns03 urn:core.platform.webservices.netsuite.com
ns ns04 urn:customers.transactions.webservices.netsuite.com
---
{
ns0#search: {
ns0#searchRecord #("xmlns:ns01": ns01, xsi#"type": "ns01:TransactionSearch"): {
ns01#basic: {
ns02#recordType #(operator: "is"): {
ns03#searchValue: attributes.queryParams.recType
}
}
}
}
}
recType is the parameter I am using to pass different record types. I am able to fetch "Invoice", "SalesOrder", "CreditMemo" etc but when I pass "CustomerPayment" I doesn't give me any data.
Though I understand CustomerPayment fall under urn:customers.transactions.webservices.netsuite.com namespace, even when I try to use this namespace I get "unexpected error with some random ID".
Any lead would be really helpful here.
Currently I am using connector version 11.5.8

This has been resolved. The integration user did not have access to customer payments

Related

Mule 4.4 convert Binary payload into JSON

So I have gone through a number of questions related to this topic and tried the various options but none of them seem to work .
Environment - Mule runtime 4.4 , Anypoint Studio 7.11.1
Our limitation is we are not using Enterprise edition only community edition
So cannot use Transform component . However can use dataweave in setPayload / set Variable
I am receiving payload as Binary : see below :
Data appears as JSON but is Binary
I tried changing to JSON in 'setPayload' :
%dw 2.0
import * from dw::core::Binaries
output application/json
---
fromBase64(payload)
However I get this exception :
""Unexpected character 'ÿ' at payload#[1:30] (line:column), expected
Expecting end of input but got `ÿ, while reading `payload` as Json.
1| {"Employee":{"EName":"abcd"}}
^" evaluating expression: "%dw 2.0 import * from dw::core::Binaries output application/json
--- fromBase64(payload)"."
Note - also tried to check datatype of payload using :
typeOf(payload)
This too gave the same exception as above ...
Please help
Update 1:
Based on comments from #aled few additional details :
I am making a GET request to my api endpoint which is reading data from an ERP system which returns data in XML
Then I use a custom component that is being used to transform the XML data to JSON
The o/p of this custom component is what is generating binary data which I am unable to parse
I agree regarding Base64 that was useless
I later even tried with Transform component and all of the below attempts failed with the same exception :
Attempt#1:
%dw 2.0
output application/json
---
if (isEmpty(payload.^raw)) {
"payload": "No payload!!"
}
else {
"payload": payload
}
Attempt#2:
%dw 2.0
output application/json
---
payload
The above XML payload is a short excerpt received from ERP
I need to parse the payload and identify if there is an error present in the payload .
NOTE : if I simply log the payload it all shows up fine in the logs.
is it not possible to convert binary data to json ? do you think there is something wrong in the data received either from ERP or in the XML to JSON Transformer ?
Update#2
So based on earlier comments from #aled ( thanks ! ) started focusing on payload o/p of the ERP component ( which is XML ) BEFORE it is fed to our custom transformer ( which is generating binary data )
Attaching screen print for clarity and will also paste non proprietary code :
Now when I inspect the payload I can see it as :
<?xml version = "1.0" encoding="utf-8" ?>
<Output>
<ErrorDetails>
<Status>1</Status>
<Details>Invalid user or organisation</Details>
</ErrorDetails>
<Employee>
<EName>abcd</EName>
</Employee>
</Output>
and in debug mode I can see that payload is String and NOT Binary
Now I can access individual elements of the payload .
Example:
<set-variable value="#[output application/java --- payload[0].ErrorDetails['Status']]"
doc:name="extract status" variableName="status"/>
So this gives me the value 1 which is expected and good .
Conclusions:
1 The component that interacts with ERP is generating Non Binary / stream data
2 This data as expected is parseable - all good here
3 AFTER this data is fed to our custom component - the o/p payload is now binary and am running into issues parsing it ...
Question:
I know this being a custom component i cannot share code details here and thereby cannot expect inputs BUT regarding #aled comments about hexdump do you think I should try and use it against the output of the custom component ?
Once again a big thanks for your patience and help
Using function fromBase64() is just wrong. The value is not a Base64 string. It doesn't makes sense to try it. Using toBase64() would be useless because you would not be able to do anything with it, other than sending it somewhere else.
Your payload seems to be a JSON, and the media type is application/json in your screenshot, but it contains an UNICODE character at the end at least. You need. What are you trying to do with that payload exactly?
If the payload is truly a binary there is nothing you can do about that in the application. If you are receiving it from somewhere else check with the source. You didn't provide details of the source. Also ensure it is not your application corrupting the payload somehow.

Linking a Contact to a Customer using the SOAP API

I’m having an issue with linking a customer object to a pre-existing contact when creating a new customer within the SOAP/SuiteTalk API using the Mulesoft middleware.
I’m successfully creating the contact object earlier, and then trying to use that internal ID to link that contact object to the newly created customer object. The relevant part I’m posting within the customer object (just hardcoding the internal ID in order to get it running):
contactRolesList:
{
contactRoles:
[
{
contact: {
"type": "CONTACT",
internalId: '74335',
},
role: {
"type": "CONTACT_ROLE",
internalId: ‘-10’,
}
}
]
}
When I attempt to upsert the customer object this way, I don’t get any errors in the integration role execution log, but the contact is never linked. If I try to upsert a second time, I get an error with the format: Unable to find a matching line for sublist contactroles with key: [contact] and value: [74335]. even though a contact object with that internal ID clearly exists.
Am I going about this entirely the wrong way, or am I just narrowly missing the syntax here?
*As a side note, is it possible to set the relationship on a RecordRef using just the external ID? As in, using just the external ID of the contact object in question to reference it and create the link?
Thank you.
The "contactRolesList" field is only for updating contacts already connected to the customer. In order to link a contact with a customer you need to perform an attach operation.
I'm not experienced with the Mulesoft middleware you mention, but in a soap request it would look like this:
<attach xmlns="urn:messages_2017_1.platform.webservices.netsuite.com">
<attachReferece xsi:type="ns1:AttachContactReference"
xmlns:ns1="urn:core_2017_1.platform.webservices.netsuite.com">
<ns1:attachTo internalId="176" type="customer" xsi:type="ns1:RecordRef">
</ns1:attachTo>
<ns1:contact internalId="1467" xsi:type="ns1:RecordRef"/>
<ns1:contactRole internalId="-10" xsi:type="ns1:RecordRef">
</ns1:contactRole>
</attachReferece>
</attach>
You can get additional information in your netsuite CRM's help center at: SuiteCloud Platform/ SuiteTalk Web Services /SuiteTalk SOAP Web Services Platform Guide /SOAP Web Services Operations attach - detach

How do we filter the entities which is not start with "msdn" using MSDynamics Web API

I want to get all entities which are the name not start the prefix as 'msdn' from ms dynamics.
I tried the below APIs, got the error.
GET /api/data/v9.1/EntityDefinitions?$select=LogicalName&$filter=not startswith(LogicalName,%27msdn%27)
Response :
{
"error":
{"code":"0x0",
"message":"The \"startswith\" function isn't supported for Metadata Entities."
}
}
I referred https://learn.microsoft.com/en-us/powerapps/developer/common-data-service/webapi/query-data-web-api#standard-query-functions
I have checked that in one of my environment as well. What you require is not possible.
You will have to go 2 steps.
Retrieve all entities and then filter them out in your local program may it be JavaScript/C# or Json filtering/Power automate or something.

Are there examples of itineraries that are compatible with the Amadeus self-service trip parse API?

I've tried booking references from a dozen providers (which I don't want to post for privacy reasons) and every time the API returns 'Unable to parse' but with no additional diagnostic information.
As a self-service API they don't offer support through any channel other than Stack Overflow, but I'm hoping someone has successfully used the endpoint.
I'm mostly using GMail to access sample flight booking emails, then selecting "View Original" to download the original MIME format email
This is what I use to read the .eml file into code:
function base64_encode(file) {
// read binary data
var bitmap = fs.readFileSync(file);
// convert binary data to base64 encoded string
return new Buffer(bitmap).toString('base64');
}
However every single email I submit to the endpoint eventually returns:
data:
{ data:
{ type: 'trip-parser-job',
id: 'REDACTED',
self: [Object],
status: 'ERROR',
detail: 'Unable to parse' } } }
and at this point, I'm starting to think that either the API is broken, or they haven't correctly documented what data should be submitted as content. I've decoded the sample document they provide and can't see any major difference between that and my inputs.
Does someone have either some working samples that the API was able to process, or some NodeJS code which seems to reliably get a result from the API?

Rally add test case results in bulk using web services API

We are about to start the phase of updating test results in Rally via the api.
I couldn't find an example to do this via the web services API (e.g. posting xml). Can anyone point me to this?
Also I wondered what ability there is to do this in bulk, e.g. upload a set of test results in one go. Perhaps there are connectors for this that will upload various test result standards (e.g. JUnit report) into Rally?
Thoughts and ideas welcomed.
Thanks,
Andy
If you're doing a simple POST against the Test Case Result Create REST endpoint:
https://rally1.rallydev.com/slm/webservice/1.41/testcaseresult/create
Then the appropriate XML payload would be:
<TestCaseResult>
<Build>2345</Build>
<Date>2012-12-11T23:05:49.365Z</Date>
<TestCase ref="/testcase/12345678910"/>
<Tester ref="/user/12345678911"/>
<Verdict>Pass</Verdict>
</TestCaseResult>
Where the long integers are the ObjectID's of the TestCase to which the result associates, and the Rally User that is the tester.
I'll also include the JSON syntax, since Webservices 2.0 will be JSON-only:
https://rally1.rallydev.com/slm/webservice/1.41/testcaseresult/create.js
Payload:
{ "TestCaseResult" : {
"Build" : "2345",
"Date" : "2011-10-13T23:05:49.365Z",
"TestCase" : {
"_ref" : "/testcase/12345678910.js"
},
"Tester" : {
"_ref : "/user/12345678911.js"
},
"Verdict" : "Fail"
}
}
As far as I'm aware, there's not a pre-built connector for uploading JUnit results into Rally. Some customers find the Rally Excel Add-in to be useful for bulk uploading TestCaseResults, amongst other things. You just have to specify a column in your import worksheet that has the Rally ObjectID or FormattedID of the TestCase(s) to which you want to associate your results.