none
CSOM - Problem when adding resources roles into Project Online RRS feed

  • Question

  • Hi guys,

    Currently, we need to synchronize resources roles into Project Online using CSOM.

    This is what we have:

    var resourcesQuery = projContext.LoadQuery(projContext.EnterpriseResources.Include(
                                                                                                p => p.User,
                                                                                                p => p.Id,
                                                                                                p => p.ExternalId,
                                                                                                p => p.Name,
                                                                                                p => p.Email,
                                                                                                p => p.HireDate,
                                                                                                p => p.Initials,
                                                                                                p => p.IsActive,
                                                                                                p => p.CostAccrual,
                                                                                                p => p.CostCenter,
                                                                                                p => p.CostRateTables,
                                                                                                p => p.CustomFields,
                                                                                                p => p.IsCheckedOut,
                                                                                                p => p.ResourceCalendarExceptions,
                                                                                                P => P.CustomFields.IncludeWithDefaultProperties(
                                                                                                lu => lu.LookupTable,
                                                                                                lu => lu.LookupEntries
                                                                                                )).Where(p => p.Email == userEmail));
                    projContext.ExecuteQuery();
    
                    var resource = resourcesQuery.SingleOrDefault();
    resource.CostRateTables.GetByName(CostRateTableName.A).CostRates.Add(new CostRateCreationInformation()
                            {
                                StandardRate = (Double)((Money)roleInfo.Price.Value).Value,
                                OvertimeRate = 0.0,
                                CostPerUse = 0.0,
                                EffectiveDate = DateTime.Now
                            });

    The thing is, this used to work but, for some reason, we are no longer able to add costs to a resource using this. The code runs with no problem, but when we check a resource cost, nothing was added.

    Is there a way to solve this?

    Thanks in advance.

    Best regards,

    Ana Alves.

    Friday, August 14, 2020 5:40 PM

All replies

  • Hi Ana,

    It's works if we have Effective Date as first parameter for CostRateCreationInformation constructor. Could you please use Effective date as first parameter and check if that helps. Below is my working code snippet.

          var resourcesQuery = projContext.LoadQuery(projContext.EnterpriseResources.Include(
                                                                                                p => p.User,
                                                                                                p => p.Id,
                                                                                                p => p.ExternalId,
                                                                                                p => p.Name,
                                                                                                p => p.Email,
                                                                                                p => p.HireDate,
                                                                                                p => p.Initials,
                                                                                                p => p.IsActive,
                                                                                                p => p.CostAccrual,
                                                                                                p => p.CostCenter,
                                                                                                p => p.CostRateTables,
                                                                                                p => p.CustomFields,
                                                                                                p => p.IsCheckedOut,
                                                                                                p => p.ResourceCalendarExceptions,
                                                                                                P => P.CustomFields.IncludeWithDefaultProperties(
                                                                                                lu => lu.LookupTable,
                                                                                                lu => lu.LookupEntries
                                                                                                )).Where(p => p.Id == new Guid("16a9bfbe-9964-e411-9ada-00155d41ab53")));
            
                projContext.ExecuteQuery();
                var entResEdit = resourcesQuery.SingleOrDefault();
                entResEdit.CostRateTables.GetByName(CostRateTableName.A).CostRates.Add(new CostRateCreationInformation()
                {
                    EffectiveDate = DateTime.Now,
                    OvertimeRate = 0.0,
                    StandardRate = 150,
                    CostPerUse = 0.0
                });
                projContext.EnterpriseResources.Update();
                projContext.ExecuteQuery();

    Thank you,

    Kiran Khanvilkar

    Saturday, August 15, 2020 5:46 PM
  • Hi Kiran,

    Thanks for your answer. It works (in adds the cost to the CostRates table)!

    However, when I access the resource on Project Online (on the "Edit" form), the field "Standard Rate" is not updated. Do you have any suggestions on how to fix this?

    Best regards,

    Ana Alves.

    Monday, August 31, 2020 5:11 PM