# How to Use Valid Time State Fields in Dynamics 365

Bu yazımda Dynamics 365'te framework içerisinde gelen en sevdiğim konulardan olan Valid Time State’den bahsetmek istiyorum.

Bir tabloda ki kayıtları tarih aralığına göre tutmak istiyorsanız, ilgili tablonun özelliklerinden **Valid Time State Field Type** özelliğini aktif ediyoruz. **Date** seçersek tarih bazında **UtcDateTime** seçersek tarih ve saat bazında kayıtları tutacaktır.

![Valid Time State Field Type Property](https://cdn.hashnode.com/res/hashnode/image/upload/v1677831664644/5b855314-70a3-4eb2-8f26-e0f2371a8685.jpeg align="center")

Bu özelliği açtıktan sonra ilgili tabloda **ValidFrom** ve **ValidTo** alanlarının otomatik olarak geldiğini göreceksiniz.

![Table](https://cdn.hashnode.com/res/hashnode/image/upload/v1677831666001/db8854e3-f895-4e29-9d12-63e965cf8da5.jpeg align="center")

Tablomuzda **DateIdx** adında bir Index yaratıyoruz. Tarih alanlarını index içerisine sürüklüyoruz. Tarih alanları dışında en az bir alan daha index’te yer alması gerekmektedir. Ayrıca Index üzerinde ki **Valid Time State Key** özelliğini **Yes** yapıyoruz.

![Index](https://cdn.hashnode.com/res/hashnode/image/upload/v1677831667100/237af99c-5cea-4559-a761-cb344accb6af.jpeg align="center")

Son olarak tablomuzun özelliklerinden index’imizi seçiyoruz.

![Table Properties](https://cdn.hashnode.com/res/hashnode/image/upload/v1677831668297/30153c63-54b7-42b7-a5f2-7e3d82343b15.jpeg align="center")

Ayrıca tablomuza sorgu yazarken örnek olması için find method’un kodlarını da paylaşıyorum.

```csharp
public class ETGChippinPriceParameters extends common
{
    public static ETGChippinPriceParameters find(utcdatetime validDate = DateTimeUtil::getToday(DateTimeUtil::getUserPreferredTimeZone()),
                                                boolean _forUpdate = false)
    {
        ETGChippinPriceParameters etgChippinPriceParameters;

        if (validDate)
        {
            etgChippinPriceParameters.selectForUpdate(_forUpdate);

            select firstonly validtimestate(validDate) etgChippinPriceParameters
                where etgChippinPriceParameters.DateIdx == "";
        }

        return etgChippinPriceParameters;
    }

}
```

> Bu tür tabloları güncellemek istediğinizde Valid Time State Update Mode belirtmeniz gerekiyor. Örnek kodu yine aşağıda belirttim.

```csharp
table.validTimeStateUpdateMode(ValidTimeStateUpdate::Correction);
```

---

Ayrıca da tablomuzu bir forma ekledikten sonra DataSource üzerinde ki **Valid Time State Auto Query** ve **Valid Time State Update** özellikleri aktif hale gelecektir. Bu özellikler sayesinde bitiş tarihinin düzenlenebilir olmasını sağlayabilir, geçerliliğini kaybetse bile kayıtların formda gözükmesini isteyebilirsiniz.

![Form DataSource Properties](https://cdn.hashnode.com/res/hashnode/image/upload/v1677831669528/891a73ff-e67b-487d-a60f-d0a5ddb28e15.jpeg align="center")
