I am trying to create a schema extension in Microsoft Graph API.
But it has failed with error message "Property type is invalid for target types".
POST https://graph.microsoft.com/v1.0/schemaExtensions
Content-type: application/json
{
"id":"extendedData",
"description": "Graph Learn training courses extensions",
"targetTypes": [
"Event"
],
"properties": [
{
"name": "courseId",
"type": "Integer"
},
{
"name": "materialId",
"type": "Integer"
},
{
"name": "courseType",
"type": "String"
}
]
}
Response
{
"error": {
"code": "BadRequest",
"message": "Property type is invalid for target types.",
"innerError": {
"date": ...,
"request-id": ...,
"client-request-id": ...
}
}
}
Why can't I create a schema extension and what error means?
Integer type in properties is not supported for Event targetTypes based on Supported property data types.
You could change them to String.
Please note that you may will encounter a new error: Attempt to update complex extension definition on application: dexxxxx5-d9f9-48b1-a8ad-b7xxxxx25064 belonging to different context.
If you get this error, it means you still need to put an owner property in the JSON payload. (If you don't get this error, it's unnecessary to put owner property)
Register an Azure AD app and put the application id as the owner.
POST https://graph.microsoft.com/v1.0/schemaExtensions
Content-type: application/json
{
"id":"extendedData",
"description": "Graph Learn training courses extensions",
"targetTypes": [
"Event"
],
"owner": "{application id of an Azure AD app}",
"properties": [
{
"name": "courseId",
"type": "String"
},
{
"name": "materialId",
"type": "String"
},
{
"name": "courseType",
"type": "String"
}
]
}
Related
I have a logic app with started when there is a message in serviceBus queue. The message is being published to the service bus from the DevOps pipeline using "PublishToAzureServiceBus" as a JSON message or from the pipeline webhook.
But getting an issue while converting a message from service bus to original JSON format, not able to get valid JSON object. It's getting append with some Serialization object.
I have tried with base64 decode, and JSON converts but have not been able to get success.
Below is the content of the message it looks like.
Any pointer on how can solve this?
Sample message sent
{
"id": "76a187f3-c154-4e60-b8bc-c0b754e54191",
"eventType": "build.complete",
"publisherId": "tfs",
"message": {
"text": "Build 20220605.8 succeeded"
},
"detailedMessage": {
"text": "Build 20220605.8 succeeded"
},
"resource": {
"uri": "vstfs:///Build/Build/288",
"id": 288,
"buildNumber": "20220605.8",
"url": "https://dev.azure.com/*******/_apis/build/Builds/288",
"startTime": "2022-06-05T14:47:01.1846966Z",
"finishTime": "2022-06-05T14:47:16.7602096Z",
"reason": "manual",
"status": "succeeded",
"drop": {},
"log": {},
"sourceGetVersion": "LG:refs/heads/main:********",
"lastChangedBy": {
"displayName": "Microsoft.VisualStudio.Services.TFS",
"id": "00000000-0000-0000-0000-000000000000",
"uniqueName": "***************"
},
"retainIndefinitely": false,
"definition": {
"definitionType": "xaml",
"id": 20,
"name": "getReleaseFile",
"url": "https://dev.azure.com/************/_apis/build/Definitions/20"
},
"requests": [
{
"id": 288,
"url": "https://dev.azure.com/B*****/**********/_apis/build/Requests/288",
"requestedFor": {
"displayName": "B*****.sag",
"id": "*******",
"uniqueName": "B**********"
}
}
]
},
"resourceVersion": "1.0",
"resourceContainers": {
"collection": {
"id": "*******",
"baseUrl": "https://dev.azure.com/B*****/"
},
"account": {
"id": "******",
"baseUrl": "https://dev.azure.com/B*****/"
},
"project": {
"id": "**********",
"baseUrl": "https://dev.azure.com/B*****/"
}
},
"createdDate": "2022-06-05T14:47:28.6089499Z"
}
Message received
#string3http://schemas.microsoft.com/2003/10/Serialization/�q{"id":"****","eventType":"build.complete","publisherId":"tfs","message":{"text":"Build 20220605.8 succeeded"},"detailedMessage":{"text":"Build 20220605.8 succeeded"},"resource":{"uri":"vstfs:///Build/Build/288","id":288,"buildNumber":"20220605.8","url":"https://dev.azure.com/*****/********/_apis/build/Builds/288","startTime":"2022-06-05T14:47:01.1846966Z","finishTime":"2022-06-05T14:47:16.7602096Z","reason":"manual","status":"succeeded","drop":{},"log":{},"sourceGetVersion":"LG:refs/heads/main:f0b1a1d2bd047454066cf21dc4d4c710bca4e1d7","lastChangedBy":{"displayName":"Microsoft.VisualStudio.Services.TFS","id":"00000000-0000-0000-0000-000000000000","uniqueName":"******"},"retainIndefinitely":false,"definition":{"definitionType":"xaml","id":20,"name":"getReleaseFile","url":"https://dev.azure.com/******/_apis/build/Definitions/20"},"requests":[{"id":288,"url":"https://dev.azure.com/*****/******/_apis/build/Requests/288","requestedFor":{"displayName":"baharul.sag","id":"******","uniqueName":"baharul.*****"}}]},"resourceVersion":"1.0","resourceContainers":{"collection":{"id":"3*****","baseUrl":"https://dev.azure.com/*****/"},"account":{"id":"******","baseUrl":"https://dev.azure.com/*****/"},"project":{"id":"*******","baseUrl":"https://dev.azure.com/*****/"}},"createdDate":"2022-06-05T14:47:28.6089499Z"}
When reading message from service bus in peek mode can see as below where <#string3http://schemas.microsoft.com/2003/10/Serialization/��> is appended to json string
Publish using PublishToAzureServiceBus from Azure pipeline.
Publish from Azure DevOps project webhook
I believe what is happening is that you have two different types of serialisation in the body of the brokered message created by the PublishToAzureServiceBus task. This is because the brokered message only supports binary content.
So the json is initially serialised as a binary string using the data contract serialiser.
How to solve this? Do the following before passing to your json deserialiser - unfortunately the logic app isn't doing this:
byte[] messageContent = brokeredMessage.GetBody<byte[]>();
string messageContentStr = Encoding.UTF8.GetString(messageContent);
I probably wouldn't use a logic app to do the reading of the message because to insert c# like I suggest you're gonna need to call an azure function or similar. I'd create an azure function to read your messages as above.
When creating a request to assign an app to an AD group in Azure Intune using the graph API, i get the following response.
{ "error": {
"code": "ModelValidationFailure",
"message": "Cannot create an abstract class.",
"innerError": {
"message": "Cannot create an abstract class.",
"request-id": "removed",
"date": "removed"
} }}
and here's my post data
{ "#odata.type": "#microsoft.graph.mobileAppAssignment", "intent": "required", "target": { "#odata.type": "microsoft.graph.groupAssignmentTarget", "groupId": "removed" }, "settings": { "#odata.type": "microsoft.graph.mobileAppAssignmentSettings"}}
Here's the reference i've used to generate the json data: https://learn.microsoft.com/en-us/graph/api/intune-apps-mobileappassignment-create?view=graph-rest-beta
And I'm not sure if it something to do with my json input or if the graph api endpoint has an issue.
microsoft.graph.mobileAppAssignmentSettings is an abstract class. You'll need to provide a concrete implementation of assignment settings e.g. microsoftStoreForBusinessAppAssignmentSettings or iosStoreAppAssignmentSettings.
Your post data in this case could be:
{
"#odata.type": "#microsoft.graph.mobileAppAssignment",
"intent": "required",
"target": {
"#odata.type": "microsoft.graph.groupAssignmentTarget",
"groupId":"removed"
},
"settings": {
"#odata.type": "microsoft.graph.microsoftStoreForBusinessAppAssignmentSettings",
"useDeviceContext":"true"
}
}
I am trying to create schema extensions. I do have
"scp": "Directory.AccessAsUser.All" in token. Don't know for what reason it is failing.
https://developer.microsoft.com/en-us/graph/docs/api-reference/beta/api/schemaextension_post_schemaextensions
POST https://graph.microsoft.com/beta/schemaExtensions
Content-type: application/json
{
"id":"courses",
"description": "Graph Learn training courses extensions",
"targetTypes": [
"Group"
],
"properties": [
{
"name": "courseId",
"type": "Integer"
},
{
"name": "courseName",
"type": "String"
},
{
"name": "courseType",
"type": "String"
}
]
}
error :
{
"error": {
"code": "Service_InternalServerError",
"message": "Encountered an internal server error.",
"innerError": {
"request-id": "1909aef3-b66d-48de-8204-0a41df0a27a8",
"date": "2017-07-17T13:07:20"
}
}
}
Unfortunately it looks like Microsoft Graph schema extensions is not supported in B2C tenant (please confirm if you are NOT using a B2C tenant - in which case this might be a different problem).
In the meantime (until we fix this issue), you'll need to use Azure AD Graph to register and use directory extensions.
Hope this helps,
Why aren't the attachments being read correctly?
Trying to use the quick-start template for saving attachments in emails to a SharePoint folder.
Workflow:
On new email (success)
For each container (Attachments is passed in)
Create file (fails)
On new email > Outputs > Attachments
On new mail appears to succeed, but the content of the attachments is set to null ("ContentBytes": null):
[
{
"Id": "AAMkADlhMDBiODNiLWFmOTEtNGZjOS1hMjYxLTY1OTU3MDk4YzZjNABGAAAAAACijX5OkcblRIVMFzOsYgiSBwBFaJ_hCA08Tb5SmdY6ZqCxAAAAADB8AABFaJ_hCA08Tb5SmdY6ZqCxAACD6w2UAAABEgAQAOCw7xb1bG9LstW5SRafEOE=",
"ContentType": "image/jpeg",
"Size": 16962,
"#odata.type": "#Microsoft.OutlookServices.FileAttachment",
"Name": "image001.jpg",
"ContentBytes": null
},
{
"Id": "AAMkADlhMDBiODNiLWFmOTEtNGZjOS1hMjYxLTY1OTU3MDk4YzZjNABGAAAAAACijX5OkcblRIVMFzOsYgiSBwBFaJ_hCA08Tb5SmdY6ZqCxAAAAADB8AABFaJ_hCA08Tb5SmdY6ZqCxAACD6w2UAAABEgAQAG7KUOVpzCRJslBYmXAysB4=",
"ContentType": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
"Size": 194702,
"#odata.type": "#Microsoft.OutlookServices.FileAttachment",
"Name": "Test.docx",
"ContentBytes": null
},
{
"Id": "AAMkADlhMDBiODNiLWFmOTEtNGZjOS1hMjYxLTY1OTU3MDk4YzZjNABGAAAAAACijX5OkcblRIVMFzOsYgiSBwBFaJ_hCA08Tb5SmdY6ZqCxAAAAADB8AABFaJ_hCA08Tb5SmdY6ZqCxAACD6w2UAAABEgAQAL3JExHdzLJDs0YH1XpZXgU=",
"ContentType": "image/jpeg",
"Size": 73353,
"#odata.type": "#Microsoft.OutlookServices.FileAttachment",
"Name": "image005.jpg",
"ContentBytes": null
},
{
"Id": "AAMkADlhMDBiODNiLWFmOTEtNGZjOS1hMjYxLTY1OTU3MDk4YzZjNABGAAAAAACijX5OkcblRIVMFzOsYgiSBwBFaJ_hCA08Tb5SmdY6ZqCxAAAAADB8AABFaJ_hCA08Tb5SmdY6ZqCxAACD6w2UAAABEgAQABUsTq9cXiVCoowGEFnbtHw=",
"ContentType": "image/jpeg",
"Size": 3684,
"#odata.type": "#Microsoft.OutlookServices.FileAttachment",
"Name": "image003.jpg",
"ContentBytes": null
}
]
For-each container > Create file
Fails with the following:
InvalidTemplate. Unable to process template language expressions in
action 'Create_file' inputs at line '1' and column '11': 'The template
language function 'base64ToBinary' expects its parameter to be a
string. The provided value is of type 'Null'. Please see
https://aka.ms/logicexpressions#base64ToBinary for usage details.'.
There's an "include attachments " option on the trigger to opt in to include bytes. Make sure that is turned on and it should work.
How can two independent different JSON Arrays or JSON Objects be merged or concatenated and treated as a single JSON Object using Java or Groovy.
See below sample JSON independent Objects i have
First one holds Duties information
[
{
"code": "A0001",
"description": "Do strategic planning for long range goals of the university"
},
{
"code": "A0002",
"description": "Administer budgets in excess of 1,000,000"
}]
Second JSON object holds Certificates infomation
[
{
"code": "CPA",
"description": "Certified Public Accountant"
},
{
"code": "CPR",
"description": "Cardiopulmonary Resuscitation"
},
{
"code": "ELE",
"description": "Electrician's License"
}]
I need to concatenate and access both the JSONs in below format `
{
"duties":
[{
"code": "A0001",
"description": "Do strategic planning for long range goals of the university"
},
{
"code": "A0002",
"description": "Administer budgets in excess of 1,000,000"
}],
"Certificates":
[
{
"code": "CPA",
"description": "Certified Public Accountant"
},
{
"code": "CPR",
"description": "Cardiopulmonary Resuscitation"
},
{
"code": "ELE",
"description": "Electrician's License"
}
]
}
Please let me know the option available to get this done. Thanks
It can be done e.g. in the following way:
import groovy.json.*
def json1 = """[
{
"code": "A0001",
"description": "Do strategic planning for long range goals of the university"
},
{
"code": "A0002",
"description": "Administer budgets in excess of 1,000,000"
}]"""
def json2 = """[
{
"code": "CPA",
"description": "Certified Public Accountant"
},
{
"code": "CPR",
"description": "Cardiopulmonary Resuscitation"
},
{
"code": "ELE",
"description": "Electrician's License"
}]"""
def duties = new JsonSlurper().parseText(json1)
def certs = new JsonSlurper().parseText(json2)
println JsonOutput.prettyPrint(JsonOutput.toJson ([duties: duties, certificates: certs]))