How to get/Query last successful Sync date in QuickBooks Desktop? - quickbooks

I have a requirement to get last successful sync date (Sync manager : Successful Sync) from QuickBooks desktop edition.
Which API and Object reference do I need to use?

Please use SyncActivity API:
https://developer.intuit.com/docs/0025_quickbooksapi/0050_data_services/v2/0500_quickbooks_windows/0600_object_reference/syncactivity
For individual objects query the SyncStatus API:
https://developer.intuit.com/docs/0025_quickbooksapi/0050_data_services/v2/0500_quickbooks_windows/0600_object_reference/syncstatus

Related

Query deleted records via SF OData API?

I am replicating the Successfactors Employee Central Data (including FO, MDF, BG elements and etc.) via OData API to local database for third party integration.
It is able to trace changed records by filtering last modify date. However, the deleted record is not able to capture from OData API. Hence I cannot delete the record in my local database when corresponding EC record is deleted.
Is there any way I can get the deleted records from the API or other sources? Thanks.
OData API is not able to handle this task.
Extract from SF OData API doc:
Don't use our OData APIs when:
● Your system cannot consume either OData APIs or SOAP for an initial data load. In this case, you would go
for Import/Export with a CSV. Automation via FTP would also be a possibility.
● You need employee replication field level delta, snapshot, or read modified employees only, then SOAP Compound Employee API is your tool of choice. You can find more information in the guide Implementing the Employee Central Compound Employee API.
● You only need to read data, then the SOAP Compound Employee API would also be your tool of choice.
However with SFAPI (SuccessFactors CompoundEmployee API) it's easy. SFAPI has a special parameter changedSegmentsOnly that does exactly just what you want, the API returns only changed segments with an action code not equal to NO_CHANGE in delta transmission.
You make a query, for example, for changed employee data:
<urn:query>
<urn:queryString>select person,
personal_information,
address_information,
email_information,
phone_information,
employment_information,
job_information,
compensation_information,
paycompensation_recurring,
paycompensation_non_recurring,
direct_deposit,
national_id_card,
payment_information
from CompoundEmployee
where person_id_external = 'cgrant'
</urn:queryString>
<urn:param>
<urn:name>resultOptions</urn:name>
<urn:value>changedSegmentsOnly</urn:value>
</urn:param>
<urn:param>
<urn:name>maxRows</urn:name>
<urn:value>50</urn:value>
</urn:param>
</urn:query>
This API query will return you all the employees that were changed or deleted.
After that you can filter your response by that field.
ADDENDUM: any change to MDF entity, both standard and custom, can be tracked via OData Audit logs. How to enable them:
Go to this setting in API center
Enable this switch. It can be enabled for SFAPI as well
This way all API calls payloads will be saved and you will be able to see what entity was changed with each call
Prerequisite: the object must be visible by API and MDF version history must be enabled
More about API types for SuccessFactors:
SAP Note 2613670
OData API reference Guide
SFAPI reference Guide

Microsoft Graph API: License assignment time without utilizing audit logs

I want to get the license assignment time for each license assigned to each user in a tenant. Using the audit logs I'm able to fetch this data but its partial in nature as the audit logs are retained for 30 days by default, so I can't get the time of license assignment if it happened before this 30 day period.
Is there any other workaround for this using the Graph API only, where I can get the information about license assignment time for each user and their assigned licenses irrelevant of the assignment period
https://graph.microsoft.com/beta/users?$select=id,displayName,assignedLicenses,assignedPlans
In this above query, you get the data of assigned licenses, assigned plans of the user, and their assignedDateTime, but currently, you cann't filter assignedplans by graph api needs to handle through code (in general, only those properties where the documentation says "supports $filter" can be filtered). So you can raise the UserVoice if you want to $filter to support assigned plan

Places Room List API returns cached data

I have removed 4 existing room lists using Remove-DistributionGroup cmdlet.
I have added 1 new room list using New-DistributionGroup cmdlet.
However when calling the API
https://graph.microsoft.com/beta/places/microsoft.graph.roomlist
(using cURL)
with Application Permissions to Places.ReadAll, the API returns the old roomlists and not the new one.
However when calling EWS via EWS Java SDK, the output is as expected i.e. it only shows the new roomlist.
The Office365 Web app also shows the old room lists in the Browse for more rooms option.
Is the places resource returning cached data? If so what is the refresh interval here?
Update (Feb'20) Issue is no longer happening. Changes to roomlists are reflected instantaneously
This can take up to 60 hrs to show up in the Places API and web app. We are working on making this instant and should have this ready by end of Jan 2020.

Returning employeeId of a user through MS Graph API

I've been trying to return the employeeId of a user through the Microsoft Graph API but so far haven't had much luck.
I'm assuming this is probably because it doesn't exist in the metadata for the user in the Graph API so makes sense.
However, the property is populated in Azure AD. If I use the AZ command prompt to query the user I can see the property. Likewise, if I query the old Active Directory Graph API endpoint I can even see it there.
For example, querying
https://graph.windows.net/{tennant}/users/{upn}?api-version=1.6 directly I receive the employeeId as part of the response (using the ActiveDirectoryClient however seems to ignore this property and doesn't store it anywhere).
Is there any reason for this? Wouldn't it make sense to have it returned as an additional property? I've also looked into extensions, but as it's not an extension isn't returned there.
Any help would be appreciated. I can get the information I need by querying the old endpoint directly, but this seems like a complete backwards step and involves multiple queries to get the information I need - including having to use multiple end points (one of which I assume will be deprecated and removed soon).
EmployeeId is currently a beta feature and is only available in the beta endpoint of the Graph API.
So if you want to access the beta endpoint you just have to change the version to beta in your url. For example:
https://graph.microsoft.com/beta/me/
https://graph.microsoft.com/beta/users/{id|upn}/
https://graph.windows.net/{tennant}/users/{id|upn}?api-version=beta
For more information about the user-object in the beta endpoint see: https://developer.microsoft.com/en-us/graph/docs/api-reference/beta/resources/user

QBXML - Query Customer ID

I am working on a qbxml application with PHP, and looking for some advice. The application will be pulling information from a ecommerce system, and allowing a sync over to quickbooks. I need to be able to query quickbooks for an existing customer, and then either create an invoice for that customer or create a new customer.
I have the process down for creating a new customer, I'm just trying to figure out what the best way is to query QuickBooks for existing customers and retrieve back that customer ID during the web connector update process.
So I have a couple questions:
1) From what i've read, there is no way to query on email like quickbooks online, but the only via the name. Is that correct?
2) Is the correct approach for the first qbxml request to query the customer, and then based on what is found, send another request back as part of that response? Does that type of chaining work correctly?
Thanks in advance for any assistance!
1) From what i've read, there is no way to query on email like quickbooks online, but the only via the name. Is that correct?
Yes, that's correct.
2) Is the correct approach for the first qbxml request to query the customer, and then based on what is found, send another request back as part of that response? Does that type of chaining work correctly?
Yes, that works.
Another potential option - on every Web Connector connection, grab all customers that have changed since the last sync. Cache those in your web app.
Check the cached data for the email address.

Resources