# Creating a Custom Workflow Participant Provider in Dynamics 365 F&O

Dynamics 365 Finance and Operations'ta **Workflow Participant Provider**, iş akışlarında belirli bir adım için uygun kullanıcıları veya grupları tanımlamak için kullanılır. Bu yazıda, satınalma taleplerini yöneticilere atayan bir sınıfın nasıl oluşturulup iş akışına bağlanacağını adım adım ele alacağız.

---

#### 1\. **Sınıfın Tanımı**

Aşağıdaki sınıf, satınalma talep biriminin yöneticisini belirler ve iş akışı katılımcısı olarak atar:

```csharp
class ETGPurchTableTemplateRequesterParticipantProvider implements WorkflowParticipantProvider
{
    public WorkflowParticipantTokenList getParticipantTokens()
    {
        WorkflowParticipantTokenList        tokenList = WorkflowParticipantTokenList::construct();

        tokenList.add("ETGPurchRequesterWorkflowUser", "Satınalma Talep Birimi");

        return tokenList;
    }

    public WorkflowUserList resolve(WorkflowContext _context, WorkflowParticipantToken _participantTokenName)
    {
        WorkflowUserList userList = WorkflowUserList::construct();

        if  (!_participantTokenName)
        {
            throw error("Participant token bulunamadı!");
        }
         
        if  (_participantTokenName == "ETGPurchRequesterWorkflowUser")
        {
            PurchTable purchTable = PurchTable::findRecId(_context.parmRecId());

            HcmPositionRecId positionRecId = HcmWorkerHelper::getWorkerPrimaryPositionAssignment(purchTable.Requester).Position;
            HcmPositionRecId parentPositionRecId = HcmPositionHierarchy::findByPosition(positionRecId).ParentPosition;
            HcmWorkerRecId parentWorkerRecId = HcmPositionWorkerAssignment::findByPosition(parentPositionRecId).Worker;

            UserId userId = HcmWorker::findPersonUser(parentWorkerRecId).User;

            if (userId)
            {
                userList.add(userId);
            }
            else
            {
                throw error(strFmt("%1 Satınalma Talep Birimi üst yöneticisi bulunamadı.", purchTable.PurchId));
            }
        }

        return userList;
    }

}
```

---

#### 2\. **Workflow Participant Assignment Provider Tanımlama**

Sınıfı iş akışına bağlamak için bir **Workflow Participant Assignment Provider** oluşturun:

1. **Yeni Provider Ekleyin:**
    
    * **Name:** `ETGPurchTableTemplateRequesterParticipantProvider`
        
        ![](https://cdn.hashnode.com/res/hashnode/image/upload/v1733416713615/729f08bb-62c2-4432-b83d-911e46992d80.png align="center")
        
2. **Özellikleri Ayarlayın:**
    
    * **Label:** Satınalma Talep Birimi
        
    * **Provider Class:** ETGPurchTableTemplateRequesterParticipantProvider
        
    * **Workflow Types:** PurchTableTemplate
        
        ![](https://cdn.hashnode.com/res/hashnode/image/upload/v1733401688114/e99764d6-7b0c-4909-898c-4b8330fd9ca1.png align="center")
        
3. **Kaydedin ve Derleyin.**
    

---

#### 3\. **İş Akışına Bağlama**

1. Dynamics 365'te **PurchTableTemplate** iş akışını açın.
    
2. Bir "Approval" adımı ekleyin veya düzenleyin.
    
3. **Assignment Type** olarak "Participant" seçin.
    
4. **Provider** alanında yeni tanımladığınız sağlayıcıyı seçin.
    
5. İş akışını kaydedin ve doğrulayın.
    
    ![](https://cdn.hashnode.com/res/hashnode/image/upload/v1733416207853/8bcae8be-d721-4773-918b-209678ba6719.png align="center")
    
    ![](https://cdn.hashnode.com/res/hashnode/image/upload/v1733416244062/06e347b9-020c-433d-9ca2-66fc116ce353.png align="center")
    

---

#### Sonuç

Bu işlemle, iş akışınız satınalma taleplerini otomatik olarak doğru yöneticilere atayacak şekilde özelleştirilmiştir.
