Skip to main content

eBA Plus AI İle Veri Maskeleme: Dosyalar

Bu doküman eBA Plus'ta AI ile veri maskeleme yapısının Dosyalar nesnesi üzerinde nasıl kullanılacağını örneklemektedir.

Bu dokümanı okumadan önce eBA Plus AI İle Veri Maskeleme Dokümanı 'nın okunması gerekmektedir.

Giriş

Bu süreçte, süreç içinde ki form üzerine bir dosyalar nesnesi eklenir, süreç kullanılırlen bu nesneye bir doküman eklenir ve akış devam ettirildiğinde doküman AI ile maskelenir. Ardından sürecin ilerleyen adımlarında bu maskeli dokümanı akıştaki kullanıcıların görmesi sağlanır.

Doküman Yönetimi

Doküman yönetimi tarafında Dosyalar nesnesine eklenen dokümanın AI ile maskelenmiş halinin tutulacağı AI kütüphanesi oluşturulmalıdır.

İş Akış Sürecini Tasarlama

Workflow Studio’da yeni bir süreç tanımlanır. Yapılacak örnek için Workflow Project tipinde bir süreç yeterli olacaktır.

Akış aşağıdaki gibi olmalıdır. Bir sonraki onaycıya gelmeden önce dosyalar nesnesine eklenen doküman AI ile maskelenecek ve maskelenmiş doküman, 'Dokuman1' nesnesine aktarılıp, onaycının bu dokümanı görmesi sağlanacaktır.

Ardından Workflow Studio'da Projeye sağ tıklayıp Project Properties -> Reference Files sekmesinden aşağıdaki şekilde eBAPI.dll'i referans olarak eklenir.

  • %SystemPath%\Common\eBAPI.dll

Daha sonra akış kodunun using tanımlamalarına aşağıdaki değerler eklenmelidir.

using eBAPI;
using eBAPI.Connection;
using eBAPI.DocumentManagement;
using System.Linq;

System.Linq kütüphanesi dosyalar nesnesi üzerine eklenen dokümanın path bilgisini almak için kullandığımız yöntemde Last() fonksiyonunu kullanabilmemiz için gereklidir.

Akabinde doküman içerisinde hangi kategorideki veriler nasıl maskelenecekse bu değerler tanımlanır.

List<MaskedDataOption> showOptions = new List<MaskedDataOption>
{
new MaskedDataOption
{
Category = DataCategories.Unknown,
ActionType = DataMaskingActionTypes.Change,
ActionValue = "[UNKNOWN]",
RestrictedShowOptions = null
},
new MaskedDataOption
{
Category = DataCategories.FullName,
ActionType = DataMaskingActionTypes.ShowOnlyFirstCharacters,
ActionValue = null,
RestrictedShowOptions = null
},
new MaskedDataOption
{
Category = DataCategories.Address,
ActionType = DataMaskingActionTypes.Change,
ActionValue = "[GİZLİ]",
RestrictedShowOptions = null
},
new MaskedDataOption
{
Category = DataCategories.Email,
ActionType = DataMaskingActionTypes.Hide,
ActionValue = null,
RestrictedShowOptions = null
},
new MaskedDataOption
{
Category = DataCategories.NationalIdNumber,
ActionType = DataMaskingActionTypes.RestrictedShow,
ActionValue = null,
RestrictedShowOptions = new Dictionary<DataRestrictedShowOptions, int>
{
{DataRestrictedShowOptions.ShowFirstXCharacters, 3}
}
},
new MaskedDataOption
{
Category = DataCategories.TaxNumber,
ActionType = DataMaskingActionTypes.RestrictedShow,
ActionValue = null,
RestrictedShowOptions = new Dictionary<DataRestrictedShowOptions, int>
{
{DataRestrictedShowOptions.ShowLastXCharacters, 3}
}
},
new MaskedDataOption
{
Category = DataCategories.SocialSecurityNumber,
ActionType = DataMaskingActionTypes.RestrictedShow,
ActionValue = null,
RestrictedShowOptions = new Dictionary<DataRestrictedShowOptions, int>
{
{DataRestrictedShowOptions.ShowFirstLastXCharacters, 3}
}
},
new MaskedDataOption
{
Category = DataCategories.CreditCardNumber,
ActionType = DataMaskingActionTypes.RestrictedShow,
ActionValue = null,
RestrictedShowOptions = new Dictionary<DataRestrictedShowOptions, int>
{
{DataRestrictedShowOptions.HideFirstXCharacters, 3}
}
},
new MaskedDataOption
{
Category = DataCategories.Iban,
ActionType = DataMaskingActionTypes.RestrictedShow,
ActionValue = null,
RestrictedShowOptions = new Dictionary<DataRestrictedShowOptions, int>
{
{DataRestrictedShowOptions.HideLastXCharacters, 3}
}
},
new MaskedDataOption
{
Category = DataCategories.BankAccountNumber,
ActionType = DataMaskingActionTypes.Hide,
ActionValue = null,
RestrictedShowOptions = null
},
new MaskedDataOption
{
Category = DataCategories.InstitutionName,
ActionType = DataMaskingActionTypes.RestrictedShow,
ActionValue = null,
RestrictedShowOptions = new Dictionary<DataRestrictedShowOptions, int>
{
{DataRestrictedShowOptions.ShowFirstXCharacters, 1}
}
},
new MaskedDataOption
{
Category = DataCategories.Country,
ActionType = DataMaskingActionTypes.Change,
ActionValue = "[COUNTRY]",
RestrictedShowOptions = null
},
new MaskedDataOption
{
Category = DataCategories.City,
ActionType = DataMaskingActionTypes.Change,
ActionValue = "[CITY]",
RestrictedShowOptions = null
},
new MaskedDataOption
{
Category = DataCategories.IPAddress,
ActionType = DataMaskingActionTypes.RestrictedShow,
ActionValue = null,
RestrictedShowOptions = new Dictionary<DataRestrictedShowOptions, int>
{
{DataRestrictedShowOptions.ShowFirstLastXCharacters, 2}
}
},
new MaskedDataOption
{
Category = DataCategories.Date,
ActionType = DataMaskingActionTypes.Change,
ActionValue = "[DATE]",
RestrictedShowOptions = null
},
new MaskedDataOption
{
Category = DataCategories.InvoiceNumber,
ActionType = DataMaskingActionTypes.ShowOnlyFirstCharacters,
ActionValue = null,
RestrictedShowOptions = null
},
new MaskedDataOption
{
Category = DataCategories.Website,
ActionType = DataMaskingActionTypes.Change,
ActionValue = "[LINK]",
RestrictedShowOptions = null
},
new MaskedDataOption
{
Category = DataCategories.Salary,
ActionType = DataMaskingActionTypes.Hide,
ActionValue = null,
RestrictedShowOptions = null
},
new MaskedDataOption
{
Category = DataCategories.Amount,
ActionType = DataMaskingActionTypes.Change,
ActionValue = "[AMOUNT]",
RestrictedShowOptions = null
},
new MaskedDataOption
{
Category = DataCategories.BankName,
ActionType = DataMaskingActionTypes.ShowOnlyFirstCharacters,
ActionValue = null,
RestrictedShowOptions = null
}
};

Ardından akış üzerine eklenen fonksiyon nesnesinin içeriği aşağıdaki şekilde olmalıdır. Bu kod bloğu dosyalar nesnesi üzerine eklenen dokümanı maskeleyip yine kod bloğu içinde belirtilen DM üzerideki AI kütüphanesi altına, adının başına [MASKED] değeri eklenerek kaydedilir. Kaydedilen dokümanın path'i Dokuman1 nesnesinin path değerine atanır.

public void maskAttachments_Execute()
{
string viewName = "default";

eBAConnection con = CreateServerConnection();
con.Open()

DMFile file = con.FileSystem.GetWorkflowFile(Dokuman1.ProfileId);
DMCategoryContentCollection attachments = file.GetAttachments(viewName);

foreach (DMFileContent attachment in attachments)
{
string attachmentPath = file.Path + "?content=" + attachment.Name;
string extension = Path.GetExtension(attachmentPath.Split('?').Last().Split('=').Last());
string filename = @"AI/[MASKED] " + Process + "-" + ProcessId.ToString() + extension;
DMFile maskedDocument = con.FileSystem.CreateMaskedDocument(attachmentPath, showOptions, filename);
Dokuman1.Path = maskedDocument.Path;
}

con.Close();
}

Dosyalar nesnesi üzerine eklenen dokümanlar DM üzerinde değil form üzerinde tutulduğu için path yapısı standart DM path yapısından biraz farklıdır ancak eBA Plus AI ile veri maskeleme DM üzerindeki tüm path yapılarını desteklediği için yukarıdaki kod bloğunda bulunan attachmentPath değişkeni aşağıdaki formatta bir path üretecektir.

workflow/eBAAIAttachments/Form/1234.wfd?content=attachments/default/biography_document_copy.pdf

Form Tasarlama

Süreç içinde ki forma bir adet Dosyalar nesnesi eklenmesi yeterlidir.

Bu aşamadan sonra proje derlenmelidir.

Çalıştırma

Süreç açıldığında dosyalar nesnesine bir doküman eklenir, akış bir sonraki onaycıya gönderildiği anda bu doküman maskelenir ve süreç içinde belirtilen DM konumuna maskelenmiş hali kopyalanır. Ardından bir sonraki onaycıya eklenen bu dokümanın maskelenmiş hali gösterilir.

Maskeleme işlemi doküman boyutuna göre ortalama 15-20 saniye sürebilir. Bir hata oluştuğu durumda Olay Günlük Görüntüleyici üzerindeki Workflow Service kategorisinden takibi sağlanabilir.