Using Google as a substitute of a web interface for an existing client server application - delphi

I am in researh mood and one of the tasks I have in my to do list is:
"Finalize the techonlogy to use for creating a web interface to my existing Client Server application".
My application is very rich and full of features. It makes sense it is has rich client UI, because it is a productivity tool. Many shortcuts, many things without any click. So I am not looking for a full replacement.
My app has some features that would be good to be used also from a web interface.
Some of them:
1) multi user calendar (every item I see in the calendar is linked to something in my app, for example "today 11:00: recall customer 'Dummy ltd'". This is not a simple memo, it is also linked to the customer), so i can see my and others tasks.
2) Confirm some task (yes I did this!)
3) see some report (some graph or some tabular report)
Of course this are not simple outputs, they can contain some logic (for example some calendar items must be readonly, some others can be edited).
This said, I was considering whether doing all this with Google would be a reasonable choice. In this way I don't have to install anything, simply interfacing with google would be enough. I can map my application users to one (or more) google users and use all the google features (calendar, charts, tasks, ....).
May you comment on this? Which are the good/bad points.
Some good points I can forsee:
1) no need to design any UI, just connect to an existing powerful and userfriendly system
2) the applicatino will automatically be compatible with google ("is it possible to export on google?" is a typical question I recieve)
3) google already provides the interface for the points I wrote above (tasks, calendar, charts, ...)
4) no deployment issues. No server hosting. just need to configure the users with some wizard.
Some bad points:
1) Which is the long term support? Will the Google APIs change every month or some of them will be stable for years?
2) How much may I push? How much is it possible to customize? I mean can I write some logic like "this item is readonly", "this item is not"? (afaik in google I can share a calendar with other people, in different ways, but there is no way to make only a part of it readonly. Of course I could do this with a trick, like having 2 calendars, one readonly and the other not. But is it possible to change the default google behaviour like for example in calendar case?)
3) of course I am limited, writing "from scratch" allows me to do everything.
Final note: my app is a Delphi client/server application. The communication will be done from an application server that will interact with the google apis.

As I understand, the API are stable, for example the Calendar API documentation says
Google periodically updates the
Calendar Data API in order to deliver
new features and to repair defects
discovered in previous versions. In
most cases, these changes will be
transparent to API developers.
However, occasionally we need to make
changes that require developers to
modify their existing applications.
So as long as the service exists I would expect only small changes. Services however can disappear from one day to the other (see Google Wave for example) so I would check the requirements of an 'exit strategy', at least a way to export the most critical information.

My application is very rich and full
of features. It makes sense it is has
rich client UI, because it is a
productivity tool
It sounds like Morfik might be a good choice for creating web interface for your application. Once you like it, you might even make the whole application in it. ;-)

Related

What is the simplest way to distribute Google Workspace Add-ons within an organization?

I often have to create small extensions for Google Workspace Apps ( Docs, Slides, Gmail etc) which I want to give some users access to. Sometimes only a selected number of users needs them, often only for a specific use case.
Those users are often not very technical experienced so I want to have a very simple setup process for them which does not include copying Appscript files from one place to another, or having a 10 step instruction.
The best solution I came up is to always create a Google Workspace Add-on (even when a simple editor script would also work) and share the AppScript Project with those user who want the Add-on. Then those users need to install it as a test deployment from the AppScript project.
This is not an ideal solution since I actually don't want to give those users access to the Appscript Project and source code.
Publishing the Add-on within the organisation would result in a better user experience since most users know how to install addons from the marketplace but since every Add-on would need a seperate gcp project this is way to much overhead for simple scripts.
Is there any better solution to this?

Rally SDK 2 - Given a story A and a story B, how can I say that B is a successor of A thanks to Javascript API?

I'm using the Rally SDK 2 to manipulate user stories from Javascript in a "Custom HTML" application.
I can query a story and retrieve its attributes.
I can update some of the attributes, like the Name of the Iteration for instance.
How can I add a successor to my story?
If I understand well, I should edit the "/HierarchicalRequirement/.../Successors" of my story, but I don't understand how to do that.
Would someone have an example, please?
Unfortunately, I don't have an exact example you can use, but the successors (or predecessors) are 'collections'. As such, you need to 'add' to the collection. There is an explanation of some of this here: https://docs.ca.com/ca-agile-central/saas/apps/2.1/doc/#!/guide/collections_in_v2
Built into the model for the artefact are routines to handle all the details. If you want more details, then you can download the sdk-debug.js file from the Rally server. To get to it, open up the developer tools in your browser and have a look where a custom app would get the sdk.js file from. The debug variant is formatted for humans to read and a very useful source of how to do things at the low levels. The definition of Rally.data.wsapi.ModelFactory has some good tips.
One of the recommendations I make to people starting out writing custom apps, is to use the developer tools in the browser to watch the network traffic that the Rally UI makes - and then work backwards to code.

Inviting event attendees programatically on iOS 10

I've been using Stackoverflow for about 5 years now, and haven't felt the need to ask a single question yet, I've always found the answer i needed through previous threads. That just changed and I have a question that I really can't figure out. And it sounds so easy to do.
So the question is; how do you invite attendees, or reply/decline to calendar events on iOS under iOS 10? And please, no we don't want to bring up an EKEventViewController. We'd like to do this in our own UI. Under iOS 9 this was possible through just forcing EKAttendees objects in to the EKParticipants array with setValueForKey:. But under iOS 10 this produces an error saying 'Attendees can't be modified'.
I have used a Technical Support credit with Apple and got the reply that this was not possible. It is not possible using their APIs.
The closest to an answer i've got is to use IMIP (https://www.rfc-editor.org/rfc/rfc6047#section-2.2.1). If that's the way to go, could someone help me along on how to actually set that up? I'm not well versed in back-end development, I'm all front-end so I wouldn't really know where to start.
There also seems to be some CalDav servers on GitHub (https://github.com/mozilla-b2g/caldav) but I'm not sure how good they are, or exactly what you need to set one up.
So basically, is there anyone who could give a childs explanation to just how the heck we can send nice invites to calendar events. And if there are different solutions for Google, Apple accounts (obviously under the hood, but implementation-wise) that would be very helpful to know to.
Is this something that requires a ton of implementation on our own servers or is there some reliable service to use? That would be ideal. Maybe you should build one and you got at least one customer here :-)
Appreciate any help!
You cannot modify attendees using EventKit, but Apple already told you that:
I have used a Technical Support credit with Apple and got the reply that this was not possible. It is not possible using their APIs.
The hack with accessing the internal objects using KVC was, well, a hack and not documented API. No surprise they killed that.
So how do calendar invites work. That in itself is a very complex topic (consider delegation, resource booking like rooms, etc etc). There is a whole consortium which works on that (CalConnect), they also have a broad overview: Introduction to Internet Calendaring and Scheduling.
If you are serious into scheduling/calendaring software, it may make a lot of sense to join CalConnect for their interop events etc.
But you wanted a 'childs explanation'. I can't give that, but a short overview.
iTIP
iTIP is a standard which defines how scheduling messages flow, e.g. that you send a message to your attendee, your attendee responds back with accept/decline, what happens if a meeting is cancelled and all that.
It does NOT however specify how those messages are transferred. It is just a model on how the message flow works between the organiser and the participants.
Most 'big' calendaring systems (Exchange, Google, CalDAV servers like iCloud) use iTIP or at least something very similar.
iMIP
iMIP is a standard which defines on how to exchange iTIP messages using email. Say if you invite someone using iMIP, you'll send him a special email message with the iCalendar payload containing the invite. If your attendee accepts, his client will send back another iCalendar payload via email containing that.
iMIP is supported by a lot of systems and was, for a long time, pretty much the only way to exchange invitations between different systems (say Outlook and Lotus Notes).
However: the iOS email client does NOT support iMIP (unlike macOS or Outlook). So if someone sends you an iMIP invite to your iOS device, you won't be able to respond to that. (reality is more complex, but basically it is like that)
CalDAV
CalDAV is a set of standards around calendars stored on a server. Many many servers support CalDAV. E.g. iCloud uses CalDAV. Yahoo, Google, etc all support CalDAV. The important exception is Exchange, which doesn't support it.
In its basic setup CalDAV just acts as a store. You can use HTTP to store (PUT) and retrieve (GET, etc) events and todos using the iCalendar format.
In addition many CalDAV servers (e.g. iCloud) do 'server side scheduling'. That is, if you store an event to the server which is a meeting (has attendee properties), the server will fan out the invitations. Either internally if the attendees live on the same server, or again using iMIP.
Exchange
Exchange supports iMIP but not CalDAV. You usually access it using one of its own web service APIs, e.g. ActiveSync or Exchange Web Services. I'm no expert on them, but I'm sure that they allow you to create invites. Exchange&Outlook have an iTIP like invite flow.
etc
Is this something that requires a ton of implementation on our own servers or is there some reliable service to use?
This really depends on your requirements and needs. Do you need to process replies or just send out generic events?
If you want to host a calendar store, it probably makes sense to use an existing CalDAV server.
Calendar invitations are a very complex topic and you need to be very specific on your actual requirements to find a solution. In general interoperable invitations in 2017 are still, lets say 'difficult'.
P.S.: Since you've been using StackOverflow for about 5 years now, you should know that this question is too broad for this thing.

Adobe SiteCatalyst:How to export the groups with list of usernames and report suite

i am working on Adobe SiteCatalyst.
i am able to download the groups with column names Group Name,Description,Users and Report Suites.
In above list am getting count of users and report suites.but i need a exact name instead of count how this can be done using Adobe Site Catalyst..
Please help me..
I don't know of a built in report that will get you this. If there is a small number of users and you don't need to do it very often then you can do this manually. But it would be a pain.
If you think it is worth investing some time into this because you have a lot of users and/or you need to do this report often then you can use the Enterprise API to automate this report.
You will need to create a user with the Web Services permission. Then using that username and secret (be careful to use the exact format from the Admin tools->Company Settings->Web Services as there is a "loginCompany:username" format and special Shared Secret)
Then you can use the APIs assuming you have some development experience. This is a good starting point. https://developer.omniture.com/en_US/get-started/api-explorer#Permissions.GetGroup and also look at GetGroups.
Best of luck C.

Using Google Maps to store custom set of locations (iOS Google Maps SDK)

Create mobile application, which gives the user ability to look for certain places (payment terminals) nearby and to add new ones. Of course user will have ability to edit places, change some of their meta-info fields, add photos, etc.
I can understand, how to implement such things at the mobile device side(i mean interface and model), but can't imagine, what i have to do at the "google-side" to store locations and get them to device.
I'm looking through developers.google.com for appropriate service, but google have so much different "Maps" services and their variety makes me disappointed, which one can give me necessary instruments.
I'm sorry, if my question is too stupid but i can't realize how to implement such functionality.
If anybody ever made such applications, please help me to find, at least, the service, which can help me to implement such functionality. Sample code at github will be the great!
You're looking to build a "back-end" or a database to store the locations that you are interested in. This means that you will save them on a server, that you will access through requests over the internet from your iPhone.
For a really simple back-end to set up, check out Parse that is very simple to implement.

Resources