B
Bryant Likes
I would like to start a discussion on how the PSI could be improved. As it
now stands here are the primary issues I have with it.
1) Web service interface only.
Now I understand that web services are a good thing, but you should offer a
way to integrate that doesn't require a web service. Or at least offer a
different protocol other than HTTP since that is so slow. If I'm interacting
with the PSI on the same machine there should be some in-proc mode that will
let me interact directly instead of having to pass everything over the
network.
2) Datasets are big and bulky.
It seems like the PSI was built to support PWA and Project client and then
shipped as is for the rest of us to use. While datasets that contain
everything including the kitchen sink might be required to load a project in
PWA and project client, I don't need everything. Most of the time I just want
to update a single field in a single task. In order to do that I have to:
a. Download the project dataset. While I need only one task this gives me
the entire project which many times can be as big as 14 MB of XML data which
all has to be sent over HTTP.
b. Apply my change to the dataset and get the changes. This makes my second
call somewhat easier since I have a small amount of data to pass back.
c. In order to make my update I have to deal with the queue which is a great
feature when it comes to scalability and such but is a real pita when you
have to manage jobs in order to do a simple update which is my next issue.
3) Don't force me to deal directly with the Queue.
While I like the queue system, here is where it gets really fun. In order to
make my change I have to check out the project, submit my changes, save the
project, publish the project, and check the project back in. The process can
fail at any point during these steps and I have to code to handle all of them.
The other fun part of this process is that many times when I update the
task, project decides to not actually update it and to do something else
instead. So as part of the process I actually have to download the entire
project again and check if my changes actually went through. If not I have to
resubmit my changes and manage all the queue jobs again.
I would much prefer for the PSI to be a real webservice where I could get a
specific task and make changes to that task without having to write my own
queue to manage the project server queue. Even though Project uses a queue,
that should be somewhat transparent to the developer who is trying to
integrate with project. Why not expose the API as async web services?
4) Incomplete Documentation
The last issue for me is the documentation. While I know it is still a
fairly new product so probably not a ton of people working with it, it seems
like a lot of the things I do should have already been done by someone else.
However, most of the time I'm stuck with poking around in Reflector to see
what project server is actually doing and/or just writing lots of tests to
try things out and see what happens.
Not only are a lot of the processes not clearly documented, but the fields
themselves are not documented. Take the gigantic dataset that comes back from
get project. What the heck are all these things you've sending back to me?
What do these fields do? What happens if I change them? Etc, etc, etc. I
think this is another drawback to the dataset approach.
Ok so those are my gripes. Am I way off? Is there something I'm missing? Let
me know.
BTW - For my current project I'm actually working on a nice RESTful
interface that sits on top of the Project Server databases so that I can get
a single task if I want which out the entire project dataset download.
However, I'm still stuck if I want to make a change since I have to get the
dataset in order to change anything. But I will be writing an async WCF
service to wrap all the functionality that I wish I had out of the box.
Thanks!
now stands here are the primary issues I have with it.
1) Web service interface only.
Now I understand that web services are a good thing, but you should offer a
way to integrate that doesn't require a web service. Or at least offer a
different protocol other than HTTP since that is so slow. If I'm interacting
with the PSI on the same machine there should be some in-proc mode that will
let me interact directly instead of having to pass everything over the
network.
2) Datasets are big and bulky.
It seems like the PSI was built to support PWA and Project client and then
shipped as is for the rest of us to use. While datasets that contain
everything including the kitchen sink might be required to load a project in
PWA and project client, I don't need everything. Most of the time I just want
to update a single field in a single task. In order to do that I have to:
a. Download the project dataset. While I need only one task this gives me
the entire project which many times can be as big as 14 MB of XML data which
all has to be sent over HTTP.
b. Apply my change to the dataset and get the changes. This makes my second
call somewhat easier since I have a small amount of data to pass back.
c. In order to make my update I have to deal with the queue which is a great
feature when it comes to scalability and such but is a real pita when you
have to manage jobs in order to do a simple update which is my next issue.
3) Don't force me to deal directly with the Queue.
While I like the queue system, here is where it gets really fun. In order to
make my change I have to check out the project, submit my changes, save the
project, publish the project, and check the project back in. The process can
fail at any point during these steps and I have to code to handle all of them.
The other fun part of this process is that many times when I update the
task, project decides to not actually update it and to do something else
instead. So as part of the process I actually have to download the entire
project again and check if my changes actually went through. If not I have to
resubmit my changes and manage all the queue jobs again.
I would much prefer for the PSI to be a real webservice where I could get a
specific task and make changes to that task without having to write my own
queue to manage the project server queue. Even though Project uses a queue,
that should be somewhat transparent to the developer who is trying to
integrate with project. Why not expose the API as async web services?
4) Incomplete Documentation
The last issue for me is the documentation. While I know it is still a
fairly new product so probably not a ton of people working with it, it seems
like a lot of the things I do should have already been done by someone else.
However, most of the time I'm stuck with poking around in Reflector to see
what project server is actually doing and/or just writing lots of tests to
try things out and see what happens.
Not only are a lot of the processes not clearly documented, but the fields
themselves are not documented. Take the gigantic dataset that comes back from
get project. What the heck are all these things you've sending back to me?
What do these fields do? What happens if I change them? Etc, etc, etc. I
think this is another drawback to the dataset approach.
Ok so those are my gripes. Am I way off? Is there something I'm missing? Let
me know.
BTW - For my current project I'm actually working on a nice RESTful
interface that sits on top of the Project Server databases so that I can get
a single task if I want which out the entire project dataset download.
However, I'm still stuck if I want to make a change since I have to get the
dataset in order to change anything. But I will be writing an async WCF
service to wrap all the functionality that I wish I had out of the box.
Thanks!