توضّح هذه الصفحة كيفية تنفيذ المهام التالية المتعلقة بالنماذج:
- نشر النموذج ليتمكّن المجيبون من الوصول إليه
- العثور على مجيب على النموذج
- مشاركة النموذج مع المزيد من المجيبين
- إزالة المجيبين من النموذج
- التأكّد مما إذا كان النموذج يقبل الردود من "أي شخص لديه الرابط"
- إغلاق نموذج
- إلغاء نشر نموذج
- إيقاف قبول الردود على نموذج
- التحقّق مما إذا كان النموذج نموذجًا قديمًا
قبل البدء
نفِّذ المهام التالية قبل المتابعة إلى المهام الواردة في هذه الصفحة:
الحصول على رقم تعريف النموذج يتم عرض رقم تعريف النموذج في الحقل
formId
ضمن الردّ عند إنشاء نموذج باستخدامforms.create
.
نشر النموذج ليتمكّن المجيبون من الوصول إليه
يمكنك نشر نموذج حالي باستخدام طريقة
forms.setPublishSettings
.
اتّصِل بطريقة
forms.setPublishSettings
باستخدام رقم تعريف النموذج.
REST
نموذج نص الطلب
{
"publishSettings": {
"isPublished": true,
"isAcceptingResponses": true
}
}
برمجة التطبيقات
/**
* Publishes a Google Form using its URL.
*/
function publishMyForm() {
// Replace with the URL of your Google Form
const formUrl = 'https://docs.google.com/forms/d/YOUR_FORM_ID/edit';
try {
const form = FormApp.openByUrl(formUrl);
// Publish the form. This also enables accepting responses.
form.setPublished(true);
Logger.log(`Form "${form.getTitle()}" published successfully.`);
// Optional: Verify the state
if (form.isPublished()) {
Logger.log('Form is now published.');
}
if (form.isAcceptingResponses()) {
Logger.log('Form is now accepting responses.')
}
} catch (error) {
Logger.log(`Error publishing form: ${error}`);
}
}
Python
Node.js
العثور على المجيبين على النموذج
يمكنك استرداد قائمة بجميع المستخدمين الذين لديهم إذن الوصول كمجيبين (دور PUBLISHED_READER) باستخدام Form.getPublishedReaders()، التي تعرض مصفوفة من عناصر المستخدمين.
REST
أضِف مَعلمة طلب البحث includePermissionsForView=published
إلى عنوان URL للطلب.
برمجة التطبيقات
/**
* Gets and logs the email addresses of all responders for a form.
*/
function listResponders() {
// Replace with the URL of your Google Form
const formUrl = 'https://docs.google.com/forms/d/YOUR_FORM_ID/edit';
try {
const form = FormApp.openByUrl(formUrl);
// Get the array of User objects representing responders
const responders = form.getPublishedReaders();
// Log the responders
Logger.log("Following can respond to the form");
responders.forEach(responder => Logger.log(responder.getEmail()));
return responders;
} catch (error) {
Logger.log(`Error getting responders: ${error}`);
}
}
Python
Node.js
مشاركة النموذج مع المزيد من المجيبين
لإضافة مجيبين إلى نموذج ليتمكّنوا من فتحه والردّ عليه، يمكنك استخدام طريقة permissions.create
في Drive.
استدعِ طريقة
permissions.create
باستخدام رقم تعريف النموذج وإعدادات الوصول.
REST
نموذج نص الطلب
{
"view": "published",
"role": "reader",
"type": "user",
"emailAddress": "user@example.com"
}
برمجة التطبيقات
/**
* Adds a single responder to a form using their email address.
*/
function `addSingleResponderByEmail()` {
// Replace with the URL of your Google Form
const formUrl = 'https://docs.google.com/forms/d/YOUR_FORM_ID/edit';
// Replace with the responder's email address
const responderEmail = 'responder@example.com';
try {
const form = FormApp.openByUrl(formUrl);
// Add the user as a responder
form.addPublishedReader(responderEmail);
Logger.log(`Added ${responderEmail} as a responder to form "${
form.getTitle()}".`);
} catch (error) {
Logger.log(`Error adding responder: ${error}`);
}
}
Python
Node.js
إزالة المجيبين من النموذج
يمكنك إزالة مستخدمين فرديين من خلال عنوان بريدهم الإلكتروني أو باستخدام عنصر مستخدم. تؤدي إزالة أحد المجيبين إلى إلغاء قدرته على عرض النموذج وإرساله، ما لم يكن بإمكانه الوصول إليه من خلال وسائل أخرى، مثل المشاركة على مستوى النطاق أو الوصول إلى مساحة Drive مشتركة.
إزالة مستجيب واحد باستخدام عنوان البريد الإلكتروني
REST
DELETE https://www.googleapis.com/drive/v3/files/{fileId}/permissions/PERMISSION
يمكن العثور على permissionID من خلال "إدراج المستجيبين" كما هو موضّح سابقًا
برمجة التطبيقات
/**
* Removes a single responder from a form using their email address.
*/
function `removeSingleResponderByEmail()` {
// Replace with the URL of your Google Form
const formUrl = 'https://docs.google.com/forms/d/YOUR_FORM_ID/edit';
// Replace with the responder's email address to remove
const responderEmailToRemove = 'responder-to-remove@example.com';
try {
const form = FormApp.openByUrl(formUrl);
// Remove the user as a responder
form.removePublishedReader(responderEmailToRemove);
Logger.log(`Removed ${responderEmailToRemove} as a responder from form "${
form.getTitle()}".`);
} catch (error) {
Logger.log(`Error removing responder: ${error}`);
}
}
Python
Node.js
التحقّق مما إذا كان النموذج يقبل الردود من "أي شخص لديه الرابط"
لمعرفة ما إذا كان النموذج يقبل الردود من أي شخص لديه رابط، عليك تفعيل "الخدمة المتقدّمة" في Drive.
- فعِّل "خدمة Drive المتقدّمة":
- افتح مشروعك في "برمجة تطبيقات Google".
- انقر على الخدمات (رمز علامة الجمع بجانب الخدمة).
- ابحث عن Drive API وانقر على إضافة.
- انقر على إضافة.
برمجة التطبيقات
function `isAnyoneWithLinkResponder`(formId) {
let permissions = Drive.Permissions.list(formId, { includePermissionsForView: 'published' }).permissions;
if (permissions) {
for (const permission of permissions) {
if (permission.type === 'anyone' && permission.view === 'published' && permission.role === 'reader') {
return true;
}
}
}
return false;
}
Python
Node.js
لضبط الإعداد "يمكن لأي شخص لديه الرابط الردّ على النموذج"، اتّبِع الخطوات التالية:
برمجة التطبيقات
function `setAnyoneWithLinkResponder`(formId) {
Drive.Permissions.create({
type: 'anyone',
view: 'published',
role: 'reader',
}, formId);
}
Python
Node.js
لإزالة خيار "يمكن لأي شخص لديه الرابط الردّ على النموذج"، اتّبِع الخطوات التالية:
برمجة التطبيقات
function `removeAnyoneWithLinkResponder`(formId) {
let permissions = Drive.Permissions.list(formId, { includePermissionsForView: 'published' }).permissions;
if (permissions) {
for (const permission of permissions) {
if (permission.type === 'anyone' && permission.role === 'reader') {
Drive.Permissions.remove(formId, permission.id);
}
}
}
}
Python
Node.js
إغلاق نموذج
لإلغاء نشر نموذج، استخدِم طريقة Forms.setPublished(false). {/apps-script/reference/forms/form#setpublishedenabled} يؤدي إلغاء نشر نموذج إلى إيقافه وعدم إتاحته، كما يؤدي تلقائيًا إلى إيقاف قبول الردود.
REST
نموذج نص الطلب
POST https://forms.googleapis.com/v1/forms/{formId}:setPublishSettings
{
"publishSettings": {
"publishState": {
"isPublished": false
}
}
}
برمجة التطبيقات
/**
* Unpublishes a Google Form using its URL.
*/
function unpublishMyForm() {
// Replace with the URL of your Google Form
const formUrl = 'https://docs.google.com/forms/d/YOUR_FORM_ID/edit';
try {
const form = FormApp.openByUrl(formUrl);
// Unpublish the form. This also disables accepting responses.
form.setPublished(false);
Logger.log(`Form "${form.getTitle()}" unpublished successfully.`);
// Optional: Verify the state
if (!form.isPublished()) {
Logger.log('Form is now unpublished.');
}
if (!form.isAcceptingResponses()) {
Logger.log('Form is no longer accepting responses.');
}
} catch (error) {
Logger.log(`Error unpublishing form: ${error}`);
}
}
Python
Node.js
لإيقاف قبول الردود على نموذج بدون إلغاء نشره، يمكنك استخدام طريقة Form.setAcceptingResponses(false)
.
سيرى المجيبون على نموذجك صفحة النموذج المغلق والرسالة.
REST
نموذج نص الطلب
POST https://forms.googleapis.com/v1/forms/{formId}:setPublishSettings
{
"publishSettings": {
"publishState": {
"isPublished": true,
"isAcceptingResponses": false
}
}
}
برمجة التطبيقات
/**
* Stop a Google Form from accepting responses using its URL.
*/
function closeMyFormForAcceptingResponses() {
// Replace with the URL of your Google Form
const formUrl = 'https://docs.google.com/forms/d/YOUR_FORM_ID/edit';
try {
const form = FormApp.openByUrl(formUrl);
// This disables the form for accepting responses.
form.setAcceptingResponses(false);
Logger.log(`Form "${form.getTitle()}" closed for accepting responses successfully.`);
// Optional: Verify the state
if (form.isPublished()) {
Logger.log('Form is still published.');
}
if (!form.isAcceptingResponses()) {
Logger.log('Form is no longer accepting responses.');
}
} catch (error) {
Logger.log(`Error unpublishing form: ${error}`);
}
}
Python
Node.js
التحقّق مما إذا كان النموذج نموذجًا قديمًا
النماذج القديمة هي النماذج التي لا تحتوي على الحقل publishSettings، بينما تتوافق جميع النماذج الجديدة التي تم إنشاؤها مع إعدادات النشر.
تحقَّق مما إذا كان النموذج قديمًا أم لا من خلال تحديد ما إذا كان النموذج يتيح النشر. تُستخدَم هذه الطريقة لتحديد ما إذا كانت الطريقتان
setPublished(enabled)
وisPublished()
وأذونات المجيب مفعّلة.
برمجة التطبيقات
/**
* Checks if a form supports advanced responder permissions (i.e., is not a legacy form).
*/
function `checkIfFormSupportsPublishing()` {
// TODO(developer): Replace the URL with your own.
const formUrl = 'https://docs.google.com/forms/d/YOUR_FORM_ID/edit';
try {
const form = FormApp.openByUrl(formUrl);
// Checks whether the form supports publishing or not and logs it to the console.
const supportsPublishing = form.supportsAdvancedResponderPermissions();
if (supportsPublishing) {
Logger.log(`Form "${form.getTitle()}" supports publishing (not a legacy
form).`);
} else {
Logger.log(`Form "${form.getTitle()}" is a legacy form (does not support
publishing).`);
}
return supportsPublishing;
} catch (error) {
Logger.log(`Error unpublishing form: ${error}`);
}
}
Python
Node.js