none
Single Entry Mode Not working as expected in Project Server 2010 RRS feed

  • Question

  • Hello,

    I have a question regarding the behavior of Single Entry Mode in Project Server 2010.

    If we enter Actual hours on tasks under Tasks view, then the entered actual hours are not automatically displayed for the task in timesheet. Vice versa work OK. So if we enter actual work in timesheet the entered hours for this task are also shown in task view.

    Also in Best practices under Technet  which are update Januar 24, they say "When both views are available, users can enter actual work in either view, and the data is persisted in both views".

    Another confirmation is available in Technet articles regarding "Advantages of using Single Entry Mode", mentioning that with Single Entry Mode enabled, user will have to enter task progress in either views (My Tasks or My Timesheet). So user won't need to import task progress from My Tasks view into timesheet.

    "Project Server 2010 enables site administrators to set up Microsoft Project Web App so that team members can enter and submit time and task progress using two separate views, or by using single entry mode, where actual work is captured in one view, and submitted to both the task project plan (as task progress) and the timesheet.

    Single entry mode eliminates the duplicate effort involved with submitting time and task progress separately. When you are using separate views to enter time and task progress, you have to do one of the following:

    • Enter the hours spent on a task in both the Timesheet view and the Tasks view.
    • Import the hours spent on a task from the Timesheet view to the Tasks view.
    • Import the hours spent on a task from the Tasks view to the Timesheet view.

    While some organizations require this separation, the more streamlined method of entering hours is by using single entry mode. With single entry mode turned on, you only have to enter your actual work in one view, where it gets submitted both to the task project plan and to the timesheet."

    To note that this functionality used to work ok and smoothly, but recently i have unchecked the Single Entry mode, and then enabled it again. I am confused if this might be the problem or not???

    Kindly advise.

    Thanks in advance.

    Wednesday, April 24, 2013 1:33 PM

All replies

  • Hi Monz,

    the technet article is misleading at some point. The focus should be "If your organization is using single entry mode, it may be in your best interests to hide the Tasks view completely so that resources can only enter actual work by using the Timesheet view. .............the best practice is to only allow users to enter actual work in the Timesheet view. This reduces the possibility for actual work to be incorrectly overwritten if a user can also enter actual work in the Tasks view."

    "users can enter actual work in either view, and the data is persisted in both views." should be read as "data will persits in its view"

    When SEM was implemented with 2010, it worked as you expect it to do. But there had been some issues, so SEM was changed with CU Dec 2011 (or around this time). With this or any later CU applied, SEM does only work in one direction:

    • any update in Timesheet will be reflected in Tasks
    • no updates in Tasks will be available in Timesheets created before (so no more SEM)

    The other article "Advantages of using Single Entry Mode", was not updated after CU Dec 2011. It is telling the truth, but is not clear about the "one view".

    Sorry, you see the current behaviour. Everything written in articles is true: you only need to use one view, but it has to be Timesheet.
    Barbara


    Wednesday, April 24, 2013 7:19 PM
    Moderator
  • Hi Barbara,

    Thank you for your prompt reply. But i would like to note that just two months ago, it used to work perfectly and actual hours entered in My Tasks view were automatically available in parallel in the Timesheet view for the same task in the related actual hours.

    Two weeks ago when I removed the Single Entry Mode and then checked it again, this functionality stoped to work, which is weird. My problem is that i'm trying to update the status of timephased data through PSI (programming for Project Server) and what happens as a result is that Actual Hours entered programmatically are mapped to the tasks actual hours (on my tasks page), however the Planned Hours are filled in the Timesheet for the same updated task. So i don't want the  user to navigate again to the Timesheet view, and tell them to "Import Task Progress" from my tasks view. I'm trying to find a way to simplify their work, and this non-working SEM is not simplifying it neither if you get my point.

    Another thing to mention is that i have checked today on the net an update article that applies to MS Project Server 2013 (which is beta release), and this article mentions the same idea i wrote above:

    office.microsoft.com/en-001/project-server-help/overview-track-your-time-and-task-progress-HA102897420

    Isn't it a contradiction??

    Thursday, April 25, 2013 6:41 AM
  • Hi Monz,

    You make some good points about the documentation and I will see that it gets addressed - but it certainly appears from your description to be working exactly as we expect.  The best advice in that article is to hide My Tasks view if you are working in Single Entry Mode.  Changes were introduced in the December 2012 Cumulative Update for project - so if you have recently seen a change in behavior then it is due to that update.  No change would have occurred by unselecting and reselecting Single Entry Mode.  The changes were made to ensure that the timesheet was the exact record of what was entered by the user.  When you create a timesheet then any actual work already present in the project for tasks on the timesheet for that week will be populated - but once created any other external changes in the plan or My Tasks are not re-sync'd.  This means that once a timesheet is created then ONLY data entered through the timesheet is seen in the timesheet - it does not change if someone adds work in My Tasks, and also it does not change if, for whatever reason, the actual work values in the project schedule change magnitude or date.  It would appear that you might not want/need this if you are also programmatically entering actual work - but for very many of our customers this was a welcome change that guaranteed the timesheet entered data.  As you mention, the planned work does change to reflect what is seen in My Tasks - and many customer turn off the row that shows planned work to avoid any confusion.  If you could give me more detail on the programmatic interface and the purpose it may be that an alternative - such as programmatic access to the timesheet - might be more appropriate.

    I'm sorry this change in behavior hasn't suited the way you are using the product Monz, but hopefully once you understand the reasons and the new behavior you can work with it.

    Let me know if you have any further questions.

    Best regards,

    Brian


    Blog | Facebook | Twitter | Posting is provided "AS IS" with no warranties, and confers no rights.
    Project Server TechCenter | Project Developer Center | Project Server Help | Project Product Page

    Thursday, April 25, 2013 2:40 PM
    Owner
  • Another reason to hide the Task page. I ran into an issue where the hours were out of sync on the project from what had been reported on the timesheet. After investigating, the team member had forgotten to log time to a project but couldn't recall the timesheet as the timesheet period had been closed. The team member instead went to the Task page and entered their additional hours there. This resulted in the mysterious discrepancy. After that incident, the task page access was removed.

    Treb Gatte | @tgatte |http://AboutMSProject.com

    Friday, April 26, 2013 3:38 AM
    Moderator
  • Hi Brian,

    Thank you for taking the time to reply. My concerns can be summarized as follows:

    First, I don't understand the benefits of using Single Entry Mode. I thought that its use was to avoid entering time in two places. YOu can either enter time progress once in timesheet view or tasks view, and data is persistent in both views, and it used to work like this but around few weeks ago stopped working, knowing that no December 2012 CU or after was installed on server.

    Second, I am asking about this since I raised up the issue about entering actual work programmatically into EPM using PSI. I have built a small windows form where I can enter Actual Work Hours in a specific day and submit them. As a result the code will detect under which project tasks i have to do the update. For this purpose, I have used the UpdateStatus(changeXML) and SubmitStatusforResource(resid, updateGuids, comment) method, below is taken from my code on the Update Status button:

    private void btnTaskUpdate_Click(object sender, EventArgs e)

    {

    Guid myUid = resourceClient.GetCurrentUserUid();

    SvcProject.ProjectDataSet projectDs = projectClient.ReadProject(projGuid, SvcProject.DataStoreEnum.WorkingStore);

    taskName = txtTaskName.Text;

    for (int i = 0; i < projectDs.Assignment.Count; i++)

    {

    if (projectDs.Assignment[i].TASK_NAME == taskName)

    {

    taskUid = projectDs.Assignment[i].TASK_UID;

    assnUid = projectDs.Assignment[i].ASSN_UID;

    resUid = projectDs.Assignment[i].RES_UID;

    regularWork = projectDs.Assignment[i].ASSN_WORK;

    minDate = projectDs.Assignment[i].ASSN_START_DATE;

    maxDate = projectDs.Assignment[i].ASSN_FINISH_DATE;

    hoursWorked =

    statusingClient.UpdateStatus(changeXml);

    statusingClient.SubmitStatusForResource(resUid, assignments, comment);

    StatusingWsv.

    string changeXml = CreateChangeXml(projGuid, assnUid, resUid, hoursWorked, regularWork, isCurrentUser);Guid[] assignments = { assnUid };StatusingDataSet statusingDs = statusingClient.ReadStatusForResource(resUid, assnUid, minDate, maxDate);

    }

    private static string CreateChangeXml(Guid projUid, Guid assnUid, Guid resUid, decimal hoursWorked, double totalRegHours, bool isCurrentUser)

    {

    IFormatProvider culture = new System.Globalization.CultureInfo("fr-FR", true);

    StringBuilder cXmlBuilder = new StringBuilder("<Changes>");

    cXmlBuilder.AppendFormat(

    "<Proj ID=\"{0}\">", projUid.ToString());cXmlBuilder. AppendFormat("<Assn ID=\"{0}\">", assnUid.ToString());

     

    DateTime

    start = new DateTime(2013, 4, 30, 8, 0, 10);

    string startDate = start.ToString("s", CultureInfo.CreateSpecificCulture("en-US"));  DateTime end = new DateTime(2013, 4, 30, 12, 0, 10);

    string endDate = end.ToString("s", CultureInfo.CreateSpecificCulture("en-US")); 

    string

    pidActualWork = PSLibrary.AssnConstID.s_apid_actual_work.ToString(CultureInfo.InvariantCulture);

    cXmlBuilder.AppendFormat(

    "<PeriodChange PID=\"{0}\" Start=\"{1}\" End=\"{2}\">{3}</PeriodChange>", pidActualWork, startDate, endDate, hoursWorked * 60 * 1000);  cXmlBuilder.Append("</Assn></Proj></Changes>");

    return cXmlBuilder.ToString();}  When i submit the code, what happens is that an existing task gets updated with the actual work i provided from the form on April 30. If i navigate to my timesheet, i see that planned work for this task were populated with the actual work on April 30, and in the tasks view i see that the actual work is correct set to the value i have input. So i have now to go to timesheet, and do the "Import Task Progress" so that actuals get loaded in timesheet. And that's what i am trying to avoid, becasue i want them automatically set in timesheet without having to make the import step, and i thought that SEM would do this for me. Got my point? So am i missing something in the code, or there's anything wrong? shall you need further details just let me know. Thanks a  lot for your help in advance.

    decimal.Parse(txtActualWork.Text);

    Friday, April 26, 2013 6:46 AM
  • Hi Monz,

    Some history here might help.  Originally we built My Tasks and Timesheet for different time capture purposes based on customer requirements that the values entered in the timesheet were not always the same values that were appropriate as status updates for the plan - so the two were separate.  We soon found that many customers wanted them to be the same values - and an add-in for 2007 was created that achieved this.  For 2010 we built this back into the product as the option to use Single Entry Mode.  The point is that the entry should be made in just a single place - not either place. Then in the December 2011 Cumulative Update we changed the behavior - again based on customer feedback - to ensure that data entered in the timesheet was never changed.

    In your system you must have loaded an update to change this behavior - there is no other way it would have happened.  Give me the details from any Versions table from your 4 project databases and I can tell you exactly when and which update was loaded.

    You still haven't told me what your end goal is - or what you interface is intended to do.  I am sure you are not adding yet another way to enter data into Project Server through a Windows form.  One option that might help you and avoid having to import to the timesheet would be to not create the timesheet until you are ready to submit it and all the entries have been made via your program - or as mentioned before - program against the timesheet rather than the statusing API.  Or just turn off SEM and hide the timesheet - just uses My Tasks and your application.

    This is working exactly as designed and isn't going to change - I do get your point, but as explained this is how it is now - so you will need to change your approach if you do not like this new behavior.  As mentioned before, for a timesheet system it is totally unacceptable for the data to change after it has been entered - this is why we changed the behavior.  I am sorry this change has inconvenienced you - but for the vast majority of customers I work with they are very thankful for this change.

    Best regards,

    Brian


    Blog | Facebook | Twitter | Posting is provided "AS IS" with no warranties, and confers no rights.
    Project Server TechCenter | Project Developer Center | Project Server Help | Project Product Page


    Friday, April 26, 2013 3:15 PM
    Owner
  • Hi Brian,

    Please find below the table i have extracted from the Versions table in the Published database

    VersionId Version Id UserName TimeStamp   FinalizeTimeStamp Mode ModeStack Updates     Notes
    00000000-0000-0000-0000-000000000000 14.0.6027.1000 1 WIN2K\spepmfarmadmin 05-07-2012 07:28:41.153    NULL 2147483647 2147483647 1  
    00000000-0000-0000-0000-000000000000 14.0.6112.5000 3   WIN2K\spepmfarmadmin       

    14-09-2012 11:57:57.460

        NULL 0 0 1  
    00000000-0000-0000-0000-000000000000 14.0.6117.5002 4 WIN2K\spepmfarmadmin 22-10-2012 09:05:27.260    NULL 0 0 1  
    AE40B1C1-23C6-4FA5-95D0-29FD61DDB2DA 14.1.303.0 2 WIN2K\spepmfarmadmin 22-10-2012 09:04:55.463      NULL 0 0 9  

    As for the goal behind my interface, i can tell it to you in brief:

    Of course you know about Microsoft System Center Service Manager (SCSM 2012). We have users that use this software to log incidents and track their service requests,etc...Those users work heavily on this software, and they barely have the time to log on to EPM, create their work on tickets as tasks, and log against them their time. That's why it was requested to make kind of this "integration" between the two softwares. I thought since we have APIs for Project Server, why not to benefit from this, so we reached the solution of implementing a windows form, and call this executable for windows form on SCSM (Like placing a custom button on the incident form, once a user clicks it it will be displayed).

    This custom form will contain a text field to enter Actual Work done (in terms of number of hours spent daily on this incident) and a date picker to point on the date for the actual work done (i.e: 5h on 24 April 2013 for ex). In addition of course there are details such as Incident Name which will be mapped to a new task under existing project in EPM if it does not exist. So as per code above, i have did this custom form as a begining to test the feasibility of entering timephased data through PSI, and the behavior was exactly as i've explained above: Actual Work hours is being created in the related tasks under My tasks view, however in Timesheet view it's logged as Planned Hours.

    That's why i doubted the behavior of Single Entry Mode, and i'm checking if it's possible to have this Import taks progress in timesheet automatically, without telling them to go to EPM > Timesheet > Select Task> Import Task Actual Progress...etc.. if you know what I mean?

    Please let me know if you need further details, and thanks a lot for your cooperation again!


    • Edited by M O N Z Monday, April 29, 2013 9:51 AM
    Monday, April 29, 2013 9:22 AM
  • From the versions table MONZ, it looks like you would have had this behavior since 22/10/2012, when the February 2012 CU was loaded.  The previous CU was the October 2011, which was loaded 14/9/2012, and looks like your system was installed at the SP1 level - which was June 2011, and you actually installed 5th July.

    I can see how you want to get the data from SCOM, are you also using the timesheet and my tasks for other Project activity?  It will really depend on which features you are using the most as to how you modify your code to work within the current design of Single Entry Mode.  Either by writing timesheet line data from your application, or turning off SEM and not using the timesheet if that works better.

    Best regards,

    Brian.


    Blog | Facebook | Twitter | Posting is provided "AS IS" with no warranties, and confers no rights.
    Project Server TechCenter | Project Developer Center | Project Server Help | Project Product Page

    Monday, April 29, 2013 3:16 PM
    Owner
  • Hi Brian, I cannot turn off single entry mode, because the business requirement is to use timesheet ans SEM seems to work fine for timesheet task statusing. As for the modification needed in my code, i've copied the main methods that are doing the updates..what exactly i have to change to write timesheet sata from code? Is there any other method(s) that must be added/replaced in the code which serve my purpose? If u can give me a hint, i'd be thankful cause this is my main concern...
    Monday, April 29, 2013 3:48 PM
  • You would need to write to the timesheet class rather than statusing class MONZ, or possibly use a timesheet method to pull in the My Tasks info.  I will move this thread to the 'customizing. forum - there may be other readers who can give better advice who may have done this kind of customization already.

    Best regards,

    Brian.


    Blog | Facebook | Twitter | Posting is provided "AS IS" with no warranties, and confers no rights.
    Project Server TechCenter | Project Developer Center | Project Server Help | Project Product Page

    Monday, April 29, 2013 4:47 PM
    Owner
  • Hey Brian, Thanks for ur reply...so now will i be getting updates from u on this forum or what? Kindly advise and thanks again!
    Monday, April 29, 2013 4:59 PM
  • I haven't got much more I can ad MONZ - I moved to this forum so different eyes would see if who can hopefully help you.  In terms of SEM - it will not be changing - it is working exactly as expected.

    Best regards,

    Brian


    Blog | Facebook | Twitter | Posting is provided "AS IS" with no warranties, and confers no rights.
    Project Server TechCenter | Project Developer Center | Project Server Help | Project Product Page

    Monday, April 29, 2013 5:05 PM
    Owner