Skip to main content
Dynamics 365 Community / Forums / Finance forum / HcmWorkerRecId handling
Finance forum
Suggested answer

HcmWorkerRecId handling

editSubscribe (1) ShareShare
ReportReport
Posted on by 86
Hi,

When creating project quotation, there is a field that we can fill called WorkerSalesTaker. This field accepts workers that have a valid employment date.

So what I did, is first i looked for users email who have a person (to make sure email is unique)
Then i looked for workers in general even if they don't have a user, because project quotation allow adding a worker that doesn't have an email (i know that the system allows more than worker to have the same email, but there is nothing more to do, that's why I checked the user's person at first)

How can I simplify this or is what i did good?
    private void setWorkerSalesResponsible(LogisticsElectronicAddressLocator _email, SalesQuotationTable _salesQuotationTable)    {        HcmWorker                   hcmWorker;        LogisticsElectronicAddress  logisticsElectronicAddress;        Logisticslocation           logisticslocation;        DirPartyLocation            dirPartyLocation;        DirPerson                   dirPerson;        DirPersonUser               dirPersonUser;        userInfo                    userInfo;        select userInfo where userInfo.networkAlias == _email            join RecId from dirPersonUser where dirPersonUser.User == userInfo.id            join RecId from hcmWorker where hcmWorker.Person == dirPersonUser.PersonParty;        if(userInfo)        {            _salesQuotationTable.WorkerSalesResponsible = hcmWorker.RecId;        }        else        {            select firstonly RecId from logisticsElectronicAddress                where logisticsElectronicAddress.Locator == _email                    && logisticsElectronicAddress.Type == LogisticsElectronicAddressMethodType::Email                join RecId from logisticslocation where logisticslocation.RecId == logisticsElectronicAddress.Location                join RecId from dirPartyLocation where dirPartyLocation.Location == logisticslocation.RecId                join RecId from dirPerson where dirPerson.RecId == dirPartyLocation.Party                join RecId from hcmWorker where hcmworker.Person == dirPerson.RecId;                if(hcmWorker)                {                    _salesQuotationTable.WorkerSalesResponsible = hcmWorker.RecId;                }        }    }

Also DirPersonUserEntity has this where condition but I don't know from where it came as there are no ranges in the entity. And not sure if i should handle this in my above code

 
Attachments
  • Suggested answer
    Waed Ayyad Profile Picture
    Waed Ayyad 1,961 on at
    HcmWorkerRecId handling
    Hi 
     
    Is your issue resolved?
     
    Thanks,
    Waed Ayyad
    Please mark this answer as "Verified" if it solved your issue. In order to help others who will face a similar issue in the future
     
  • Suggested answer
    Waed Ayyad Profile Picture
    Waed Ayyad 1,961 on at
    HcmWorkerRecId handling
    Hi,
     
    In order to get "workers that have a valid employment date." you should add HcmEmployment table to your query, 
     
    Select validTimestate(systemDateGet()) worker from hcmEmplyment
     join hcmWorker 
       where hcmEmplyment.Worker == hcmWorker.RecId
     join dirPersonUser
        where hcmWorker.Person == dirPersonUser.PersonParty
    join userInfo
        where  dirPersonUser.User == userInfo.id
         &&    userInfo.networkAlias == _email
     
    Give it a try and tell me the result.
     
    Thanks,
    Waed Ayyad
    Please mark this answer as "Verified" if it solved your issue. In order to help others who will face a similar issue in the future
     
     
  • Waed Ayyad Profile Picture
    Waed Ayyad 1,961 on at
    HcmWorkerRecId handling
    private void setWorkerSalesResponsible(LogisticsElectronicAddressLocator _email, SalesQuotationTable _salesQuotationTable) {
      HcmWorker hcmWorker;
      LogisticsElectronicAddress logisticsElectronicAddress;
      Logisticslocation logisticslocation;
      DirPartyLocation dirPartyLocation;
      DirPerson dirPerson;
      DirPersonUser dirPersonUser;
      userInfo userInfo;
    
      select userInfo where userInfo.networkAlias == _email
      join
      RecId from dirPersonUser where
      dirPersonUser.User == userInfo.id
      join
      RecId from hcmWorker where hcmWorker.Person == dirPersonUser.PersonParty;
    
      if (userInfo) {
        _salesQuotationTable.WorkerSalesResponsible = hcmWorker.RecId;
      } 
      else
      {
        select firstonly RecId from logisticsElectronicAddress where logisticsElectronicAddress.Locator == _email 
      && logisticsElectronicAddress.Type == LogisticsElectronicAddressMethodType::Email join RecId from logisticslocation where logisticslocation.RecId == logisticsElectronicAddress.Location join RecId from dirPartyLocation where dirPartyLocation.Location == logisticslocation.RecId join RecId from dirPerson where dirPerson.RecId == dirPartyLocation.Party join RecId from hcmWorker where hcmworker.Person == dirPerson.RecId; if (hcmWorker) { _salesQuotationTable.WorkerSalesResponsible = hcmWorker.RecId; } } }
    I reformatted the code in order to read it better.
     
     

Helpful resources

Quick Links

What Motivates a Super User?

We know many of you visit the Dynamics 365 Community and Power Platform…

Demystifying Copilot with Georg Glantschnig…

Industry experts answer burning questions directly from our amazing Community…

Setting Up Knowledge Sources for Copilot…

Look at how configuring a comprehensive knowledge base is crucial…

Leaderboard

#1
Andre Arnaud de Calavon Profile Picture

Andre Arnaud de Cal... 283,080 Super User

#2
Martin Dráb Profile Picture

Martin Dráb 222,601 Super User

#3
nmaenpaa Profile Picture

nmaenpaa 101,138

Featured topics

Product updates

Dynamics 365 release plans