Doküman
Akışa bağlı form dokümanını temsil eden nesnedir. Süreci başlatan formun kontrollerine bu nesne üzerinden ulaşır, değerlerini okur veya değiştirir ve dokümanı kaydedersiniz. Form verisiyle ilgilenen hemen her akışta yer alır; tasarımda genellikle Document1 gibi bir adla görünür.
Ne zaman kullanılır?
Akış kodunda formdaki bir alanı okumak ya da yazmak istediğiniz her yerde kullanın: bir tutarı kontrol etmek, durum alanını güncellemek, bir veri tablosundaki satırları dolaşmak veya yapılan değişikliği kalıcı hâle getirmek için. Yeni bir doküman oluşturmak ya da silmek gibi işler için ayrı nesneler vardır (Doküman Oluştur, Doküman Silme); bu nesne mevcut, sürece bağlı doküman üzerinde çalışır.
Ayarlar
Doküman nesnesinde tasarımcıda düzenlenebilen başlıca özellikler:
| Ayar | Açıklama |
|---|---|
FormName | Dokümanın dayandığı form. |
ViewName | Dokümanın hangi eForm görünümüyle açılacağını belirler. |
DocumentId | Dokümanın kimliği (okunup atanabilir). |
ProcessName | Dokümanın bağlı olduğu süreç adı. |
Akıştaki yeri
Doküman, akışın başından sonuna kadar erişilebilen sabit bir referanstır: bir bekleme noktası değildir, akışı durdurmaz. Diğer adımların (Fonksiyon, onay nesneleri) kod bloklarında form verisini okumak ve yazmak için bu nesnenin adını (Document1 gibi) kullanırsınız. Kontrol değerlerini değiştirdikten sonra değişikliğin kalıcı olması için SaveDocument() çağırmanız gerekir.
Kod örnekleri
Form kontrollerine Controls["KONTROL_ADI"] indeksleyicisiyle ulaşılır; dönen kontrolün .Value (nesne) ve .Text (metin) üyeleri okunup yazılır. Sunucu (akış) kodu turuncu çerçevelidir.
Kontrol okuma
// Değeri oku (Value bir object döner, gerektiğinde çevirin)
string satNo = Document1.Controls["SATNO"].Value?.ToString();
string aktaran = Document1.Controls["GORAKTAR"]?.Text?.ToString();
string byd = Convert.ToString(Document1.Controls["BELGE_SICIL"].Value);
Kontrol yazma
// Hem Value hem Text set etmek yaygin pratik (goruntu + veri birlikte)
Document1.Controls["DURUM"].Value = "1";
// Bir listeyi sifirla
Document1.Controls["GORAKTAR"].Value = new List<object>();
Document1.Controls["GORAKTAR"].Text = "";
Veri tablosu sütununu okuma
// GridData.FromControl ile satir/hucre dolasimi
Control control = Document1.Controls["DT_MALZEME"];
GridData grid = GridData.FromControl(control);
foreach (GridDataRow row in grid.Rows)
{
string yer = row.Cells.FirstOrDefault(c => c.Name == "URTMYER")?.Value?.ToString();
}
Kaydetme
Document1.Controls["BYDDE"].Value = "BYD";
// SaveDocument bir Task<Boolean> doner; orneklerde .Result ile beklenir
var isDone = Document1.SaveDocument().Result;
Controls[...] üzerinden yaptığınız değişiklikler ancak SaveDocument() çağrılınca kalıcı olur. Bir kontrolü değiştirip kaydetmezseniz değişiklik sonraki adımlara taşınmayabilir.
İpuçları
Controls["X"].Valuebirobjectdöner; sayı ya da metne ihtiyaç duyduğunuzdaConvert.ToInt32(...)/?.ToString()ile çevirin.- Görüntüyle veriyi birlikte tutmak için örneklerde çoğu zaman hem
.Valuehem.Textset edilir. GetControlValue/SetControlValue/SetControlTextmetotları derlenir ve mevcuttur, ancak örnek akışlarda kullanılmaz; baskın kullanımControlsindeksleyicisidir.GetDataGridCellValues("DT_MALZEME", "URTMYER")bir sütunu tek çağrıdaList<Object>olarak döndürür ve yukarıdaki döngünün yerine geçebilir, fakat örneklerde denenmemiştir. TODO: doğrulanacak.UpdateState,SetUniqueId,ResetDocument,DeleteDocumentüyeleri vardır; ancak durum/numara işleri genellikle Belge Durumu ve Doküman No Atama gibi ayrı nesnelerle yapılır.
Doğrulanmış kod arayüzü (FlowDocument)
Sınıf: Bimser.CSP.Workflow.Api.Steps.FlowDocument : FlowObjectDesigner<FlowDocumentProperties>
Kontrol erişimi (örnekle doğrulanmış): Controls["ad"].Value (object), Controls["ad"].Text (string); veri tablosu için GridData.FromControl(control) + grid.Rows / row.Cells.
Metotlar: GetControlValue(String) → FormGetControlValueResponse, SetControlValue(String, Object), SetControlText(String, String), GetDataGridCellValues(String, String) → List<Object>, SaveDocument() → Task<Boolean>, SaveDocumentAsync(), ResetDocument() → Boolean, UpdateState(Int32) → Task<Boolean>, SetUniqueId(String) → Task<Boolean>, DeleteDocument() → Task<Boolean>, SetExistingDocumentByPathAsync(String), ToLiquid()
Özellikler: Controls (salt okunur), FormInstance (salt okunur), DocumentId, FileId, FormName, FormCaption, ProcessName, ViewName, ExistingDocumentPath, PanelSize, Parameters, Type.
Kaynak: synergy-csp references/flow-objects.md (FlowDocument, örnekle doğrulanmış kontrol/kaydet idiyomları + dump'tan doğrulanmış üyeler).