Onenote API and Onenote Interop - onenote

Gday.
I am familiar with writing code to access/edit a notebook stored at a directory using the Onenote Interop classes for Desktop versions of OneNote (2007, 2010, 2013)
Now that the OnenoteAPI is out for the cloud-based OneNote (Win RT OneNote, WinPhone OneNote, and etc) I am confused as to which to use.
I'm trying to build an app that uses Onenote to store some notes. The notes will generally be accessed from few locations in a city and perhaps some mobile computers. With the Interop method, I already have a solution for (literally) copying some notebooks onto the mobile computers before they go out, and upon their return merging them back.
However, I would like to use "the cloud" as a storage option rather than storing the notebooks in one central location typically accessed through a jungle of VPNs. This is because some customers would be happy with the cloud (and not having their own server) and others will be want to at least have a copy of the data, and use the cloud as a means to be more mobile.
Now, I haven't gone around implementing nor trying things out yet. I am seeking advice from people that may have done something similar. In particular, i'd like advice/hints/clues on how to:
Extract the notebook page content in a format from the OnenoteAPI that is compatible with the Interop. Similarly, push it back up to the OnenoteAPI from the Interop. Alternatively, can I somehow "export" a copy of the cloud Notebook and import it later?
Would expensive SharePoint help in some way? How about the free build-into-small-office-server version suffice?
Thank you Internets.

N.b. given the potential for confusion I will refer to the Win32-only OneNote API as "OneNote COM API" and the modern, web-based, and OneDrive-only REST API as the "OneNote REST API"
On #1: The HTML version of the OneNote pages we expose via the OneNote REST API does not have a 1:1 mapping to the OneNote Object Model that is exposed via the COM API; this makes interop between them difficult. Furthermore, neither of them are designed to support a full-fidelity sync experience – it's a tricky problem, and usually one where people are more than happy with the experience OneNote provides out-of-the-box.
On #2: SharePoint could solve your problem. When your users are in the office, OneNote would sync all of its changes to SharePoint and receive the deltas it missed while it was disconnected from the intranet. If clients desire mobility, you could open up SharePoint to web access. You can then build your app using the COM API against the desktop OneNote client and rely on OneNote itself to handle syncing.
The one caveat here is that not all SKUs of OneNote support accessing SharePoint notebooks; Win32 clients purchased as part of the Office suite can, as can any copy attached to an Office365 subscription, including Mac, iOS, and Android. To the best of my knowledge, Windows Phone does not have any such restriction.

Update for Peter. the OneNote cloud APIs now support Sharepoint Online as a storage endpoint.

This is a pretty old question, but if someone is reading it I can add this:
OneNote + OneDrive does an EXCELLENT job of synchronizing a notebook that is opened on multiple devices, including PCs and phones.
My recommended solution for #Peter pete is to migrate his old COM OneNote to OneDrive.

Related

Onenote API for Local Computer

This is my first post on Stackoverflow - I am looking for guidance about OneNote API. I look forward to develop a solution primarily for "Own Usage" - which Creates, Opens and Closes OneNote Sections on my Local Machine - No cloud etc. is to be used. Please guide if it will be possible?
I hope it should be possible - Please guide how to proceed and what to study for that. My programming skills are very basic.
I will prefer to use OneNote 2007.
[Edit on 5th Nov. Noon IST] A few clarifications might help: I had initially gone through https://msdn.microsoft.com/en-us/library/office/dn575425.aspx however, I found that "The OneNote API runs on the Microsoft globally-available cloud, and sends data from your app into the user's OneDrive". Whereas in my case no other user or cloud is to be involved. I wish to "develop a solution primarily for "Own Usage" - which Creates, Opens and Closes OneNote Sections on my Local Machine". It seems that a link suggested by "Sebov1c" msdn.microsoft.com/en-us/library/office/jj680118.aspx and another suggested by "Jorge Aguirre" should serve my purpose. I will do my homework on this topic over the next week and get back here.
Thanks and Regards
Sanjiv
Note that the OneNote REST API is for cloud based notebooks only, so I don't think that's an option for you.
If you want offline support on windows only, your other option is to use the OneNote interop C# libraries (from what you say, I think this is what you're looking for) There's a pretty good example here:
How To Write To A OneNote 2013 Page Using C# and The OneNote Interop
There's other options to write apps that are embedded in OneNote, but I don't think that's what you're looking for.
There is a COM API for OneNote. Check out a sample here: http://www.github.com/OneNoteDev/VanillaAddin

Why does the managed version of WinRT not include access to the .NET API?

Recently I began working in WinRT for Windows Store Apps (and the upcoming Windows 10 Universal Apps) using C#. After working in .NET for awhile previously, I was excited to work with .NET on mobile devices, only to find that WinRT did not feel like home at all.
Constantly I find myself having to search for alternatives to certain classes that I'm familiar with in .NET since often they're not the same or even implemented in WinRT. I figure that the lack of implementation derives from the fact that WinRT at its core is unmanaged, even though the CLR binds to it from managed code.
My question is: What is stopping Microsoft from allowing developers to import and use all of the familiar .NET classes from managed code, even with WinRT running from behind? I know it's not a limitation of the device because my Surface Pro can run desktop .NET apps just fine and the Mono project has succeeded in porting almost the entire .NET API to devices of every kind.
Thanks for your input!
This is a big topic but there are three basic reasons why you don't get the full .NET API from a Windows Store app.
The APIs don't fit on smaller devices like phones. Since the purpose of the Universal Windows Platform is to have apps that can run everywhere, it can't include APIs that are too resource-intensive (disk, memory, CPU, etc.) to run on smaller devices. (Note that even if the managed API appears to be small, it might have a dependency on a large underlying Win32 API).
The APIs aren't compatible with the Store app model. Many APIs that require permissions not granted to Store apps fall into this category, as do APIs that would enable apps to do "unwanted" things to your machine (the degree of "unwantedness" is subjective).
The APIs are deprecated or there are newer alternatives. This was the case with a lot of APIs in Windows 8, where things like file-system access and network sockets were blocked from Store apps because there were newer WinRT equivalents.
Note that Microsoft is always open to re-evaluating whether a specific API should be included or not. For example, Windows 10 brings back many APIs that were banned from Windows 8.1 (such as System.IO and System.Net.Sockets) and has expanded the capabilities granted to apps. You can file feedback via the Windows Feedback app or on UserVoice if you want additional APIs brought back (adding detailed justification never hurts).

How to do a JSON webservice

I need to create a webservice that will be used in iOS, Windows Phone and Android apps.
I've found many tutorials on the Internet but no one uses real JSON files.
I have an example of what I mean:
https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=tiste&count=2
Is it better to use a web service like Twitter or can we use only headers in PHP?
If it's the first, how can I do it?
Finally, is JSON the most suitable option for web service communication?
Most contemporary web apps are built around an api - they are called api-centric. Twitter is one of them. You are not the only one who needs to create a web frontend and apps for mobile platforms. Having an api for all those platforms is going to save you a lot of time.
This field is developing rapidly now. There are many frameworks(both client and server side) to choose from. Since you are not telling us which technology/programming language you are going to use, i can only suggest you to google an api-centric or a rest framework. If you extend your question, i'll give a more specific answer.
Meanwhile you can read the following general articles...
http://net.tutsplus.com/tutorials/php/creating-an-api-centric-web-application/
http://en.wikipedia.org/wiki/REST
http://en.wikipedia.org/wiki/OAuth
http://blog.programmableweb.com/2011/09/23/short-list-of-restful-api-frameworks-for-php/

BMC Remedy Integration

Where can I find a list of BMC Remedy 3rd party integrations? I have found nothing on their website, and their sales department put me in touch with the customer services which wouldn't take my call because I didn't have a customer number.
My company is looking into using BMC Remedy as a customer incident system, and it would be nice if I could integrate it with some software. For example, we could have an internal development tracking system such as Jira, Redmine, MantisBT, Trak, etc. which would integrate with Remedy. Or, have Rememdy itself integrate with something like Hudson or CruiseControl.
So far, I've found nothing that seems to integrate with Remedy -- even with software packages that have a ton of integrations like Hudson and Jira. I don't really care if there are third party proprietary integrations, but I'd like to make sure they already exist and not All you have to do is hire someone at $400 to program everything for you. I want to make sure that there is something now and not be promised it can be done, then find out you really can't do it.
I may be a bit late to the party here, but I wanted to make this info available for anybody who happened to be searching for this answer in the future. BMC Remedy has an API in Java, which uses a native library in C, as well as bindings for Perl and other languages capable of calling native code. If you can integrate with any of those languages, you can write a custom integration program and integrate with that. As 'Gary L' mentioned, Remedy can also expose any form as a web service, which, in my experience, have simple interfaces.
Since the original question was asked, BMC have created a doc with a wealth of information on their Wiki. A Swedish company, RRR, has also collected every version of the Remedy Java API and required native libraries on a single page. It appear that you no longer need a support ID to access these pages and download the API files.
Hopefully somebody finds this helpful!
Your definition of "integrate" is different from their version. Their version of integration means that if a source system exposes its data, then you can configure ARS to retrieve that information and map it to classes (forms) within their system. They have a "generic" integration system that you have to customize. It has three broad areas:
If you can connect directly to a 3rd party database and see its schema, then you can perform
retrievals of that information. We use Oracle today.
They have a java API that allows you access the ARS system for custom code (I do a lot of this).
Flat CSV file importation of data from a source system into ARS (after export).
I looked at their online support for the systems you mention (Jira, Redmine, MantisBT, Trak) and do not see anything that would accomplish any of the three above without your own customizations. With the work that I've done on this system it doesn't surprise me.
I work on a project today that writes custom code doing the items above. It is a system that is configuration/development heavy for us. Your comment: "All you have to do is hire someone at $400 to program everything for you." is not too far off from what we have to do with the system.
There is another option for Remedy integration: Web Services.
BMC Remedy makes it easy to create web services (WSDL). It creates the SOAP and XML for you. When you buy Remedy Incident Management module, it includes out-of-the-box web services that will allow it to consume and/or publish web services which make it easy to integrate with other systems on the intranet or externally. There are BMC publications which provide details on ITSM integration --- but again you will need a customer/support ID to get it from BMC's website.
Yes and no to the Web Services integration. The Version 8 system I was working on had some web services available, and they were incomplete. So I was able to do a number of functions (mostly read-only), specifically for custom display and Change Request checking, and submission of a Change Request and a Work Order. But many functions had no web service, and I ended up brute-forcing through the web user interface (with a customized browser control) to change dates on tasks, or make tasks. Ugly, but effective. There are mid-tier JavaScript calls that can be used, if you know the secret function name and can deal with the dynamic naming convention in play. For Remedy users who are desperate for some integration, there are ways it can be done.
few OOTB integrations are possible with BMC Products but if you want to do it with other you have to write webservices(REST or SOAP)
Companies like IBM or cisco has made connectors for integration with Remedy.
Just adding more detail here:
I also do a ton of direct SQL for remedy integration.
If you're careful and know what you're doing, you can have a stored proc create legal/valid records in a remedy table. (If you do it wrong, the records won't load in the client and in older versions of the windows client can actually crash the client software.)

Browser application & local file system access

I want to enhance my browser-based web application with functionality that enables management of local files and folders. E.g. folder tree structures should be synchronized between local workstation and server via HTTP(S).
I am aware of security-related limitations in browser-based applications. However, there are some techniques that "work around" these issues:
Signed Java applets (full trust)
.NET Windows Forms browser controls (no joke, that works. Just the configuration is horrible)
ActiveX
My question is: What do you use/suggest, both technology and implementation practice? Key requirement is that the installation process is as simple as possible.
Thanks for your opinions!
Google Gears.
it lets you write Javascript applications with a much bigger platform support than the usual browser, and go 'unconnected' with local file access, cache and DB. and if/when connected it syncs to the central server.
available for several browsers on all platforms; but still under heavy evolution.
Both Gears and Adobe Air require the user to manually select a local file before you get any programmatic access. Very limited because of security considerations when it comes to local filesystem access, so no chance for any web based file sync type functionality there as far as I can see. Maybe I'm wrong about Adobe Air but this is definitely the case with gears. But If I'm wrong let me know!
Silverlight 4 (still in beta) allows file system access:
"Read and write files to the user’s MyDocuments, MyMusic, MyPictures and MyVideos folder (or equivalent for non-windows platforms) for example storage of media files and taking local copies of reports"
http://www.silverlight.net/getstarted/silverlight-4/
Definitely not ActiveX. No sense spending time on something that out-of-date.
Adobe AIR (essentially, Flash for the Desktop), is something that we considered in my last contract, as opposed to Java applets. Last I checked, though it's been several months, the installation of the AIR runtime environment was fast and easy
Your best bet might be to write a custom application that interacts with your web application. For example, Dropbox lets you synchronize files across computers by use of a background application that watches a Dropbox-enabled folder. It also lets you view your Dropbox files online through a web browser. The Dropbox web application then allows you to delete/move/copy files which is echoed in your local filesystem.
In the demo of Google Wave...
http://www.youtube.com/watch?v=v_UyVmITiYQ&fmt=18
...at 15:30 in, a group of img files are drag-and-dropped from the file system to the browser. The functionality is attributed to Google Gears. This seems a bit different from what Daniel OCallaghan and the official documentation suggest is possible.
Anybody know what's actually possible w/ Google Gear and the local file system?