Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
Modal iletişim kutuları, Azure DevOps uzantılarında odaklanmış kullanıcı deneyimleri oluşturmak için güçlü bir yol sağlar. HostDialogService, iletişim kutusu kapatılana kadar tüm Azure DevOps arabirimiyle kullanıcı etkileşimini engelleyen kalıcı bir iletişim kutusu sunmanızı sağlar. Bu eylem, kullanıcıların önemli görevleri tamamlamasını veya gerekli bilgileri sağlamasını sağlar.
Uzantılarınızda kalıcı iletişim kutularını kullanarak:
- Formlar aracılığıyla kullanıcı girişi toplama
- Kritik eylemler için onay iletilerini görüntüleme
- Kullanıcı dikkatini gerektiren ayrıntılı bilgileri göster
- Çok adımlı işlemlerde kullanıcılara yol gösterme
Önemli
ile HostDialogService
kalıcı iletişim kutuları oluşturduğunuzda, yalnızca uzantınızla değil, tüm Azure DevOps sayfasıyla etkileşimi engeller. Bu yaklaşım gerçek bir kalıcı deneyim sağlar, ancak kullanıcı iş akışını kesintiye uğratmamak için bunu dikkatli bir şekilde kullanmanız gerekir.
Önkoşullar
Azure DevOps uzantınızda kalıcı iletişim kutuları oluşturmadan önce aşağıdakilere sahip olduğunuzdan emin olun:
Kategori | Gereksinim | Ayrıntılar |
---|---|---|
Uzantı kurulumu | Çalışma uzantısı projesi | Geçerli vss-extension.json bir bildirim dosyası |
Çevrimiçi pazar yeri kaydı | Test ve dağıtım için Visual Studio Market'e kaydedilen uzantı | |
Geliştirme bilgisi | Azure DevOps uzantısı geliştirmeyle ilgili temel bilgileri anlama | |
Geliştirme ortamı | Node.js ve npm | npm yüklü Node.js sürüm 14 veya üzeri |
Kod düzenleyicisi | Visual Studio Code veya başka bir IDE önerilir | |
Azure DevOps erişimi | Test için Azure DevOps kuruluşuna erişim | |
Gerekli paketler | Uzantı SDK'sı | Yükle: npm install azure-devops-extension-sdk |
Uzantı API'si | Yükle: npm install azure-devops-extension-api |
|
Uzantı izinleri | Bildirim kapsamları | içinde vss-extension.json uygun kapsamları ekleyin, örneğin: "vso.work" , "vso.project" |
SDK aktarımları | Gerekli modüller | SDK ve hizmetleri içeri aktarma: import * as SDK from "azure-devops-extension-sdk" ve import { CommonServiceIds, IHostDialogService } from "azure-devops-extension-api" |
İletişim kutusu içeriği
Başlamak için uzantı bildirim dosyanızda ms.vss-web.control
türünde bir katkı belirtin. Bu katkı, iletişim kutusunda görüntülenen içeriği temsil eder.
{
"id": "registration-form",
"type": "ms.vss-web.control",
"description": "The content to be displayed in the dialog",
"targets": [],
"properties": {
"uri": "registration-form.html"
}
}
özelliği, uri
iletişim kutusunun içerik alanında işlenen bir sayfaya başvurur:
<!DOCTYPE html>
<html>
<head>
<script src="node_modules/azure-devops-extension-sdk/lib/SDK.js"></script>
</head>
<body>
<h2 id="header">Register now</h2>
<p>
<label>Name:</label>
<input id="inpName" />
</p>
<p>
<label>Date of birth:</label>
<input id="inpDob" />
</p>
<p>
<label>Email address:</label>
<input id="inpEmail" />
</p>
<script type="module">
import * as SDK from "azure-devops-extension-sdk";
SDK.init();
const registrationForm = (function() {
const callbacks = [];
function inputChanged() {
// Execute registered callbacks
for(let i = 0; i < callbacks.length; i++) {
callbacks[i](isValid());
}
}
function isValid() {
// Check whether form is valid or not
return !!(name.value) && !!(dateOfBirth.value) && !!(email.value);
}
function getFormData() {
// Get form values
return {
name: name.value,
dateOfBirth: dateOfBirth.value,
email: email.value
};
}
const name = document.getElementById("inpName");
const dateOfBirth = document.getElementById("inpDob");
const email = document.getElementById("inpEmail");
name.addEventListener("change", inputChanged);
dateOfBirth.addEventListener("change", inputChanged);
email.addEventListener("change", inputChanged);
return {
isFormValid: function() {
return isValid();
},
getFormData: function() {
return getFormData();
},
attachFormChanged: function(cb) {
callbacks.push(cb);
}
};
})();
// Register form object to be used across this extension
SDK.register("registration-form", registrationForm);
</script>
</body>
</html>
İletişim kutusunu göster
İletişim kutusunu göstermek için (örneğin, bir kullanıcı araç çubuğunda veya menüden bir eylem seçtiğinde), HostDialogService örneğindeki işlevi çağırın openDialog
ve iletişim kutusu içeriğinin tam tanımlayıcısını (örneğin my-publisher.my-extension.registration-form
ve tüm iletişim kutusu seçenekleri) geçirin:
import * as SDK from "azure-devops-extension-sdk";
SDK.getService<IHostDialogService>(CommonServiceIds.HostDialogService).then((dialogService) => {
const extensionCtx = SDK.getExtensionContext();
// Build absolute contribution ID for dialogContent
const contributionId = `${extensionCtx.publisherId}.${extensionCtx.extensionId}.registration-form`;
// Show dialog
const dialogOptions = {
title: "My Dialog",
width: 800,
height: 600
};
dialogService.openDialog(contributionId, dialogOptions);
});
Gelişmiş diyalog penceresi özellikleri
Tamam düğmesi seçildiğinde bir işlev çağrılabilir. Bu işlev, iletişim kutusunu gösterirken sağladığınız seçeneklerde tarafından getDialogResult
belirtilir.
Eğer getDialogResult
çağrısı null olmayan bir değer döndürürse, bu değer (aynı zamanda seçeneklerde belirtilen) okCallback
fonksiyonuna geçirilir ve iletişim kutusu kapatılır.
Bu örnekte, attachFormChanged
formdaki girişler değiştiğinde geri çağırma çağrılır. Formun geçerli olup olmadığına bağlı olarak Tamam düğmesi etkinleştirilir veya devre dışı bırakılır.
import * as SDK from "azure-devops-extension-sdk";
import { CommonServiceIds, IHostDialogService } from "azure-devops-extension-api";
SDK.getService<IHostDialogService>(CommonServiceIds.HostDialogService).then((dialogService) => {
let registrationForm: any;
const extensionCtx = SDK.getExtensionContext();
const contributionId = `${extensionCtx.publisherId}.${extensionCtx.extensionId}.registration-form`;
const dialogOptions = {
title: "Registration Form",
width: 800,
height: 600,
getDialogResult: () => {
// Get the result from registrationForm object
return registrationForm ? registrationForm.getFormData() : null;
},
okCallback: (result: any) => {
// Log the result to the console
console.log(JSON.stringify(result));
}
};
dialogService.openDialog(contributionId, dialogOptions).then((dialog) => {
// Get registrationForm instance which is registered in registrationFormContent.html
dialog.getContributionInstance("registration-form").then((registrationFormInstance) => {
// Keep a reference of registration form instance (to be used previously in dialog options)
registrationForm = registrationFormInstance;
// Subscribe to form input changes and update the Ok enabled state
registrationForm.attachFormChanged((isValid: boolean) => {
dialog.updateOkButton(isValid);
});
// Set the initial ok enabled state
registrationForm.isFormValid().then((isValid: boolean) => {
dialog.updateOkButton(isValid);
});
});
});
});
Tamam düğmesini denetleme
Başlangıçta Tamam düğmesi devre dışı bırakılır. Ancak, iletişim kutusunda updateOkButton
yöntemini çağırarak bu düğmeyi etkinleştirebilir/devre dışı bırakabilirsiniz.
dialogService.openDialog(contributionId, dialogOptions).then((dialog) => {
// Set true/false to enable/disable ok button
dialog.updateOkButton(true);
});
Değerleri iletişim kutusuna geçirme
Host iletişim kutusunda açıldığında, iletişim kutusu içeriğine ilk değerleri geçirmek mümkündür.
{
"id": "registration-form",
"type": "ms.vss-web.control",
"description": "The content displayed in the dialog",
"targets": [],
"properties": {
"uri": "registration-form.html?id={{myId}}"
}
}
İletişim kutusu açıldığında, myId
'ı geçirmek için aşağıdaki seçeneklerin belirtilmesi gerekir.
const dialogOptions = {
title: "My Dialog Title",
width: 800,
height: 600,
urlReplacementObject: { myId: new Date().getTime() }
};
İletişim kutusu düğmelerini özelleştir
okText
ve cancelText
öznitelikleri, Tamam ve İptal düğmeleri için alternatif başlıklar belirtmek için kullanılabilir:
const dialogOptions = {
title: "My Dialog Title",
width: 800,
height: 600,
okText: "Yes",
cancelText: "No"
};
İletişim kutusunda düğme göstermemek için özniteliğini buttons
olarak []
ayarlayabilirsiniz:
const dialogOptions = {
title: "My Dialog Title",
width: 800,
height: 600,
buttons: []
};
İlgili kaynaklar
Bir sorunuz varsa veya daha fazla bilgi arıyorsanız, aşağıdaki alanlardan birine gitme seçeneğini göz önünde bulundurun: